diff --git a/.env.test b/.env.test index e8857ff..266baa3 100644 --- a/.env.test +++ b/.env.test @@ -1,6 +1,6 @@ AUTH_SECRET="auth_secret" AUTH_URL="http://127.0.0.1:3000" HOSTNAME="127.0.0.1" -DATABASE_URL="file:./dev.db" +DATABASE_URL="file:/tmp/dev.db" AUTH_AUTHENTIK_ID="id" AUTH_AUTHENTIK_ISSUER="issuer" \ No newline at end of file diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index 509e011..c87c433 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -9,7 +9,7 @@ jobs: name: Container Scan runs-on: docker container: - image: ghcr.io/di0ik/forgejo_runner_container:main@sha256:c66a37d9af18f8f0f34d16890082bc08d842d52ff2a2bc36d993e3d347b498ac + image: ghcr.io/di0ik/forgejo_runner_container:main@sha256:c4667f2702c32b91b4c92db2ff20739edd00409a44a691c0598cf4a09a47743a steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 @@ -32,7 +32,6 @@ jobs: path: trivy-report.json - name: Clean up Docker - if: always() run: | - docker system prune -af - docker volume prune -f + docker buildx prune --filter=until=48h -f + docker image rm meetup_trivy diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index ba650f4..bc3fe77 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -13,7 +13,7 @@ jobs: docker: runs-on: docker container: - image: ghcr.io/di0ik/forgejo_runner_container:main@sha256:c66a37d9af18f8f0f34d16890082bc08d842d52ff2a2bc36d993e3d347b498ac + image: ghcr.io/di0ik/forgejo_runner_container:main@sha256:c4667f2702c32b91b4c92db2ff20739edd00409a44a691c0598cf4a09a47743a steps: - name: Login to Docker Hub uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 @@ -26,7 +26,7 @@ jobs: uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3 + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3 - name: Get the Ref id: get-ref @@ -40,7 +40,7 @@ jobs: echo "REPO=$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')" >>${GITHUB_ENV} - name: Build and push (pull_request) - uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6 if: github.event_name == 'pull_request' with: push: true @@ -48,7 +48,7 @@ jobs: cache-from: type=registry,ref=git.dominikstahl.dev/${{ env.REPO }}:buildcache - name: Build and push (push_tag) - uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6 if: github.event_name == 'push' && github.ref_type == 'tag' with: push: true @@ -56,7 +56,7 @@ jobs: cache-from: type=registry,ref=git.dominikstahl.dev/${{ env.REPO }}:buildcache - name: Build and push (push_branch) - uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6 if: github.event_name == 'push' && github.ref_type == 'branch' with: push: true @@ -65,7 +65,5 @@ jobs: cache-to: type=registry,ref=git.dominikstahl.dev/${{ env.REPO }}:buildcache,mode=max - name: Clean up Docker - if: always() run: | - docker system prune -af - docker volume prune -f + docker buildx prune --filter=until=48h -f diff --git a/.gitignore b/.gitignore index a11d29b..03ddb54 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,7 @@ next-env.d.ts # database /prisma/*.db* -src/generated/prisma +src/generated/* data # cypress diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c1401b2..36e0b18 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,6 +4,8 @@ "vivaxy.vscode-conventional-commits", "dbaeumer.vscode-eslint", "bradlc.vscode-tailwindcss", - "bourhaouta.tailwindshades" + "bourhaouta.tailwindshades", + "nize.oklch-preview", + "azizziy.oklch-as" ] } diff --git a/Dockerfile b/Dockerfile index d55f5ca..b60e118 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine@sha256:152270cd4bd094d216a84cbc3c5eb1791afb05af00b811e2f0f04bdc6c473602 AS base +FROM node:22-alpine@sha256:41e4389f3d988d2ed55392df4db1420ad048ae53324a8e2b7c6d19508288107e AS base # ----- Dependencies ----- FROM base AS deps @@ -16,6 +16,8 @@ RUN corepack enable COPY --from=deps /app/node_modules ./node_modules COPY . . RUN yarn prisma:generate +RUN yarn swagger:generate +RUN yarn orval:generate RUN yarn build # ----- Runner ----- diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..4467c5f --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,17 @@ +FROM node:22-alpine@sha256:41e4389f3d988d2ed55392df4db1420ad048ae53324a8e2b7c6d19508288107e + +WORKDIR /app + +RUN corepack enable +COPY package.json yarn.lock .yarnrc.yml ./ +RUN yarn install --frozen-lockfile + +COPY . . + +ENV NODE_ENV=development +ENV NEXT_TELEMETRY_DISABLED=1 + +EXPOSE 3000 +ENV HOSTNAME="0.0.0.0" + +CMD ["/bin/ash", "entrypoint.dev.sh"] \ No newline at end of file diff --git a/README.md b/README.md index 1fbb7bf..d9ca71b 100644 --- a/README.md +++ b/README.md @@ -99,12 +99,20 @@ This project is built with a modern tech stack: 4. **Apply database migrations (Prisma):** - Ensure your Prisma schema (`prisma/schema.prisma`) is defined. + - Setup/update the database with these commands: + ```bash + yarn prisma:generate + ``` + ```bash + yarn prisma:db:push + ``` - Run the following command to apply migrations and generate Prisma Client: ```bash npx prisma migrate dev # You might be prompted to name your first migration. ``` - - (Optional: If you need to generate Prisma Client without running migrations, use `npx prisma generate`) + + Tipp: You can open the prisma database UI with `yarn prisma:studio` 5. **Run the development server:** @@ -121,6 +129,14 @@ This project is built with a modern tech stack: password: password ``` +**Docker Development Environment:** + +- The docker development environment can be started with the following command: + +```bash +yarn dev_container +``` + **Self-Hosting with Docker (Planned):** - A Docker image and `docker-compose.yml` file will be provided in the future to allow for easy self-hosting of the MeetUP application. This setup will also include database services. Instructions will be updated here once available. diff --git a/cypress/e2e/auth-user.ts b/cypress/e2e/auth-user.ts new file mode 100644 index 0000000..5b02ab9 --- /dev/null +++ b/cypress/e2e/auth-user.ts @@ -0,0 +1,12 @@ +export default function authUser() { + cy.visit('http://127.0.0.1:3000/login'); + cy.getBySel('login-header').should('exist'); + cy.getBySel('login-form').should('exist'); + cy.getBySel('email-input').should('exist'); + cy.getBySel('password-input').should('exist'); + cy.getBySel('login-button').should('exist'); + cy.getBySel('email-input').type('cypress@example.com'); + cy.getBySel('password-input').type('Password123!'); + cy.getBySel('login-button').click(); + cy.url().should('include', '/home'); +} diff --git a/cypress/e2e/event-create.cy.ts b/cypress/e2e/event-create.cy.ts new file mode 100644 index 0000000..e9097ce --- /dev/null +++ b/cypress/e2e/event-create.cy.ts @@ -0,0 +1,9 @@ +import authUser from './auth-user'; + +describe('event creation', () => { + it('loads', () => { + authUser(); + + cy.visit('http://127.0.0.1:3000/events/new'); + }); +}); diff --git a/cypress/e2e/login.cy.ts b/cypress/e2e/login.cy.ts index 2c09412..d9461d1 100644 --- a/cypress/e2e/login.cy.ts +++ b/cypress/e2e/login.cy.ts @@ -1,30 +1,44 @@ -describe('login', () => { +describe('login and register', () => { it('loads', () => { cy.visit('http://127.0.0.1:3000/'); cy.getBySel('login-header').should('exist'); }); - it('shows login form', () => { + it('shows register form', () => { cy.visit('http://127.0.0.1:3000/'); + cy.getBySel('register-switch').click(); + + cy.getBySel('register-form').should('exist'); + cy.getBySel('first-name-input').should('exist'); + cy.getBySel('last-name-input').should('exist'); + cy.getBySel('email-input').should('exist'); + cy.getBySel('username-input').should('exist'); + cy.getBySel('password-input').should('exist'); + cy.getBySel('confirm-password-input').should('exist'); + cy.getBySel('register-button').should('exist'); + }); + + it('allows to register', async () => { + cy.visit('http://127.0.0.1:3000/'); + + cy.getBySel('register-switch').click(); + + cy.getBySel('first-name-input').type('Test'); + cy.getBySel('last-name-input').type('User'); + cy.getBySel('email-input').type('test@example.com'); + cy.getBySel('username-input').type('testuser'); + cy.getBySel('password-input').type('Password123!'); + cy.getBySel('confirm-password-input').type('Password123!'); + cy.getBySel('register-button').click(); + cy.getBySel('login-header').should('exist'); cy.getBySel('login-form').should('exist'); cy.getBySel('email-input').should('exist'); cy.getBySel('password-input').should('exist'); cy.getBySel('login-button').should('exist'); - }); - - it('shows sso button', () => { - cy.visit('http://127.0.0.1:3000/'); - - cy.getBySel('sso-login-button_authentik').should('exist'); - }); - - it('allows login', () => { - cy.visit('http://127.0.0.1:3000/'); - cy.getBySel('email-input').type('test@example.com'); - cy.getBySel('password-input').type('password'); + cy.getBySel('password-input').type('Password123!'); cy.getBySel('login-button').click(); cy.url().should('include', '/home'); }); diff --git a/cypress/e2e/seed.ts b/cypress/e2e/seed.ts new file mode 100644 index 0000000..c3cd389 --- /dev/null +++ b/cypress/e2e/seed.ts @@ -0,0 +1,29 @@ +import { PrismaClient } from '../../src/generated/prisma'; + +const prisma = new PrismaClient(); + +export default async function requireUser() { + await prisma.$transaction(async (tx) => { + const { id } = await tx.user.create({ + data: { + email: 'cypress@example.com', + name: 'cypress', + password_hash: + '$2a$10$FmkVRHXzMb63dLHHwG1mDOepZJirL.U964wU/3Xr7cFis8XdRh8sO', + first_name: 'Cypress', + last_name: 'Tester', + emailVerified: new Date(), + }, + }); + + await tx.account.create({ + data: { + userId: id, + type: 'credentials', + provider: 'credentials', + providerAccountId: id, + }, + }); + }); +} +requireUser(); diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json deleted file mode 100644 index 02e4254..0000000 --- a/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..feae683 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,32 @@ +services: + app: + build: + context: . + dockerfile: Dockerfile.dev + ports: + - '3000:3000' + environment: + - AUTH_SECRET=secret + - AUTH_URL=http://localhost:3000 + - DATABASE_URL=file:/data/db.sqlite + env_file: + - .env.local + volumes: + - ./data:/data + - ./src/generated:/app/src/generated + develop: + watch: + - action: sync + path: ./src + target: /app/src + ignore: + - node_modules/ + - generated/ + - action: rebuild + path: package.json + - action: sync+restart + path: prisma + target: /app/prisma + - action: sync+restart + path: ./src/app/api + target: /app/src/app/api diff --git a/entrypoint.dev.sh b/entrypoint.dev.sh new file mode 100644 index 0000000..64b45df --- /dev/null +++ b/entrypoint.dev.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "Running start script with user $(whoami) and NODE_ENV $NODE_ENV" +if [ -d "prisma" ]; then + echo "Syncing Prisma database" + yarn prisma:generate + yarn prisma:db:push +fi + +yarn swagger:generate +yarn orval:generate + +exec yarn dev diff --git a/exportSwagger.ts b/exportSwagger.ts new file mode 100644 index 0000000..6b6df1e --- /dev/null +++ b/exportSwagger.ts @@ -0,0 +1,61 @@ +import { registry } from '@/lib/swagger'; +import { OpenApiGeneratorV3 } from '@asteasolutions/zod-to-openapi'; +import fs from 'fs'; +import path from 'path'; + +function recursiveFileSearch(dir: string, fileList: string[] = []): string[] { + const files = fs.readdirSync(dir); + files.forEach((file) => { + const filePath = path.join(dir, file); + if (fs.statSync(filePath).isDirectory()) { + recursiveFileSearch(filePath, fileList); + } else if (file.match(/swagger\.ts$/)) { + fileList.push(filePath); + } + }); + return fileList; +} + +async function exportSwagger() { + const filesToImport = recursiveFileSearch( + path.join(process.cwd(), 'src', 'app', 'api'), + ); + + await Promise.all( + filesToImport.map(async (file) => { + try { + const moduleImp = await import(file); + if (moduleImp.default) { + moduleImp.default(registry); + } + } catch (error) { + console.error(`Error importing ${file}:`, error); + } + }), + ); + + await import('./src/app/api/validation'); + + const generator = new OpenApiGeneratorV3(registry.definitions); + const spec = generator.generateDocument({ + openapi: '3.0.0', + info: { + version: '1.0.0', + title: 'MeetUP', + description: 'API documentation for MeetUP application', + }, + }); + + const outputPath = path.join( + process.cwd(), + 'src', + 'generated', + 'swagger.json', + ); + fs.writeFileSync(outputPath, JSON.stringify(spec, null, 2), 'utf8'); + console.log(`Swagger JSON generated at ${outputPath}`); +} + +exportSwagger().catch((error) => { + console.error('Error exporting Swagger:', error); +}); diff --git a/orval.config.js b/orval.config.js new file mode 100644 index 0000000..718a86a --- /dev/null +++ b/orval.config.js @@ -0,0 +1,10 @@ +module.exports = { + meetup: { + input: './src/generated/swagger.json', + output: { + mode: 'tags-split', + target: './src/generated/api/meetup.ts', + client: 'react-query', + }, + }, +}; diff --git a/package.json b/package.json index 8ebc9e6..4cbe9c5 100644 --- a/package.json +++ b/package.json @@ -8,60 +8,79 @@ "start": "node .next/standalone/server.js", "lint": "next lint", "format": "prettier --write .", - "cypress:build": "prettier --check . && NODE_ENV=test next build", - "cypress:start_server": "cp .env.test .next/standalone && cp public .next/standalone/ -r && cp .next/static/ .next/standalone/.next/ -r && NODE_ENV=test HOSTNAME=\"0.0.0.0\" dotenv -e .env.test -- node .next/standalone/server.js", - "cypress:open": "cypress open", - "cypress:run": "cypress run", "prisma:migrate": "dotenv -e .env.local -- prisma migrate dev", "prisma:generate": "dotenv -e .env.local -- prisma generate", "prisma:studio": "dotenv -e .env.local -- prisma studio", "prisma:db:push": "dotenv -e .env.local -- prisma db push", - "prisma:migrate:reset": "dotenv -e .env.local -- prisma migrate reset" + "prisma:migrate:reset": "dotenv -e .env.local -- prisma migrate reset", + "dev_container": "docker compose -f docker-compose.dev.yml up --watch --build", + "swagger:generate": "ts-node -r tsconfig-paths/register exportSwagger.ts", + "orval:generate": "orval", + "cypress:build": "rm -rf /tmp/dev.db && DATABASE_URL=\"file:/tmp/dev.db\" yarn prisma:generate && yarn swagger:generate && yarn orval:generate && DATABASE_URL=\"file:/tmp/dev.db\" yarn prisma:db:push && prettier --check . && NODE_ENV=test next build", + "cypress:start_server": "DATABASE_URL=\"file:/tmp/dev.db\" ts-node cypress/e2e/seed.ts && cp .env.test .next/standalone && cp public .next/standalone/ -r && cp .next/static/ .next/standalone/.next/ -r && NODE_ENV=test HOSTNAME=\"0.0.0.0\" dotenv -e .env.test -- node .next/standalone/server.js", + "cypress:open": "cypress open", + "cypress:run": "cypress run" }, "dependencies": { + "@asteasolutions/zod-to-openapi": "^8.0.0-beta.4", "@auth/prisma-adapter": "^2.9.1", "@fortawesome/fontawesome-svg-core": "^6.7.2", "@fortawesome/free-brands-svg-icons": "^6.7.2", "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", - "@prisma/client": "^6.8.2", - "@radix-ui/react-dropdown-menu": "^2.1.14", + "@hookform/resolvers": "^5.0.1", + "@prisma/client": "^6.9.0", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-collapsible": "^1.1.11", + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-hover-card": "^1.1.13", "@radix-ui/react-label": "^2.1.6", "@radix-ui/react-scroll-area": "^1.2.8", "@radix-ui/react-select": "^2.2.4", - "@radix-ui/react-separator": "^1.1.6", - "@radix-ui/react-slot": "^1.2.2", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-switch": "^1.2.4", "@radix-ui/react-tabs": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.7", + "@tanstack/react-query": "^5.80.7", + "bcryptjs": "^3.0.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "lucide-react": "^0.510.0", - "next": "15.3.2", + "lucide-react": "^0.515.0", + "next": "15.4.0-canary.95", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", "react": "^19.0.0", "react-dom": "^19.0.0", - "tailwind-merge": "^3.2.0" + "react-hook-form": "^7.56.4", + "swagger-ui-react": "^5.24.1", + "tailwind-merge": "^3.2.0", + "zod": "^3.25.60" }, "devDependencies": { "@eslint/eslintrc": "3.3.1", - "@tailwindcss/postcss": "4.1.7", - "@types/node": "22.15.21", - "@types/react": "19.1.4", - "@types/react-dom": "19.1.5", - "cypress": "14.3.3", + "@tailwindcss/postcss": "4.1.10", + "@types/node": "22.15.33", + "@types/react": "19.1.8", + "@types/react-dom": "19.1.6", + "@types/swagger-ui-react": "5", + "@types/webpack-env": "1.18.8", + "cypress": "14.5.0", "dotenv-cli": "8.0.0", - "eslint": "9.27.0", - "eslint-config-next": "15.3.2", + "eslint": "9.29.0", + "eslint-config-next": "15.3.4", "eslint-config-prettier": "10.1.5", - "postcss": "8.5.3", + "orval": "7.10.0", + "postcss": "8.5.6", "prettier": "3.5.3", - "prisma": "6.8.2", - "tailwindcss": "4.1.7", - "tw-animate-css": "1.3.0", + "prisma": "6.10.1", + "tailwindcss": "4.1.10", + "ts-node": "10.9.2", + "tsconfig-paths": "4.2.0", + "tw-animate-css": "1.3.4", "typescript": "5.8.3" }, - "packageManager": "yarn@4.9.1" + "packageManager": "yarn@4.9.2" } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 712a068..ffa1c86 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -158,8 +158,8 @@ model Friendship { requested_at DateTime @default(now()) accepted_at DateTime? - user1 User @relation("FriendshipUser1", fields: [user_id_1], references: [id]) - user2 User @relation("FriendshipUser2", fields: [user_id_2], references: [id]) + user1 User @relation("FriendshipUser1", fields: [user_id_1], references: [id], onDelete: Cascade) + user2 User @relation("FriendshipUser2", fields: [user_id_2], references: [id], onDelete: Cascade) @@id([user_id_1, user_id_2]) @@index([user_id_2, status], name: "idx_friendships_user2_status") @@ -187,8 +187,8 @@ model GroupMember { role group_member_role @default(MEMBER) added_at DateTime @default(now()) - group Group @relation(fields: [group_id], references: [id]) - user User @relation(fields: [user_id], references: [id]) + group Group @relation(fields: [group_id], references: [id], onDelete: Cascade) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@id([group_id, user_id]) @@index([user_id]) @@ -207,7 +207,7 @@ model BlockedSlot { created_at DateTime @default(now()) updated_at DateTime @updatedAt - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([user_id, start_time, end_time]) @@index([user_id, is_recurring]) @@ -241,8 +241,8 @@ model MeetingParticipant { status participant_status @default(PENDING) added_at DateTime @default(now()) - meeting Meeting @relation(fields: [meeting_id], references: [id]) - user User @relation(fields: [user_id], references: [id]) + meeting Meeting @relation(fields: [meeting_id], references: [id], onDelete: Cascade) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@id([meeting_id, user_id]) @@index([user_id, status], name: "idx_participants_user_status") @@ -259,7 +259,7 @@ model Notification { is_read Boolean @default(false) created_at DateTime @default(now()) - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([user_id, is_read, created_at], name: "idx_notifications_user_read_time") @@map("notifications") @@ -271,7 +271,7 @@ model UserNotificationPreference { email_enabled Boolean @default(false) updated_at DateTime @default(now()) - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@id([user_id, notification_type]) @@map("user_notification_preferences") @@ -292,7 +292,7 @@ model EmailQueue { created_at DateTime @default(now()) updated_at DateTime @updatedAt - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([status, scheduled_at], name: "idx_email_queue_pending_jobs") @@index([user_id, created_at], name: "idx_email_queue_user_history") @@ -308,7 +308,7 @@ model CalendarExportToken { created_at DateTime @default(now()) last_accessed_at DateTime? - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([user_id]) @@map("calendar_export_tokens") @@ -327,7 +327,7 @@ model CalendarSubscription { created_at DateTime @default(now()) updated_at DateTime @updatedAt - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) externalEvents ExternalEvent[] @@index([user_id, is_enabled]) @@ -350,7 +350,7 @@ model ExternalEvent { show_as_free Boolean @default(false) last_fetched_at DateTime @default(now()) - subscription CalendarSubscription @relation(fields: [subscription_id], references: [id]) + subscription CalendarSubscription @relation(fields: [subscription_id], references: [id], onDelete: Cascade) @@unique([subscription_id, ical_uid], name: "uq_external_event_sub_uid") @@index([subscription_id, start_time, end_time]) diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..67de44c Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/favicon-dark.png b/public/favicon-dark.png new file mode 100644 index 0000000..0f0e626 Binary files /dev/null and b/public/favicon-dark.png differ diff --git a/public/favicon-dark.svg b/public/favicon-dark.svg new file mode 100644 index 0000000..826447c --- /dev/null +++ b/public/favicon-dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/favicon-light.png b/public/favicon-light.png new file mode 100644 index 0000000..f7472c1 Binary files /dev/null and b/public/favicon-light.png differ diff --git a/public/favicon-light.svg b/public/favicon-light.svg new file mode 100644 index 0000000..9eedff7 --- /dev/null +++ b/public/favicon-light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..8ad1cfa Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/fonts/Comfortaa/Comfortaa-VariableFont_weight.ttf b/public/fonts/Comfortaa/Comfortaa-VariableFont_weight.ttf new file mode 100644 index 0000000..9918535 Binary files /dev/null and b/public/fonts/Comfortaa/Comfortaa-VariableFont_weight.ttf differ diff --git a/public/fonts/Comfortaa/OFL.txt b/public/fonts/Comfortaa/OFL.txt new file mode 100644 index 0000000..5c7930b --- /dev/null +++ b/public/fonts/Comfortaa/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Comfortaa Project Authors (https://github.com/alexeiva/comfortaa), with Reserved Font Name "Comfortaa". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/Comfortaa/README.txt b/public/fonts/Comfortaa/README.txt new file mode 100644 index 0000000..1d01eab --- /dev/null +++ b/public/fonts/Comfortaa/README.txt @@ -0,0 +1,67 @@ +Comfortaa Variable Font +======================= + +This download contains Comfortaa as both a variable font and static fonts. + +Comfortaa is a variable font with this axis: + wght + +This means all the styles are contained in a single file: + Comfortaa-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Comfortaa: + static/Comfortaa-Light.ttf + static/Comfortaa-Regular.ttf + static/Comfortaa-Medium.ttf + static/Comfortaa-SemiBold.ttf + static/Comfortaa-Bold.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/public/fonts/Comfortaa/static/Comfortaa-Bold.ttf b/public/fonts/Comfortaa/static/Comfortaa-Bold.ttf new file mode 100644 index 0000000..e64de93 Binary files /dev/null and b/public/fonts/Comfortaa/static/Comfortaa-Bold.ttf differ diff --git a/public/fonts/Comfortaa/static/Comfortaa-Light.ttf b/public/fonts/Comfortaa/static/Comfortaa-Light.ttf new file mode 100644 index 0000000..2310cd2 Binary files /dev/null and b/public/fonts/Comfortaa/static/Comfortaa-Light.ttf differ diff --git a/public/fonts/Comfortaa/static/Comfortaa-Medium.ttf b/public/fonts/Comfortaa/static/Comfortaa-Medium.ttf new file mode 100644 index 0000000..2a98021 Binary files /dev/null and b/public/fonts/Comfortaa/static/Comfortaa-Medium.ttf differ diff --git a/public/fonts/Comfortaa/static/Comfortaa-Regular.ttf b/public/fonts/Comfortaa/static/Comfortaa-Regular.ttf new file mode 100644 index 0000000..abc4409 Binary files /dev/null and b/public/fonts/Comfortaa/static/Comfortaa-Regular.ttf differ diff --git a/public/fonts/Comfortaa/static/Comfortaa-SemiBold.ttf b/public/fonts/Comfortaa/static/Comfortaa-SemiBold.ttf new file mode 100644 index 0000000..1746b9f Binary files /dev/null and b/public/fonts/Comfortaa/static/Comfortaa-SemiBold.ttf differ diff --git a/public/fonts/VarelaRound/OFL.txt b/public/fonts/VarelaRound/OFL.txt new file mode 100644 index 0000000..cca0a98 --- /dev/null +++ b/public/fonts/VarelaRound/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2023 The Varela Round Project Authors (https://github.com/alefalefalef/Varela-Round-Hebrew/), with Reserved Font Names 'Varela' and ‘Varela Round’. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/VarelaRound/VarelaRound-Regular.ttf b/public/fonts/VarelaRound/VarelaRound-Regular.ttf new file mode 100644 index 0000000..9d01812 Binary files /dev/null and b/public/fonts/VarelaRound/VarelaRound-Regular.ttf differ diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..981d97f --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "MyWebSite", + "short_name": "MySite", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/public/web-app-manifest-192x192.png b/public/web-app-manifest-192x192.png new file mode 100644 index 0000000..d084830 Binary files /dev/null and b/public/web-app-manifest-192x192.png differ diff --git a/public/web-app-manifest-512x512.png b/public/web-app-manifest-512x512.png new file mode 100644 index 0000000..4f2133a Binary files /dev/null and b/public/web-app-manifest-512x512.png differ diff --git a/src/app/(main)/home/page.tsx b/src/app/(main)/home/page.tsx new file mode 100644 index 0000000..c381c03 --- /dev/null +++ b/src/app/(main)/home/page.tsx @@ -0,0 +1,21 @@ +'use client'; + +import { RedirectButton } from '@/components/buttons/redirect-button'; +import { useGetApiUserMe } from '@/generated/api/user/user'; + +export default function Home() { + const { data, isLoading } = useGetApiUserMe(); + + return ( +
+
+

+ Hello{' '} + {isLoading ? 'Loading...' : data?.data.user?.name || 'Unknown User'} +

+ + +
+
+ ); +} diff --git a/src/app/(main)/layout.tsx b/src/app/(main)/layout.tsx new file mode 100644 index 0000000..7106e70 --- /dev/null +++ b/src/app/(main)/layout.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { cookies } from 'next/headers'; + +import { AppSidebar } from '@/components/custom-ui/app-sidebar'; +import SidebarProviderWrapper from '@/components/wrappers/sidebar-provider'; +import Header from '@/components/misc/header'; + +export default async function Layout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + const cookieStore = await cookies(); + const defaultOpen = cookieStore.get('sidebar_state')?.value === 'true'; + return ( + <> + + +
{children}
+
+ + ); +} diff --git a/src/app/api-doc/page.tsx b/src/app/api-doc/page.tsx new file mode 100644 index 0000000..c6e9694 --- /dev/null +++ b/src/app/api-doc/page.tsx @@ -0,0 +1,11 @@ +import { getApiDocs } from '@/lib/swagger'; +import ReactSwagger from './react-swagger'; + +export default async function IndexPage() { + const spec = await getApiDocs(); + return ( +
+ +
+ ); +} diff --git a/src/app/api-doc/react-swagger.tsx b/src/app/api-doc/react-swagger.tsx new file mode 100644 index 0000000..0dd3931 --- /dev/null +++ b/src/app/api-doc/react-swagger.tsx @@ -0,0 +1,14 @@ +'use client'; + +import SwaggerUI from 'swagger-ui-react'; +import 'swagger-ui-react/swagger-ui.css'; + +type Props = { + spec: object; +}; + +function ReactSwagger({ spec }: Props) { + return ; +} + +export default ReactSwagger; diff --git a/src/app/api/event/[eventID]/participant/[user]/route.ts b/src/app/api/event/[eventID]/participant/[user]/route.ts new file mode 100644 index 0000000..890308c --- /dev/null +++ b/src/app/api/event/[eventID]/participant/[user]/route.ts @@ -0,0 +1,276 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + SuccessResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import { + ParticipantResponseSchema, + updateParticipantSchema, +} from '../validation'; + +export const GET = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + const user = (await params).user; + + const isParticipant = await prisma.meetingParticipant.findFirst({ + where: { + meeting_id: eventID, + user_id: dbUser.id, + }, + }); + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + }); + + if (!isParticipant && !isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User is not a participant or organizer of this event', + }, + { status: 403 }, + ); + + const participant = await prisma.meetingParticipant.findUnique({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: user, + }, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + if (!participant) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Participant not found' }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse(ParticipantResponseSchema, { + success: true, + participant, + }); +}); + +export const DELETE = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + const user = (await params).user; + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + }); + + if (!isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Only organizer can remove participants' }, + { status: 403 }, + ); + + const participant = await prisma.meetingParticipant.findUnique({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: user, + }, + }, + }); + + if (!participant) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Participant not found' }, + { status: 404 }, + ); + + await prisma.meetingParticipant.delete({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: user, + }, + }, + }); + + return returnZodTypeCheckedResponse( + SuccessResponseSchema, + { success: true, message: 'Participant removed successfully' }, + { status: 200 }, + ); +}); + +export const PATCH = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + const user = (await params).user; + + if (dbUser.id !== user && dbUser.name !== user) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'You can only update your own participation' }, + { status: 403 }, + ); + + const participant = await prisma.meetingParticipant.findUnique({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: dbUser.id, + }, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + if (!participant) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Participant not found' }, + { status: 404 }, + ); + + const body = await req.json(); + const parsedBody = await updateParticipantSchema.safeParseAsync(body); + if (!parsedBody.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request body', + errors: parsedBody.error.issues, + }, + { status: 400 }, + ); + const { status } = parsedBody.data; + + const updatedParticipant = await prisma.meetingParticipant.update({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: dbUser.id, + }, + }, + data: { + status, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + return returnZodTypeCheckedResponse(ParticipantResponseSchema, { + success: true, + participant: updatedParticipant, + }); +}); diff --git a/src/app/api/event/[eventID]/participant/[user]/swagger.ts b/src/app/api/event/[eventID]/participant/[user]/swagger.ts new file mode 100644 index 0000000..b08bd74 --- /dev/null +++ b/src/app/api/event/[eventID]/participant/[user]/swagger.ts @@ -0,0 +1,102 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + ParticipantResponseSchema, + updateParticipantSchema, +} from '../validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { + EventIdParamSchema, + UserIdParamSchema, + SuccessResponseSchema, +} from '@/app/api/validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event/{eventID}/participant/{user}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + user: UserIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Get a participant for the event', + content: { + 'application/json': { + schema: ParticipantResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); + + registry.registerPath({ + method: 'delete', + path: '/api/event/{eventID}/participant/{user}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + user: UserIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Participant removed successfully', + content: { + 'application/json': { + schema: SuccessResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); + + registry.registerPath({ + method: 'patch', + path: '/api/event/{eventID}/participant/{user}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + user: UserIdParamSchema, + }), + body: { + content: { + 'application/json': { + schema: updateParticipantSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'Participant updated successfully', + content: { + 'application/json': { + schema: ParticipantResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + ...invalidRequestDataResponse, + }, + tags: ['Event Participant'], + }); +} diff --git a/src/app/api/event/[eventID]/participant/route.ts b/src/app/api/event/[eventID]/participant/route.ts new file mode 100644 index 0000000..91ce965 --- /dev/null +++ b/src/app/api/event/[eventID]/participant/route.ts @@ -0,0 +1,200 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import { + inviteParticipantSchema, + ParticipantResponseSchema, + ParticipantsResponseSchema, +} from './validation'; + +export const GET = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const isParticipant = await prisma.meetingParticipant.findFirst({ + where: { + meeting_id: eventID, + user_id: dbUser.id, + }, + select: { + status: true, + }, + }); + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + select: { + id: true, + }, + }); + + if (!isParticipant && !isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User is not a participant or organizer of this event', + }, + { status: 403 }, + ); + + const participants = await prisma.meetingParticipant.findMany({ + where: { + meeting_id: eventID, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + return returnZodTypeCheckedResponse(ParticipantsResponseSchema, { + success: true, + participants, + }); +}); + +export const POST = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + }); + + if (!isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Only organizers can add participants' }, + { status: 403 }, + ); + + const dataRaw = await req.json(); + const data = await inviteParticipantSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + const { user_id } = data.data; + + const participantExists = await prisma.meetingParticipant.findFirst({ + where: { + meeting_id: eventID, + user_id, + }, + }); + + if (participantExists) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User is already a participant of this event', + }, + { status: 409 }, + ); + + const newParticipant = await prisma.meetingParticipant.create({ + data: { + meeting_id: eventID, + user_id, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + return returnZodTypeCheckedResponse(ParticipantResponseSchema, { + success: true, + participant: { + user: { + id: newParticipant.user.id, + name: newParticipant.user.name, + first_name: newParticipant.user.first_name, + last_name: newParticipant.user.last_name, + image: newParticipant.user.image, + timezone: newParticipant.user.timezone, + }, + status: newParticipant.status, + }, + }); +}); diff --git a/src/app/api/event/[eventID]/participant/swagger.ts b/src/app/api/event/[eventID]/participant/swagger.ts new file mode 100644 index 0000000..38dfd58 --- /dev/null +++ b/src/app/api/event/[eventID]/participant/swagger.ts @@ -0,0 +1,72 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + ParticipantsResponseSchema, + ParticipantResponseSchema, + inviteParticipantSchema, +} from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { EventIdParamSchema } from '@/app/api/validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event/{eventID}/participant', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + }, + responses: { + 200: { + description: 'List participants for the event', + content: { + 'application/json': { + schema: ParticipantsResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); + + registry.registerPath({ + method: 'post', + path: '/api/event/{eventID}/participant', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + body: { + content: { + 'application/json': { + schema: inviteParticipantSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'Participant invited successfully', + content: { + 'application/json': { + schema: ParticipantResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); +} diff --git a/src/app/api/event/[eventID]/participant/validation.ts b/src/app/api/event/[eventID]/participant/validation.ts new file mode 100644 index 0000000..bacb9ac --- /dev/null +++ b/src/app/api/event/[eventID]/participant/validation.ts @@ -0,0 +1,50 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + existingUserIdServerSchema, + PublicUserSchema, +} from '@/app/api/user/validation'; + +extendZodWithOpenApi(zod); + +export const participantStatusSchema = zod.enum([ + 'ACCEPTED', + 'DECLINED', + 'TENTATIVE', + 'PENDING', +]); + +export const inviteParticipantSchema = zod + .object({ + user_id: existingUserIdServerSchema, + }) + .openapi('InviteParticipant', { + description: 'Schema for inviting a participant to an event', + }); + +export const updateParticipantSchema = zod + .object({ + status: participantStatusSchema, + }) + .openapi('UpdateParticipant', { + description: 'Schema for updating participant status in an event', + }); + +export const ParticipantSchema = zod + .object({ + user: PublicUserSchema, + status: participantStatusSchema, + }) + .openapi('Participant', { + description: 'Participant information including user and status', + }); + +export const ParticipantResponseSchema = zod.object({ + success: zod.boolean(), + participant: ParticipantSchema, +}); + +export const ParticipantsResponseSchema = zod.object({ + success: zod.boolean(), + participants: zod.array(ParticipantSchema), +}); diff --git a/src/app/api/event/[eventID]/route.ts b/src/app/api/event/[eventID]/route.ts new file mode 100644 index 0000000..8c06b64 --- /dev/null +++ b/src/app/api/event/[eventID]/route.ts @@ -0,0 +1,318 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + SuccessResponseSchema, + ZodErrorResponseSchema, +} from '../../validation'; +import { EventResponseSchema } from '../validation'; +import { updateEventSchema } from '../validation'; + +export const GET = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const event = await prisma.meeting.findUnique({ + where: { + id: eventID, + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + organizer_id: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + if (!event) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Event not found' }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse( + EventResponseSchema, + { success: true, event }, + { status: 200 }, + ); +}); + +export const DELETE = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const event = await prisma.meeting.findUnique({ + where: { + id: eventID, + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + }); + + if (!event) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Event not found' }, + { status: 404 }, + ); + + if (event.organizer_id !== dbUser.id) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'You are not the organizer of this event' }, + { status: 403 }, + ); + + await prisma.meeting.delete({ + where: { + id: eventID, + }, + }); + + return returnZodTypeCheckedResponse( + SuccessResponseSchema, + { success: true, message: 'Event deleted successfully' }, + { status: 200 }, + ); +}); + +export const PATCH = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const event = await prisma.meeting.findUnique({ + where: { + id: eventID, + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + }); + + if (!event) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Event not found' }, + { status: 404 }, + ); + + if (event.organizer_id !== dbUser.id) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'You are not the organizer of this event' }, + { status: 403 }, + ); + + const dataRaw = await req.json(); + const data = await updateEventSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid input data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + const { + title, + description, + start_time, + end_time, + location, + status, + participants, + } = data.data; + + if (participants !== undefined) + for (const participant of participants) { + await prisma.meetingParticipant.upsert({ + where: { + meeting_id_user_id: { + user_id: participant, + meeting_id: eventID, + }, + }, + create: { + user_id: participant, + meeting_id: eventID, + }, + update: {}, + }); + } + + const updatedEvent = await prisma.meeting.update({ + where: { + id: eventID, + }, + data: { + title, + description, + start_time, + end_time, + location, + status, + participants: + participants !== undefined + ? { + deleteMany: { + user_id: { + notIn: participants || [], + }, + }, + } + : {}, + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + organizer_id: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + return returnZodTypeCheckedResponse( + EventResponseSchema, + { + success: true, + event: updatedEvent, + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/event/[eventID]/swagger.ts b/src/app/api/event/[eventID]/swagger.ts new file mode 100644 index 0000000..4703556 --- /dev/null +++ b/src/app/api/event/[eventID]/swagger.ts @@ -0,0 +1,94 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { EventResponseSchema, updateEventSchema } from '../validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { + EventIdParamSchema, + SuccessResponseSchema, +} from '@/app/api/validation'; +import zod from 'zod/v4'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event/{eventID}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Event retrieved successfully', + content: { + 'application/json': { + schema: EventResponseSchema, + }, + }, + }, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); + + registry.registerPath({ + method: 'delete', + path: '/api/event/{eventID}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Event deleted successfully', + content: { + 'application/json': { + schema: SuccessResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); + + registry.registerPath({ + method: 'patch', + path: '/api/event/{eventID}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + body: { + content: { + 'application/json': { + schema: updateEventSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'Event updated successfully', + content: { + 'application/json': { + schema: EventResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); +} diff --git a/src/app/api/event/route.ts b/src/app/api/event/route.ts new file mode 100644 index 0000000..fb734b1 --- /dev/null +++ b/src/app/api/event/route.ts @@ -0,0 +1,178 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { ErrorResponseSchema, ZodErrorResponseSchema } from '../validation'; +import { + createEventSchema, + EventResponseSchema, + EventsResponseSchema, +} from './validation'; + +export const GET = auth(async (req) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const userEvents = await prisma.meeting.findMany({ + where: { + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + return returnZodTypeCheckedResponse( + EventsResponseSchema, + { + success: true, + events: userEvents, + }, + { status: 200 }, + ); +}); + +export const POST = auth(async (req) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = await req.json(); + const data = await createEventSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + const { title, description, start_time, end_time, location, participants } = + data.data; + + const newEvent = await prisma.meeting.create({ + data: { + title, + description, + start_time, + end_time, + location, + organizer_id: authCheck.user.id!, + participants: participants + ? { + create: participants.map((userId) => ({ + user: { connect: { id: userId } }, + })), + } + : undefined, + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + return returnZodTypeCheckedResponse( + EventResponseSchema, + { + success: true, + event: newEvent, + }, + { status: 201 }, + ); +}); diff --git a/src/app/api/event/swagger.ts b/src/app/api/event/swagger.ts new file mode 100644 index 0000000..b78afef --- /dev/null +++ b/src/app/api/event/swagger.ts @@ -0,0 +1,62 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { + EventResponseSchema, + EventsResponseSchema, + createEventSchema, +} from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event', + responses: { + 200: { + description: 'List of events for the authenticated user', + content: { + 'application/json': { + schema: EventsResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); + + registry.registerPath({ + method: 'post', + path: '/api/event', + request: { + body: { + content: { + 'application/json': { + schema: createEventSchema, + }, + }, + }, + }, + responses: { + 201: { + description: 'Event created successfully.', + content: { + 'application/json': { + schema: EventResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); +} diff --git a/src/app/api/event/validation.ts b/src/app/api/event/validation.ts new file mode 100644 index 0000000..b8e176b --- /dev/null +++ b/src/app/api/event/validation.ts @@ -0,0 +1,167 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + existingUserIdServerSchema, + PublicUserSchema, +} from '../user/validation'; +import { ParticipantSchema } from './[eventID]/participant/validation'; + +extendZodWithOpenApi(zod); + +// ---------------------------------------- +// +// Event ID Validation +// +// ---------------------------------------- +export const eventIdSchema = zod.string().min(1, 'Event ID is required'); + +// ---------------------------------------- +// +// Event Title Validation +// +// ---------------------------------------- +export const eventTitleSchema = zod + .string() + .min(1, 'Title is required') + .max(100, 'Title must be at most 100 characters long'); + +// ---------------------------------------- +// +// Event Description Validation +// +// ---------------------------------------- +export const eventDescriptionSchema = zod + .string() + .max(500, 'Description must be at most 500 characters long'); + +// ---------------------------------------- +// +// Event start time Validation +// +// ---------------------------------------- +export const eventStartTimeSchema = zod.iso + .datetime() + .or(zod.date().transform((date) => date.toISOString())) + .refine((date) => !isNaN(new Date(date).getTime()), { + message: 'Invalid start time', + }); + +// ---------------------------------------- +// +// Event end time Validation +// +// ---------------------------------------- +export const eventEndTimeSchema = zod.iso.datetime().or( + zod + .date() + .transform((date) => date.toISOString()) + .refine((date) => !isNaN(new Date(date).getTime()), { + message: 'Invalid end time', + }), +); + +// ---------------------------------------- +// +// Event Location Validation +// +// ---------------------------------------- +export const eventLocationSchema = zod + .string() + .max(200, 'Location must be at most 200 characters long'); + +// ---------------------------------------- +// +// Event Participants Validation +// +// ---------------------------------------- +export const eventParticipantsSchema = zod.array(existingUserIdServerSchema); + +// ---------------------------------------- +// +// Event Status Validation +// +// ---------------------------------------- +export const eventStatusSchema = zod.enum([ + 'TENTATIVE', + 'CONFIRMED', + 'CANCELLED', +]); + +// ---------------------------------------- +// +// Create Event Schema +// +// ---------------------------------------- +export const createEventSchema = zod + .object({ + title: eventTitleSchema, + description: eventDescriptionSchema.optional(), + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + location: eventLocationSchema.optional().default(''), + participants: eventParticipantsSchema.optional(), + status: eventStatusSchema.optional().default('TENTATIVE'), + }) + .refine((data) => new Date(data.start_time) < new Date(data.end_time), { + message: 'Start time must be before end time', + }); + +// ---------------------------------------- +// +// Update Event Schema +// +// ---------------------------------------- +export const updateEventSchema = zod + .object({ + title: eventTitleSchema.optional(), + description: eventDescriptionSchema.optional(), + start_time: eventStartTimeSchema.optional(), + end_time: eventEndTimeSchema.optional(), + location: eventLocationSchema.optional().default(''), + participants: eventParticipantsSchema.optional(), + status: eventStatusSchema.optional(), + }) + .refine( + (data) => { + if (data.start_time && data.end_time) { + return new Date(data.start_time) < new Date(data.end_time); + } + return true; + }, + { + message: 'Start time must be before end time', + }, + ); + +// ---------------------------------------- +// +// Event Schema Validation (for API responses) +// +// ---------------------------------------- +export const EventSchema = zod + .object({ + id: eventIdSchema, + title: eventTitleSchema, + description: eventDescriptionSchema.nullish(), + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + location: eventLocationSchema.nullish(), + status: eventStatusSchema, + created_at: zod.date(), + updated_at: zod.date(), + organizer: PublicUserSchema, + participants: zod.array(ParticipantSchema).nullish(), + }) + .openapi('Event', { + description: 'Event information including all fields', + }); + +export const EventResponseSchema = zod.object({ + success: zod.boolean(), + event: EventSchema, +}); + +export const EventsResponseSchema = zod.object({ + success: zod.boolean(), + events: zod.array(EventSchema), +}); diff --git a/src/app/api/search/user/route.ts b/src/app/api/search/user/route.ts new file mode 100644 index 0000000..a8b6414 --- /dev/null +++ b/src/app/api/search/user/route.ts @@ -0,0 +1,79 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { searchUserSchema, searchUserResponseSchema } from './validation'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; + +export const GET = auth(async function GET(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = Object.fromEntries(new URL(req.url).searchParams); + const data = await searchUserSchema.safeParseAsync(dataRaw); + if (!data.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + const { query, count, page, sort_by, sort_order } = data.data; + + const dbUsers = await prisma.user.findMany({ + where: { + OR: [ + { name: { contains: query } }, + { first_name: { contains: query } }, + { last_name: { contains: query } }, + ], + }, + orderBy: { + [sort_by]: sort_order, + }, + skip: (page - 1) * count, + take: count, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + timezone: true, + image: true, + }, + }); + + const userCount = await prisma.user.count({ + where: { + OR: [ + { name: { contains: query } }, + { first_name: { contains: query } }, + { last_name: { contains: query } }, + ], + }, + }); + + return returnZodTypeCheckedResponse( + searchUserResponseSchema, + { + success: true, + users: dbUsers, + total_count: userCount, + total_pages: Math.ceil(userCount / count), + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/search/user/swagger.ts b/src/app/api/search/user/swagger.ts new file mode 100644 index 0000000..90ca54e --- /dev/null +++ b/src/app/api/search/user/swagger.ts @@ -0,0 +1,33 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { searchUserResponseSchema, searchUserSchema } from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/search/user', + request: { + query: searchUserSchema, + }, + responses: { + 200: { + description: 'User search results', + content: { + 'application/json': { + schema: searchUserResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Search'], + }); +} diff --git a/src/app/api/search/user/validation.ts b/src/app/api/search/user/validation.ts new file mode 100644 index 0000000..c1662b0 --- /dev/null +++ b/src/app/api/search/user/validation.ts @@ -0,0 +1,20 @@ +import zod from 'zod/v4'; +import { PublicUserSchema } from '../../user/validation'; + +export const searchUserSchema = zod.object({ + query: zod.string().optional().default(''), + count: zod.coerce.number().min(1).max(100).default(10), + page: zod.coerce.number().min(1).default(1), + sort_by: zod + .enum(['created_at', 'name', 'first_name', 'last_name', 'id']) + .optional() + .default('created_at'), + sort_order: zod.enum(['asc', 'desc']).optional().default('desc'), +}); + +export const searchUserResponseSchema = zod.object({ + success: zod.boolean(), + users: zod.array(PublicUserSchema), + total_count: zod.number(), + total_pages: zod.number(), +}); diff --git a/src/app/api/user/[user]/calendar/route.ts b/src/app/api/user/[user]/calendar/route.ts new file mode 100644 index 0000000..f6b6098 --- /dev/null +++ b/src/app/api/user/[user]/calendar/route.ts @@ -0,0 +1,212 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + userCalendarQuerySchema, + UserCalendarResponseSchema, + UserCalendarSchema, +} from './validation'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import { z } from 'zod/v4'; + +export const GET = auth(async function GET(req, { params }) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = Object.fromEntries(new URL(req.url).searchParams); + const data = await userCalendarQuerySchema.safeParseAsync(dataRaw); + if (!data.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + const { end, start } = data.data; + + const requestUserId = authCheck.user.id; + + const requestedUserId = (await params).user; + + const requestedUser = await prisma.user.findFirst({ + where: { + id: requestedUserId, + }, + select: { + meetingParts: { + where: { + meeting: { + start_time: { + lte: end, + }, + end_time: { + gte: start, + }, + }, + }, + orderBy: { + meeting: { + start_time: 'asc', + }, + }, + select: { + meeting: { + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer_id: true, + participants: { + select: { + user: { + select: { + id: true, + }, + }, + }, + }, + }, + }, + }, + }, + meetingsOrg: { + where: { + start_time: { + lte: end, + }, + end_time: { + gte: start, + }, + }, + orderBy: { + start_time: 'asc', + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer_id: true, + participants: { + select: { + user: { + select: { + id: true, + }, + }, + }, + }, + }, + }, + blockedSlots: { + where: { + start_time: { + lte: end, + }, + end_time: { + gte: start, + }, + }, + orderBy: { + start_time: 'asc', + }, + select: { + id: requestUserId === requestedUserId ? true : false, + reason: requestUserId === requestedUserId ? true : false, + start_time: true, + end_time: true, + is_recurring: requestUserId === requestedUserId ? true : false, + recurrence_end_date: requestUserId === requestedUserId ? true : false, + rrule: requestUserId === requestedUserId ? true : false, + created_at: requestUserId === requestedUserId ? true : false, + updated_at: requestUserId === requestedUserId ? true : false, + }, + }, + }, + }); + + if (!requestedUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const calendar: z.input = []; + + for (const event of requestedUser.meetingParts) { + if ( + event.meeting.participants.some((p) => p.user.id === requestUserId) || + event.meeting.organizer_id === requestUserId + ) { + calendar.push({ ...event.meeting, type: 'event' }); + } else { + calendar.push({ + start_time: event.meeting.start_time, + end_time: event.meeting.end_time, + type: 'blocked_private', + }); + } + } + + for (const event of requestedUser.meetingsOrg) { + if ( + event.participants.some((p) => p.user.id === requestUserId) || + event.organizer_id === requestUserId + ) { + calendar.push({ ...event, type: 'event' }); + } else { + calendar.push({ + start_time: event.start_time, + end_time: event.end_time, + type: 'blocked_private', + }); + } + } + + for (const slot of requestedUser.blockedSlots) { + calendar.push({ + start_time: slot.start_time, + end_time: slot.end_time, + id: slot.id, + reason: slot.reason, + is_recurring: slot.is_recurring, + recurrence_end_date: slot.recurrence_end_date, + rrule: slot.rrule, + created_at: slot.created_at, + updated_at: slot.updated_at, + type: + requestUserId === requestedUserId ? 'blocked_owned' : 'blocked_private', + }); + } + + return returnZodTypeCheckedResponse(UserCalendarResponseSchema, { + success: true, + calendar, + }); +}); diff --git a/src/app/api/user/[user]/calendar/swagger.ts b/src/app/api/user/[user]/calendar/swagger.ts new file mode 100644 index 0000000..fb48629 --- /dev/null +++ b/src/app/api/user/[user]/calendar/swagger.ts @@ -0,0 +1,37 @@ +import { + userCalendarQuerySchema, + UserCalendarResponseSchema, +} from './validation'; +import { + notAuthenticatedResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { UserIdParamSchema } from '@/app/api/validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/user/{user}/calendar', + request: { + params: zod.object({ + user: UserIdParamSchema, + }), + query: userCalendarQuerySchema, + }, + responses: { + 200: { + description: 'User calendar retrieved successfully.', + content: { + 'application/json': { + schema: UserCalendarResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + }, + tags: ['User'], + }); +} diff --git a/src/app/api/user/[user]/calendar/validation.ts b/src/app/api/user/[user]/calendar/validation.ts new file mode 100644 index 0000000..a0d179f --- /dev/null +++ b/src/app/api/user/[user]/calendar/validation.ts @@ -0,0 +1,99 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + eventEndTimeSchema, + EventSchema, + eventStartTimeSchema, +} from '@/app/api/event/validation'; + +extendZodWithOpenApi(zod); + +export const BlockedSlotSchema = zod + .object({ + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + type: zod.literal('blocked_private'), + }) + .openapi('BlockedSlotSchema', { + description: 'Blocked time slot in the user calendar', + }); + +export const OwnedBlockedSlotSchema = BlockedSlotSchema.extend({ + id: zod.string(), + reason: zod.string().nullish(), + is_recurring: zod.boolean().default(false), + recurrence_end_date: zod.date().nullish(), + rrule: zod.string().nullish(), + created_at: zod.date().nullish(), + updated_at: zod.date().nullish(), + type: zod.literal('blocked_owned'), +}).openapi('OwnedBlockedSlotSchema', { + description: 'Blocked slot owned by the user', +}); + +export const VisibleSlotSchema = EventSchema.omit({ + organizer: true, + participants: true, +}) + .extend({ + type: zod.literal('event'), + }) + .openapi('VisibleSlotSchema', { + description: 'Visible time slot in the user calendar', + }); + +export const UserCalendarSchema = zod + .array(VisibleSlotSchema.or(BlockedSlotSchema).or(OwnedBlockedSlotSchema)) + .openapi('UserCalendarSchema', { + description: 'Array of events in the user calendar', + }); + +export const UserCalendarResponseSchema = zod.object({ + success: zod.boolean().default(true), + calendar: UserCalendarSchema, +}); + +export const userCalendarQuerySchema = zod + .object({ + start: zod.iso + .datetime() + .optional() + .transform((val) => { + if (val) return new Date(val); + const now = new Date(); + const startOfWeek = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate() - now.getDay(), + ); + return startOfWeek; + }), + end: zod.iso + .datetime() + .optional() + .transform((val) => { + if (val) return new Date(val); + const now = new Date(); + const endOfWeek = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate() + (6 - now.getDay()), + ); + return endOfWeek; + }), + }) + .openapi('UserCalendarQuerySchema', { + description: 'Query parameters for filtering the user calendar', + properties: { + start: { + type: 'string', + format: 'date-time', + description: 'Start date for filtering the calendar events', + }, + end: { + type: 'string', + format: 'date-time', + description: 'End date for filtering the calendar events', + }, + }, + }); diff --git a/src/app/api/user/[user]/route.ts b/src/app/api/user/[user]/route.ts new file mode 100644 index 0000000..b90b1f8 --- /dev/null +++ b/src/app/api/user/[user]/route.ts @@ -0,0 +1,55 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { PublicUserResponseSchema } from '../validation'; +import { ErrorResponseSchema } from '@/app/api/validation'; + +export const GET = auth(async function GET(req, { params }) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const requestedUser = (await params).user; + const dbUser = await prisma.user.findFirst({ + where: { + OR: [{ id: requestedUser }, { name: requestedUser }], + }, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + created_at: true, + updated_at: true, + image: true, + timezone: true, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse( + PublicUserResponseSchema, + { + success: true, + user: dbUser, + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/user/[user]/swagger.ts b/src/app/api/user/[user]/swagger.ts new file mode 100644 index 0000000..741cbf9 --- /dev/null +++ b/src/app/api/user/[user]/swagger.ts @@ -0,0 +1,33 @@ +import { PublicUserResponseSchema } from '../validation'; +import { + notAuthenticatedResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { UserIdParamSchema } from '../../validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/user/{user}', + request: { + params: zod.object({ + user: UserIdParamSchema, + }), + }, + responses: { + 200: { + description: 'User information retrieved successfully.', + content: { + 'application/json': { + schema: PublicUserResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + }, + tags: ['User'], + }); +} diff --git a/src/app/api/user/me/password/route.ts b/src/app/api/user/me/password/route.ts new file mode 100644 index 0000000..0b92559 --- /dev/null +++ b/src/app/api/user/me/password/route.ts @@ -0,0 +1,122 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { updateUserPasswordServerSchema } from '../validation'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { FullUserResponseSchema } from '../../validation'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import bcrypt from 'bcryptjs'; + +export const PATCH = auth(async function PATCH(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const body = await req.json(); + const parsedBody = updateUserPasswordServerSchema.safeParse(body); + if (!parsedBody.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: parsedBody.error.issues, + }, + { status: 400 }, + ); + + const { current_password, new_password } = parsedBody.data; + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + include: { + accounts: true, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + + if (!dbUser.password_hash) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User does not have a password set', + }, + { status: 400 }, + ); + + if ( + dbUser.accounts.length === 0 || + dbUser.accounts[0].provider !== 'credentials' + ) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'Credentials login is not enabled for this user', + }, + { status: 400 }, + ); + + const isCurrentPasswordValid = await bcrypt.compare( + current_password, + dbUser.password_hash || '', + ); + + if (!isCurrentPasswordValid) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'Current password is incorrect', + }, + { status: 401 }, + ); + + const hashedNewPassword = await bcrypt.hash(new_password, 10); + + const updatedUser = await prisma.user.update({ + where: { + id: dbUser.id, + }, + data: { + password_hash: hashedNewPassword, + }, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + image: true, + timezone: true, + created_at: true, + updated_at: true, + }, + }); + + return returnZodTypeCheckedResponse(FullUserResponseSchema, { + success: true, + user: updatedUser, + }); +}); diff --git a/src/app/api/user/me/password/swagger.ts b/src/app/api/user/me/password/swagger.ts new file mode 100644 index 0000000..0bc62f0 --- /dev/null +++ b/src/app/api/user/me/password/swagger.ts @@ -0,0 +1,43 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { FullUserResponseSchema } from '../../validation'; +import { updateUserPasswordServerSchema } from '../validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'patch', + path: '/api/user/me/password', + description: 'Update the password of the currently authenticated user', + request: { + body: { + description: 'User password update request body', + required: true, + content: { + 'application/json': { + schema: updateUserPasswordServerSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'User information updated successfully', + content: { + 'application/json': { + schema: FullUserResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['User'], + }); +} diff --git a/src/app/api/user/me/route.ts b/src/app/api/user/me/route.ts new file mode 100644 index 0000000..5571a6b --- /dev/null +++ b/src/app/api/user/me/route.ts @@ -0,0 +1,160 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { updateUserServerSchema } from './validation'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { FullUserResponseSchema } from '../validation'; +import { + ErrorResponseSchema, + SuccessResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; + +export const GET = auth(async function GET(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + image: true, + timezone: true, + created_at: true, + updated_at: true, + }, + }); + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse(FullUserResponseSchema, { + success: true, + user: dbUser, + }); +}); + +export const PATCH = auth(async function PATCH(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = await req.json(); + const data = await updateUserServerSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + if (Object.keys(data.data).length === 0) { + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'No data to update' }, + { status: 400 }, + ); + } + + const updatedUser = await prisma.user.update({ + where: { + id: authCheck.user.id, + }, + data: data.data, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + image: true, + timezone: true, + created_at: true, + updated_at: true, + }, + }); + if (!updatedUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + return returnZodTypeCheckedResponse( + FullUserResponseSchema, + { + success: true, + user: updatedUser, + }, + { status: 200 }, + ); +}); + +export const DELETE = auth(async function DELETE(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + + await prisma.user.delete({ + where: { + id: authCheck.user.id, + }, + }); + + return returnZodTypeCheckedResponse( + SuccessResponseSchema, + { + success: true, + message: 'User deleted successfully', + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/user/me/swagger.ts b/src/app/api/user/me/swagger.ts new file mode 100644 index 0000000..6a9e375 --- /dev/null +++ b/src/app/api/user/me/swagger.ts @@ -0,0 +1,84 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { FullUserResponseSchema } from '../validation'; +import { updateUserServerSchema } from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { SuccessResponseSchema } from '../../validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/user/me', + description: 'Get the currently authenticated user', + responses: { + 200: { + description: 'User information retrieved successfully', + content: { + 'application/json': { + schema: FullUserResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['User'], + }); + + registry.registerPath({ + method: 'patch', + path: '/api/user/me', + description: 'Update the currently authenticated user', + request: { + body: { + description: 'User information to update', + required: true, + content: { + 'application/json': { + schema: updateUserServerSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'User information updated successfully', + content: { + 'application/json': { + schema: FullUserResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['User'], + }); + + registry.registerPath({ + method: 'delete', + path: '/api/user/me', + description: 'Delete the currently authenticated user', + responses: { + 200: { + description: 'User deleted successfully', + content: { + 'application/json': { + schema: SuccessResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['User'], + }); +} diff --git a/src/app/api/user/me/validation.ts b/src/app/api/user/me/validation.ts new file mode 100644 index 0000000..66f07cc --- /dev/null +++ b/src/app/api/user/me/validation.ts @@ -0,0 +1,33 @@ +import zod from 'zod/v4'; +import { + firstNameSchema, + lastNameSchema, + newUserEmailServerSchema, + newUserNameServerSchema, + passwordSchema, + timezoneSchema, +} from '@/app/api/user/validation'; + +// ---------------------------------------- +// +// Update User Validation +// +// ---------------------------------------- +export const updateUserServerSchema = zod.object({ + name: newUserNameServerSchema.optional(), + first_name: firstNameSchema.optional(), + last_name: lastNameSchema.optional(), + email: newUserEmailServerSchema.optional(), + image: zod.url().optional(), + timezone: timezoneSchema.optional(), +}); + +export const updateUserPasswordServerSchema = zod + .object({ + current_password: zod.string().min(1, 'Current password is required'), + new_password: passwordSchema, + confirm_new_password: passwordSchema, + }) + .refine((data) => data.new_password === data.confirm_new_password, { + message: 'New password and confirm new password must match', + }); diff --git a/src/app/api/user/validation.ts b/src/app/api/user/validation.ts new file mode 100644 index 0000000..89b8ba4 --- /dev/null +++ b/src/app/api/user/validation.ts @@ -0,0 +1,162 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import { prisma } from '@/prisma'; +import zod from 'zod/v4'; +import { allTimeZones } from '@/lib/timezones'; + +extendZodWithOpenApi(zod); + +// ---------------------------------------- +// +// Email Validation +// +// ---------------------------------------- +export const emailSchema = zod + .email('Invalid email address') + .min(3, 'Email is required'); + +export const newUserEmailServerSchema = emailSchema.refine(async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { email: val }, + }); + return !existingUser; +}, 'Email in use by another account'); + +export const existingUserEmailServerSchema = emailSchema.refine(async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { email: val }, + }); + return !!existingUser; +}, 'Email not found'); + +// ---------------------------------------- +// +// First Name Validation +// +// ---------------------------------------- +export const firstNameSchema = zod + .string() + .min(1, 'First name is required') + .max(32, 'First name must be at most 32 characters long'); + +// ---------------------------------------- +// +// Last Name Validation +// +// ---------------------------------------- +export const lastNameSchema = zod + .string() + .min(1, 'Last name is required') + .max(32, 'Last name must be at most 32 characters long'); + +// ---------------------------------------- +// +// Username Validation +// +// ---------------------------------------- +export const userNameSchema = zod + .string() + .min(3, 'Username is required') + .max(32, 'Username must be at most 32 characters long') + .regex( + /^[a-zA-Z0-9_]+$/, + 'Username can only contain letters, numbers, and underscores', + ); + +export const newUserNameServerSchema = userNameSchema.refine(async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { name: val }, + }); + return !existingUser; +}, 'Username in use by another account'); + +export const existingUserNameServerSchema = userNameSchema.refine( + async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { name: val }, + }); + return !!existingUser; + }, + 'Username not found', +); + +// ---------------------------------------- +// +// User ID Validation +// +// ---------------------------------------- +export const existingUserIdServerSchema = zod + .string() + .min(1, 'User ID is required') + .refine(async (val) => { + const user = await prisma.user.findUnique({ + where: { id: val }, + }); + return !!user; + }, 'User not found'); + +// ---------------------------------------- +// +// Password Validation +// +// ---------------------------------------- +export const passwordSchema = zod + .string() + .min(8, 'Password must be at least 8 characters long') + .max(128, 'Password must be at most 128 characters long') + .regex( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+={}\[\]:;"'<>,.?\/\\-]).{8,}$/, + 'Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character', + ); + +// ---------------------------------------- +// +// Timezone Validation +// +// ---------------------------------------- +export const timezoneSchema = zod.enum(allTimeZones).openapi('Timezone', { + description: 'Valid timezone from the list of supported timezones', +}); + +// ---------------------------------------- +// +// User Schema Validation (for API responses) +// +// ---------------------------------------- +export const FullUserSchema = zod + .object({ + id: zod.string(), + name: zod.string(), + first_name: zod.string().nullish(), + last_name: zod.string().nullish(), + email: zod.email(), + image: zod.url().nullish(), + timezone: zod + .string() + .refine((i) => (allTimeZones as string[]).includes(i)) + .nullish(), + created_at: zod.date(), + updated_at: zod.date(), + }) + .openapi('FullUser', { + description: 'Full user information including all fields', + }); + +export const PublicUserSchema = FullUserSchema.pick({ + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, +}).openapi('PublicUser', { + description: 'Public user information excluding sensitive data', +}); + +export const FullUserResponseSchema = zod.object({ + success: zod.boolean(), + user: FullUserSchema, +}); +export const PublicUserResponseSchema = zod.object({ + success: zod.boolean(), + user: PublicUserSchema, +}); diff --git a/src/app/api/validation.ts b/src/app/api/validation.ts new file mode 100644 index 0000000..38b95bd --- /dev/null +++ b/src/app/api/validation.ts @@ -0,0 +1,87 @@ +import { registry } from '@/lib/swagger'; +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; + +extendZodWithOpenApi(zod); + +export const ErrorResponseSchema = zod + .object({ + success: zod.boolean(), + message: zod.string(), + }) + .openapi('ErrorResponseSchema', { + description: 'Error response schema', + example: { + success: false, + message: 'An error occurred', + }, + }); + +export const ZodErrorResponseSchema = ErrorResponseSchema.extend({ + errors: zod.array( + zod.object({ + expected: zod.string().optional(), + code: zod.string(), + path: zod.array( + zod + .string() + .or(zod.number()) + .or( + zod.symbol().openapi({ + type: 'string', + }), + ), + ), + message: zod.string(), + }), + ), +}).openapi('ZodErrorResponseSchema', { + description: 'Zod error response schema', + example: { + success: false, + message: 'Invalid request data', + errors: [ + { + expected: 'string', + code: 'invalid_type', + path: ['first_name'], + message: 'Invalid input: expected string, received number', + }, + ], + }, +}); + +export const SuccessResponseSchema = zod + .object({ + success: zod.boolean(), + message: zod.string().optional(), + }) + .openapi('SuccessResponseSchema', { + description: 'Success response schema', + example: { + success: true, + message: 'Operation completed successfully', + }, + }); + +export const UserIdParamSchema = registry.registerParameter( + 'UserIdOrNameParam', + zod.string().openapi({ + param: { + name: 'user', + in: 'path', + }, + example: '12345', + }), +); + +export const EventIdParamSchema = registry.registerParameter( + 'EventIdParam', + zod.string().openapi({ + param: { + name: 'eventID', + in: 'path', + }, + example: '67890', + }), +); diff --git a/src/app/globals.css b/src/app/globals.css index 322500b..93a24ce 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -4,30 +4,76 @@ @custom-variant dark (&:is(.dark *)); :root { - --radius: 0.625rem; + /* Custom values */ - --background: oklch(1 0 0); + --font-heading: 'Comfortaa', sans-serif; + --font-label: 'Varela Round', sans-serif; + --font-button: 'Varela Round', sans-serif; + + --transparent: transparent; + + --neutral-000: oklch(0 0 0); + --neutral-100: oklch(0.2264 0 0); + --neutral-150: oklch(0.2972 0 0); + --neutral-200: oklch(0.3407 0 0); + --neutral-300: oklch(0.4495 0 0); + --neutral-400: oklch(0.5486 0 0); + --neutral-450: oklch(0.6 0 0); + --neutral-500: oklch(0.6434 0 0); + --neutral-600: oklch(0.738 0 0); + --neutral-700: oklch(0.8266 0 0); + --neutral-750: oklch(0.9128 0 0); + --neutral-800: oklch(0.9702 0 0); + --neutral-900: oklch(1 0 0); + + --background: var(--neutral-800); + --background-reversed: var(--neutral-000); + --base: var(--neutral-800); + --text: var(--neutral-000); + --text-alt: var(--neutral-900); + --text-input: var(--text); + --text-muted-input: var(--neutral-450); + --text-muted: var(--neutral-300); + --muted-input: var(--neutral-600); + --background-disabled: var(--neutral-500); + --text-disabled: var(--neutral-700); + --radius: 0.688rem; + + --primary: oklch(0.7493 0.1551 74.95); + --hover-primary: oklch(0.7493 0.1551 74.95 / 0.8); + --active-primary: oklch(0.6191 0.1218 77.58); + --disabled-primary: oklch(0.7493 0.1551 74.95 / 0.5); + + --secondary: oklch(0.4937 0.1697 271.26); + --hover-secondary: oklch(0.4937 0.1697 271.26 / 0.8); + --active-secondary: oklch(0.4254 0.133 272.15); + --disabled-secondary: oklch(0.4937 0.1697 271.26 / 0.5); + + --muted: var(--color-neutral-700); + --hover-muted: var(--color-neutral-600); + --active-muted: var(--color-neutral-400); + --disabled-muted: var(--color-neutral-400); + + --card: var(--neutral-800); + + --sidebar-width-icon: 32px; + + /* ------------------- */ --foreground: oklch(0.13 0.028 261.692); - --card: oklch(1 0 0); - --card-foreground: oklch(0.13 0.028 261.692); --popover: oklch(1 0 0); --popover-foreground: oklch(0.13 0.028 261.692); - --primary: oklch(0.21 0.034 264.665); - --primary-foreground: oklch(0.985 0.002 247.839); - --secondary: oklch(0.967 0.003 264.542); + --popover-hover: var(--neutral-750); --secondary-foreground: oklch(0.21 0.034 264.665); - --muted: oklch(0.967 0.003 264.542); - --muted-foreground: oklch(0.551 0.027 264.364); --accent: oklch(0.967 0.003 264.542); @@ -52,24 +98,90 @@ --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0.002 247.839); + --sidebar: var(--background); - --sidebar-foreground: oklch(0.13 0.028 261.692); + --sidebar-foreground: var(--text); --sidebar-primary: oklch(0.21 0.034 264.665); - --sidebar-primary-foreground: oklch(0.985 0.002 247.839); + --sidebar-primary-foreground: var(--text); --sidebar-accent: oklch(0.967 0.003 264.542); - --sidebar-accent-foreground: oklch(0.21 0.034 264.665); + --sidebar-accent-foreground: var(--text); --sidebar-border: oklch(0.928 0.006 264.531); --sidebar-ring: oklch(0.707 0.022 261.325); } +@font-face { + font-family: 'Comfortaa'; + font-style: normal; + font-weight: 300 700; + src: url('/fonts/Comfortaa/Comfortaa-VariableFont_weight.ttf') + format('truetype'); +} + +@font-face { + font-family: 'Varela Round'; + font-style: normal; + font-weight: 400; + src: url('/fonts/VarelaRound/VarelaRound-Regular.ttf') format('truetype'); +} + @theme inline { + --font-heading: var(--font-heading); + --font-label: var(--font-label); + --font-button: var(--font-button); + + --transparent: var(--transparent); + + --color-neutral-000: var(--neutral-000); + --color-neutral-100: var(--neutral-100); + --color-neutral-150: var(--neutral-150); + --color-neutral-200: var(--neutral-200); + --color-neutral-300: var(--neutral-300); + --color-neutral-400: var(--neutral-400); + --color-neutral-500: var(--neutral-500); + --color-neutral-600: var(--neutral-600); + --color-neutral-650: var(--neutral-650); + --color-neutral-700: var(--neutral-700); + --color-neutral-750: var(--neutral-750); + --color-neutral-800: var(--neutral-800); + --color-neutral-900: var(--neutral-900); + + --color-background: var(--neutral-750); + --color-background-reversed: var(--background-reversed); + --color-base: var(--neutral-800); + --color-text: var(--text); + --color-text-alt: var(--text-alt); + --color-text-input: var(--text-input); + --color-text-muted-input: var(--text-muted-input); + --color-text-muted: var(--text-muted); + --color-muted-input: var(--muted-input); + + --color-background-disabled: var(--neutral-500); + --color-text-disabled: var(--neutral-700); + --radius: 0.688rem; + + --color-primary: var(--primary); + --color-hover-primary: var(--hover-primary); + --color-active-primary: var(--active-primary); + --color-disabled-primary: var(--disabled-primary); + + --color-secondary: var(--secondary); + --color-hover-secondary: var(--hover-secondary); + --color-active-secondary: var(--active-secondary); + --color-disabled-secondary: var(--disabled-secondary); + + --color-muted: var(--muted); + --color-hover-muted: var(--hover-muted); + --color-active-muted: var(--active-muted); + --color-disabled-muted: var(--disabled-muted); + + /* Custom values */ + --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); @@ -86,10 +198,12 @@ --color-card-foreground: var(--card-foreground); - --color-popover: var(--popover); + --color-popover: var(--color-background); --color-popover-foreground: var(--popover-foreground); + --color-popover-hover: var(--popover-hover); + --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); @@ -102,7 +216,7 @@ --color-muted-foreground: var(--muted-foreground); - --color-accent: var(--accent); + --color-accent: var(--color-neutral-750); --color-accent-foreground: var(--accent-foreground); @@ -142,28 +256,70 @@ } .dark { - --background: oklch(0.13 0.028 261.692); + /* Custom values */ + + --transparent: transparent; + + --neutral-000: oklch(1 0 0); + --neutral-100: oklch(0.9702 0 0); + --neutral-150: oklch(0.9128 0 0); + --neutral-200: oklch(0.8266 0 0); + --neutral-300: oklch(0.738 0 0); + --neutral-400: oklch(0.6434 0 0); + --neutral-450: oklch(0.6 0 0); + --neutral-500: oklch(0.5486 0 0); + --neutral-600: oklch(0.4495 0 0); + --neutral-650: oklch(0.425 0 0); + --neutral-700: oklch(0.3407 0 0); + --neutral-750: oklch(0.2972 0 0); + --neutral-800: oklch(0.2264 0 0); + --neutral-900: oklch(0 0 0); + + --background: var(--neutral-750); + --background-reversed: var(--neutral-000); + --base: var(--neutral-750); + --text: var(--neutral-000); + --text-alt: var(--neutral-900); + --text-input: var(--text); + --text-muted-input: var(--neutral-450); + --text-muted: var(--neutral-300); + --muted-input: var(--neutral-500); + --background-disabled: var(--neutral-500); + --text-disabled: var(--neutral-700); + + --primary: oklch(0.6568 0.1358 74.86); + --hover-primary: oklch(0.6568 0.1358 74.86 / 0.8); + --active-primary: oklch(0.5274 0.0997 78.52); + --disabled-primary: oklch(0.6568 0.1358 74.86 / 0.4); + + --secondary: oklch(0.6065 0.213 271.11); + --hover-secondary: oklch(0.6065 0.213 271.11 / 0.8); + --active-secondary: oklch(0.4471 0.15 271.61); + --disabled-secondary: oklch(0.6065 0.213 271.11 / 0.4); + + --muted: var(--color-neutral-650); + --hover-muted: var(--color-neutral-500); + --active-muted: var(--color-neutral-400); + --disabled-muted: var(--color-neutral-400); + + --card: var(--neutral-750); + + /* ------------------- */ --foreground: oklch(0.985 0.002 247.839); - --card: oklch(0.21 0.034 264.665); - --card-foreground: oklch(0.985 0.002 247.839); --popover: oklch(0.21 0.034 264.665); --popover-foreground: oklch(0.985 0.002 247.839); - --primary: oklch(0.928 0.006 264.531); - --primary-foreground: oklch(0.21 0.034 264.665); - --secondary: oklch(0.278 0.033 256.848); + --popover-hover: var(--neutral-700); --secondary-foreground: oklch(0.985 0.002 247.839); - --muted: oklch(0.278 0.033 256.848); - --muted-foreground: oklch(0.707 0.022 261.325); --accent: oklch(0.278 0.033 256.848); @@ -188,17 +344,17 @@ --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.21 0.034 264.665); + --sidebar: var(--background); - --sidebar-foreground: oklch(0.985 0.002 247.839); + --sidebar-foreground: var(--text); --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0.002 247.839); + --sidebar-primary-foreground: var(--text); --sidebar-accent: oklch(0.278 0.033 256.848); - --sidebar-accent-foreground: oklch(0.985 0.002 247.839); + --sidebar-accent-foreground: var(--text); --sidebar-border: oklch(1 0 0 / 10%); @@ -213,3 +369,8 @@ @apply bg-background text-foreground; } } + +/* Fix for swagger ui readability */ +body:has(.swagger-ui) { + @apply bg-white text-black; +} diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx deleted file mode 100644 index 4e6773b..0000000 --- a/src/app/home/page.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { RedirectButton } from '@/components/user/redirect-button'; -import { ThemePicker } from '@/components/user/theme-picker'; - -export default function Home() { - return ( -
-
{}
-
-

Home

- - -
-
- ); -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 05f8659..af40867 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,8 @@ -import { ThemeProvider } from '@/components/theme-provider'; +import { ThemeProvider } from '@/components/wrappers/theme-provider'; import type { Metadata } from 'next'; import './globals.css'; +import { QueryProvider } from '@/components/wrappers/query-provider'; export const metadata: Metadata = { title: 'MeetUp', @@ -15,6 +16,39 @@ export default function RootLayout({ }>) { return ( + + + + + + + + + - {children} + {children} diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 34d1b07..dcd207d 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,13 +1,17 @@ import { auth, providerMap } from '@/auth'; -import SSOLogin from '@/components/user/sso-login-button'; -import LoginForm from '@/components/user/login-form'; +import SSOLogin from '@/components/buttons/sso-login-button'; +import LoginForm from '@/components/forms/login-form'; import { redirect } from 'next/navigation'; import { Button } from '@/components/ui/button'; import Image from 'next/image'; - -import '@/app/globals.css'; -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { ThemePicker } from '@/components/user/theme-picker'; +import { Separator } from '@/components/ui/separator'; +import Logo from '@/components/misc/logo'; +import { + Card, + CardContent, + CardHeader, +} from '@/components/custom-ui/login-card'; +import { ThemePicker } from '@/components/misc/theme-picker'; import { HoverCard, HoverCardTrigger, @@ -22,22 +26,23 @@ export default async function LoginPage() { } return ( -
-
-
+
+
+
-
- - - - Login - +
+ + + - + - {providerMap.length > 0 &&
} + {providerMap.map((provider) => (
+ + + + + + dancing penguin + +
- - - - - - dancing penguin - -
); } diff --git a/src/app/logout/page.tsx b/src/app/logout/page.tsx index 15f29aa..e3da2fd 100644 --- a/src/app/logout/page.tsx +++ b/src/app/logout/page.tsx @@ -25,11 +25,7 @@ export default function SignOutPage() { - diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index 45974fb..563ebab 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -88,7 +88,7 @@ export default function SettingsPage() {
- +

Permanently delete your account and all associated data.

@@ -251,7 +251,7 @@ export default function SettingsPage() { Define your typical available hours (e.g., Monday-Friday, 9 AM - 5 PM).

-
@@ -302,10 +302,14 @@ export default function SettingsPage() {
- -
@@ -398,7 +402,9 @@ export default function SettingsPage() {
- +

Prevent specific users from seeing your calendar or booking time. diff --git a/src/assets/logo/logo-export.ts b/src/assets/logo/logo-export.ts new file mode 100644 index 0000000..17a0708 --- /dev/null +++ b/src/assets/logo/logo-export.ts @@ -0,0 +1,16 @@ +export { default as logo_colored_combo_light } from '@/assets/logo/new/logo_colored_combo_light.svg'; +export { default as logo_colored_combo_dark } from '@/assets/logo/new/logo_colored_combo_dark.svg'; +export { default as logo_colored_primary_light } from '@/assets/logo/logo_colored_primary_light.svg'; +export { default as logo_colored_primary_dark } from '@/assets/logo/logo_colored_primary_dark.svg'; +export { default as logo_colored_secondary_light } from '@/assets/logo/logo_colored_secondary_light.svg'; +export { default as logo_colored_secondary_dark } from '@/assets/logo/logo_colored_secondary_dark.svg'; +export { default as logo_mono_combo_light } from '@/assets/logo/logo_mono_combo_light.svg'; +export { default as logo_mono_combo_dark } from '@/assets/logo/logo_mono_combo_dark.svg'; +export { default as logo_mono_primary_light } from '@/assets/logo/logo_mono_primary_light.svg'; +export { default as logo_mono_primary_dark } from '@/assets/logo/logo_mono_primary_dark.svg'; +export { default as logo_mono_secondary_light } from '@/assets/logo/logo_mono_secondary_light.svg'; +export { default as logo_mono_secondary_dark } from '@/assets/logo/logo_mono_secondary_dark.svg'; +export { default as logo_mono_submark_light } from '@/assets/logo/logo_mono_submark_light.svg'; +export { default as logo_mono_submark_dark } from '@/assets/logo/logo_mono_submark_dark.svg'; +export { default as logo_colored_submark_light } from '@/assets/logo/new/logo_colored_submark_light.svg'; +export { default as logo_colored_submark_dark } from '@/assets/logo/new/logo_colored_submark_dark.svg'; diff --git a/src/assets/logo/new/logo_colored_combo_dark.svg b/src/assets/logo/new/logo_colored_combo_dark.svg new file mode 100644 index 0000000..ec4acae --- /dev/null +++ b/src/assets/logo/new/logo_colored_combo_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/logo/new/logo_colored_combo_light.svg b/src/assets/logo/new/logo_colored_combo_light.svg new file mode 100644 index 0000000..33e6c6d --- /dev/null +++ b/src/assets/logo/new/logo_colored_combo_light.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/logo/new/logo_colored_submark_dark.svg b/src/assets/logo/new/logo_colored_submark_dark.svg new file mode 100644 index 0000000..efadbf0 --- /dev/null +++ b/src/assets/logo/new/logo_colored_submark_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/logo/new/logo_colored_submark_light.svg b/src/assets/logo/new/logo_colored_submark_light.svg new file mode 100644 index 0000000..cc7b3e1 --- /dev/null +++ b/src/assets/logo/new/logo_colored_submark_light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/auth.ts b/src/auth.ts index 38ec47a..405b729 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -1,24 +1,91 @@ -import NextAuth from 'next-auth'; +import NextAuth, { CredentialsSignin } from 'next-auth'; +import { Prisma } from '@/generated/prisma'; import type { Provider } from 'next-auth/providers'; import Credentials from 'next-auth/providers/credentials'; - import Authentik from 'next-auth/providers/authentik'; import { PrismaAdapter } from '@auth/prisma-adapter'; import { prisma } from '@/prisma'; +import { loginSchema } from '@/lib/auth/validation'; +import { ZodError } from 'zod/v4'; + +class InvalidLoginError extends CredentialsSignin { + constructor(code: string) { + super(); + this.code = code; + this.message = code; + } +} + const providers: Provider[] = [ !process.env.DISABLE_PASSWORD_LOGIN && Credentials({ credentials: { password: { label: 'Password', type: 'password' } }, - authorize(c) { - if (c.password !== 'password') return null; - return { - id: 'test', - name: 'Test User', - email: 'test@example.com', - }; + async authorize(c) { + if ( + process.env.NODE_ENV === 'development' && + process.env.DISABLE_AUTH_TEST_USER !== 'true' && + c.password === 'password' + ) + return { + id: 'test', + name: 'Test User', + email: 'test@example.com', + }; + if (process.env.DISABLE_PASSWORD_LOGIN) return null; + + try { + const { email, password } = await loginSchema.parseAsync(c); + + const user = await prisma.user.findFirst({ + where: { OR: [{ email }, { name: email }] }, + include: { accounts: true }, + }); + + if (!user) + throw new InvalidLoginError( + 'username/email or password is not correct', + ); + + if (user.accounts[0].provider !== 'credentials') { + throw new InvalidLoginError( + 'username/email or password is not correct', + ); + } + + const passwordsMatch = await ( + await import('bcryptjs') + ).compare(password, user.password_hash!); + + if (!passwordsMatch) { + throw new InvalidLoginError( + 'username/email or password is not correct', + ); + } + + if (!user.emailVerified) { + throw new InvalidLoginError( + 'Email not verified. Please check your inbox.', + ); + } + + return user; + } catch (error) { + if ( + error instanceof Prisma?.PrismaClientInitializationError || + error instanceof Prisma?.PrismaClientKnownRequestError + ) { + throw new InvalidLoginError('System error. Please contact support'); + } + + if (error instanceof ZodError) { + throw new InvalidLoginError(error.issues[0].message); + } + + throw error; + } }, }), process.env.AUTH_AUTHENTIK_ID && Authentik, @@ -49,5 +116,18 @@ export const { handlers, signIn, signOut, auth } = NextAuth({ authorized({ auth }) { return !!auth?.user; }, + session: async ({ session, token }) => { + if (session?.user) { + session.user.id = token.sub as string; + } + return session; + }, + jwt: async ({ user, token }) => { + if (user) { + token.uid = user.id; + } + return token; + }, }, + debug: process.env.NODE_ENV === 'development', }); diff --git a/src/components/icon-button.tsx b/src/components/buttons/icon-button.tsx similarity index 88% rename from src/components/icon-button.tsx rename to src/components/buttons/icon-button.tsx index 8888b6b..17f9945 100644 --- a/src/components/icon-button.tsx +++ b/src/components/buttons/icon-button.tsx @@ -12,7 +12,7 @@ export function IconButton({ children: React.ReactNode; } & React.ComponentProps) { return ( - diff --git a/src/components/buttons/notification-button.tsx b/src/components/buttons/notification-button.tsx new file mode 100644 index 0000000..f41f325 --- /dev/null +++ b/src/components/buttons/notification-button.tsx @@ -0,0 +1,31 @@ +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import { NDot, NotificationDot } from '@/components/misc/notification-dot'; + +export function NotificationButton({ + dotVariant, + children, + ...props +}: { + dotVariant?: NDot; + children: React.ReactNode; +} & React.ComponentProps) { + return ( + + + + + + + ); +} diff --git a/src/components/user/redirect-button.tsx b/src/components/buttons/redirect-button.tsx similarity index 100% rename from src/components/user/redirect-button.tsx rename to src/components/buttons/redirect-button.tsx diff --git a/src/components/buttons/sso-login-button.tsx b/src/components/buttons/sso-login-button.tsx new file mode 100644 index 0000000..013ef73 --- /dev/null +++ b/src/components/buttons/sso-login-button.tsx @@ -0,0 +1,32 @@ +import { signIn } from '@/auth'; +import { IconButton } from '@/components/buttons/icon-button'; +import { faOpenid } from '@fortawesome/free-brands-svg-icons'; + +export default function SSOLogin({ + provider, + providerDisplayName, + ...props +}: { + provider: string; + providerDisplayName: string; +} & React.HTMLAttributes) { + return ( +

{ + 'use server'; + await signIn(provider); + }} + > + + Login with {providerDisplayName} + +
+ ); +} diff --git a/src/components/custom-ui/app-sidebar.tsx b/src/components/custom-ui/app-sidebar.tsx new file mode 100644 index 0000000..f823970 --- /dev/null +++ b/src/components/custom-ui/app-sidebar.tsx @@ -0,0 +1,131 @@ +'use client'; + +import React from 'react'; +import { + Sidebar, + SidebarContent, + SidebarFooter, + SidebarGroup, + SidebarGroupContent, + SidebarGroupLabel, + SidebarHeader, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, +} from '@/components/custom-ui/sidebar'; + +import { ChevronDown } from 'lucide-react'; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from '@/components/ui/collapsible'; + +import Logo from '@/components/misc/logo'; + +import Link from 'next/link'; + +import { + Star, + CalendarDays, + User, + Users, + CalendarClock, + CalendarPlus, +} from 'lucide-react'; + +const items = [ + { + title: 'Calendar', + url: '#', + icon: CalendarDays, + }, + { + title: 'Friends', + url: '#', + icon: User, + }, + { + title: 'Groups', + url: '#', + icon: Users, + }, + { + title: 'Events', + url: '#', + icon: CalendarClock, + }, +]; + +export function AppSidebar() { + return ( + <> + + + + + + + + + + + + {' '} + + Favorites + + + + + + + + + + + + + {items.map((item) => ( + + + + + + {item.title} + + + + + ))} + + + + + + + + + New Event + + + + + + + + ); +} diff --git a/src/components/labeled-input.tsx b/src/components/custom-ui/labeled-input.tsx similarity index 67% rename from src/components/labeled-input.tsx rename to src/components/custom-ui/labeled-input.tsx index 5ff31f7..ea26e51 100644 --- a/src/components/labeled-input.tsx +++ b/src/components/custom-ui/labeled-input.tsx @@ -7,16 +7,20 @@ export default function LabeledInput({ placeholder, value, name, - ...props + autocomplete, + error, + ...rest }: { type: 'text' | 'email' | 'password'; label: string; placeholder?: string; - name: string; value?: string; + name?: string; + autocomplete?: string; + error?: string; } & React.InputHTMLAttributes) { return ( -
+
+ {error &&

{error}

}
); } diff --git a/src/components/custom-ui/login-card.tsx b/src/components/custom-ui/login-card.tsx new file mode 100644 index 0000000..6544fba --- /dev/null +++ b/src/components/custom-ui/login-card.tsx @@ -0,0 +1,118 @@ +import * as React from 'react'; + +import { cn } from '@/lib/utils'; + +function Card({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardHeader({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardTitle({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardDescription({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardAction({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardContent({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardFooter({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardAction, + CardDescription, + CardContent, +}; diff --git a/src/components/custom-ui/sidebar.tsx b/src/components/custom-ui/sidebar.tsx new file mode 100644 index 0000000..11228cb --- /dev/null +++ b/src/components/custom-ui/sidebar.tsx @@ -0,0 +1,725 @@ +'use client'; + +import * as React from 'react'; +import { Slot } from '@radix-ui/react-slot'; +import { cva, VariantProps } from 'class-variance-authority'; +import { PanelLeftIcon } from 'lucide-react'; + +import { useIsMobile } from '@/hooks/use-mobile'; +import { cn } from '@/lib/utils'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Separator } from '@/components/ui/separator'; +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, +} from '@/components/ui/sheet'; +import { Skeleton } from '@/components/ui/skeleton'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@/components/ui/tooltip'; + +const SIDEBAR_COOKIE_NAME = 'sidebar_state'; +const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; +const SIDEBAR_WIDTH = '16rem'; +const SIDEBAR_WIDTH_MOBILE = '18rem'; +const SIDEBAR_WIDTH_ICON = '4rem'; +const SIDEBAR_KEYBOARD_SHORTCUT = 'b'; + +type SidebarContextProps = { + state: 'expanded' | 'collapsed'; + open: boolean; + setOpen: (open: boolean) => void; + openMobile: boolean; + setOpenMobile: (open: boolean) => void; + isMobile: boolean; + toggleSidebar: () => void; +}; + +const SidebarContext = React.createContext(null); + +function useSidebar() { + const context = React.useContext(SidebarContext); + if (!context) { + throw new Error('useSidebar must be used within a SidebarProvider.'); + } + + return context; +} + +function SidebarProvider({ + defaultOpen = true, + open: openProp, + onOpenChange: setOpenProp, + className, + style, + children, + ...props +}: React.ComponentProps<'div'> & { + defaultOpen?: boolean; + open?: boolean; + onOpenChange?: (open: boolean) => void; +}) { + const isMobile = useIsMobile(); + const [openMobile, setOpenMobile] = React.useState(false); + + // This is the internal state of the sidebar. + // We use openProp and setOpenProp for control from outside the component. + const [_open, _setOpen] = React.useState(defaultOpen); + const open = openProp ?? _open; + const setOpen = React.useCallback( + (value: boolean | ((value: boolean) => boolean)) => { + const openState = typeof value === 'function' ? value(open) : value; + if (setOpenProp) { + setOpenProp(openState); + } else { + _setOpen(openState); + } + + // This sets the cookie to keep the sidebar state. + document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`; + }, + [setOpenProp, open], + ); + + // Helper to toggle the sidebar. + const toggleSidebar = React.useCallback(() => { + return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open); + }, [isMobile, setOpen, setOpenMobile]); + + // Adds a keyboard shortcut to toggle the sidebar. + React.useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if ( + event.key === SIDEBAR_KEYBOARD_SHORTCUT && + (event.metaKey || event.ctrlKey) + ) { + event.preventDefault(); + toggleSidebar(); + } + }; + + window.addEventListener('keydown', handleKeyDown); + return () => window.removeEventListener('keydown', handleKeyDown); + }, [toggleSidebar]); + + // We add a state so that we can do data-state="expanded" or "collapsed". + // This makes it easier to style the sidebar with Tailwind classes. + const state = open ? 'expanded' : 'collapsed'; + + const contextValue = React.useMemo( + () => ({ + state, + open, + setOpen, + isMobile, + openMobile, + setOpenMobile, + toggleSidebar, + }), + [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar], + ); + + return ( + + +
+ {children} +
+
+
+ ); +} + +function Sidebar({ + side = 'left', + variant = 'sidebar', + collapsible = 'offcanvas', + className, + children, + ...props +}: React.ComponentProps<'div'> & { + side?: 'left' | 'right'; + variant?: 'sidebar' | 'floating' | 'inset'; + collapsible?: 'offcanvas' | 'icon' | 'none'; +}) { + const { isMobile, state, openMobile, setOpenMobile } = useSidebar(); + + if (collapsible === 'none') { + return ( +
+ {children} +
+ ); + } + + if (isMobile) { + return ( + + + + Sidebar + Displays the mobile sidebar. + +
{children}
+
+
+ ); + } + + return ( +
+ {/* This is what handles the sidebar gap on desktop */} +
+ +
+ ); +} + +function SidebarTrigger({ + className, + onClick, + ...props +}: React.ComponentProps) { + const { toggleSidebar } = useSidebar(); + + return ( + + ); +} + +function SidebarRail({ className, ...props }: React.ComponentProps<'button'>) { + const { toggleSidebar } = useSidebar(); + + return ( + + +
+
+ {formState.errors.root?.message && ( +

{formState.errors.root?.message}

+ )} +
+ + ); +} + +function RegisterFormElement({ + setIsSignUp, + formRef, +}: { + setIsSignUp: (value: boolean | ((prev: boolean) => boolean)) => void; + formRef?: React.RefObject; +}) { + const { handleSubmit, formState, register, setError } = + useZodForm(registerSchema); + + const onSubmit = handleSubmit(async (data) => { + try { + const { error } = await registerAction(data); + + if (error) { + setError('root', { + message: error, + }); + return; + } else { + formRef?.current?.reset(); + setIsSignUp(false); + // TODO: Show registration success message (reminder to verify email) + return; + } + } catch (error: unknown) { + if (error instanceof Error) + setError('root', { + message: error?.message, + }); + else + setError('root', { + message: 'An unknown error occurred.', + }); + } + }); + + return ( +
+ + + + + + +
+ + +
+
+ {formState.errors.root?.message && ( +

{formState.errors.root?.message}

+ )} +
+ + ); +} + +export default function LoginForm() { + const [isSignUp, setIsSignUp] = useState(false); + + const formRef = useRef(null); + + if (isSignUp) { + return ; + } + return ; +} diff --git a/src/components/icon-button.cy.tsx b/src/components/icon-button.cy.tsx deleted file mode 100644 index b5a1ff0..0000000 --- a/src/components/icon-button.cy.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-expressions */ -import React from 'react'; -import { IconButton } from './icon-button'; -import { faOpenid } from '@fortawesome/free-brands-svg-icons'; - -describe('', () => { - it('renders', () => { - cy.mount(Button); - }); - - it('is clickable', () => { - const onClick = cy.stub(); - cy.mount( - - Button - , - ); - cy.getBySel('icon-button') - .click() - .then(() => { - expect(onClick).to.be.calledOnce; - }); - }); -}); diff --git a/src/components/misc/header.tsx b/src/components/misc/header.tsx new file mode 100644 index 0000000..ed53953 --- /dev/null +++ b/src/components/misc/header.tsx @@ -0,0 +1,51 @@ +import { SidebarTrigger } from '@/components/custom-ui/sidebar'; +import { ThemePicker } from '@/components/misc/theme-picker'; +import { NotificationButton } from '@/components/buttons/notification-button'; + +import { BellRing, Inbox } from 'lucide-react'; +import UserDropdown from '@/components/misc/user-dropdown'; + +const items = [ + { + title: 'Calendar', + url: '#', + icon: Inbox, + }, + { + title: 'Friends', + url: '#', + icon: BellRing, + }, +]; + +export default function Header({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( +
+
+ + + + Search + + + {items.map((item) => ( + + + + ))} + + +
+
{children}
+
+ ); +} diff --git a/src/components/misc/logo.tsx b/src/components/misc/logo.tsx new file mode 100644 index 0000000..739fc90 --- /dev/null +++ b/src/components/misc/logo.tsx @@ -0,0 +1,102 @@ +'use client'; + +import React, { useEffect, useState } from 'react'; +import Image, { ImageProps } from 'next/image'; + +import * as logoAssets from '@/assets/logo/logo-export'; +import { useTheme } from 'next-themes'; + +type ColorType = 'colored' | 'monochrome'; +type LogoType = 'combo' | 'primary' | 'secondary' | 'submark'; +type Theme = 'light' | 'dark'; + +interface LogoProps extends Omit { + colorType: ColorType; + logoType: LogoType; + overrideTheme?: Theme; + alt?: string; +} + +const LOGO_BASE_PATH = '/assets/logo/'; +const IMAGE_EXTENSION = 'svg'; + +export default function Logo({ + colorType, + logoType, + overrideTheme, + alt, + className = '', + width, + height, + // onError, + ...imageProps +}: LogoProps) { + const [mounted, setMounted] = useState(false); + let { resolvedTheme: theme } = useTheme() as { + resolvedTheme?: Theme; + }; + + useEffect(() => { + setMounted(true); + }, []); + + if (overrideTheme) { + theme = overrideTheme; + } + + // Prevent rendering until mounted (theme is available) + if (!mounted && !overrideTheme) { + return null; + } + + if (!colorType || !logoType || !theme) { + const errorMessage = + 'Logo: colorType, logoType, and theme props are required.'; + console.error(errorMessage); + return ( +
+ Error: Missing required logo props. Check console. +
+ ); + } + + if (width === undefined || height === undefined) { + console.warn( + `Logo: 'width' and 'height' props are required by next/image for ${logoType} logo. Path: ${LOGO_BASE_PATH}logo_${colorType}_${logoType}_${theme}.${IMAGE_EXTENSION}`, + ); + } + + const colorTypeInFilename = colorType === 'monochrome' ? 'mono' : colorType; + const defaultAltText = `Logo: ${colorType} ${logoType} ${theme}`; + const varName = `logo_${colorTypeInFilename}_${logoType}_${theme}` as const; + + // Match the varName with the Logo-Asset name and store it in "logoVar" + const logoVar = logoAssets[varName]; + + if (!logoVar) { + console.error(`Logo: Could not find logo asset for ${varName}`); + return ( +
+ Error: Logo asset not found. Check console. +
+ ); + } + + return ( + {alt + ); +} diff --git a/src/components/misc/nav-user.tsx b/src/components/misc/nav-user.tsx new file mode 100644 index 0000000..53ab582 --- /dev/null +++ b/src/components/misc/nav-user.tsx @@ -0,0 +1,110 @@ +'use client'; + +import { + BadgeCheck, + Bell, + ChevronsUpDown, + CreditCard, + LogOut, + Sparkles, +} from 'lucide-react'; + +import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import { + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + useSidebar, +} from '@/components/custom-ui/sidebar'; + +export function NavUser({ + user, +}: { + user: { + name: string; + email: string; + avatar: string; + }; +}) { + const { isMobile } = useSidebar(); + + return ( + + + + + + + + CN + +
+ {user.name} + {user.email} +
+ +
+
+ + +
+ + + CN + +
+ {user.name} + {user.email} +
+
+
+ + + + + Upgrade to Pro + + + + + + + Account + + + + Billing + + + + Notifications + + + + + + Log out + +
+
+
+
+ ); +} diff --git a/src/components/misc/notification-dot.tsx b/src/components/misc/notification-dot.tsx new file mode 100644 index 0000000..a918188 --- /dev/null +++ b/src/components/misc/notification-dot.tsx @@ -0,0 +1,35 @@ +import { cn } from '@/lib/utils'; +import { cva, type VariantProps } from 'class-variance-authority'; +import { CircleSmall } from 'lucide-react'; + +const dotVariants = cva('', { + variants: { + variant: { + neutral: 'fill-neutral-900', + active: 'fill-red-600 stroke-red-600', + hidden: 'hidden', + }, + }, + defaultVariants: { + variant: 'hidden', + }, +}); + +function NotificationDot({ + className, + dotVariant, + ...props +}: { + className: string; + dotVariant: VariantProps['variant']; +}) { + return ( + + ); +} + +export type NDot = VariantProps['variant']; +export { NotificationDot, dotVariants }; diff --git a/src/components/user/theme-picker.cy.tsx b/src/components/misc/theme-picker.cy.tsx similarity index 87% rename from src/components/user/theme-picker.cy.tsx rename to src/components/misc/theme-picker.cy.tsx index 23dc01b..8572ad7 100644 --- a/src/components/user/theme-picker.cy.tsx +++ b/src/components/misc/theme-picker.cy.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { ThemePicker } from '@/components/user/theme-picker'; -import { ThemeProvider } from '../theme-provider'; +import { ThemePicker } from '@/components/misc/theme-picker'; +import { ThemeProvider } from '@/components/wrappers/theme-provider'; describe('', () => { it('renders', () => { diff --git a/src/components/user/theme-picker.tsx b/src/components/misc/theme-picker.tsx similarity index 94% rename from src/components/user/theme-picker.tsx rename to src/components/misc/theme-picker.tsx index 3ceca4c..40250d0 100644 --- a/src/components/user/theme-picker.tsx +++ b/src/components/misc/theme-picker.tsx @@ -18,7 +18,7 @@ export function ThemePicker() { return ( - + + + + + + + Settings + + + Logout + + + + ); +} diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 0000000..6a21b65 --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +'use client'; + +import * as React from 'react'; +import * as AvatarPrimitive from '@radix-ui/react-avatar'; + +import { cn } from '@/lib/utils'; + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 657477e..2a25f66 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -5,31 +5,34 @@ import { cva, type VariantProps } from 'class-variance-authority'; import { cn } from '@/lib/utils'; const buttonVariants = cva( - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + "radius-lg inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-button transition-all cursor-pointer disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", { variants: { variant: { - default: - 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', - destructive: - 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', - outline: - 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + primary: + 'bg-primary text-text shadow-xs hover:bg-hover-primary active:bg-active-primary disabled:bg-disabled-primary', secondary: - 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80', - ghost: - 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', - link: 'text-primary underline-offset-4 hover:underline', + 'bg-secondary text-text-alt shadow-xs hover:bg-hover-secondary active:bg-active-secondary disabled:bg-disabled-secondary', + muted: + 'bg-muted text-text shadow-xs hover:bg-hover-muted active:bg-active-muted disabled:bg-disabled-muted', + outline_primary: + 'bg-background border-2 text-text shadow-xs hover:bg-primary border-primary hover:border-background-reversed active:bg-active-primary disabled:bg-disabled-primary', + outline_secondary: + 'bg-background border-2 text-text shadow-xs hover:bg-secondary border-secondary hover:border-background-reversed active:bg-active-secondary disabled:bg-disabled-secondary', + outline_muted: + 'bg-background border-2 text-text shadow-xs hover:bg-muted border-muted hover:border-background-reversed active:bg-active-muted disabled:bg-disabled-muted', + + link: 'text-text underline-offset-4 hover:underline', }, size: { default: 'h-9 px-4 py-2 has-[>svg]:px-3', - sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', - lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + sm: 'h-8 gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 px-6 has-[>svg]:px-4', icon: 'size-9', }, }, defaultVariants: { - variant: 'default', + variant: 'primary', size: 'default', }, }, @@ -50,7 +53,7 @@ function Button({ return ( ); diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 32a06b1..c0894f8 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -7,7 +7,31 @@ function Card({ className, ...props }: React.ComponentProps<'div'>) {
) {
) { + return ; +} + +function CollapsibleTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function CollapsibleContent({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Collapsible, CollapsibleTrigger, CollapsibleContent }; diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx index 7a8804e..8439eca 100644 --- a/src/components/ui/dropdown-menu.tsx +++ b/src/components/ui/dropdown-menu.tsx @@ -42,7 +42,38 @@ function DropdownMenuContent({ data-slot='dropdown-menu-content' sideOffset={sideOffset} className={cn( - 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md', + /* Text */ + 'text-text', + /* Background */ + 'bg-popover', + /* Border */ + 'border rounded-md', + /* Font */ + '', + /* Cursor */ + '', + /* Ring */ + '', + /* Outline */ + '', + /* Shadow */ + 'shadow-md', + /* Opacity */ + '', + /* Scaling */ + 'max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem]', + /* Spacing */ + 'p-1', + /* Alignment */ + 'z-50 origin-(--radix-dropdown-menu-content-transform-origin)', + /* Miscellaneous */ + 'overflow-x-hidden overflow-y-auto', + 'data-[state=open]:animate-in data-[state=closed]:animate-out', + 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', + 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', + 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2', + 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', + /* ////////// */ className, )} {...props} @@ -74,7 +105,38 @@ function DropdownMenuItem({ data-inset={inset} data-variant={variant} className={cn( - "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + /* Text */ + 'text-sm focus:text-text data-[variant=destructive]:text-destructive', + 'data-[variant=destructive]:focus:text-destructive', + 'data-[variant=destructive]:*:[svg]:!text-destructive', + "[&_svg:not([class*='text-'])]:text-muted-foreground", + /* Background */ + 'focus:bg-popover-hover data-[variant=destructive]:focus:bg-destructive/10', + 'dark:data-[variant=destructive]:focus:bg-destructive/20', + /* Border */ + 'rounded-sm', + /* Font */ + '', + /* Cursor */ + 'cursor-default data-[disabled]:pointer-events-none data-[inset]:pl-8', + '[&_svg]:pointer-events-none', + /* Ring */ + '', + /* Outline */ + 'outline-hidden', + /* Shadow */ + '', + /* Opacity */ + 'data-[disabled]:opacity-50', + /* Scaling */ + " [&_svg:not([class*='size-'])]:size-4", + /* Spacing */ + 'gap-2 px-2 py-1.5', + /* Alignment */ + 'relative flex items-center [&_svg]:shrink-0', + /* Miscellaneous */ + 'select-none', + /* ////////// */ className, )} {...props} @@ -92,7 +154,35 @@ function DropdownMenuCheckboxItem({ ) { type={type} data-slot='input' className={cn( - 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', - 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', - 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive', + /* Text */ + 'text-text-input selection:text-text md:text-sm file:text-destructive file:text-sm placeholder:text-text-muted-input', + /* Background */ + 'bg-transparent selection:bg-muted-input file:bg-transparent', + /* Border */ + 'rounded-md border border-input focus-visible:border-ring aria-invalid:border-destructive file:border-0', + /* Font */ + 'file:font-label', + /* Cursor */ + 'disabled:pointer-events-none disabled:cursor-not-allowed', + /* Ring */ + 'focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40', + /* Outline */ + 'outline-none', + /* Shadow */ + 'shadow-md transition-[color,box-shadow] ', + /* Opacity */ + 'disabled:opacity-50 ', + /* Scaling */ + 'h-9 w-full min-w-0 file:h-7', + /* Spacing */ + 'px-3 py-1', + /* Alignment */ + 'flex file:inline-flex', + /* Miscellaneous */ + /* ////////// */ className, )} {...props} diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx index 6bc5f71..16acf98 100644 --- a/src/components/ui/label.tsx +++ b/src/components/ui/label.tsx @@ -13,7 +13,33 @@ function Label({ {children} @@ -107,7 +171,34 @@ function SelectItem({ ) { return ( ) { + return ; +} + +function SheetTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function SheetClose({ + ...props +}: React.ComponentProps) { + return ; +} + +function SheetPortal({ + ...props +}: React.ComponentProps) { + return ; +} + +function SheetOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function SheetContent({ + className, + children, + side = 'right', + ...props +}: React.ComponentProps & { + side?: 'top' | 'right' | 'bottom' | 'left'; +}) { + return ( + + + + {children} + + + Close + + + + ); +} + +function SheetHeader({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function SheetFooter({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function SheetTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function SheetDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + Sheet, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +}; diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 0000000..a9344b2 --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,13 @@ +import { cn } from '@/lib/utils'; + +function Skeleton({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +export { Skeleton }; diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx index 39e25af..69d9256 100644 --- a/src/components/ui/switch.tsx +++ b/src/components/ui/switch.tsx @@ -13,7 +13,33 @@ function Switch({ diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx index 4a9fbd0..76b16c3 100644 --- a/src/components/ui/tabs.tsx +++ b/src/components/ui/tabs.tsx @@ -26,8 +26,34 @@ function TabsList({ @@ -42,7 +68,35 @@ function TabsTrigger({ ) { + return ( + + ); +} + +function Tooltip({ + ...props +}: React.ComponentProps) { + return ( + + + + ); +} + +function TooltipTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function TooltipContent({ + className, + sideOffset = 0, + children, + ...props +}: React.ComponentProps) { + return ( + + + {children} + + + + ); +} + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }; diff --git a/src/components/user/login-form.tsx b/src/components/user/login-form.tsx deleted file mode 100644 index fadf2ea..0000000 --- a/src/components/user/login-form.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { signIn } from '@/auth'; -import LabeledInput from '@/components/labeled-input'; -import { Button } from '@/components/ui/button'; -import { AuthError } from 'next-auth'; -import { redirect } from 'next/navigation'; - -const SIGNIN_ERROR_URL = '/error'; - -export default function LoginForm() { - return ( -
{ - 'use server'; - try { - await signIn('credentials', formData); - } catch (error) { - if (error instanceof AuthError) { - return redirect(`${SIGNIN_ERROR_URL}?error=${error.type}`); - } - throw error; - } - }} - > - - - - - ); -} diff --git a/src/components/user/sso-login-button.tsx b/src/components/user/sso-login-button.tsx deleted file mode 100644 index b333d29..0000000 --- a/src/components/user/sso-login-button.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { signIn } from '@/auth'; -import { Button } from '@/components/ui/button'; -import { Fingerprint } from 'lucide-react'; - -export default function SSOLogin({ - provider, - providerDisplayName, - ...props -}: { - provider: string; - providerDisplayName: string; -} & React.HTMLProps) { - return ( -
{ - 'use server'; - await signIn(provider); - }} - {...props} - > - -
- ); -} diff --git a/src/components/wrappers/query-provider.tsx b/src/components/wrappers/query-provider.tsx new file mode 100644 index 0000000..4d05c6c --- /dev/null +++ b/src/components/wrappers/query-provider.tsx @@ -0,0 +1,12 @@ +'use client'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import * as React from 'react'; + +const queryClient = new QueryClient(); + +export function QueryProvider({ children }: { children: React.ReactNode }) { + return ( + {children} + ); +} diff --git a/src/components/wrappers/sidebar-provider.tsx b/src/components/wrappers/sidebar-provider.tsx new file mode 100644 index 0000000..3c9ff95 --- /dev/null +++ b/src/components/wrappers/sidebar-provider.tsx @@ -0,0 +1,23 @@ +'use client'; + +import React from 'react'; +import { SidebarProvider } from '../custom-ui/sidebar'; + +export default function SidebarProviderWrapper({ + defaultOpen, + children, +}: { + defaultOpen: boolean; + children: React.ReactNode; +}) { + const [open, setOpen] = React.useState(defaultOpen); + return ( + + {children} + + ); +} diff --git a/src/components/theme-provider.tsx b/src/components/wrappers/theme-provider.tsx similarity index 100% rename from src/components/theme-provider.tsx rename to src/components/wrappers/theme-provider.tsx diff --git a/src/hooks/use-mobile.ts b/src/hooks/use-mobile.ts new file mode 100644 index 0000000..821f8ff --- /dev/null +++ b/src/hooks/use-mobile.ts @@ -0,0 +1,21 @@ +import * as React from 'react'; + +const MOBILE_BREAKPOINT = 768; + +export function useIsMobile() { + const [isMobile, setIsMobile] = React.useState( + undefined, + ); + + React.useEffect(() => { + const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`); + const onChange = () => { + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); + }; + mql.addEventListener('change', onChange); + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); + return () => mql.removeEventListener('change', onChange); + }, []); + + return !!isMobile; +} diff --git a/src/lib/apiHelpers.ts b/src/lib/apiHelpers.ts new file mode 100644 index 0000000..7f5c28e --- /dev/null +++ b/src/lib/apiHelpers.ts @@ -0,0 +1,38 @@ +import { NextAuthRequest } from 'next-auth'; +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { NextResponse } from 'next/server'; + +extendZodWithOpenApi(zod); + +export function userAuthenticated(req: NextAuthRequest) { + if (!req.auth || !req.auth.user || !req.auth.user.id) + return { + continue: false, + response: { success: false, message: 'Not authenticated' }, + metadata: { status: 401 }, + } as const; + return { continue: true, user: req.auth.user } as const; +} + +export function returnZodTypeCheckedResponse< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Schema extends zod.ZodType, +>( + expectedType: Schema, + response: zod.input, + metadata?: { status: number }, +): NextResponse { + const result = expectedType.safeParse(response); + if (!result.success) { + return NextResponse.json( + { + success: false, + message: 'Invalid response format', + errors: result.error.issues, + }, + { status: 500 }, + ); + } + return NextResponse.json(result.data, { status: metadata?.status || 200 }); +} diff --git a/src/lib/auth/login.ts b/src/lib/auth/login.ts new file mode 100644 index 0000000..1c03356 --- /dev/null +++ b/src/lib/auth/login.ts @@ -0,0 +1,27 @@ +'use server'; + +import { z } from 'zod/v4'; +import { loginSchema } from './validation'; +import { signIn } from '@/auth'; + +export async function loginAction(data: z.infer) { + try { + await signIn('credentials', { + ...data, + redirect: false, + }); + + return { + error: undefined, + }; + } catch (error: unknown) { + if (error instanceof Error) { + return { + error: error.message.toString(), + }; + } + return { + error: 'An unknown error occurred.', + }; + } +} diff --git a/src/lib/auth/register.ts b/src/lib/auth/register.ts new file mode 100644 index 0000000..0ca8eb3 --- /dev/null +++ b/src/lib/auth/register.ts @@ -0,0 +1,53 @@ +'use server'; + +import type { z } from 'zod/v4'; +import bcrypt from 'bcryptjs'; +import { registerServerSchema } from './validation'; +import { prisma } from '@/prisma'; + +export async function registerAction( + data: z.infer, +) { + try { + const result = await registerServerSchema.safeParseAsync(data); + + if (!result.success) { + return { + error: result.error.issues[0].message, + }; + } + + const { email, password, firstName, lastName, username } = result.data; + + const passwordHash = await bcrypt.hash(password, 10); + + await prisma.$transaction(async (tx) => { + const { id } = await tx.user.create({ + data: { + email, + name: username, + password_hash: passwordHash, + first_name: firstName, + last_name: lastName, + emailVerified: new Date(), // TODO: handle email verification + }, + }); + + await tx.account.create({ + data: { + userId: id, + type: 'credentials', + provider: 'credentials', + providerAccountId: id, + }, + }); + }); + + return {}; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (_error) { + return { + error: 'System error. Please contact support', + }; + } +} diff --git a/src/lib/auth/validation.ts b/src/lib/auth/validation.ts new file mode 100644 index 0000000..50a6b23 --- /dev/null +++ b/src/lib/auth/validation.ts @@ -0,0 +1,53 @@ +import zod from 'zod/v4'; +import { + emailSchema, + firstNameSchema, + lastNameSchema, + newUserEmailServerSchema, + newUserNameServerSchema, + passwordSchema, + userNameSchema, +} from '@/app/api/user/validation'; + +// ---------------------------------------- +// +// Login Validation +// +// ---------------------------------------- +export const loginSchema = zod.object({ + email: emailSchema.or(userNameSchema), + password: zod.string().min(1, 'Password is required'), +}); + +// ---------------------------------------- +// +// Register Validation +// +// ---------------------------------------- +export const registerServerSchema = zod + .object({ + firstName: firstNameSchema, + lastName: lastNameSchema, + email: newUserEmailServerSchema, + password: passwordSchema, + confirmPassword: passwordSchema, + username: newUserNameServerSchema, + }) + .refine((data) => data.password === data.confirmPassword, { + message: 'Passwords do not match', + path: ['confirmPassword'], + }); + +export const registerSchema = zod + .object({ + firstName: firstNameSchema, + lastName: lastNameSchema, + email: emailSchema, + password: passwordSchema, + confirmPassword: passwordSchema, + username: userNameSchema, + }) + .refine((data) => data.password === data.confirmPassword, { + message: 'Passwords do not match', + path: ['confirmPassword'], + }); diff --git a/src/lib/defaultApiResponses.ts b/src/lib/defaultApiResponses.ts new file mode 100644 index 0000000..3e8a314 --- /dev/null +++ b/src/lib/defaultApiResponses.ts @@ -0,0 +1,60 @@ +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; + +export const invalidRequestDataResponse = { + 400: { + description: 'Invalid request data', + content: { + 'application/json': { + schema: ZodErrorResponseSchema, + }, + }, + }, +}; + +export const notAuthenticatedResponse = { + 401: { + description: 'Not authenticated', + content: { + 'application/json': { + schema: ErrorResponseSchema, + example: { + success: false, + message: 'Not authenticated', + }, + }, + }, + }, +}; + +export const userNotFoundResponse = { + 404: { + description: 'User not found', + content: { + 'application/json': { + schema: ErrorResponseSchema, + example: { + success: false, + message: 'User not found', + }, + }, + }, + }, +}; + +export const serverReturnedDataValidationErrorResponse = { + 500: { + description: 'Server returned data validation error', + content: { + 'application/json': { + schema: ZodErrorResponseSchema, + example: { + success: false, + message: 'Server returned data validation error', + }, + }, + }, + }, +}; diff --git a/src/lib/hooks/useZodForm.tsx b/src/lib/hooks/useZodForm.tsx new file mode 100644 index 0000000..13dbf1d --- /dev/null +++ b/src/lib/hooks/useZodForm.tsx @@ -0,0 +1,15 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod/v4'; + +export default function useZodForm< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Schema extends z.ZodType, + Values extends z.infer, +>(schema: Schema, defaultValues?: Values) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return useForm, any, z.output>({ + resolver: zodResolver(schema), + defaultValues, + }); +} diff --git a/src/lib/swagger.ts b/src/lib/swagger.ts new file mode 100644 index 0000000..dc6436e --- /dev/null +++ b/src/lib/swagger.ts @@ -0,0 +1,36 @@ +import { + OpenAPIRegistry, + OpenApiGeneratorV3, +} from '@asteasolutions/zod-to-openapi'; + +export const registry = new OpenAPIRegistry(); + +export const getApiDocs = async () => { + const swaggerFiles = require.context('../app', true, /swagger\.ts$/); + + swaggerFiles + .keys() + .sort((a, b) => b.length - a.length) + .forEach((file) => { + console.log(`Registering Swagger file: ${file}`); + swaggerFiles(file).default?.(registry); + }); + // eslint-disable-next-line @typescript-eslint/no-require-imports + require('@/app/api/validation'); + + try { + const generator = new OpenApiGeneratorV3(registry.definitions); + const spec = generator.generateDocument({ + openapi: '3.0.0', + info: { + version: '1.0.0', + title: 'MeetUP', + description: 'API documentation for MeetUP application', + }, + }); + return spec; + } catch (error) { + console.error('Error generating API docs:', error); + throw new Error('Failed to generate API documentation'); + } +}; diff --git a/src/lib/timezones.ts b/src/lib/timezones.ts new file mode 100644 index 0000000..9382aab --- /dev/null +++ b/src/lib/timezones.ts @@ -0,0 +1,3717 @@ +export const timezoneData = { + ianaVersion: '2025b', + fullVersionId: 'TZDB: 2025b (mapping: $Revision$)', + zones: [ + { + id: 'Africa/Abidjan', + aliases: [ + 'Africa/Accra', + 'Africa/Bamako', + 'Africa/Banjul', + 'Africa/Conakry', + 'Africa/Dakar', + 'Africa/Freetown', + 'Africa/Lome', + 'Africa/Nouakchott', + 'Africa/Ouagadougou', + 'Africa/Timbuktu', + 'Atlantic/Reykjavik', + 'Atlantic/St_Helena', + 'Iceland', + ], + location: { + countryCode: 'CI', + countryName: 'C\u00F4te d\u0027Ivoire', + comment: '', + latitude: 5.316666666666666, + longitude: -4.033333333333333, + }, + }, + { + id: 'Africa/Algiers', + aliases: [], + location: { + countryCode: 'DZ', + countryName: 'Algeria', + comment: '', + latitude: 36.78333333333333, + longitude: 3.05, + }, + }, + { + id: 'Africa/Bissau', + aliases: [], + location: { + countryCode: 'GW', + countryName: 'Guinea-Bissau', + comment: '', + latitude: 11.85, + longitude: -15.583333333333334, + }, + }, + { + id: 'Africa/Cairo', + aliases: ['Egypt'], + location: { + countryCode: 'EG', + countryName: 'Egypt', + comment: '', + latitude: 30.05, + longitude: 31.25, + }, + }, + { + id: 'Africa/Casablanca', + aliases: [], + location: { + countryCode: 'MA', + countryName: 'Morocco', + comment: '', + latitude: 33.65, + longitude: -7.583333333333333, + }, + }, + { + id: 'Africa/Ceuta', + aliases: [], + location: { + countryCode: 'ES', + countryName: 'Spain', + comment: 'Ceuta, Melilla', + latitude: 35.88333333333333, + longitude: -5.316666666666666, + }, + }, + { + id: 'Africa/El_Aaiun', + aliases: [], + location: { + countryCode: 'EH', + countryName: 'Western Sahara', + comment: '', + latitude: 27.15, + longitude: -13.2, + }, + }, + { + id: 'Africa/Johannesburg', + aliases: ['Africa/Maseru', 'Africa/Mbabane'], + location: { + countryCode: 'ZA', + countryName: 'South Africa', + comment: '', + latitude: -26.25, + longitude: 28, + }, + }, + { + id: 'Africa/Juba', + aliases: [], + location: { + countryCode: 'SS', + countryName: 'South Sudan', + comment: '', + latitude: 4.85, + longitude: 31.616666666666667, + }, + }, + { + id: 'Africa/Khartoum', + aliases: [], + location: { + countryCode: 'SD', + countryName: 'Sudan', + comment: '', + latitude: 15.6, + longitude: 32.53333333333333, + }, + }, + { + id: 'Africa/Lagos', + aliases: [ + 'Africa/Bangui', + 'Africa/Brazzaville', + 'Africa/Douala', + 'Africa/Kinshasa', + 'Africa/Libreville', + 'Africa/Luanda', + 'Africa/Malabo', + 'Africa/Niamey', + 'Africa/Porto-Novo', + ], + location: { + countryCode: 'NG', + countryName: 'Nigeria', + comment: '', + latitude: 6.45, + longitude: 3.4, + }, + }, + { + id: 'Africa/Maputo', + aliases: [ + 'Africa/Blantyre', + 'Africa/Bujumbura', + 'Africa/Gaborone', + 'Africa/Harare', + 'Africa/Kigali', + 'Africa/Lubumbashi', + 'Africa/Lusaka', + ], + location: { + countryCode: 'MZ', + countryName: 'Mozambique', + comment: '', + latitude: -25.966666666666665, + longitude: 32.583333333333336, + }, + }, + { + id: 'Africa/Monrovia', + aliases: [], + location: { + countryCode: 'LR', + countryName: 'Liberia', + comment: '', + latitude: 6.3, + longitude: -10.783333333333333, + }, + }, + { + id: 'Africa/Nairobi', + aliases: [ + 'Africa/Addis_Ababa', + 'Africa/Asmara', + 'Africa/Asmera', + 'Africa/Dar_es_Salaam', + 'Africa/Djibouti', + 'Africa/Kampala', + 'Africa/Mogadishu', + 'Indian/Antananarivo', + 'Indian/Comoro', + 'Indian/Mayotte', + ], + location: { + countryCode: 'KE', + countryName: 'Kenya', + comment: '', + latitude: -1.2833333333333334, + longitude: 36.81666666666667, + }, + }, + { + id: 'Africa/Ndjamena', + aliases: [], + location: { + countryCode: 'TD', + countryName: 'Chad', + comment: '', + latitude: 12.116666666666667, + longitude: 15.05, + }, + }, + { + id: 'Africa/Sao_Tome', + aliases: [], + location: { + countryCode: 'ST', + countryName: 'Sao Tome \u0026 Principe', + comment: '', + latitude: 0.3333333333333333, + longitude: 6.733333333333333, + }, + }, + { + id: 'Africa/Tripoli', + aliases: ['Libya'], + location: { + countryCode: 'LY', + countryName: 'Libya', + comment: '', + latitude: 32.9, + longitude: 13.183333333333334, + }, + }, + { + id: 'Africa/Tunis', + aliases: [], + location: { + countryCode: 'TN', + countryName: 'Tunisia', + comment: '', + latitude: 36.8, + longitude: 10.183333333333334, + }, + }, + { + id: 'Africa/Windhoek', + aliases: [], + location: { + countryCode: 'NA', + countryName: 'Namibia', + comment: '', + latitude: -22.566666666666666, + longitude: 17.1, + }, + }, + { + id: 'America/Adak', + aliases: ['America/Atka', 'US/Aleutian'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - western Aleutians', + latitude: 51.88, + longitude: -176.65805555555556, + }, + }, + { + id: 'America/Anchorage', + aliases: ['US/Alaska'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska (most areas)', + latitude: 61.21805555555556, + longitude: -149.90027777777777, + }, + }, + { + id: 'America/Araguaina', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Tocantins', + latitude: -7.2, + longitude: -48.2, + }, + }, + { + id: 'America/Argentina/Buenos_Aires', + aliases: ['America/Buenos_Aires'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Buenos Aires (BA, CF)', + latitude: -34.6, + longitude: -58.45, + }, + }, + { + id: 'America/Argentina/Catamarca', + aliases: ['America/Argentina/ComodRivadavia', 'America/Catamarca'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Catamarca (CT), Chubut (CH)', + latitude: -28.466666666666665, + longitude: -65.78333333333333, + }, + }, + { + id: 'America/Argentina/Cordoba', + aliases: ['America/Cordoba', 'America/Rosario'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)', + latitude: -31.4, + longitude: -64.18333333333334, + }, + }, + { + id: 'America/Argentina/Jujuy', + aliases: ['America/Jujuy'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Jujuy (JY)', + latitude: -24.183333333333334, + longitude: -65.3, + }, + }, + { + id: 'America/Argentina/La_Rioja', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'La Rioja (LR)', + latitude: -29.433333333333334, + longitude: -66.85, + }, + }, + { + id: 'America/Argentina/Mendoza', + aliases: ['America/Mendoza'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Mendoza (MZ)', + latitude: -32.88333333333333, + longitude: -68.81666666666666, + }, + }, + { + id: 'America/Argentina/Rio_Gallegos', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Santa Cruz (SC)', + latitude: -51.63333333333333, + longitude: -69.21666666666667, + }, + }, + { + id: 'America/Argentina/Salta', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Salta (SA, LP, NQ, RN)', + latitude: -24.783333333333335, + longitude: -65.41666666666667, + }, + }, + { + id: 'America/Argentina/San_Juan', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'San Juan (SJ)', + latitude: -31.533333333333335, + longitude: -68.51666666666667, + }, + }, + { + id: 'America/Argentina/San_Luis', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'San Luis (SL)', + latitude: -33.31666666666667, + longitude: -66.35, + }, + }, + { + id: 'America/Argentina/Tucuman', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Tucuman (TM)', + latitude: -26.816666666666666, + longitude: -65.21666666666667, + }, + }, + { + id: 'America/Argentina/Ushuaia', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Tierra del Fuego (TF)', + latitude: -54.8, + longitude: -68.3, + }, + }, + { + id: 'America/Asuncion', + aliases: [], + location: { + countryCode: 'PY', + countryName: 'Paraguay', + comment: '', + latitude: -25.266666666666666, + longitude: -57.666666666666664, + }, + }, + { + id: 'America/Bahia', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Bahia', + latitude: -12.983333333333333, + longitude: -38.516666666666666, + }, + }, + { + id: 'America/Bahia_Banderas', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Bahia de Banderas', + latitude: 20.8, + longitude: -105.25, + }, + }, + { + id: 'America/Barbados', + aliases: [], + location: { + countryCode: 'BB', + countryName: 'Barbados', + comment: '', + latitude: 13.1, + longitude: -59.61666666666667, + }, + }, + { + id: 'America/Belem', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Para (east), Amapa', + latitude: -1.45, + longitude: -48.483333333333334, + }, + }, + { + id: 'America/Belize', + aliases: [], + location: { + countryCode: 'BZ', + countryName: 'Belize', + comment: '', + latitude: 17.5, + longitude: -88.2, + }, + }, + { + id: 'America/Boa_Vista', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Roraima', + latitude: 2.816666666666667, + longitude: -60.666666666666664, + }, + }, + { + id: 'America/Bogota', + aliases: [], + location: { + countryCode: 'CO', + countryName: 'Colombia', + comment: '', + latitude: 4.6, + longitude: -74.08333333333333, + }, + }, + { + id: 'America/Boise', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Mountain - ID (south), OR (east)', + latitude: 43.61361111111111, + longitude: -116.2025, + }, + }, + { + id: 'America/Cambridge_Bay', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Mountain - NU (west)', + latitude: 69.1138888888889, + longitude: -105.05277777777778, + }, + }, + { + id: 'America/Campo_Grande', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Mato Grosso do Sul', + latitude: -20.45, + longitude: -54.61666666666667, + }, + }, + { + id: 'America/Cancun', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Quintana Roo', + latitude: 21.083333333333332, + longitude: -86.76666666666667, + }, + }, + { + id: 'America/Caracas', + aliases: [], + location: { + countryCode: 'VE', + countryName: 'Venezuela', + comment: '', + latitude: 10.5, + longitude: -66.93333333333334, + }, + }, + { + id: 'America/Cayenne', + aliases: [], + location: { + countryCode: 'GF', + countryName: 'French Guiana', + comment: '', + latitude: 4.933333333333334, + longitude: -52.333333333333336, + }, + }, + { + id: 'America/Chicago', + aliases: ['CST6CDT', 'US/Central'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central (most areas)', + latitude: 41.85, + longitude: -87.65, + }, + }, + { + id: 'America/Chihuahua', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Chihuahua (most areas)', + latitude: 28.633333333333333, + longitude: -106.08333333333333, + }, + }, + { + id: 'America/Ciudad_Juarez', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Chihuahua (US border - west)', + latitude: 31.733333333333334, + longitude: -106.48333333333333, + }, + }, + { + id: 'America/Costa_Rica', + aliases: [], + location: { + countryCode: 'CR', + countryName: 'Costa Rica', + comment: '', + latitude: 9.933333333333334, + longitude: -84.08333333333333, + }, + }, + { + id: 'America/Coyhaique', + aliases: [], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'Aysen Region', + latitude: -45.56666666666667, + longitude: -72.06666666666666, + }, + }, + { + id: 'America/Cuiaba', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Mato Grosso', + latitude: -15.583333333333334, + longitude: -56.083333333333336, + }, + }, + { + id: 'America/Danmarkshavn', + aliases: [], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'National Park (east coast)', + latitude: 76.76666666666667, + longitude: -18.666666666666668, + }, + }, + { + id: 'America/Dawson', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - Yukon (west)', + latitude: 64.06666666666666, + longitude: -139.41666666666666, + }, + }, + { + id: 'America/Dawson_Creek', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - BC (Dawson Cr, Ft St John)', + latitude: 55.766666666666666, + longitude: -120.23333333333333, + }, + }, + { + id: 'America/Denver', + aliases: ['America/Shiprock', 'MST7MDT', 'Navajo', 'US/Mountain'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Mountain (most areas)', + latitude: 39.73916666666667, + longitude: -104.98416666666667, + }, + }, + { + id: 'America/Detroit', + aliases: ['US/Michigan'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - MI (most areas)', + latitude: 42.33138888888889, + longitude: -83.04583333333333, + }, + }, + { + id: 'America/Edmonton', + aliases: ['America/Yellowknife', 'Canada/Mountain'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Mountain - AB, BC(E), NT(E), SK(W)', + latitude: 53.55, + longitude: -113.46666666666667, + }, + }, + { + id: 'America/Eirunepe', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Amazonas (west)', + latitude: -6.666666666666667, + longitude: -69.86666666666666, + }, + }, + { + id: 'America/El_Salvador', + aliases: [], + location: { + countryCode: 'SV', + countryName: 'El Salvador', + comment: '', + latitude: 13.7, + longitude: -89.2, + }, + }, + { + id: 'America/Fort_Nelson', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - BC (Ft Nelson)', + latitude: 58.8, + longitude: -122.7, + }, + }, + { + id: 'America/Fortaleza', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Brazil (northeast: MA, PI, CE, RN, PB)', + latitude: -3.716666666666667, + longitude: -38.5, + }, + }, + { + id: 'America/Glace_Bay', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - NS (Cape Breton)', + latitude: 46.2, + longitude: -59.95, + }, + }, + { + id: 'America/Goose_Bay', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - Labrador (most areas)', + latitude: 53.333333333333336, + longitude: -60.416666666666664, + }, + }, + { + id: 'America/Grand_Turk', + aliases: [], + location: { + countryCode: 'TC', + countryName: 'Turks \u0026 Caicos Is', + comment: '', + latitude: 21.466666666666665, + longitude: -71.13333333333334, + }, + }, + { + id: 'America/Guatemala', + aliases: [], + location: { + countryCode: 'GT', + countryName: 'Guatemala', + comment: '', + latitude: 14.633333333333333, + longitude: -90.51666666666667, + }, + }, + { + id: 'America/Guayaquil', + aliases: [], + location: { + countryCode: 'EC', + countryName: 'Ecuador', + comment: 'Ecuador (mainland)', + latitude: -2.1666666666666665, + longitude: -79.83333333333333, + }, + }, + { + id: 'America/Guyana', + aliases: [], + location: { + countryCode: 'GY', + countryName: 'Guyana', + comment: '', + latitude: 6.8, + longitude: -58.166666666666664, + }, + }, + { + id: 'America/Halifax', + aliases: ['Canada/Atlantic'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - NS (most areas), PE', + latitude: 44.65, + longitude: -63.6, + }, + }, + { + id: 'America/Havana', + aliases: ['Cuba'], + location: { + countryCode: 'CU', + countryName: 'Cuba', + comment: '', + latitude: 23.133333333333333, + longitude: -82.36666666666666, + }, + }, + { + id: 'America/Hermosillo', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Sonora', + latitude: 29.066666666666666, + longitude: -110.96666666666667, + }, + }, + { + id: 'America/Indiana/Indianapolis', + aliases: [ + 'America/Fort_Wayne', + 'America/Indianapolis', + 'US/East-Indiana', + ], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (most areas)', + latitude: 39.76833333333333, + longitude: -86.15805555555555, + }, + }, + { + id: 'America/Indiana/Knox', + aliases: ['America/Knox_IN', 'US/Indiana-Starke'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - IN (Starke)', + latitude: 41.295833333333334, + longitude: -86.625, + }, + }, + { + id: 'America/Indiana/Marengo', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Crawford)', + latitude: 38.37555555555556, + longitude: -86.34472222222222, + }, + }, + { + id: 'America/Indiana/Petersburg', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Pike)', + latitude: 38.49194444444444, + longitude: -87.2786111111111, + }, + }, + { + id: 'America/Indiana/Tell_City', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - IN (Perry)', + latitude: 37.95305555555556, + longitude: -86.76138888888889, + }, + }, + { + id: 'America/Indiana/Vevay', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Switzerland)', + latitude: 38.74777777777778, + longitude: -85.06722222222223, + }, + }, + { + id: 'America/Indiana/Vincennes', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Da, Du, K, Mn)', + latitude: 38.67722222222222, + longitude: -87.5286111111111, + }, + }, + { + id: 'America/Indiana/Winamac', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Pulaski)', + latitude: 41.05138888888889, + longitude: -86.60305555555556, + }, + }, + { + id: 'America/Inuvik', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Mountain - NT (west)', + latitude: 68.34972222222223, + longitude: -133.71666666666667, + }, + }, + { + id: 'America/Iqaluit', + aliases: ['America/Pangnirtung'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Eastern - NU (most areas)', + latitude: 63.733333333333334, + longitude: -68.46666666666667, + }, + }, + { + id: 'America/Jamaica', + aliases: ['Jamaica'], + location: { + countryCode: 'JM', + countryName: 'Jamaica', + comment: '', + latitude: 17.968055555555555, + longitude: -76.79333333333334, + }, + }, + { + id: 'America/Juneau', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Juneau area', + latitude: 58.301944444444445, + longitude: -134.41972222222222, + }, + }, + { + id: 'America/Kentucky/Louisville', + aliases: ['America/Louisville'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - KY (Louisville area)', + latitude: 38.25416666666667, + longitude: -85.75944444444444, + }, + }, + { + id: 'America/Kentucky/Monticello', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - KY (Wayne)', + latitude: 36.82972222222222, + longitude: -84.84916666666666, + }, + }, + { + id: 'America/La_Paz', + aliases: [], + location: { + countryCode: 'BO', + countryName: 'Bolivia', + comment: '', + latitude: -16.5, + longitude: -68.15, + }, + }, + { + id: 'America/Lima', + aliases: [], + location: { + countryCode: 'PE', + countryName: 'Peru', + comment: '', + latitude: -12.05, + longitude: -77.05, + }, + }, + { + id: 'America/Los_Angeles', + aliases: ['PST8PDT', 'US/Pacific'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Pacific', + latitude: 34.05222222222222, + longitude: -118.24277777777777, + }, + }, + { + id: 'America/Maceio', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Alagoas, Sergipe', + latitude: -9.666666666666666, + longitude: -35.71666666666667, + }, + }, + { + id: 'America/Managua', + aliases: [], + location: { + countryCode: 'NI', + countryName: 'Nicaragua', + comment: '', + latitude: 12.15, + longitude: -86.28333333333333, + }, + }, + { + id: 'America/Manaus', + aliases: ['Brazil/West'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Amazonas (east)', + latitude: -3.1333333333333333, + longitude: -60.016666666666666, + }, + }, + { + id: 'America/Martinique', + aliases: [], + location: { + countryCode: 'MQ', + countryName: 'Martinique', + comment: '', + latitude: 14.6, + longitude: -61.083333333333336, + }, + }, + { + id: 'America/Matamoros', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Coahuila, Nuevo Leon, Tamaulipas (US border)', + latitude: 25.833333333333332, + longitude: -97.5, + }, + }, + { + id: 'America/Mazatlan', + aliases: ['Mexico/BajaSur'], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Baja California Sur, Nayarit (most areas), Sinaloa', + latitude: 23.216666666666665, + longitude: -106.41666666666667, + }, + }, + { + id: 'America/Menominee', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - MI (Wisconsin border)', + latitude: 45.10777777777778, + longitude: -87.61416666666666, + }, + }, + { + id: 'America/Merida', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Campeche, Yucatan', + latitude: 20.966666666666665, + longitude: -89.61666666666666, + }, + }, + { + id: 'America/Metlakatla', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Annette Island', + latitude: 55.12694444444445, + longitude: -131.57638888888889, + }, + }, + { + id: 'America/Mexico_City', + aliases: ['Mexico/General'], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Central Mexico', + latitude: 19.4, + longitude: -99.15, + }, + }, + { + id: 'America/Miquelon', + aliases: [], + location: { + countryCode: 'PM', + countryName: 'St Pierre \u0026 Miquelon', + comment: '', + latitude: 47.05, + longitude: -56.333333333333336, + }, + }, + { + id: 'America/Moncton', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - New Brunswick', + latitude: 46.1, + longitude: -64.78333333333333, + }, + }, + { + id: 'America/Monterrey', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)', + latitude: 25.666666666666668, + longitude: -100.31666666666666, + }, + }, + { + id: 'America/Montevideo', + aliases: [], + location: { + countryCode: 'UY', + countryName: 'Uruguay', + comment: '', + latitude: -34.909166666666664, + longitude: -56.2125, + }, + }, + { + id: 'America/New_York', + aliases: ['EST5EDT', 'US/Eastern'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern (most areas)', + latitude: 40.714166666666664, + longitude: -74.00638888888889, + }, + }, + { + id: 'America/Nome', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska (west)', + latitude: 64.50111111111111, + longitude: -165.4063888888889, + }, + }, + { + id: 'America/Noronha', + aliases: ['Brazil/DeNoronha'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Atlantic islands', + latitude: -3.85, + longitude: -32.416666666666664, + }, + }, + { + id: 'America/North_Dakota/Beulah', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - ND (Mercer)', + latitude: 47.26416666666667, + longitude: -101.77777777777777, + }, + }, + { + id: 'America/North_Dakota/Center', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - ND (Oliver)', + latitude: 47.11638888888889, + longitude: -101.29916666666666, + }, + }, + { + id: 'America/North_Dakota/New_Salem', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - ND (Morton rural)', + latitude: 46.845, + longitude: -101.41083333333333, + }, + }, + { + id: 'America/Nuuk', + aliases: ['America/Godthab'], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'most of Greenland', + latitude: 64.18333333333334, + longitude: -51.733333333333334, + }, + }, + { + id: 'America/Ojinaga', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Chihuahua (US border - east)', + latitude: 29.566666666666666, + longitude: -104.41666666666667, + }, + }, + { + id: 'America/Panama', + aliases: [ + 'America/Atikokan', + 'America/Cayman', + 'America/Coral_Harbour', + 'EST', + ], + location: { + countryCode: 'PA', + countryName: 'Panama', + comment: '', + latitude: 8.966666666666667, + longitude: -79.53333333333333, + }, + }, + { + id: 'America/Paramaribo', + aliases: [], + location: { + countryCode: 'SR', + countryName: 'Suriname', + comment: '', + latitude: 5.833333333333333, + longitude: -55.166666666666664, + }, + }, + { + id: 'America/Phoenix', + aliases: ['America/Creston', 'MST', 'US/Arizona'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'MST - AZ (except Navajo)', + latitude: 33.44833333333333, + longitude: -112.07333333333334, + }, + }, + { + id: 'America/Port-au-Prince', + aliases: [], + location: { + countryCode: 'HT', + countryName: 'Haiti', + comment: '', + latitude: 18.533333333333335, + longitude: -72.33333333333333, + }, + }, + { + id: 'America/Porto_Velho', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Rondonia', + latitude: -8.766666666666667, + longitude: -63.9, + }, + }, + { + id: 'America/Puerto_Rico', + aliases: [ + 'America/Anguilla', + 'America/Antigua', + 'America/Aruba', + 'America/Blanc-Sablon', + 'America/Curacao', + 'America/Dominica', + 'America/Grenada', + 'America/Guadeloupe', + 'America/Kralendijk', + 'America/Lower_Princes', + 'America/Marigot', + 'America/Montserrat', + 'America/Port_of_Spain', + 'America/St_Barthelemy', + 'America/St_Kitts', + 'America/St_Lucia', + 'America/St_Thomas', + 'America/St_Vincent', + 'America/Tortola', + 'America/Virgin', + ], + location: { + countryCode: 'PR', + countryName: 'Puerto Rico', + comment: '', + latitude: 18.468333333333334, + longitude: -66.1061111111111, + }, + }, + { + id: 'America/Punta_Arenas', + aliases: [], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'Magallanes Region', + latitude: -53.15, + longitude: -70.91666666666667, + }, + }, + { + id: 'America/Rankin_Inlet', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Central - NU (central)', + latitude: 62.81666666666667, + longitude: -92.08305555555556, + }, + }, + { + id: 'America/Recife', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Pernambuco', + latitude: -8.05, + longitude: -34.9, + }, + }, + { + id: 'America/Regina', + aliases: ['Canada/Saskatchewan'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'CST - SK (most areas)', + latitude: 50.4, + longitude: -104.65, + }, + }, + { + id: 'America/Resolute', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Central - NU (Resolute)', + latitude: 74.69555555555556, + longitude: -94.82916666666667, + }, + }, + { + id: 'America/Rio_Branco', + aliases: ['America/Porto_Acre', 'Brazil/Acre'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Acre', + latitude: -9.966666666666667, + longitude: -67.8, + }, + }, + { + id: 'America/Santarem', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Para (west)', + latitude: -2.433333333333333, + longitude: -54.86666666666667, + }, + }, + { + id: 'America/Santiago', + aliases: ['Chile/Continental'], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'most of Chile', + latitude: -33.45, + longitude: -70.66666666666667, + }, + }, + { + id: 'America/Santo_Domingo', + aliases: [], + location: { + countryCode: 'DO', + countryName: 'Dominican Republic', + comment: '', + latitude: 18.466666666666665, + longitude: -69.9, + }, + }, + { + id: 'America/Sao_Paulo', + aliases: ['Brazil/East'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)', + latitude: -23.533333333333335, + longitude: -46.61666666666667, + }, + }, + { + id: 'America/Scoresbysund', + aliases: [], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'Scoresbysund/Ittoqqortoormiit', + latitude: 70.48333333333333, + longitude: -21.966666666666665, + }, + }, + { + id: 'America/Sitka', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Sitka area', + latitude: 57.17638888888889, + longitude: -135.30194444444444, + }, + }, + { + id: 'America/St_Johns', + aliases: ['Canada/Newfoundland'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Newfoundland, Labrador (SE)', + latitude: 47.56666666666667, + longitude: -52.71666666666667, + }, + }, + { + id: 'America/Swift_Current', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'CST - SK (midwest)', + latitude: 50.28333333333333, + longitude: -107.83333333333333, + }, + }, + { + id: 'America/Tegucigalpa', + aliases: [], + location: { + countryCode: 'HN', + countryName: 'Honduras', + comment: '', + latitude: 14.1, + longitude: -87.21666666666667, + }, + }, + { + id: 'America/Thule', + aliases: [], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'Thule/Pituffik', + latitude: 76.56666666666666, + longitude: -68.78333333333333, + }, + }, + { + id: 'America/Tijuana', + aliases: ['America/Ensenada', 'America/Santa_Isabel', 'Mexico/BajaNorte'], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Baja California', + latitude: 32.53333333333333, + longitude: -117.01666666666667, + }, + }, + { + id: 'America/Toronto', + aliases: [ + 'America/Montreal', + 'America/Nassau', + 'America/Nipigon', + 'America/Thunder_Bay', + 'Canada/Eastern', + ], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Eastern - ON \u0026 QC (most areas)', + latitude: 43.65, + longitude: -79.38333333333334, + }, + }, + { + id: 'America/Vancouver', + aliases: ['Canada/Pacific'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Pacific - BC (most areas)', + latitude: 49.266666666666666, + longitude: -123.11666666666666, + }, + }, + { + id: 'America/Whitehorse', + aliases: ['Canada/Yukon'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - Yukon (east)', + latitude: 60.71666666666667, + longitude: -135.05, + }, + }, + { + id: 'America/Winnipeg', + aliases: ['America/Rainy_River', 'Canada/Central'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Central - ON (west), Manitoba', + latitude: 49.88333333333333, + longitude: -97.15, + }, + }, + { + id: 'America/Yakutat', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Yakutat', + latitude: 59.54694444444444, + longitude: -139.72722222222222, + }, + }, + { + id: 'Antarctica/Casey', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Casey', + latitude: -66.28333333333333, + longitude: 110.51666666666667, + }, + }, + { + id: 'Antarctica/Davis', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Davis', + latitude: -68.58333333333333, + longitude: 77.96666666666667, + }, + }, + { + id: 'Antarctica/Macquarie', + aliases: [], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Macquarie Island', + latitude: -54.5, + longitude: 158.95, + }, + }, + { + id: 'Antarctica/Mawson', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Mawson', + latitude: -67.6, + longitude: 62.88333333333333, + }, + }, + { + id: 'Antarctica/Palmer', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Palmer', + latitude: -64.8, + longitude: -64.1, + }, + }, + { + id: 'Antarctica/Rothera', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Rothera', + latitude: -67.56666666666666, + longitude: -68.13333333333334, + }, + }, + { + id: 'Antarctica/Troll', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Troll', + latitude: -72.01138888888889, + longitude: 2.535, + }, + }, + { + id: 'Antarctica/Vostok', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Vostok', + latitude: -78.4, + longitude: 106.9, + }, + }, + { + id: 'Asia/Almaty', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'most of Kazakhstan', + latitude: 43.25, + longitude: 76.95, + }, + }, + { + id: 'Asia/Amman', + aliases: [], + location: { + countryCode: 'JO', + countryName: 'Jordan', + comment: '', + latitude: 31.95, + longitude: 35.93333333333333, + }, + }, + { + id: 'Asia/Anadyr', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B09 - Bering Sea', + latitude: 64.75, + longitude: 177.48333333333332, + }, + }, + { + id: 'Asia/Aqtau', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Mangghystau/Mankistau', + latitude: 44.516666666666666, + longitude: 50.266666666666666, + }, + }, + { + id: 'Asia/Aqtobe', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Aqtobe/Aktobe', + latitude: 50.28333333333333, + longitude: 57.166666666666664, + }, + }, + { + id: 'Asia/Ashgabat', + aliases: ['Asia/Ashkhabad'], + location: { + countryCode: 'TM', + countryName: 'Turkmenistan', + comment: '', + latitude: 37.95, + longitude: 58.38333333333333, + }, + }, + { + id: 'Asia/Atyrau', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Atyrau/Atirau/Gur\u0027yev', + latitude: 47.11666666666667, + longitude: 51.93333333333333, + }, + }, + { + id: 'Asia/Baghdad', + aliases: [], + location: { + countryCode: 'IQ', + countryName: 'Iraq', + comment: '', + latitude: 33.35, + longitude: 44.416666666666664, + }, + }, + { + id: 'Asia/Baku', + aliases: [], + location: { + countryCode: 'AZ', + countryName: 'Azerbaijan', + comment: '', + latitude: 40.38333333333333, + longitude: 49.85, + }, + }, + { + id: 'Asia/Bangkok', + aliases: ['Asia/Phnom_Penh', 'Asia/Vientiane', 'Indian/Christmas'], + location: { + countryCode: 'TH', + countryName: 'Thailand', + comment: '', + latitude: 13.75, + longitude: 100.51666666666667, + }, + }, + { + id: 'Asia/Barnaul', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Altai', + latitude: 53.36666666666667, + longitude: 83.75, + }, + }, + { + id: 'Asia/Beirut', + aliases: [], + location: { + countryCode: 'LB', + countryName: 'Lebanon', + comment: '', + latitude: 33.88333333333333, + longitude: 35.5, + }, + }, + { + id: 'Asia/Bishkek', + aliases: [], + location: { + countryCode: 'KG', + countryName: 'Kyrgyzstan', + comment: '', + latitude: 42.9, + longitude: 74.6, + }, + }, + { + id: 'Asia/Chita', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B06 - Zabaykalsky', + latitude: 52.05, + longitude: 113.46666666666667, + }, + }, + { + id: 'Asia/Colombo', + aliases: [], + location: { + countryCode: 'LK', + countryName: 'Sri Lanka', + comment: '', + latitude: 6.933333333333334, + longitude: 79.85, + }, + }, + { + id: 'Asia/Damascus', + aliases: [], + location: { + countryCode: 'SY', + countryName: 'Syria', + comment: '', + latitude: 33.5, + longitude: 36.3, + }, + }, + { + id: 'Asia/Dhaka', + aliases: ['Asia/Dacca'], + location: { + countryCode: 'BD', + countryName: 'Bangladesh', + comment: '', + latitude: 23.716666666666665, + longitude: 90.41666666666667, + }, + }, + { + id: 'Asia/Dili', + aliases: [], + location: { + countryCode: 'TL', + countryName: 'East Timor', + comment: '', + latitude: -8.55, + longitude: 125.58333333333333, + }, + }, + { + id: 'Asia/Dubai', + aliases: ['Asia/Muscat', 'Indian/Mahe', 'Indian/Reunion'], + location: { + countryCode: 'AE', + countryName: 'United Arab Emirates', + comment: '', + latitude: 25.3, + longitude: 55.3, + }, + }, + { + id: 'Asia/Dushanbe', + aliases: [], + location: { + countryCode: 'TJ', + countryName: 'Tajikistan', + comment: '', + latitude: 38.583333333333336, + longitude: 68.8, + }, + }, + { + id: 'Asia/Famagusta', + aliases: [], + location: { + countryCode: 'CY', + countryName: 'Cyprus', + comment: 'Northern Cyprus', + latitude: 35.11666666666667, + longitude: 33.95, + }, + }, + { + id: 'Asia/Gaza', + aliases: [], + location: { + countryCode: 'PS', + countryName: 'Palestine', + comment: 'Gaza Strip', + latitude: 31.5, + longitude: 34.46666666666667, + }, + }, + { + id: 'Asia/Hebron', + aliases: [], + location: { + countryCode: 'PS', + countryName: 'Palestine', + comment: 'West Bank', + latitude: 31.533333333333335, + longitude: 35.095, + }, + }, + { + id: 'Asia/Ho_Chi_Minh', + aliases: ['Asia/Saigon'], + location: { + countryCode: 'VN', + countryName: 'Vietnam', + comment: '', + latitude: 10.75, + longitude: 106.66666666666667, + }, + }, + { + id: 'Asia/Hong_Kong', + aliases: ['Hongkong'], + location: { + countryCode: 'HK', + countryName: 'Hong Kong', + comment: '', + latitude: 22.283333333333335, + longitude: 114.15, + }, + }, + { + id: 'Asia/Hovd', + aliases: [], + location: { + countryCode: 'MN', + countryName: 'Mongolia', + comment: 'Bayan-Olgii, Hovd, Uvs', + latitude: 48.016666666666666, + longitude: 91.65, + }, + }, + { + id: 'Asia/Irkutsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B05 - Irkutsk, Buryatia', + latitude: 52.266666666666666, + longitude: 104.33333333333333, + }, + }, + { + id: 'Asia/Jakarta', + aliases: [], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: 'Java, Sumatra', + latitude: -6.166666666666667, + longitude: 106.8, + }, + }, + { + id: 'Asia/Jayapura', + aliases: [], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: 'New Guinea (West Papua / Irian Jaya), Malukus/Moluccas', + latitude: -2.533333333333333, + longitude: 140.7, + }, + }, + { + id: 'Asia/Jerusalem', + aliases: ['Asia/Tel_Aviv', 'Israel'], + location: { + countryCode: 'IL', + countryName: 'Israel', + comment: '', + latitude: 31.780555555555555, + longitude: 35.22388888888889, + }, + }, + { + id: 'Asia/Kabul', + aliases: [], + location: { + countryCode: 'AF', + countryName: 'Afghanistan', + comment: '', + latitude: 34.516666666666666, + longitude: 69.2, + }, + }, + { + id: 'Asia/Kamchatka', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B09 - Kamchatka', + latitude: 53.016666666666666, + longitude: 158.65, + }, + }, + { + id: 'Asia/Karachi', + aliases: [], + location: { + countryCode: 'PK', + countryName: 'Pakistan', + comment: '', + latitude: 24.866666666666667, + longitude: 67.05, + }, + }, + { + id: 'Asia/Kathmandu', + aliases: ['Asia/Katmandu'], + location: { + countryCode: 'NP', + countryName: 'Nepal', + comment: '', + latitude: 27.716666666666665, + longitude: 85.31666666666666, + }, + }, + { + id: 'Asia/Khandyga', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B06 - Tomponsky, Ust-Maysky', + latitude: 62.65638888888889, + longitude: 135.55388888888888, + }, + }, + { + id: 'Asia/Kolkata', + aliases: ['Asia/Calcutta'], + location: { + countryCode: 'IN', + countryName: 'India', + comment: '', + latitude: 22.533333333333335, + longitude: 88.36666666666666, + }, + }, + { + id: 'Asia/Krasnoyarsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Krasnoyarsk area', + latitude: 56.016666666666666, + longitude: 92.83333333333333, + }, + }, + { + id: 'Asia/Kuching', + aliases: ['Asia/Brunei'], + location: { + countryCode: 'MY', + countryName: 'Malaysia', + comment: 'Sabah, Sarawak', + latitude: 1.55, + longitude: 110.33333333333333, + }, + }, + { + id: 'Asia/Macau', + aliases: ['Asia/Macao'], + location: { + countryCode: 'MO', + countryName: 'Macau', + comment: '', + latitude: 22.197222222222223, + longitude: 113.54166666666667, + }, + }, + { + id: 'Asia/Magadan', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B08 - Magadan', + latitude: 59.56666666666667, + longitude: 150.8, + }, + }, + { + id: 'Asia/Makassar', + aliases: ['Asia/Ujung_Pandang'], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: + 'Borneo (east, south), Sulawesi/Celebes, Bali, Nusa Tengarra, Timor (west)', + latitude: -5.116666666666666, + longitude: 119.4, + }, + }, + { + id: 'Asia/Manila', + aliases: [], + location: { + countryCode: 'PH', + countryName: 'Philippines', + comment: '', + latitude: 14.586666666666666, + longitude: 120.96777777777778, + }, + }, + { + id: 'Asia/Nicosia', + aliases: ['Europe/Nicosia'], + location: { + countryCode: 'CY', + countryName: 'Cyprus', + comment: 'most of Cyprus', + latitude: 35.166666666666664, + longitude: 33.36666666666667, + }, + }, + { + id: 'Asia/Novokuznetsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Kemerovo', + latitude: 53.75, + longitude: 87.11666666666666, + }, + }, + { + id: 'Asia/Novosibirsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Novosibirsk', + latitude: 55.03333333333333, + longitude: 82.91666666666667, + }, + }, + { + id: 'Asia/Omsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B03 - Omsk', + latitude: 55, + longitude: 73.4, + }, + }, + { + id: 'Asia/Oral', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'West Kazakhstan', + latitude: 51.21666666666667, + longitude: 51.35, + }, + }, + { + id: 'Asia/Pontianak', + aliases: [], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: 'Borneo (west, central)', + latitude: -0.03333333333333333, + longitude: 109.33333333333333, + }, + }, + { + id: 'Asia/Pyongyang', + aliases: [], + location: { + countryCode: 'KP', + countryName: 'Korea (North)', + comment: '', + latitude: 39.016666666666666, + longitude: 125.75, + }, + }, + { + id: 'Asia/Qatar', + aliases: ['Asia/Bahrain'], + location: { + countryCode: 'QA', + countryName: 'Qatar', + comment: '', + latitude: 25.283333333333335, + longitude: 51.53333333333333, + }, + }, + { + id: 'Asia/Qostanay', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Qostanay/Kostanay/Kustanay', + latitude: 53.2, + longitude: 63.61666666666667, + }, + }, + { + id: 'Asia/Qyzylorda', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Qyzylorda/Kyzylorda/Kzyl-Orda', + latitude: 44.8, + longitude: 65.46666666666667, + }, + }, + { + id: 'Asia/Riyadh', + aliases: ['Antarctica/Syowa', 'Asia/Aden', 'Asia/Kuwait'], + location: { + countryCode: 'SA', + countryName: 'Saudi Arabia', + comment: '', + latitude: 24.633333333333333, + longitude: 46.71666666666667, + }, + }, + { + id: 'Asia/Sakhalin', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B08 - Sakhalin Island', + latitude: 46.96666666666667, + longitude: 142.7, + }, + }, + { + id: 'Asia/Samarkand', + aliases: [], + location: { + countryCode: 'UZ', + countryName: 'Uzbekistan', + comment: 'Uzbekistan (west)', + latitude: 39.666666666666664, + longitude: 66.8, + }, + }, + { + id: 'Asia/Seoul', + aliases: ['ROK'], + location: { + countryCode: 'KR', + countryName: 'Korea (South)', + comment: '', + latitude: 37.55, + longitude: 126.96666666666667, + }, + }, + { + id: 'Asia/Shanghai', + aliases: ['Asia/Chongqing', 'Asia/Chungking', 'Asia/Harbin', 'PRC'], + location: { + countryCode: 'CN', + countryName: 'China', + comment: 'Beijing Time', + latitude: 31.233333333333334, + longitude: 121.46666666666667, + }, + }, + { + id: 'Asia/Singapore', + aliases: ['Asia/Kuala_Lumpur', 'Singapore'], + location: { + countryCode: 'SG', + countryName: 'Singapore', + comment: '', + latitude: 1.2833333333333334, + longitude: 103.85, + }, + }, + { + id: 'Asia/Srednekolymsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B08 - Sakha (E), N Kuril Is', + latitude: 67.46666666666667, + longitude: 153.71666666666667, + }, + }, + { + id: 'Asia/Taipei', + aliases: ['ROC'], + location: { + countryCode: 'TW', + countryName: 'Taiwan', + comment: '', + latitude: 25.05, + longitude: 121.5, + }, + }, + { + id: 'Asia/Tashkent', + aliases: [], + location: { + countryCode: 'UZ', + countryName: 'Uzbekistan', + comment: 'Uzbekistan (east)', + latitude: 41.333333333333336, + longitude: 69.3, + }, + }, + { + id: 'Asia/Tbilisi', + aliases: [], + location: { + countryCode: 'GE', + countryName: 'Georgia', + comment: '', + latitude: 41.71666666666667, + longitude: 44.81666666666667, + }, + }, + { + id: 'Asia/Tehran', + aliases: ['Iran'], + location: { + countryCode: 'IR', + countryName: 'Iran', + comment: '', + latitude: 35.666666666666664, + longitude: 51.43333333333333, + }, + }, + { + id: 'Asia/Thimphu', + aliases: ['Asia/Thimbu'], + location: { + countryCode: 'BT', + countryName: 'Bhutan', + comment: '', + latitude: 27.466666666666665, + longitude: 89.65, + }, + }, + { + id: 'Asia/Tokyo', + aliases: ['Japan'], + location: { + countryCode: 'JP', + countryName: 'Japan', + comment: '', + latitude: 35.654444444444444, + longitude: 139.7447222222222, + }, + }, + { + id: 'Asia/Tomsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Tomsk', + latitude: 56.5, + longitude: 84.96666666666667, + }, + }, + { + id: 'Asia/Ulaanbaatar', + aliases: ['Asia/Choibalsan', 'Asia/Ulan_Bator'], + location: { + countryCode: 'MN', + countryName: 'Mongolia', + comment: 'most of Mongolia', + latitude: 47.916666666666664, + longitude: 106.88333333333334, + }, + }, + { + id: 'Asia/Urumqi', + aliases: ['Asia/Kashgar'], + location: { + countryCode: 'CN', + countryName: 'China', + comment: 'Xinjiang Time', + latitude: 43.8, + longitude: 87.58333333333333, + }, + }, + { + id: 'Asia/Ust-Nera', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B07 - Oymyakonsky', + latitude: 64.56027777777778, + longitude: 143.22666666666666, + }, + }, + { + id: 'Asia/Vladivostok', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B07 - Amur River', + latitude: 43.166666666666664, + longitude: 131.93333333333334, + }, + }, + { + id: 'Asia/Yakutsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B06 - Lena River', + latitude: 62, + longitude: 129.66666666666666, + }, + }, + { + id: 'Asia/Yangon', + aliases: ['Asia/Rangoon', 'Indian/Cocos'], + location: { + countryCode: 'MM', + countryName: 'Myanmar (Burma)', + comment: '', + latitude: 16.783333333333335, + longitude: 96.16666666666667, + }, + }, + { + id: 'Asia/Yekaterinburg', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B02 - Urals', + latitude: 56.85, + longitude: 60.6, + }, + }, + { + id: 'Asia/Yerevan', + aliases: [], + location: { + countryCode: 'AM', + countryName: 'Armenia', + comment: '', + latitude: 40.18333333333333, + longitude: 44.5, + }, + }, + { + id: 'Atlantic/Azores', + aliases: [], + location: { + countryCode: 'PT', + countryName: 'Portugal', + comment: 'Azores', + latitude: 37.733333333333334, + longitude: -25.666666666666668, + }, + }, + { + id: 'Atlantic/Bermuda', + aliases: [], + location: { + countryCode: 'BM', + countryName: 'Bermuda', + comment: '', + latitude: 32.28333333333333, + longitude: -64.76666666666667, + }, + }, + { + id: 'Atlantic/Canary', + aliases: [], + location: { + countryCode: 'ES', + countryName: 'Spain', + comment: 'Canary Islands', + latitude: 28.1, + longitude: -15.4, + }, + }, + { + id: 'Atlantic/Cape_Verde', + aliases: [], + location: { + countryCode: 'CV', + countryName: 'Cape Verde', + comment: '', + latitude: 14.916666666666666, + longitude: -23.516666666666666, + }, + }, + { + id: 'Atlantic/Faroe', + aliases: ['Atlantic/Faeroe'], + location: { + countryCode: 'FO', + countryName: 'Faroe Islands', + comment: '', + latitude: 62.016666666666666, + longitude: -6.766666666666667, + }, + }, + { + id: 'Atlantic/Madeira', + aliases: [], + location: { + countryCode: 'PT', + countryName: 'Portugal', + comment: 'Madeira Islands', + latitude: 32.63333333333333, + longitude: -16.9, + }, + }, + { + id: 'Atlantic/South_Georgia', + aliases: [], + location: { + countryCode: 'GS', + countryName: 'South Georgia \u0026 the South Sandwich Islands', + comment: '', + latitude: -54.266666666666666, + longitude: -36.53333333333333, + }, + }, + { + id: 'Atlantic/Stanley', + aliases: [], + location: { + countryCode: 'FK', + countryName: 'Falkland Islands', + comment: '', + latitude: -51.7, + longitude: -57.85, + }, + }, + { + id: 'Australia/Adelaide', + aliases: ['Australia/South'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'South Australia', + latitude: -34.916666666666664, + longitude: 138.58333333333334, + }, + }, + { + id: 'Australia/Brisbane', + aliases: ['Australia/Queensland'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Queensland (most areas)', + latitude: -27.466666666666665, + longitude: 153.03333333333333, + }, + }, + { + id: 'Australia/Broken_Hill', + aliases: ['Australia/Yancowinna'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'New South Wales (Yancowinna)', + latitude: -31.95, + longitude: 141.45, + }, + }, + { + id: 'Australia/Darwin', + aliases: ['Australia/North'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Northern Territory', + latitude: -12.466666666666667, + longitude: 130.83333333333334, + }, + }, + { + id: 'Australia/Eucla', + aliases: [], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Western Australia (Eucla)', + latitude: -31.716666666666665, + longitude: 128.86666666666667, + }, + }, + { + id: 'Australia/Hobart', + aliases: ['Australia/Currie', 'Australia/Tasmania'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Tasmania', + latitude: -42.88333333333333, + longitude: 147.31666666666666, + }, + }, + { + id: 'Australia/Lindeman', + aliases: [], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Queensland (Whitsunday Islands)', + latitude: -20.266666666666666, + longitude: 149, + }, + }, + { + id: 'Australia/Lord_Howe', + aliases: ['Australia/LHI'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Lord Howe Island', + latitude: -31.55, + longitude: 159.08333333333334, + }, + }, + { + id: 'Australia/Melbourne', + aliases: ['Australia/Victoria'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Victoria', + latitude: -37.81666666666667, + longitude: 144.96666666666667, + }, + }, + { + id: 'Australia/Perth', + aliases: ['Australia/West'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Western Australia (most areas)', + latitude: -31.95, + longitude: 115.85, + }, + }, + { + id: 'Australia/Sydney', + aliases: ['Australia/ACT', 'Australia/Canberra', 'Australia/NSW'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'New South Wales (most areas)', + latitude: -33.86666666666667, + longitude: 151.21666666666667, + }, + }, + { + id: 'Etc/GMT', + aliases: [ + 'Etc/GMT\u002B0', + 'Etc/GMT-0', + 'Etc/GMT0', + 'Etc/Greenwich', + 'GMT', + 'GMT\u002B0', + 'GMT-0', + 'GMT0', + 'Greenwich', + ], + location: null, + }, + { + id: 'Etc/GMT-1', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-10', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-11', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-12', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-13', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-14', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-2', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-3', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-4', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-5', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-6', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-7', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-8', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-9', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B1', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B10', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B11', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B12', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B2', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B3', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B4', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B5', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B6', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B7', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B8', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B9', + aliases: [], + location: null, + }, + { + id: 'Etc/UTC', + aliases: [ + 'Etc/UCT', + 'Etc/Universal', + 'Etc/Zulu', + 'UCT', + 'UTC', + 'Universal', + 'Zulu', + ], + location: null, + }, + { + id: 'Europe/Andorra', + aliases: [], + location: { + countryCode: 'AD', + countryName: 'Andorra', + comment: '', + latitude: 42.5, + longitude: 1.5166666666666666, + }, + }, + { + id: 'Europe/Astrakhan', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Astrakhan', + latitude: 46.35, + longitude: 48.05, + }, + }, + { + id: 'Europe/Athens', + aliases: ['EET'], + location: { + countryCode: 'GR', + countryName: 'Greece', + comment: '', + latitude: 37.96666666666667, + longitude: 23.716666666666665, + }, + }, + { + id: 'Europe/Belgrade', + aliases: [ + 'Europe/Ljubljana', + 'Europe/Podgorica', + 'Europe/Sarajevo', + 'Europe/Skopje', + 'Europe/Zagreb', + ], + location: { + countryCode: 'RS', + countryName: 'Serbia', + comment: '', + latitude: 44.833333333333336, + longitude: 20.5, + }, + }, + { + id: 'Europe/Berlin', + aliases: [ + 'Arctic/Longyearbyen', + 'Atlantic/Jan_Mayen', + 'Europe/Copenhagen', + 'Europe/Oslo', + 'Europe/Stockholm', + ], + location: { + countryCode: 'DE', + countryName: 'Germany', + comment: 'most of Germany', + latitude: 52.5, + longitude: 13.366666666666667, + }, + }, + { + id: 'Europe/Brussels', + aliases: ['CET', 'Europe/Amsterdam', 'Europe/Luxembourg', 'MET'], + location: { + countryCode: 'BE', + countryName: 'Belgium', + comment: '', + latitude: 50.833333333333336, + longitude: 4.333333333333333, + }, + }, + { + id: 'Europe/Bucharest', + aliases: [], + location: { + countryCode: 'RO', + countryName: 'Romania', + comment: '', + latitude: 44.43333333333333, + longitude: 26.1, + }, + }, + { + id: 'Europe/Budapest', + aliases: [], + location: { + countryCode: 'HU', + countryName: 'Hungary', + comment: '', + latitude: 47.5, + longitude: 19.083333333333332, + }, + }, + { + id: 'Europe/Chisinau', + aliases: ['Europe/Tiraspol'], + location: { + countryCode: 'MD', + countryName: 'Moldova', + comment: '', + latitude: 47, + longitude: 28.833333333333332, + }, + }, + { + id: 'Europe/Dublin', + aliases: ['Eire'], + location: { + countryCode: 'IE', + countryName: 'Ireland', + comment: '', + latitude: 53.333333333333336, + longitude: -6.25, + }, + }, + { + id: 'Europe/Gibraltar', + aliases: [], + location: { + countryCode: 'GI', + countryName: 'Gibraltar', + comment: '', + latitude: 36.13333333333333, + longitude: -5.35, + }, + }, + { + id: 'Europe/Helsinki', + aliases: ['Europe/Mariehamn'], + location: { + countryCode: 'FI', + countryName: 'Finland', + comment: '', + latitude: 60.166666666666664, + longitude: 24.966666666666665, + }, + }, + { + id: 'Europe/Istanbul', + aliases: ['Asia/Istanbul', 'Turkey'], + location: { + countryCode: 'TR', + countryName: 'Turkey', + comment: '', + latitude: 41.016666666666666, + longitude: 28.966666666666665, + }, + }, + { + id: 'Europe/Kaliningrad', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK-01 - Kaliningrad', + latitude: 54.71666666666667, + longitude: 20.5, + }, + }, + { + id: 'Europe/Kirov', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B00 - Kirov', + latitude: 58.6, + longitude: 49.65, + }, + }, + { + id: 'Europe/Kyiv', + aliases: ['Europe/Kiev', 'Europe/Uzhgorod', 'Europe/Zaporozhye'], + location: { + countryCode: 'UA', + countryName: 'Ukraine', + comment: 'most of Ukraine', + latitude: 50.43333333333333, + longitude: 30.516666666666666, + }, + }, + { + id: 'Europe/Lisbon', + aliases: ['Portugal', 'WET'], + location: { + countryCode: 'PT', + countryName: 'Portugal', + comment: 'Portugal (mainland)', + latitude: 38.71666666666667, + longitude: -9.133333333333333, + }, + }, + { + id: 'Europe/London', + aliases: [ + 'Europe/Belfast', + 'Europe/Guernsey', + 'Europe/Isle_of_Man', + 'Europe/Jersey', + 'GB', + 'GB-Eire', + ], + location: { + countryCode: 'GB', + countryName: 'Britain (UK)', + comment: '', + latitude: 51.50833333333333, + longitude: -0.12527777777777777, + }, + }, + { + id: 'Europe/Madrid', + aliases: [], + location: { + countryCode: 'ES', + countryName: 'Spain', + comment: 'Spain (mainland)', + latitude: 40.4, + longitude: -3.683333333333333, + }, + }, + { + id: 'Europe/Malta', + aliases: [], + location: { + countryCode: 'MT', + countryName: 'Malta', + comment: '', + latitude: 35.9, + longitude: 14.516666666666667, + }, + }, + { + id: 'Europe/Minsk', + aliases: [], + location: { + countryCode: 'BY', + countryName: 'Belarus', + comment: '', + latitude: 53.9, + longitude: 27.566666666666666, + }, + }, + { + id: 'Europe/Moscow', + aliases: ['W-SU'], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B00 - Moscow area', + latitude: 55.755833333333335, + longitude: 37.617777777777775, + }, + }, + { + id: 'Europe/Paris', + aliases: ['Europe/Monaco'], + location: { + countryCode: 'FR', + countryName: 'France', + comment: '', + latitude: 48.86666666666667, + longitude: 2.3333333333333335, + }, + }, + { + id: 'Europe/Prague', + aliases: ['Europe/Bratislava'], + location: { + countryCode: 'CZ', + countryName: 'Czech Republic', + comment: '', + latitude: 50.083333333333336, + longitude: 14.433333333333334, + }, + }, + { + id: 'Europe/Riga', + aliases: [], + location: { + countryCode: 'LV', + countryName: 'Latvia', + comment: '', + latitude: 56.95, + longitude: 24.1, + }, + }, + { + id: 'Europe/Rome', + aliases: ['Europe/San_Marino', 'Europe/Vatican'], + location: { + countryCode: 'IT', + countryName: 'Italy', + comment: '', + latitude: 41.9, + longitude: 12.483333333333333, + }, + }, + { + id: 'Europe/Samara', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Samara, Udmurtia', + latitude: 53.2, + longitude: 50.15, + }, + }, + { + id: 'Europe/Saratov', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Saratov', + latitude: 51.56666666666667, + longitude: 46.03333333333333, + }, + }, + { + id: 'Europe/Simferopol', + aliases: [], + location: { + countryCode: 'UA', + countryName: 'Ukraine', + comment: 'Crimea', + latitude: 44.95, + longitude: 34.1, + }, + }, + { + id: 'Europe/Sofia', + aliases: [], + location: { + countryCode: 'BG', + countryName: 'Bulgaria', + comment: '', + latitude: 42.68333333333333, + longitude: 23.316666666666666, + }, + }, + { + id: 'Europe/Tallinn', + aliases: [], + location: { + countryCode: 'EE', + countryName: 'Estonia', + comment: '', + latitude: 59.416666666666664, + longitude: 24.75, + }, + }, + { + id: 'Europe/Tirane', + aliases: [], + location: { + countryCode: 'AL', + countryName: 'Albania', + comment: '', + latitude: 41.333333333333336, + longitude: 19.833333333333332, + }, + }, + { + id: 'Europe/Ulyanovsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Ulyanovsk', + latitude: 54.333333333333336, + longitude: 48.4, + }, + }, + { + id: 'Europe/Vienna', + aliases: [], + location: { + countryCode: 'AT', + countryName: 'Austria', + comment: '', + latitude: 48.21666666666667, + longitude: 16.333333333333332, + }, + }, + { + id: 'Europe/Vilnius', + aliases: [], + location: { + countryCode: 'LT', + countryName: 'Lithuania', + comment: '', + latitude: 54.68333333333333, + longitude: 25.316666666666666, + }, + }, + { + id: 'Europe/Volgograd', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B00 - Volgograd', + latitude: 48.733333333333334, + longitude: 44.416666666666664, + }, + }, + { + id: 'Europe/Warsaw', + aliases: ['Poland'], + location: { + countryCode: 'PL', + countryName: 'Poland', + comment: '', + latitude: 52.25, + longitude: 21, + }, + }, + { + id: 'Europe/Zurich', + aliases: ['Europe/Busingen', 'Europe/Vaduz'], + location: { + countryCode: 'CH', + countryName: 'Switzerland', + comment: '', + latitude: 47.38333333333333, + longitude: 8.533333333333333, + }, + }, + { + id: 'Indian/Chagos', + aliases: [], + location: { + countryCode: 'IO', + countryName: 'British Indian Ocean Territory', + comment: '', + latitude: -7.333333333333333, + longitude: 72.41666666666667, + }, + }, + { + id: 'Indian/Maldives', + aliases: ['Indian/Kerguelen'], + location: { + countryCode: 'MV', + countryName: 'Maldives', + comment: '', + latitude: 4.166666666666667, + longitude: 73.5, + }, + }, + { + id: 'Indian/Mauritius', + aliases: [], + location: { + countryCode: 'MU', + countryName: 'Mauritius', + comment: '', + latitude: -20.166666666666668, + longitude: 57.5, + }, + }, + { + id: 'Pacific/Apia', + aliases: [], + location: { + countryCode: 'WS', + countryName: 'Samoa (western)', + comment: '', + latitude: -13.833333333333334, + longitude: -171.73333333333332, + }, + }, + { + id: 'Pacific/Auckland', + aliases: ['Antarctica/McMurdo', 'Antarctica/South_Pole', 'NZ'], + location: { + countryCode: 'NZ', + countryName: 'New Zealand', + comment: 'most of New Zealand', + latitude: -36.86666666666667, + longitude: 174.76666666666668, + }, + }, + { + id: 'Pacific/Bougainville', + aliases: [], + location: { + countryCode: 'PG', + countryName: 'Papua New Guinea', + comment: 'Bougainville', + latitude: -6.216666666666667, + longitude: 155.56666666666666, + }, + }, + { + id: 'Pacific/Chatham', + aliases: ['NZ-CHAT'], + location: { + countryCode: 'NZ', + countryName: 'New Zealand', + comment: 'Chatham Islands', + latitude: -43.95, + longitude: -176.55, + }, + }, + { + id: 'Pacific/Easter', + aliases: ['Chile/EasterIsland'], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'Easter Island', + latitude: -27.15, + longitude: -109.43333333333334, + }, + }, + { + id: 'Pacific/Efate', + aliases: [], + location: { + countryCode: 'VU', + countryName: 'Vanuatu', + comment: '', + latitude: -17.666666666666668, + longitude: 168.41666666666666, + }, + }, + { + id: 'Pacific/Fakaofo', + aliases: [], + location: { + countryCode: 'TK', + countryName: 'Tokelau', + comment: '', + latitude: -9.366666666666667, + longitude: -171.23333333333332, + }, + }, + { + id: 'Pacific/Fiji', + aliases: [], + location: { + countryCode: 'FJ', + countryName: 'Fiji', + comment: '', + latitude: -18.133333333333333, + longitude: 178.41666666666666, + }, + }, + { + id: 'Pacific/Galapagos', + aliases: [], + location: { + countryCode: 'EC', + countryName: 'Ecuador', + comment: 'Galapagos Islands', + latitude: -0.9, + longitude: -89.6, + }, + }, + { + id: 'Pacific/Gambier', + aliases: [], + location: { + countryCode: 'PF', + countryName: 'French Polynesia', + comment: 'Gambier Islands', + latitude: -23.133333333333333, + longitude: -134.95, + }, + }, + { + id: 'Pacific/Guadalcanal', + aliases: ['Pacific/Pohnpei', 'Pacific/Ponape'], + location: { + countryCode: 'SB', + countryName: 'Solomon Islands', + comment: '', + latitude: -9.533333333333333, + longitude: 160.2, + }, + }, + { + id: 'Pacific/Guam', + aliases: ['Pacific/Saipan'], + location: { + countryCode: 'GU', + countryName: 'Guam', + comment: '', + latitude: 13.466666666666667, + longitude: 144.75, + }, + }, + { + id: 'Pacific/Honolulu', + aliases: ['HST', 'Pacific/Johnston', 'US/Hawaii'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Hawaii', + latitude: 21.306944444444444, + longitude: -157.85833333333332, + }, + }, + { + id: 'Pacific/Kanton', + aliases: ['Pacific/Enderbury'], + location: { + countryCode: 'KI', + countryName: 'Kiribati', + comment: 'Phoenix Islands', + latitude: -2.783333333333333, + longitude: -171.71666666666667, + }, + }, + { + id: 'Pacific/Kiritimati', + aliases: [], + location: { + countryCode: 'KI', + countryName: 'Kiribati', + comment: 'Line Islands', + latitude: 1.8666666666666667, + longitude: -157.33333333333334, + }, + }, + { + id: 'Pacific/Kosrae', + aliases: [], + location: { + countryCode: 'FM', + countryName: 'Micronesia', + comment: 'Kosrae', + latitude: 5.316666666666666, + longitude: 162.98333333333332, + }, + }, + { + id: 'Pacific/Kwajalein', + aliases: ['Kwajalein'], + location: { + countryCode: 'MH', + countryName: 'Marshall Islands', + comment: 'Kwajalein', + latitude: 9.083333333333334, + longitude: 167.33333333333334, + }, + }, + { + id: 'Pacific/Marquesas', + aliases: [], + location: { + countryCode: 'PF', + countryName: 'French Polynesia', + comment: 'Marquesas Islands', + latitude: -9, + longitude: -139.5, + }, + }, + { + id: 'Pacific/Nauru', + aliases: [], + location: { + countryCode: 'NR', + countryName: 'Nauru', + comment: '', + latitude: -0.5166666666666667, + longitude: 166.91666666666666, + }, + }, + { + id: 'Pacific/Niue', + aliases: [], + location: { + countryCode: 'NU', + countryName: 'Niue', + comment: '', + latitude: -19.016666666666666, + longitude: -169.91666666666666, + }, + }, + { + id: 'Pacific/Norfolk', + aliases: [], + location: { + countryCode: 'NF', + countryName: 'Norfolk Island', + comment: '', + latitude: -29.05, + longitude: 167.96666666666667, + }, + }, + { + id: 'Pacific/Noumea', + aliases: [], + location: { + countryCode: 'NC', + countryName: 'New Caledonia', + comment: '', + latitude: -22.266666666666666, + longitude: 166.45, + }, + }, + { + id: 'Pacific/Pago_Pago', + aliases: ['Pacific/Midway', 'Pacific/Samoa', 'US/Samoa'], + location: { + countryCode: 'AS', + countryName: 'Samoa (American)', + comment: '', + latitude: -14.266666666666667, + longitude: -170.7, + }, + }, + { + id: 'Pacific/Palau', + aliases: [], + location: { + countryCode: 'PW', + countryName: 'Palau', + comment: '', + latitude: 7.333333333333333, + longitude: 134.48333333333332, + }, + }, + { + id: 'Pacific/Pitcairn', + aliases: [], + location: { + countryCode: 'PN', + countryName: 'Pitcairn', + comment: '', + latitude: -25.066666666666666, + longitude: -130.08333333333334, + }, + }, + { + id: 'Pacific/Port_Moresby', + aliases: [ + 'Antarctica/DumontDUrville', + 'Pacific/Chuuk', + 'Pacific/Truk', + 'Pacific/Yap', + ], + location: { + countryCode: 'PG', + countryName: 'Papua New Guinea', + comment: 'most of Papua New Guinea', + latitude: -9.5, + longitude: 147.16666666666666, + }, + }, + { + id: 'Pacific/Rarotonga', + aliases: [], + location: { + countryCode: 'CK', + countryName: 'Cook Islands', + comment: '', + latitude: -21.233333333333334, + longitude: -159.76666666666668, + }, + }, + { + id: 'Pacific/Tahiti', + aliases: [], + location: { + countryCode: 'PF', + countryName: 'French Polynesia', + comment: 'Society Islands', + latitude: -17.533333333333335, + longitude: -149.56666666666666, + }, + }, + { + id: 'Pacific/Tarawa', + aliases: [ + 'Pacific/Funafuti', + 'Pacific/Majuro', + 'Pacific/Wake', + 'Pacific/Wallis', + ], + location: { + countryCode: 'KI', + countryName: 'Kiribati', + comment: 'Gilbert Islands', + latitude: 1.4166666666666667, + longitude: 173, + }, + }, + { + id: 'Pacific/Tongatapu', + aliases: [], + location: { + countryCode: 'TO', + countryName: 'Tonga', + comment: '', + latitude: -21.133333333333333, + longitude: -175.2, + }, + }, + ], +} as const; + +type TimeZoneIds = (typeof timezoneData)['zones'][number]['id']; +type TimeZoneAlias = (typeof timezoneData)['zones'][number]['aliases'][number]; +export type TimeZones = TimeZoneIds | TimeZoneAlias; + +export const timeZoneIds = timezoneData.zones.map( + (zone) => zone.id, +) as TimeZoneIds[]; +export const timeZoneAliases = timezoneData.zones.flatMap( + (zone) => zone.aliases, +) as TimeZoneAlias[]; +export const allTimeZones = [...timeZoneIds, ...timeZoneAliases] as const; diff --git a/src/middleware.ts b/src/middleware.ts index 345d04d..a1ae8e1 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,5 +1,7 @@ export { auth as middleware } from '@/auth'; export const config = { - matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'], + matcher: [ + '/((?!api|_next/static|api-doc|_next/image|site\.webmanifest|web-app-manifest-(?:192x192|512x512)\.png|apple-touch-icon.png|favicon(?:-(?:dark|light))?\.(?:png|svg|ico)|fonts).*)', + ], }; diff --git a/tsconfig.json b/tsconfig.json index 6bd88b8..f74ced0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,7 +21,12 @@ "paths": { "@/*": ["./src/*"] }, - "types": ["node", "cypress"] + "types": ["node", "cypress", "@types/webpack-env"] + }, + "ts-node": { + "compilerOptions": { + "module": "commonjs" + } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] diff --git a/yarn.lock b/yarn.lock index d4dd356..e704d75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,9 +22,71 @@ __metadata: languageName: node linkType: hard -"@auth/core@npm:0.39.1": - version: 0.39.1 - resolution: "@auth/core@npm:0.39.1" +"@apidevtools/json-schema-ref-parser@npm:11.7.2": + version: 11.7.2 + resolution: "@apidevtools/json-schema-ref-parser@npm:11.7.2" + dependencies: + "@jsdevtools/ono": "npm:^7.1.3" + "@types/json-schema": "npm:^7.0.15" + js-yaml: "npm:^4.1.0" + checksum: 10c0/90dd8e60e25ccfe5c7de2453de893d5f5bb7c6cabcce028edf0678a119f0e433f422d730aa14fd718542e80fa7b3acf40923d69dc8e9f6c25603842b76ad2f16 + languageName: node + linkType: hard + +"@apidevtools/openapi-schemas@npm:^2.1.0": + version: 2.1.0 + resolution: "@apidevtools/openapi-schemas@npm:2.1.0" + checksum: 10c0/f4aa0f9df32e474d166c84ef91bceb18fa1c4f44b5593879529154ef340846811ea57dc2921560f157f692262827d28d988dd6e19fb21f00320e9961964176b4 + languageName: node + linkType: hard + +"@apidevtools/swagger-methods@npm:^3.0.2": + version: 3.0.2 + resolution: "@apidevtools/swagger-methods@npm:3.0.2" + checksum: 10c0/8c390e8e50c0be7787ba0ba4c3758488bde7c66c2d995209b4b48c1f8bc988faf393cbb24a4bd1cd2d42ce5167c26538e8adea5c85eb922761b927e4dab9fa1c + languageName: node + linkType: hard + +"@apidevtools/swagger-parser@npm:^10.1.1": + version: 10.1.1 + resolution: "@apidevtools/swagger-parser@npm:10.1.1" + dependencies: + "@apidevtools/json-schema-ref-parser": "npm:11.7.2" + "@apidevtools/openapi-schemas": "npm:^2.1.0" + "@apidevtools/swagger-methods": "npm:^3.0.2" + "@jsdevtools/ono": "npm:^7.1.3" + ajv: "npm:^8.17.1" + ajv-draft-04: "npm:^1.0.0" + call-me-maybe: "npm:^1.0.2" + peerDependencies: + openapi-types: ">=7" + checksum: 10c0/21be668c64311d54579ef06e71b6d5640df032f4cdd959dfde93210f26128cbe3c84eb29ead1895c93af703cd4f2fd7efae31dd316549f1f9d29293c78b0ccd4 + languageName: node + linkType: hard + +"@asteasolutions/zod-to-openapi@npm:^8.0.0-beta.4": + version: 8.0.0-beta.4 + resolution: "@asteasolutions/zod-to-openapi@npm:8.0.0-beta.4" + dependencies: + openapi3-ts: "npm:^4.1.2" + peerDependencies: + zod: ~3.25.1 + checksum: 10c0/596a149bc1c132f640befc1a9c58ca31d651146ea83ee98861cf65bddca3be6dbb324d82179ef45717f49c4e73114e3f86213711671c9065eaf01d594b408ff2 + languageName: node + linkType: hard + +"@asyncapi/specs@npm:^6.8.0": + version: 6.8.1 + resolution: "@asyncapi/specs@npm:6.8.1" + dependencies: + "@types/json-schema": "npm:^7.0.11" + checksum: 10c0/a7bb241a7b3c5c5027a5a9d46ccf6920305d9bc7560112058a040c22c49a1d3725e736ff1742f9bf85a3f922f6d73fe84d1518566744ba8598f36d85f92affc2 + languageName: node + linkType: hard + +"@auth/core@npm:0.40.0": + version: 0.40.0 + resolution: "@auth/core@npm:0.40.0" dependencies: "@panva/hkdf": "npm:^1.2.1" jose: "npm:^6.0.6" @@ -42,18 +104,43 @@ __metadata: optional: true nodemailer: optional: true - checksum: 10c0/ba2703656c266ce42f10a1e5ac90c2bcbc829bff651cc930ad95a4734aafaa249551d0af589a0c970fbd7f7aa6324c329439183bfb46ba1bee3f8cfa90128275 + checksum: 10c0/25cd12f22611eedc21c17dc1908fa9428ae5f0e32eb32c1ab009642276c37099cce58f49ffbb7f8e8d6d6488d5101a24fb9808ec662eee5aca19d520750acaa3 languageName: node linkType: hard "@auth/prisma-adapter@npm:^2.9.1": - version: 2.9.1 - resolution: "@auth/prisma-adapter@npm:2.9.1" + version: 2.10.0 + resolution: "@auth/prisma-adapter@npm:2.10.0" dependencies: - "@auth/core": "npm:0.39.1" + "@auth/core": "npm:0.40.0" peerDependencies: "@prisma/client": ">=2.26.0 || >=3 || >=4 || >=5 || >=6" - checksum: 10c0/615ee7c02f690e35ccac8206607a4345ca6455c322a741ddd4dbd52e7a068ace9e5c46c4d8a50fe471ca2c2fb6a5b4bb9924cbd2e911613f671fe929c33278d4 + checksum: 10c0/f6c95f144958c678e8cbc691b205c937cbc456beab3da035ab3e00d55e91b8b39be6ff8529dbe3c72d0f95365988db09bc5862445f70c2438061dbe69bca34f5 + languageName: node + linkType: hard + +"@babel/runtime-corejs3@npm:^7.20.7, @babel/runtime-corejs3@npm:^7.22.15, @babel/runtime-corejs3@npm:^7.26.10, @babel/runtime-corejs3@npm:^7.27.1": + version: 7.27.6 + resolution: "@babel/runtime-corejs3@npm:7.27.6" + dependencies: + core-js-pure: "npm:^3.30.2" + checksum: 10c0/0ec7725824fdc3dd1e9580c1887ea60088d1cc3ec2fcfad9ccf54909262786b70e74f4b90513718d18f062a918b45add94c4dc243186f1423ed03cacf9935863 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.3.1": + version: 7.27.6 + resolution: "@babel/runtime@npm:7.27.6" + checksum: 10c0/89726be83f356f511dcdb74d3ea4d873a5f0cf0017d4530cb53aa27380c01ca102d573eff8b8b77815e624b1f8c24e7f0311834ad4fb632c90a770fda00bd4c8 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 languageName: node linkType: hard @@ -121,6 +208,181 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/aix-ppc64@npm:0.25.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-arm64@npm:0.25.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-arm@npm:0.25.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-x64@npm:0.25.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/darwin-arm64@npm:0.25.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/darwin-x64@npm:0.25.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/freebsd-arm64@npm:0.25.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/freebsd-x64@npm:0.25.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-arm64@npm:0.25.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-arm@npm:0.25.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-ia32@npm:0.25.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-loong64@npm:0.25.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-mips64el@npm:0.25.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-ppc64@npm:0.25.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-riscv64@npm:0.25.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-s390x@npm:0.25.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-x64@npm:0.25.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/netbsd-arm64@npm:0.25.5" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/netbsd-x64@npm:0.25.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/openbsd-arm64@npm:0.25.5" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/openbsd-x64@npm:0.25.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/sunos-x64@npm:0.25.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-arm64@npm:0.25.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-ia32@npm:0.25.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-x64@npm:0.25.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.7.0": version: 4.7.0 resolution: "@eslint-community/eslint-utils@npm:4.7.0" @@ -139,21 +401,21 @@ __metadata: languageName: node linkType: hard -"@eslint/config-array@npm:^0.20.0": - version: 0.20.0 - resolution: "@eslint/config-array@npm:0.20.0" +"@eslint/config-array@npm:^0.20.1": + version: 0.20.1 + resolution: "@eslint/config-array@npm:0.20.1" dependencies: "@eslint/object-schema": "npm:^2.1.6" debug: "npm:^4.3.1" minimatch: "npm:^3.1.2" - checksum: 10c0/94bc5d0abb96dc5295ff559925242ff75a54eacfb3576677e95917e42f7175e1c4b87bf039aa2a872f949b4852ad9724bf2f7529aaea6b98f28bb3fca7f1d659 + checksum: 10c0/709108c3925d83c2166024646829ab61ba5fa85c6568daefd32508899f46ed8dc36d7153042df6dcc7e58ad543bc93298b646575daecb5eb4e39a43d838dab42 languageName: node linkType: hard "@eslint/config-helpers@npm:^0.2.1": - version: 0.2.2 - resolution: "@eslint/config-helpers@npm:0.2.2" - checksum: 10c0/98f7cefe484bb754674585d9e73cf1414a3ab4fd0783c385465288d13eb1a8d8e7d7b0611259fc52b76b396c11a13517be5036d1f48eeb877f6f0a6b9c4f03ad + version: 0.2.3 + resolution: "@eslint/config-helpers@npm:0.2.3" + checksum: 10c0/8fd36d7f33013628787947c81894807c7498b31eacf6648efa6d7c7a99aac6bf0d59a8a4d14f968ec2aeebefb76a1a7e4fd4cd556a296323d4711b3d7a7cda22 languageName: node linkType: hard @@ -166,6 +428,15 @@ __metadata: languageName: node linkType: hard +"@eslint/core@npm:^0.15.0": + version: 0.15.0 + resolution: "@eslint/core@npm:0.15.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/9882c69acfe29743ce473a619d5248589c6687561afaabe8ec8d7ffed07592db16edcca3af022f33ea92fe5f6cfbe3545ee53e89292579d22a944ebaeddcf72d + languageName: node + linkType: hard + "@eslint/eslintrc@npm:3.3.1, @eslint/eslintrc@npm:^3.3.1": version: 3.3.1 resolution: "@eslint/eslintrc@npm:3.3.1" @@ -183,10 +454,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.27.0": - version: 9.27.0 - resolution: "@eslint/js@npm:9.27.0" - checksum: 10c0/79b219ceda79182732954b52f7a494f49995a9a6419c7ae0316866e324d3706afeb857e1306bb6f35a4caaf176a5174d00228fc93d36781a570d32c587736564 +"@eslint/js@npm:9.29.0": + version: 9.29.0 + resolution: "@eslint/js@npm:9.29.0" + checksum: 10c0/d0ccf37063fa27a3fae9347cb044f84ca10b5a2fa19ffb2b3fedf3b96843ac1ff359ea9f0ab0e80f2f16fda4cb0dc61ea0fed0375090f050fe0a029e7d6de3a3 languageName: node linkType: hard @@ -198,43 +469,50 @@ __metadata: linkType: hard "@eslint/plugin-kit@npm:^0.3.1": - version: 0.3.1 - resolution: "@eslint/plugin-kit@npm:0.3.1" + version: 0.3.2 + resolution: "@eslint/plugin-kit@npm:0.3.2" dependencies: - "@eslint/core": "npm:^0.14.0" + "@eslint/core": "npm:^0.15.0" levn: "npm:^0.4.1" - checksum: 10c0/a75f0b5d38430318a551b83e27bee570747eb50beeb76b03f64b0e78c2c27ef3d284cfda3443134df028db3251719bc0850c105f778122f6ad762d5270ec8063 + checksum: 10c0/e069b0a46eb9fa595a1ac7dea4540a9daa493afba88875ee054e9117609c1c41555e779303cb4cff36cf88f603ba6eba2556a927e8ced77002828206ee17fc7e languageName: node linkType: hard -"@floating-ui/core@npm:^1.7.0": - version: 1.7.0 - resolution: "@floating-ui/core@npm:1.7.0" +"@exodus/schemasafe@npm:^1.0.0-rc.2": + version: 1.3.0 + resolution: "@exodus/schemasafe@npm:1.3.0" + checksum: 10c0/e19397c14db76342154c32a9088536149babfd9b18ecae815add0b2f911d9aa292aa51c6ab33b857b4b6bb371a74ebde845e6f17b2824e73b4e307230f23f86a + languageName: node + linkType: hard + +"@floating-ui/core@npm:^1.7.1": + version: 1.7.1 + resolution: "@floating-ui/core@npm:1.7.1" dependencies: "@floating-ui/utils": "npm:^0.2.9" - checksum: 10c0/f7e66a650ad8c73765edb39a7530d81fa990c08c172f03b6129030234d32bccd4401c29ded9c8a4e4135e9beac349c5608d94962fa08c2a2ae2dab7a6530550c + checksum: 10c0/40df1e1dd8a2bad6f70c1ee163f0e151c456f52b9b98a38488d88720b2be72ccd631501a66f8369f96d2e8ad1c4250936b6fd4243e3a99833f2d008ee6afec18 languageName: node linkType: hard "@floating-ui/dom@npm:^1.0.0": - version: 1.7.0 - resolution: "@floating-ui/dom@npm:1.7.0" + version: 1.7.1 + resolution: "@floating-ui/dom@npm:1.7.1" dependencies: - "@floating-ui/core": "npm:^1.7.0" + "@floating-ui/core": "npm:^1.7.1" "@floating-ui/utils": "npm:^0.2.9" - checksum: 10c0/49a7f0fbef82ba2c2f0bde7bb4812b276ae431b59e6a81427283a55cfb36c0af9cc459cbeb0bb1a5cc3efca1a332f584e123e7b1a8f0a9c94a21989b09b8c060 + checksum: 10c0/33b0e892f4c50ce568169cd58793ff5e3bc1e72ee007237d73b9458d4475e1e5f5a4b3f9e6752422d5f5ac902bc0c135ca7dc0a23c6df187fd9d28dc34cdceed languageName: node linkType: hard "@floating-ui/react-dom@npm:^2.0.0": - version: 2.1.2 - resolution: "@floating-ui/react-dom@npm:2.1.2" + version: 2.1.3 + resolution: "@floating-ui/react-dom@npm:2.1.3" dependencies: "@floating-ui/dom": "npm:^1.0.0" peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 10c0/e855131c74e68cab505f7f44f92cd4e2efab1c125796db3116c54c0859323adae4bf697bf292ee83ac77b9335a41ad67852193d7aeace90aa2e1c4a640cafa60 + checksum: 10c0/e88750ea2fb352264d52d502d3979f94155ce2c8ab9a50862810d0cfc8c8e49cb6bbde466d668736cb38624d089360ef97451397b647408a0eb2c1870234c19a languageName: node linkType: hard @@ -300,6 +578,30 @@ __metadata: languageName: node linkType: hard +"@gerrit0/mini-shiki@npm:^3.2.2": + version: 3.7.0 + resolution: "@gerrit0/mini-shiki@npm:3.7.0" + dependencies: + "@shikijs/engine-oniguruma": "npm:^3.7.0" + "@shikijs/langs": "npm:^3.7.0" + "@shikijs/themes": "npm:^3.7.0" + "@shikijs/types": "npm:^3.7.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + checksum: 10c0/eb3f4900d841338077d839ebbc7f8722b13876a586cff7abc73295e956683724dd3371a9f990900184a2d069461965951b2604d677991badf3474262e7811384 + languageName: node + linkType: hard + +"@hookform/resolvers@npm:^5.0.1": + version: 5.1.1 + resolution: "@hookform/resolvers@npm:5.1.1" + dependencies: + "@standard-schema/utils": "npm:^0.3.0" + peerDependencies: + react-hook-form: ^7.55.0 + checksum: 10c0/74601ba4abb3159bbaa25175af9459a2c0337a28d8c0a5be95c7ae7b0a76ddafcf63c03eea8561fd099fe80b226194ad09e3824c53b9beda38393ff9fd264a03 + languageName: node + linkType: hard + "@humanfs/core@npm:^0.19.1": version: 0.19.1 resolution: "@humanfs/core@npm:0.19.1" @@ -338,6 +640,32 @@ __metadata: languageName: node linkType: hard +"@ibm-cloud/openapi-ruleset-utilities@npm:1.9.0": + version: 1.9.0 + resolution: "@ibm-cloud/openapi-ruleset-utilities@npm:1.9.0" + checksum: 10c0/8a95857406e8ea4c9b6337ce790f0d24207d901db6d070d76fa87e26557c3a5ce833000cca6db598094d8e8cc60263ff39d95b6c505e6195493b3fa6b63bf047 + languageName: node + linkType: hard + +"@ibm-cloud/openapi-ruleset@npm:^1.29.4": + version: 1.31.1 + resolution: "@ibm-cloud/openapi-ruleset@npm:1.31.1" + dependencies: + "@ibm-cloud/openapi-ruleset-utilities": "npm:1.9.0" + "@stoplight/spectral-formats": "npm:^1.8.2" + "@stoplight/spectral-functions": "npm:^1.9.3" + "@stoplight/spectral-rulesets": "npm:^1.21.3" + chalk: "npm:^4.1.2" + jsonschema: "npm:^1.5.0" + lodash: "npm:^4.17.21" + loglevel: "npm:^1.9.2" + loglevel-plugin-prefix: "npm:0.8.4" + minimatch: "npm:^6.2.0" + validator: "npm:^13.11.0" + checksum: 10c0/b81180e87b22a9ecef135fc9d25c7796ebeb0de6fd569164033249a1e96f41191d0c91d453d8692ace54ee3aa8cbe5a3377ec435c727b3b1c8e0740460f16ddf + languageName: node + linkType: hard + "@img/sharp-darwin-arm64@npm:0.34.2": version: 0.34.2 resolution: "@img/sharp-darwin-arm64@npm:0.34.2" @@ -527,6 +855,20 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + "@isaacs/fs-minipass@npm:^4.0.0": version: 4.0.1 resolution: "@isaacs/fs-minipass@npm:4.0.1" @@ -547,7 +889,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.1.0": +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e @@ -568,6 +910,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.24": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -578,85 +930,119 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^0.2.9": - version: 0.2.10 - resolution: "@napi-rs/wasm-runtime@npm:0.2.10" +"@jsdevtools/ono@npm:^7.1.3": + version: 7.1.3 + resolution: "@jsdevtools/ono@npm:7.1.3" + checksum: 10c0/a9f7e3e8e3bc315a34959934a5e2f874c423cf4eae64377d3fc9de0400ed9f36cb5fd5ebce3300d2e8f4085f557c4a8b591427a583729a87841fda46e6c216b9 + languageName: node + linkType: hard + +"@jsep-plugin/assignment@npm:^1.3.0": + version: 1.3.0 + resolution: "@jsep-plugin/assignment@npm:1.3.0" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/d749554dc691798116eb068eebe2d9bcb0b0d89ef6c7cc7c2a9f37d03da15fdbf8053407e97008090cd1bd6f256ea6c26abbada7399cf79f0b6b502e164b084b + languageName: node + linkType: hard + +"@jsep-plugin/regex@npm:^1.0.1, @jsep-plugin/regex@npm:^1.0.4": + version: 1.0.4 + resolution: "@jsep-plugin/regex@npm:1.0.4" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/bec7eb7ea6ab453a2672edc808644c5be3dc06b2a9d77182e18cd595b37deba6dcdb3760849d8684afc5779a86b7d2604dd525cb612a548f9ed9f31a8032ec24 + languageName: node + linkType: hard + +"@jsep-plugin/ternary@npm:^1.0.2": + version: 1.1.4 + resolution: "@jsep-plugin/ternary@npm:1.1.4" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/d50c9eb28d1872e333a5229b66ae6347aa4333a5fac4a8fff86c585a78acff6d8ed2184554b8dc888df70786a272deba530ccfdb216b6abff7f1ab48df3248e7 + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:^0.2.10, @napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.11 + resolution: "@napi-rs/wasm-runtime@npm:0.2.11" dependencies: "@emnapi/core": "npm:^1.4.3" "@emnapi/runtime": "npm:^1.4.3" "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/4dce9bbb94a8969805574e1b55fdbeb7623348190265d77f6507ba32e535610deeb53a33ba0bb8b05a6520f379d418b92e8a01c5cd7b9486b136d2c0c26be0bd + checksum: 10c0/049bd14c58b99fbe0967b95e9921c5503df196b59be22948d2155f17652eb305cff6728efd8685338b855da7e476dd2551fbe3a313fc2d810938f0717478441e languageName: node linkType: hard -"@next/env@npm:15.3.2": - version: 15.3.2 - resolution: "@next/env@npm:15.3.2" - checksum: 10c0/bebc8acbe2fdaadc8cc9ae6dbf4fe1a2e183e1bc417742213ae6d246f8be9416b2af8e703e2faa1792c167245ea1918547c62cf7be88c35429f3494e71e4b429 +"@next/env@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/env@npm:15.4.0-canary.95" + checksum: 10c0/dfa499393a68293517db690e805074ee2da8667188c7508adbd4c94f2966861c91ba5ec7a4a91b75e29e603fdb299d637d80180c87df6910796c3fa376a02f96 languageName: node linkType: hard -"@next/eslint-plugin-next@npm:15.3.2": - version: 15.3.2 - resolution: "@next/eslint-plugin-next@npm:15.3.2" +"@next/eslint-plugin-next@npm:15.3.4": + version: 15.3.4 + resolution: "@next/eslint-plugin-next@npm:15.3.4" dependencies: fast-glob: "npm:3.3.1" - checksum: 10c0/b03e512c275d33f4159522a66d4aa56f60dbf8f2dbfca6db9dcb5ce4c51ab701d8b28d719499d5728913b1ed71f76a93d770797670d04ca525ea318a32aa8fab + checksum: 10c0/17792484ee19550bc04167a212426b7907daaf3920546976a002261779c905fcb75ac05964359d78ffe5e6f5173f85237a1bdb11d6c07e5f3c4d6bf0b8d4bc3f languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-darwin-arm64@npm:15.3.2" +"@next/swc-darwin-arm64@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.95" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-darwin-x64@npm:15.3.2" +"@next/swc-darwin-x64@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.95" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-linux-arm64-gnu@npm:15.3.2" +"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.95" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-linux-arm64-musl@npm:15.3.2" +"@next/swc-linux-arm64-musl@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.95" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-linux-x64-gnu@npm:15.3.2" +"@next/swc-linux-x64-gnu@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.95" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-linux-x64-musl@npm:15.3.2" +"@next/swc-linux-x64-musl@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.95" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-win32-arm64-msvc@npm:15.3.2" +"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.95" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.3.2": - version: 15.3.2 - resolution: "@next/swc-win32-x64-msvc@npm:15.3.2" +"@next/swc-win32-x64-msvc@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.95" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -695,6 +1081,143 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@orval/angular@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/angular@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + checksum: 10c0/9ffd4cd4cede6e112226b1e319fadf48075a1b7b591cdb5f55abb5f0734fa033413faa6fbee4d5daa8761c7c04b8cda099fb3f9d43f1ffad9324ddb6c71dc587 + languageName: node + linkType: hard + +"@orval/axios@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/axios@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + checksum: 10c0/4fc488b2f8d8bace5e6452ba76d37d0aa26e0c751d90969911acbba00b06037fe35f275b0e94a13ee106bff7bf93e0d751c4d25a0638745ce8d8b9e4681730b2 + languageName: node + linkType: hard + +"@orval/core@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/core@npm:7.10.0" + dependencies: + "@apidevtools/swagger-parser": "npm:^10.1.1" + "@ibm-cloud/openapi-ruleset": "npm:^1.29.4" + acorn: "npm:^8.14.1" + ajv: "npm:^8.17.1" + chalk: "npm:^4.1.2" + compare-versions: "npm:^6.1.1" + debug: "npm:^4.4.0" + esbuild: "npm:^0.25.1" + esutils: "npm:2.0.3" + fs-extra: "npm:^11.3.0" + globby: "npm:11.1.0" + lodash.isempty: "npm:^4.4.0" + lodash.uniq: "npm:^4.5.0" + lodash.uniqby: "npm:^4.7.0" + lodash.uniqwith: "npm:^4.5.0" + micromatch: "npm:^4.0.8" + openapi3-ts: "npm:4.4.0" + swagger2openapi: "npm:^7.0.8" + checksum: 10c0/fc0b8bd3b1ea45983460ca776558cc316c0d0d421fc321bae46ae00a8b56ef3caa86b4de9ad4367a03e82cbcb0223e8e45ea8d38624134ee20aee5100aadff36 + languageName: node + linkType: hard + +"@orval/fetch@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/fetch@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + checksum: 10c0/f79b51b6d8944966fc9cfd643c27abdd72d0a2b13a7bff05e59cb58b92d040480c5eb3cb8d727778a6cc87d26cd4f7f3cde85432b9b57d01322fd0330567c879 + languageName: node + linkType: hard + +"@orval/hono@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/hono@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/zod": "npm:7.10.0" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/05997000025d68b9c274e447d4f450b702b145dd37acc234cc31814cb81eab9093470355807f5130bf854311b4cb7dc92c0486bb5f98ad30142480b419144c8a + languageName: node + linkType: hard + +"@orval/mcp@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/mcp@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/zod": "npm:7.10.0" + checksum: 10c0/08b65ef2a7a389e9282e9790eac2b01024e275d460a459a0368858f40ed91a276921d545d486749a4b98f4962e37295f87b26aca0d404578ac595b2bcd68ba52 + languageName: node + linkType: hard + +"@orval/mock@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/mock@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + openapi3-ts: "npm:^4.2.2" + checksum: 10c0/6a6b24aa337a249a0600ccfae6f05ce6aa991e86945459dd203951eba83a2698ef41670058f75760370550b03e387b2a9fce8302ecc0059ca26f7b2660ff9f0b + languageName: node + linkType: hard + +"@orval/query@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/query@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/fetch": "npm:7.10.0" + lodash.omitby: "npm:^4.6.0" + checksum: 10c0/6a343e4f5905cf3f6946e16fef0dc6d0ed30f01a4cde7072f6c717e5495cab8b5d7505486220fcd21c39a8fad195d2c120d5190226d1eaf368d7ea6dd9928292 + languageName: node + linkType: hard + +"@orval/swr@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/swr@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/fetch": "npm:7.10.0" + checksum: 10c0/6beb2c75285897ce931d1ca5b4ac8eb5f285d44252ec30cab70d56b882d6bc7e3d875abb66955fbd4f138bf2e59e0bf597a287cde0119d890cfebffea0d9b369 + languageName: node + linkType: hard + +"@orval/zod@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/zod@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/e2e892b0fb586bd1e4e50ded4d3313c6d4ee760656fd6c089a5e4f2468a265ad92416dfd78eacbc0d32330878dc250b9665d847598ee6bb33f37820daa03fbfd + languageName: node + linkType: hard + "@panva/hkdf@npm:^1.2.1": version: 1.2.1 resolution: "@panva/hkdf@npm:1.2.1" @@ -702,9 +1225,16 @@ __metadata: languageName: node linkType: hard -"@prisma/client@npm:^6.8.2": - version: 6.8.2 - resolution: "@prisma/client@npm:6.8.2" +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@prisma/client@npm:^6.9.0": + version: 6.10.1 + resolution: "@prisma/client@npm:6.10.1" peerDependencies: prisma: "*" typescript: ">=5.1.0" @@ -713,62 +1243,62 @@ __metadata: optional: true typescript: optional: true - checksum: 10c0/5ce12e4a83ece542df80195f6642e24224de8f94c2f2fd26527ca6b3a2573ea9798b5d23eac8518d8f268be19f3856516ad4e08c9bc0a4df4356a5faab879db6 + checksum: 10c0/f6f7b1c43c45d7c73a46b55df17a3c5de2ec30eeb7463fcd9b45e5d67036c5c9059e762aa99a536bc212f8aff836bfd0f674c995ab07a5cb3a92ac56dc82d173 languageName: node linkType: hard -"@prisma/config@npm:6.8.2": - version: 6.8.2 - resolution: "@prisma/config@npm:6.8.2" +"@prisma/config@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/config@npm:6.10.1" dependencies: jiti: "npm:2.4.2" - checksum: 10c0/2d25860c3b88e01fe6e353964d9ae07228003971894f2b5a671c6e126941a551c285b73b64c77c8e3819916a9a952a4366763204c93027b1964263908bbaa09f + checksum: 10c0/49d99474ba086d1141340b8b54f109597cc485e4a35cfab8b43cff35c19fe4f9ffa0d424ef4dbf76a8880c955ecd8a233206d4e7ee436116fc319506b46e46fb languageName: node linkType: hard -"@prisma/debug@npm:6.8.2": - version: 6.8.2 - resolution: "@prisma/debug@npm:6.8.2" - checksum: 10c0/5843db8a502aa379fe6f7e69d887a3bd35a13c379dd09e28ba93e506807eb2190a12c6a339232d0c64f94d064cd54de70365a92a597b62484bfdb1e37c03f85b +"@prisma/debug@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/debug@npm:6.10.1" + checksum: 10c0/a5f76ace213da5ab3180fc179383637df6923363a6a08c5958788ecf4dbade3761b07445bc06f7fa044880221a66b824b105bee3aa19eb155c48f6c3f730051b languageName: node linkType: hard -"@prisma/engines-version@npm:6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e": - version: 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e - resolution: "@prisma/engines-version@npm:6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e" - checksum: 10c0/3ae98f6028a1e7c2bca90d92ae60391d77d0b587f03a84818742c65ae7b4ca71d9ddd4fcff578ed9696c757061dd8ee78262e60a32d7ed804ced3e190c76bc6b +"@prisma/engines-version@npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c": + version: 6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c + resolution: "@prisma/engines-version@npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" + checksum: 10c0/478feafd1bebea1edc1b93c5117c0b3b85c7a4a89bf2f0e7f1b3ab425ed3f3df5a56a6bdda8debf16ba096ef1618399a4912f581e1a543bfbf6ea5e8b6a19cdf languageName: node linkType: hard -"@prisma/engines@npm:6.8.2": - version: 6.8.2 - resolution: "@prisma/engines@npm:6.8.2" +"@prisma/engines@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/engines@npm:6.10.1" dependencies: - "@prisma/debug": "npm:6.8.2" - "@prisma/engines-version": "npm:6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e" - "@prisma/fetch-engine": "npm:6.8.2" - "@prisma/get-platform": "npm:6.8.2" - checksum: 10c0/6eed0481b42d00f20c4c875e6d1cdd5a2ad2c6b48f5d9e5e63ee91b236ebc943194fe47536fee2a2a2b803b238a96d5c003d1e8aacc461c1dbdacf07fe01bc78 + "@prisma/debug": "npm:6.10.1" + "@prisma/engines-version": "npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" + "@prisma/fetch-engine": "npm:6.10.1" + "@prisma/get-platform": "npm:6.10.1" + checksum: 10c0/fa1fe15a46b8f1342919d7c84a64b8b9c2522c408ee33203c7df6c39cf87c1dffdf9b8a9af5a90214ebdfcaf5fd4f640f75f869a1e7eccadcc816065b35aa318 languageName: node linkType: hard -"@prisma/fetch-engine@npm:6.8.2": - version: 6.8.2 - resolution: "@prisma/fetch-engine@npm:6.8.2" +"@prisma/fetch-engine@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/fetch-engine@npm:6.10.1" dependencies: - "@prisma/debug": "npm:6.8.2" - "@prisma/engines-version": "npm:6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e" - "@prisma/get-platform": "npm:6.8.2" - checksum: 10c0/9deb1be77bccd70531a9d1bab7f058655e6c02f4d277d2d23a2ec77e968ba8e252813ccef4e4a33c8ef94724bbbd0fa0fd1548dcf723b1e7ec760f9f599a6804 + "@prisma/debug": "npm:6.10.1" + "@prisma/engines-version": "npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" + "@prisma/get-platform": "npm:6.10.1" + checksum: 10c0/46a47eac79f53ef7a5ff513e237a95c6b2f7509317c49f4df6b4151002a768715eccf7eb6e0bf9ca4c64d5703fc6ba3af33bfb105c9d37decd225a2bab9fc4cf languageName: node linkType: hard -"@prisma/get-platform@npm:6.8.2": - version: 6.8.2 - resolution: "@prisma/get-platform@npm:6.8.2" +"@prisma/get-platform@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/get-platform@npm:6.10.1" dependencies: - "@prisma/debug": "npm:6.8.2" - checksum: 10c0/3bab5b39d03c884bd23b69f7ee9092d060aa60bd737293529bb21282a6abdb690a208af49eb5644b509d402e863f09512a2ccf53bdde8860de8a2825d6f3d122 + "@prisma/debug": "npm:6.10.1" + checksum: 10c0/fbaaad070301a54a08022b7c23ef290007bc7eb94cda8b1ed97aedbd9eaeb20dbf26266e309a5cc155c7636a04e8736eff1554f4a3ffe07013f1f68134c6efea languageName: node linkType: hard @@ -805,6 +1335,55 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-avatar@npm:^1.1.10": + version: 1.1.10 + resolution: "@radix-ui/react-avatar@npm:1.1.10" + dependencies: + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-use-callback-ref": "npm:1.1.1" + "@radix-ui/react-use-is-hydrated": "npm:0.1.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.1" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/9fb0cf9a9d0fdbeaa2efda476402fc09db2e6ff9cd9aa3ea1d315d9c9579840722a4833725cb196c455e0bd775dfe04221a4f6855685ce89d2133c42e2b07e5f + languageName: node + linkType: hard + +"@radix-ui/react-collapsible@npm:^1.1.11": + version: 1.1.11 + resolution: "@radix-ui/react-collapsible@npm:1.1.11" + dependencies: + "@radix-ui/primitive": "npm:1.1.2" + "@radix-ui/react-compose-refs": "npm:1.1.2" + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-id": "npm:1.1.1" + "@radix-ui/react-presence": "npm:1.1.4" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-use-controllable-state": "npm:1.2.2" + "@radix-ui/react-use-layout-effect": "npm:1.1.1" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/fa2de539ef06e2b2d18acebb12a34ce1534ca88bd484b7359aac05534d1e551fe83eaafbf60915c00161bb370f0dc9fc303903133510dea0a59fd018155b7db5 + languageName: node + linkType: hard + "@radix-ui/react-collection@npm:1.1.7": version: 1.1.7 resolution: "@radix-ui/react-collection@npm:1.1.7" @@ -853,6 +1432,38 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-dialog@npm:^1.1.14": + version: 1.1.14 + resolution: "@radix-ui/react-dialog@npm:1.1.14" + dependencies: + "@radix-ui/primitive": "npm:1.1.2" + "@radix-ui/react-compose-refs": "npm:1.1.2" + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-dismissable-layer": "npm:1.1.10" + "@radix-ui/react-focus-guards": "npm:1.1.2" + "@radix-ui/react-focus-scope": "npm:1.1.7" + "@radix-ui/react-id": "npm:1.1.1" + "@radix-ui/react-portal": "npm:1.1.9" + "@radix-ui/react-presence": "npm:1.1.4" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-slot": "npm:1.2.3" + "@radix-ui/react-use-controllable-state": "npm:1.2.2" + aria-hidden: "npm:^1.2.4" + react-remove-scroll: "npm:^2.6.3" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/ab7bc783510ed8fccfe91020b214f4a571d5a1d46d398faa33f4c151bc9f586c47483b307e72b67687b06694c194b3aa80dd1de728460fa765db9f3057690ba3 + languageName: node + linkType: hard + "@radix-ui/react-direction@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/react-direction@npm:1.1.1" @@ -889,7 +1500,7 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-dropdown-menu@npm:^2.1.14": +"@radix-ui/react-dropdown-menu@npm:^2.1.15": version: 2.1.15 resolution: "@radix-ui/react-dropdown-menu@npm:2.1.15" dependencies: @@ -1225,7 +1836,7 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-separator@npm:^1.1.6": +"@radix-ui/react-separator@npm:^1.1.7": version: 1.1.7 resolution: "@radix-ui/react-separator@npm:1.1.7" dependencies: @@ -1244,7 +1855,7 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-slot@npm:1.2.3, @radix-ui/react-slot@npm:^1.2.2": +"@radix-ui/react-slot@npm:1.2.3, @radix-ui/react-slot@npm:^1.2.3": version: 1.2.3 resolution: "@radix-ui/react-slot@npm:1.2.3" dependencies: @@ -1310,6 +1921,36 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-tooltip@npm:^1.2.7": + version: 1.2.7 + resolution: "@radix-ui/react-tooltip@npm:1.2.7" + dependencies: + "@radix-ui/primitive": "npm:1.1.2" + "@radix-ui/react-compose-refs": "npm:1.1.2" + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-dismissable-layer": "npm:1.1.10" + "@radix-ui/react-id": "npm:1.1.1" + "@radix-ui/react-popper": "npm:1.2.7" + "@radix-ui/react-portal": "npm:1.1.9" + "@radix-ui/react-presence": "npm:1.1.4" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-slot": "npm:1.2.3" + "@radix-ui/react-use-controllable-state": "npm:1.2.2" + "@radix-ui/react-visually-hidden": "npm:1.2.3" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/28798d576c6ffec4f11120cd563aa9d5ab9afb9a37dc18778176442756d026c8c46eec1ddc647b2b5914045495fcb89f82530106e91acb55776b7d6b1a10fb57 + languageName: node + linkType: hard + "@radix-ui/react-use-callback-ref@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/react-use-callback-ref@npm:1.1.1" @@ -1369,6 +2010,21 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-use-is-hydrated@npm:0.1.0": + version: 0.1.0 + resolution: "@radix-ui/react-use-is-hydrated@npm:0.1.0" + dependencies: + use-sync-external-store: "npm:^1.5.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/635079bafe32829fc7405895154568ea94a22689b170489fd6d77668e4885e72ff71ed6d0ea3d602852841ef0f1927aa400fee2178d5dfbeb8bc9297da7d6498 + languageName: node + linkType: hard + "@radix-ui/react-use-layout-effect@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/react-use-layout-effect@npm:1.1.1" @@ -1465,10 +2121,843 @@ __metadata: languageName: node linkType: hard -"@swc/counter@npm:0.1.3": - version: 0.1.3 - resolution: "@swc/counter@npm:0.1.3" - checksum: 10c0/8424f60f6bf8694cfd2a9bca45845bce29f26105cda8cf19cdb9fd3e78dc6338699e4db77a89ae449260bafa1cc6bec307e81e7fb96dbf7dcfce0eea55151356 +"@scarf/scarf@npm:=1.4.0": + version: 1.4.0 + resolution: "@scarf/scarf@npm:1.4.0" + checksum: 10c0/332118bb488e7a70eaad068fb1a33f016d30442fb0498b37a80cb425c1e741853a5de1a04dce03526ed6265481ecf744aa6e13f072178d19e6b94b19f623ae1c + languageName: node + linkType: hard + +"@shikijs/engine-oniguruma@npm:^3.7.0": + version: 3.7.0 + resolution: "@shikijs/engine-oniguruma@npm:3.7.0" + dependencies: + "@shikijs/types": "npm:3.7.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + checksum: 10c0/e1ec52ec2255e3330812084d62bde8853d20162b1cd285dbb63440d63d0b16c03b6ce6983982e41ac2fc2eceb3e2f6b2bc1c627d093482c4c3836c4fbb9567b0 + languageName: node + linkType: hard + +"@shikijs/langs@npm:^3.7.0": + version: 3.7.0 + resolution: "@shikijs/langs@npm:3.7.0" + dependencies: + "@shikijs/types": "npm:3.7.0" + checksum: 10c0/326e8b014e74d25ce84a63bf7fdd47d5582f85c8404d4c48d6bdacf2f32ab92ddb39b41710ee7eff3daaecbbea7ee96a6c49d427344ee8375551597c74010a81 + languageName: node + linkType: hard + +"@shikijs/themes@npm:^3.7.0": + version: 3.7.0 + resolution: "@shikijs/themes@npm:3.7.0" + dependencies: + "@shikijs/types": "npm:3.7.0" + checksum: 10c0/6887eb99b55439988edab21a1af00302eaed6ba0dd7e2bea6c844ff4dfb8879a0c6c2178ba3fcfe2dbf3fd9f3ab6105572c57ae871e147aaceaf53bcc345d0cd + languageName: node + linkType: hard + +"@shikijs/types@npm:3.7.0, @shikijs/types@npm:^3.7.0": + version: 3.7.0 + resolution: "@shikijs/types@npm:3.7.0" + dependencies: + "@shikijs/vscode-textmate": "npm:^10.0.2" + "@types/hast": "npm:^3.0.4" + checksum: 10c0/d7c4fcca358c0585602090e2b4ed0a3f6742b55bea340030c115cb7aa643eac79836baa095517a538d695415458bb48c08b7be7f3c8d1cf1c1c7749a58913a3f + languageName: node + linkType: hard + +"@shikijs/vscode-textmate@npm:^10.0.2": + version: 10.0.2 + resolution: "@shikijs/vscode-textmate@npm:10.0.2" + checksum: 10c0/36b682d691088ec244de292dc8f91b808f95c89466af421cf84cbab92230f03c8348649c14b3251991b10ce632b0c715e416e992dd5f28ff3221dc2693fd9462 + languageName: node + linkType: hard + +"@standard-schema/utils@npm:^0.3.0": + version: 0.3.0 + resolution: "@standard-schema/utils@npm:0.3.0" + checksum: 10c0/6eb74cd13e52d5fc74054df51e37d947ef53f3ab9e02c085665dcca3c38c60ece8d735cebbdf18fbb13c775fbcb9becb3f53109b0e092a63f0f7389ce0993fd0 + languageName: node + linkType: hard + +"@stoplight/better-ajv-errors@npm:1.0.3": + version: 1.0.3 + resolution: "@stoplight/better-ajv-errors@npm:1.0.3" + dependencies: + jsonpointer: "npm:^5.0.0" + leven: "npm:^3.1.0" + peerDependencies: + ajv: ">=8" + checksum: 10c0/0021c1a17fcc514d1922c0456bb976283c3282ebd63ca3d1816295d1fb3d8517442262fa7eafa83fb0a62c433abcac6c16c985258f6fb55116df8ce88b23cbed + languageName: node + linkType: hard + +"@stoplight/json-ref-readers@npm:1.2.2": + version: 1.2.2 + resolution: "@stoplight/json-ref-readers@npm:1.2.2" + dependencies: + node-fetch: "npm:^2.6.0" + tslib: "npm:^1.14.1" + checksum: 10c0/c7b9b18a842b4d4c1d39daf7280e1e7bdd1dbaf770d25f6cdff99cba3c857d3c22d608c0a1c00fbb3f3a0bfe0ca7d1ed4ec62e4130ac0346ad882e379a9c9a22 + languageName: node + linkType: hard + +"@stoplight/json-ref-resolver@npm:~3.1.6": + version: 3.1.6 + resolution: "@stoplight/json-ref-resolver@npm:3.1.6" + dependencies: + "@stoplight/json": "npm:^3.21.0" + "@stoplight/path": "npm:^1.3.2" + "@stoplight/types": "npm:^12.3.0 || ^13.0.0" + "@types/urijs": "npm:^1.19.19" + dependency-graph: "npm:~0.11.0" + fast-memoize: "npm:^2.5.2" + immer: "npm:^9.0.6" + lodash: "npm:^4.17.21" + tslib: "npm:^2.6.0" + urijs: "npm:^1.19.11" + checksum: 10c0/ebacb3cc3d1b7e6de9559b1ebc6c199aabb06311e81863829f1d2ea0be8d677b297fd32a016c81626cf733a256ad99a7bd8d24f7d9144d872e42db58c80eab9a + languageName: node + linkType: hard + +"@stoplight/json@npm:^3.17.0, @stoplight/json@npm:^3.17.1, @stoplight/json@npm:^3.20.1, @stoplight/json@npm:^3.21.0, @stoplight/json@npm:~3.21.0": + version: 3.21.7 + resolution: "@stoplight/json@npm:3.21.7" + dependencies: + "@stoplight/ordered-object-literal": "npm:^1.0.3" + "@stoplight/path": "npm:^1.3.2" + "@stoplight/types": "npm:^13.6.0" + jsonc-parser: "npm:~2.2.1" + lodash: "npm:^4.17.21" + safe-stable-stringify: "npm:^1.1" + checksum: 10c0/7a60acbbf8d2c34d8812d988bab4e4687da80d45e0a11e05731a6e83586548421d5901713dcbb17b749ef32128eca2029a66f1e2e417578e5a3504b89db5c807 + languageName: node + linkType: hard + +"@stoplight/ordered-object-literal@npm:^1.0.3, @stoplight/ordered-object-literal@npm:^1.0.5": + version: 1.0.5 + resolution: "@stoplight/ordered-object-literal@npm:1.0.5" + checksum: 10c0/e14402990f66f48478fb0871c14fd3c034f1bf9c56161921c354ccaa6dfb2639408fe9a8c77275119d6b734ee5513258f51a0ee2459d1cc6d9068b67eeb48862 + languageName: node + linkType: hard + +"@stoplight/path@npm:1.3.2, @stoplight/path@npm:^1.3.2": + version: 1.3.2 + resolution: "@stoplight/path@npm:1.3.2" + checksum: 10c0/c26ebbd123f1ad0a44485a63763802133080b0455578fa52d01a8ae85230497a561d0073344d00cc73494328489575fe9fadad3ad4d67b015866b6ef01aaad84 + languageName: node + linkType: hard + +"@stoplight/spectral-core@npm:^1.19.2, @stoplight/spectral-core@npm:^1.19.4": + version: 1.20.0 + resolution: "@stoplight/spectral-core@npm:1.20.0" + dependencies: + "@stoplight/better-ajv-errors": "npm:1.0.3" + "@stoplight/json": "npm:~3.21.0" + "@stoplight/path": "npm:1.3.2" + "@stoplight/spectral-parsers": "npm:^1.0.0" + "@stoplight/spectral-ref-resolver": "npm:^1.0.4" + "@stoplight/spectral-runtime": "npm:^1.1.2" + "@stoplight/types": "npm:~13.6.0" + "@types/es-aggregate-error": "npm:^1.0.2" + "@types/json-schema": "npm:^7.0.11" + ajv: "npm:^8.17.1" + ajv-errors: "npm:~3.0.0" + ajv-formats: "npm:~2.1.1" + es-aggregate-error: "npm:^1.0.7" + jsonpath-plus: "npm:^10.3.0" + lodash: "npm:~4.17.21" + lodash.topath: "npm:^4.5.2" + minimatch: "npm:3.1.2" + nimma: "npm:0.2.3" + pony-cause: "npm:^1.1.1" + simple-eval: "npm:1.0.1" + tslib: "npm:^2.8.1" + checksum: 10c0/ebf6adeefded181b7c220a6cae70ebed37aa9e2ca73d9bd386d7e4c2bef965aea154fd6bb7613c822d37ae3440745fe1408c1369a11475e1050fcb986e64b63a + languageName: node + linkType: hard + +"@stoplight/spectral-formats@npm:^1.8.1, @stoplight/spectral-formats@npm:^1.8.2": + version: 1.8.2 + resolution: "@stoplight/spectral-formats@npm:1.8.2" + dependencies: + "@stoplight/json": "npm:^3.17.0" + "@stoplight/spectral-core": "npm:^1.19.2" + "@types/json-schema": "npm:^7.0.7" + tslib: "npm:^2.8.1" + checksum: 10c0/4401ebe05442e6f48d54d18c020a2dbc4b87b650dc3af2e278f41a569b16a957fab417dbb4dffb14f4c19a8b91f6e9df49defff2fabeaa97bbfb259a980c1d2e + languageName: node + linkType: hard + +"@stoplight/spectral-functions@npm:^1.9.1, @stoplight/spectral-functions@npm:^1.9.3": + version: 1.10.1 + resolution: "@stoplight/spectral-functions@npm:1.10.1" + dependencies: + "@stoplight/better-ajv-errors": "npm:1.0.3" + "@stoplight/json": "npm:^3.17.1" + "@stoplight/spectral-core": "npm:^1.19.4" + "@stoplight/spectral-formats": "npm:^1.8.1" + "@stoplight/spectral-runtime": "npm:^1.1.2" + ajv: "npm:^8.17.1" + ajv-draft-04: "npm:~1.0.0" + ajv-errors: "npm:~3.0.0" + ajv-formats: "npm:~2.1.1" + lodash: "npm:~4.17.21" + tslib: "npm:^2.8.1" + checksum: 10c0/f26af18a8ff107f5d49a86e4134f10d244fc9bc64833b92c487d1372740b2b3839a72bb76d2061320f33498e65c2704aba5062635ec4c24c16139a4cf83497ca + languageName: node + linkType: hard + +"@stoplight/spectral-parsers@npm:^1.0.0": + version: 1.0.5 + resolution: "@stoplight/spectral-parsers@npm:1.0.5" + dependencies: + "@stoplight/json": "npm:~3.21.0" + "@stoplight/types": "npm:^14.1.1" + "@stoplight/yaml": "npm:~4.3.0" + tslib: "npm:^2.8.1" + checksum: 10c0/3c6578226964d9207b8108d8026b95bbd979640361bb5b0b988da9dc3a2fcd94452f96f5cb41e972baf105fb7ab29b6e8921f21e976a39afc7d368a3a0bf1c0a + languageName: node + linkType: hard + +"@stoplight/spectral-ref-resolver@npm:^1.0.4": + version: 1.0.5 + resolution: "@stoplight/spectral-ref-resolver@npm:1.0.5" + dependencies: + "@stoplight/json-ref-readers": "npm:1.2.2" + "@stoplight/json-ref-resolver": "npm:~3.1.6" + "@stoplight/spectral-runtime": "npm:^1.1.2" + dependency-graph: "npm:0.11.0" + tslib: "npm:^2.8.1" + checksum: 10c0/db7f31d1679c3d6f1adb4b63a8a5288be3b1bfee4515a05fa7092b7eb3ee3d228a9bcd693df4b4e5e1f49323f8a7603ded0163cafd752ce5b4e50fe3b16e446b + languageName: node + linkType: hard + +"@stoplight/spectral-rulesets@npm:^1.21.3": + version: 1.22.0 + resolution: "@stoplight/spectral-rulesets@npm:1.22.0" + dependencies: + "@asyncapi/specs": "npm:^6.8.0" + "@stoplight/better-ajv-errors": "npm:1.0.3" + "@stoplight/json": "npm:^3.17.0" + "@stoplight/spectral-core": "npm:^1.19.4" + "@stoplight/spectral-formats": "npm:^1.8.1" + "@stoplight/spectral-functions": "npm:^1.9.1" + "@stoplight/spectral-runtime": "npm:^1.1.2" + "@stoplight/types": "npm:^13.6.0" + "@types/json-schema": "npm:^7.0.7" + ajv: "npm:^8.17.1" + ajv-formats: "npm:~2.1.1" + json-schema-traverse: "npm:^1.0.0" + leven: "npm:3.1.0" + lodash: "npm:~4.17.21" + tslib: "npm:^2.8.1" + checksum: 10c0/9a19bc55ee4f800089f943ff0cb5f8c3902b689060c2b2b9de0c298cc5e8e9baa74767c218c3fa037483470fb10268c4d70d48ba7513b293ad184126459ebc71 + languageName: node + linkType: hard + +"@stoplight/spectral-runtime@npm:^1.1.2": + version: 1.1.4 + resolution: "@stoplight/spectral-runtime@npm:1.1.4" + dependencies: + "@stoplight/json": "npm:^3.20.1" + "@stoplight/path": "npm:^1.3.2" + "@stoplight/types": "npm:^13.6.0" + abort-controller: "npm:^3.0.0" + lodash: "npm:^4.17.21" + node-fetch: "npm:^2.7.0" + tslib: "npm:^2.8.1" + checksum: 10c0/5a12286fcea26899ba8a9a87f3f9859bb5d5697695bc8dc0c2a7cbc4f0dbfa314df39cbe36e516c9a502f1654bd8e5b56ecc730a6193e7dee74d01f52f320a9b + languageName: node + linkType: hard + +"@stoplight/types@npm:^12.3.0 || ^13.0.0, @stoplight/types@npm:^13.6.0": + version: 13.20.0 + resolution: "@stoplight/types@npm:13.20.0" + dependencies: + "@types/json-schema": "npm:^7.0.4" + utility-types: "npm:^3.10.0" + checksum: 10c0/11d741bd71c6a286cef946b10e003b9b13b031f512d576ed1274c194540f0ee928332108d2b4d1bc87a8e5ba9703d1266951e6a53b8eb0a8db4dc68b1a798cab + languageName: node + linkType: hard + +"@stoplight/types@npm:^14.1.1": + version: 14.1.1 + resolution: "@stoplight/types@npm:14.1.1" + dependencies: + "@types/json-schema": "npm:^7.0.4" + utility-types: "npm:^3.10.0" + checksum: 10c0/1573d842fee99a7f1eea1f2b17c28dcbfb1be51b72f2ef794e07d265b2fb8900654b5848f608952cd1e3dedf6c7ec157c82c65d4d95728d6309f4b1722a11450 + languageName: node + linkType: hard + +"@stoplight/types@npm:~13.6.0": + version: 13.6.0 + resolution: "@stoplight/types@npm:13.6.0" + dependencies: + "@types/json-schema": "npm:^7.0.4" + utility-types: "npm:^3.10.0" + checksum: 10c0/64de299a1d1fbe819b601d72192e44f63c665f13e7a39a9c80930a2bdd54a6361ce9e7d60992ccc42ac8e4ac3b9c9d88a026deea59fe3f6e96a791c169c7a458 + languageName: node + linkType: hard + +"@stoplight/yaml-ast-parser@npm:0.0.50": + version: 0.0.50 + resolution: "@stoplight/yaml-ast-parser@npm:0.0.50" + checksum: 10c0/44d83c7081888402bee88ad0c1e90cd191478005773d8f9767015e109f8499c17da57eb790cca30ba1c02d2f1b74f82992f01ca8ffa272085d17b5f4b5a618cf + languageName: node + linkType: hard + +"@stoplight/yaml@npm:~4.3.0": + version: 4.3.0 + resolution: "@stoplight/yaml@npm:4.3.0" + dependencies: + "@stoplight/ordered-object-literal": "npm:^1.0.5" + "@stoplight/types": "npm:^14.1.1" + "@stoplight/yaml-ast-parser": "npm:0.0.50" + tslib: "npm:^2.2.0" + checksum: 10c0/d72b26e05a9cf96cb8321ea14bd03ba85aae023d48484d038e1f231ebdd7b8abcda496f55676944c5d138b177294991c25a3ae49cb5182f16c7eaa4660bc9928 + languageName: node + linkType: hard + +"@swagger-api/apidom-ast@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ast@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + unraw: "npm:^3.0.0" + checksum: 10c0/ccb8b32f05b35f53637c1d704428383a5bfc3173928b41183e6b611ef17250cc1587f6db8a20717684cf13644432b8f187b75818cd21cdc262983389ca421744 + languageName: node + linkType: hard + +"@swagger-api/apidom-core@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-core@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-core@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + minim: "npm:~0.23.8" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + short-unique-id: "npm:^5.3.2" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/3409541bee4a6b576b2d9042b51fc72f8167493a95e35a9672a88a05912dd134bc20676373bc5c73c42d20ac0c72c6353c19912c04aea391a6bb4a7a24f1575d + languageName: node + linkType: hard + +"@swagger-api/apidom-error@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-error@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-error@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.20.7" + checksum: 10c0/8680952816170aed8d00726bf5a7b19cc77c1f008bdc14abb30c707eeae5777a1187668faa001ace947728f02272de85317cd51dd16d428b78af3f0a3919db03 + languageName: node + linkType: hard + +"@swagger-api/apidom-json-pointer@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-json-pointer@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-json-pointer@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-json-pointer@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swaggerexpert/json-pointer": "npm:^2.10.1" + checksum: 10c0/983a4db04d9e35b2f901e735303d15b72b4a6a0eb30a6ae8e9f15dbe14e9f177142512eeccf2260b1266dc2bbe5c2ddbfe5ae2f3d315aff452c3cc576653672d + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-api-design-systems@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/fef4fac684d69865fe6b033584615ca25ba1ce86fa38ce7a7f8f53d86d29aebf7b3e14ee26bc633b05d10948591334cbd3730b59c4d28f77a1c254c4d9fbb7c8 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-arazzo-1@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-arazzo-1@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-arazzo-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-2020-12": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/a8b12d9247f79ff3a2022eb140c088f5d6dca5360c87a7e5b135ef477930bb0b45c41e8def169676197f0b4a53437b5efb095eacad2775ac70f0bbf468eec61b + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-asyncapi-2@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-asyncapi-2@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-7": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/1519adcf2a23355166f82c2e7e862bcd5e2c838210b0e60d3bf10e497e57bd6e69e2a3e9840e81e628f939718c956ba81e6eedbeab4e55381ea4550d12414e74 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-2019-09@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-2019-09@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-7": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/4a704f9f810a2682a418c63b6876c1058247bedee1ee06b6dd146ccdafee25ed47ef14829097306bac970cee503537b5c8fc2bc76dfd4c47ddf0b44730686673 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-2020-12@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-2020-12@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-2019-09": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/69ce2dd5c861f8fd7fe55edb0c5efad7d83529b4d2879f2999aea950c764237c22ebd976b16591e29dc073780e85fb48db1c6091bedb9c49dd8cc1f8ed6ccd6b + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/86b454cadcb1785947808c6aae0b04052b1d3f0a15140e97e92ccb9b546e55475b7845189144304a86ecf7d8445d9fef417024ccbe85c74a1736e39d553dfc45 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-4": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/da9ae7e1a25c1906ba4f572aa2ebe666703b55f0ba389d2b99c22ed50e8605c0ae6eb0340548d2d0f523f8356135c1b09fbd5daeb3f466bb09c4ac9a9e6b099b + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-6": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/5afe3969063204eabf0777fec0cba424b057e375f06a0eee3349f45a65a4f9e5d2c98311d68cd4dc2241f407499b924ed956b2c69f67b02d10b69a66f4b4bf07 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-2@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-2@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-openapi-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-4": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/a805cfc37f5d185faa6d3659f01434c6838473cb1387238987d9013628334b17c2c25f70963df09b89a67a27e5c9b97c50e4e0a6ba80683642b7ceba6bdf8e9c + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-0@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-3-0@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-4": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/9f4ca7451ec07018971d21d87c1b688ef7ca1bd423a9de661a9c1d24410f3d587e7d4878a55983b2e98f3b092afa6126a64166c76badfbe855448cbd86302b8a + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-1@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-3-1@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-3-1@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-json-pointer": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-2020-12": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/f8d1e7e57b178ff9efbe7658281d6400666d9153c46c2dc39695be1e62397341c67b6cd9dbebcbe19a015ad4ed07116011510d123f297caa30f149a04ea67290 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-api-design-systems": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/86717c996ec748f25fbb8e46ac77fba80240516b3adefdf02c932018a36d7c5657c394bedd2651afc5edd6ec2a4cc169e91e8ef3c89001f48ec446f3a2d40b06 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-api-design-systems": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/e1e574d8dfa5720cedb9624def0f8caf59a052d9ad5e937c30d85507e228f6ff4195eefde4b7a2683731a7aa5a1e94a5563384d8da13e7d85c99ab71f4eb53d9 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-arazzo-json-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-arazzo-json-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-arazzo-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/bbc14d4206966c87e916818c1b4608668c489f0d694bbfebeb74490474296b2ef63fae91758a7bc6958ec90d4b0a06730d30b216489e1221c8f3763ea046e447 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-arazzo-yaml-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-arazzo-yaml-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-arazzo-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/7fb20f15928137919e454c257fd578859c7acc69f28c83fee32d5a355e9f4b307d911d05abebc1bb4bd0c511592d6978f0b8c5647bcddc575461b07f097bdb45 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-asyncapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/05bf86fc41ebf238a7e56cb51427e1ed721c01335c29cc037876fde7662e5a13327f4f8ab4bc7828a85017b036910b1d9ca2c6cc9d61c1dd7aabb321216a0fda + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-asyncapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/7b245997cfa4f7a241543dcbdffeb52faf88868008bbe69ecf5500fcad5f80eb56212b8b11fe302938c84292329fba1aa4eb5a3e91b5c59ab5dc899a6a540b66 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-json@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-parser-adapter-json@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + node-gyp: "npm:latest" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + tree-sitter: "npm:=0.21.1" + tree-sitter-json: "npm:=0.24.8" + web-tree-sitter: "npm:=0.24.5" + checksum: 10c0/9b3c39510106fbaad56e31db168b80312405b229eab91f7bd0842d80ab4a145f52234c25ced737c3788cc7e23accb46c98d86fbb219a133137a5718ba659fc09 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/75279386ef2072d970a50508ba12478ef55cfd6024f7d240185736e81d73cd1703f20a5bff2a282ab394ee4514781ae9b8d173315058cb760af56a788940701b + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/ab2d5fc05041b4feb0ba75903aaacd744dfa203b087286da7912ee0b220856bcdf3c6232a0293bb39d9b2f43ed45ed2791885bab327c8538d97380adbb15b971 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/cbbcb3a66bd5b6c22eee9be1f6417c38bd99955727ad913888bfedabdc528696bbc462ee00b94b7c1b52d53c6f801e1d2a6cdcd1a2ca9c98e714691de56c9645 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/7dd0025849af6c5fa5bc1011d964de997c4e3505d3b7b51cd3cab450c5a2bde10a13a904b9c21f06e205dcaf0da6ae1b5aa56382c90c795634516c883e1ed834 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/5ce9603bc156629d0095ef40a2308b85fab62680236c594cf758a03bc552b641236c6addd20a5ce72adeb4c7ad73845e7c9482a46a6992abb1674f297cdacdfd + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/a3631ac62606b0574119614c12c93de5aad799bf913f4d15a9098352882c7da551f940b0858e537a4b78749305744d80c05fc9b517c82722deeb46c09048bc9f + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-parser-adapter-yaml-1-2@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@tree-sitter-grammars/tree-sitter-yaml": "npm:=0.7.1" + "@types/ramda": "npm:~0.30.0" + node-gyp: "npm:latest" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + tree-sitter: "npm:=0.22.4" + web-tree-sitter: "npm:=0.24.5" + checksum: 10c0/5fda71d63d0c1d36971f6a6931335c1b315450e3cfec1494f1592d59b8e4297cd8a5fdfa2e8dfac06fe9d71060425e1d06b6f6dc3ef6be2ddd75101d0bd96b3d + languageName: node + linkType: hard + +"@swagger-api/apidom-reference@npm:>=1.0.0-beta.41 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-reference@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-json-pointer": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-arazzo-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-asyncapi-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-arazzo-json-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-json-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@types/ramda": "npm:~0.30.0" + axios: "npm:^1.9.0" + minimatch: "npm:^7.4.3" + process: "npm:^0.11.10" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + dependenciesMeta: + "@swagger-api/apidom-json-pointer": + optional: true + "@swagger-api/apidom-ns-arazzo-1": + optional: true + "@swagger-api/apidom-ns-asyncapi-2": + optional: true + "@swagger-api/apidom-ns-openapi-2": + optional: true + "@swagger-api/apidom-ns-openapi-3-0": + optional: true + "@swagger-api/apidom-ns-openapi-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-json": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": + optional: true + "@swagger-api/apidom-parser-adapter-arazzo-json-1": + optional: true + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": + optional: true + "@swagger-api/apidom-parser-adapter-json": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-2": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-yaml-1-2": + optional: true + checksum: 10c0/0e670482dbba811674ea5ecbacd6ea86307f0712ad0a7caec257bcefee9056ec751b2d16619d1cd02191938f3cc165f89dfc8bd6f4fd1e4da0b5fdc4681ffdf3 + languageName: node + linkType: hard + +"@swaggerexpert/cookie@npm:^2.0.2": + version: 2.0.2 + resolution: "@swaggerexpert/cookie@npm:2.0.2" + dependencies: + apg-lite: "npm:^1.0.3" + checksum: 10c0/50b9e57e6a35d802d408541e95d8dac8506b3ad82658f5af5beaefdf7b8f405b04eafa1beeaf4fa27b5bd24ac94189edc70841bb1ecf6bc8222dcb8efd62a4f9 + languageName: node + linkType: hard + +"@swaggerexpert/json-pointer@npm:^2.10.1": + version: 2.10.2 + resolution: "@swaggerexpert/json-pointer@npm:2.10.2" + dependencies: + apg-lite: "npm:^1.0.4" + checksum: 10c0/9033a0f1d786c071fda6410aaa0a5986b3e9c1cc5b94706969644cdcb1792c815c8e1e68a12c453813e990c2d4dc5f22add04a196555bdb3cffd82cb1303e2c4 languageName: node linkType: hard @@ -1481,9 +2970,9 @@ __metadata: languageName: node linkType: hard -"@tailwindcss/node@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/node@npm:4.1.7" +"@tailwindcss/node@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/node@npm:4.1.10" dependencies: "@ampproject/remapping": "npm:^2.3.0" enhanced-resolve: "npm:^5.18.1" @@ -1491,118 +2980,118 @@ __metadata: lightningcss: "npm:1.30.1" magic-string: "npm:^0.30.17" source-map-js: "npm:^1.2.1" - tailwindcss: "npm:4.1.7" - checksum: 10c0/8b646fde531609e8c8dc4745d1db5375fa23f52f28436f09192cce18cdc423075cd4e2477c1bf96b905de5bb22ac915dad9c4e340d9995e4ad2025a1f5835549 + tailwindcss: "npm:4.1.10" + checksum: 10c0/5cf900fe53ba08b5d9bfbd48925ea2c18eb8f89ae47738d95372152ed9b20c020bf3660ad04fa5dbb67f62ce01efd431cf4d3015d2d43e918fa89ce3c77b5170 languageName: node linkType: hard -"@tailwindcss/oxide-android-arm64@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-android-arm64@npm:4.1.7" +"@tailwindcss/oxide-android-arm64@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-android-arm64@npm:4.1.10" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-darwin-arm64@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-darwin-arm64@npm:4.1.7" +"@tailwindcss/oxide-darwin-arm64@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-darwin-arm64@npm:4.1.10" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-darwin-x64@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-darwin-x64@npm:4.1.7" +"@tailwindcss/oxide-darwin-x64@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-darwin-x64@npm:4.1.10" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide-freebsd-x64@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-freebsd-x64@npm:4.1.7" +"@tailwindcss/oxide-freebsd-x64@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-freebsd-x64@npm:4.1.10" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.1.7" +"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.1.10" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm64-gnu@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-linux-arm64-gnu@npm:4.1.7" +"@tailwindcss/oxide-linux-arm64-gnu@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-linux-arm64-gnu@npm:4.1.10" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm64-musl@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-linux-arm64-musl@npm:4.1.7" +"@tailwindcss/oxide-linux-arm64-musl@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-linux-arm64-musl@npm:4.1.10" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@tailwindcss/oxide-linux-x64-gnu@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-linux-x64-gnu@npm:4.1.7" +"@tailwindcss/oxide-linux-x64-gnu@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-linux-x64-gnu@npm:4.1.10" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@tailwindcss/oxide-linux-x64-musl@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-linux-x64-musl@npm:4.1.7" +"@tailwindcss/oxide-linux-x64-musl@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-linux-x64-musl@npm:4.1.10" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@tailwindcss/oxide-wasm32-wasi@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-wasm32-wasi@npm:4.1.7" +"@tailwindcss/oxide-wasm32-wasi@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-wasm32-wasi@npm:4.1.10" dependencies: "@emnapi/core": "npm:^1.4.3" "@emnapi/runtime": "npm:^1.4.3" "@emnapi/wasi-threads": "npm:^1.0.2" - "@napi-rs/wasm-runtime": "npm:^0.2.9" + "@napi-rs/wasm-runtime": "npm:^0.2.10" "@tybys/wasm-util": "npm:^0.9.0" tslib: "npm:^2.8.0" conditions: cpu=wasm32 languageName: node linkType: hard -"@tailwindcss/oxide-win32-arm64-msvc@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-win32-arm64-msvc@npm:4.1.7" +"@tailwindcss/oxide-win32-arm64-msvc@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-win32-arm64-msvc@npm:4.1.10" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-win32-x64-msvc@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide-win32-x64-msvc@npm:4.1.7" +"@tailwindcss/oxide-win32-x64-msvc@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide-win32-x64-msvc@npm:4.1.10" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/oxide@npm:4.1.7" +"@tailwindcss/oxide@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/oxide@npm:4.1.10" dependencies: - "@tailwindcss/oxide-android-arm64": "npm:4.1.7" - "@tailwindcss/oxide-darwin-arm64": "npm:4.1.7" - "@tailwindcss/oxide-darwin-x64": "npm:4.1.7" - "@tailwindcss/oxide-freebsd-x64": "npm:4.1.7" - "@tailwindcss/oxide-linux-arm-gnueabihf": "npm:4.1.7" - "@tailwindcss/oxide-linux-arm64-gnu": "npm:4.1.7" - "@tailwindcss/oxide-linux-arm64-musl": "npm:4.1.7" - "@tailwindcss/oxide-linux-x64-gnu": "npm:4.1.7" - "@tailwindcss/oxide-linux-x64-musl": "npm:4.1.7" - "@tailwindcss/oxide-wasm32-wasi": "npm:4.1.7" - "@tailwindcss/oxide-win32-arm64-msvc": "npm:4.1.7" - "@tailwindcss/oxide-win32-x64-msvc": "npm:4.1.7" + "@tailwindcss/oxide-android-arm64": "npm:4.1.10" + "@tailwindcss/oxide-darwin-arm64": "npm:4.1.10" + "@tailwindcss/oxide-darwin-x64": "npm:4.1.10" + "@tailwindcss/oxide-freebsd-x64": "npm:4.1.10" + "@tailwindcss/oxide-linux-arm-gnueabihf": "npm:4.1.10" + "@tailwindcss/oxide-linux-arm64-gnu": "npm:4.1.10" + "@tailwindcss/oxide-linux-arm64-musl": "npm:4.1.10" + "@tailwindcss/oxide-linux-x64-gnu": "npm:4.1.10" + "@tailwindcss/oxide-linux-x64-musl": "npm:4.1.10" + "@tailwindcss/oxide-wasm32-wasi": "npm:4.1.10" + "@tailwindcss/oxide-win32-arm64-msvc": "npm:4.1.10" + "@tailwindcss/oxide-win32-x64-msvc": "npm:4.1.10" detect-libc: "npm:^2.0.4" tar: "npm:^7.4.3" dependenciesMeta: @@ -1630,20 +3119,82 @@ __metadata: optional: true "@tailwindcss/oxide-win32-x64-msvc": optional: true - checksum: 10c0/ac8eb42faa1fa34f0a23130c3c369bf4685c78bc6ab8cf2307d0b6c66023909ff411c328a3e4de86fced6dd26be46e783b620e3f614195e8147a779e224922a3 + checksum: 10c0/38adecfedb1854acbf82538881b9caf475e656a3cb9b86d860c0bfac5f3f042da34c85d664506ab0feaff2d6106d29d74afc93ea8c4281e4eac35da690f6ca5c languageName: node linkType: hard -"@tailwindcss/postcss@npm:4.1.7": - version: 4.1.7 - resolution: "@tailwindcss/postcss@npm:4.1.7" +"@tailwindcss/postcss@npm:4.1.10": + version: 4.1.10 + resolution: "@tailwindcss/postcss@npm:4.1.10" dependencies: "@alloc/quick-lru": "npm:^5.2.0" - "@tailwindcss/node": "npm:4.1.7" - "@tailwindcss/oxide": "npm:4.1.7" + "@tailwindcss/node": "npm:4.1.10" + "@tailwindcss/oxide": "npm:4.1.10" postcss: "npm:^8.4.41" - tailwindcss: "npm:4.1.7" - checksum: 10c0/3779c34001dfa2741efa037089b9331807e15946e766decc983baef8ba5d4d519a1b86e7f27fffcf1a028bda19e0fdf5a87479a89b9e1cd2d7df5769273777c8 + tailwindcss: "npm:4.1.10" + checksum: 10c0/f320527b4e50e586e6bbe0e653f0c63ef0738a40737d1c80f47b074d42c0762d8dc20d40cbea9f13c7592f008e850b2f6eac61439ef9dc1c366d11dea52afda1 + languageName: node + linkType: hard + +"@tanstack/query-core@npm:5.81.2": + version: 5.81.2 + resolution: "@tanstack/query-core@npm:5.81.2" + checksum: 10c0/36a6bddec2e7512015bcfbb0d7b0876fab418de9e0ef21ad403598276960e0b7d53efd62832ce462738ad22d9883e31cb5403eafc65dfd9b2f6744c22a9d8e42 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^5.80.7": + version: 5.81.2 + resolution: "@tanstack/react-query@npm:5.81.2" + dependencies: + "@tanstack/query-core": "npm:5.81.2" + peerDependencies: + react: ^18 || ^19 + checksum: 10c0/a80a2e7401a02bfc8d7a926c9e48b0a108cae21a2c47691632e754de44ca08838c105fb0c30804f4ccbf173bee04ad9a3e45a8bebdfc1d1a32468bbb9d960e19 + languageName: node + linkType: hard + +"@tree-sitter-grammars/tree-sitter-yaml@npm:=0.7.1": + version: 0.7.1 + resolution: "@tree-sitter-grammars/tree-sitter-yaml@npm:0.7.1" + dependencies: + node-addon-api: "npm:^8.3.1" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.4" + peerDependencies: + tree-sitter: ^0.22.4 + peerDependenciesMeta: + tree-sitter: + optional: true + checksum: 10c0/29191c5f7acd6d0ba9f2f6aa2a3b83b6c9f60d70286399be37ec3f2eed78152e3777632855dfcb9e988d934bae10817bb4c4ba38ad0786f2303fbb4806f7bcae + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb languageName: node linkType: hard @@ -1656,14 +3207,41 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^1.0.6": - version: 1.0.7 - resolution: "@types/estree@npm:1.0.7" - checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c +"@types/es-aggregate-error@npm:^1.0.2": + version: 1.0.6 + resolution: "@types/es-aggregate-error@npm:1.0.6" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/2a86724ba34495b3a86329b86f71ac83695086be9407afc60d104af5ce2b9ae549f6d19aa48741357ab03c6fe605c1653fdd35ac743541fb0419f8d7188f4b4f languageName: node linkType: hard -"@types/json-schema@npm:^7.0.15": +"@types/estree@npm:^1.0.6": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/hast@npm:^2.0.0": + version: 2.3.10 + resolution: "@types/hast@npm:2.3.10" + dependencies: + "@types/unist": "npm:^2" + checksum: 10c0/16daac35d032e656defe1f103f9c09c341a6dc553c7ec17b388274076fa26e904a71ea5ea41fd368a6d5f1e9e53be275c80af7942b9c466d8511d261c9529c7e + languageName: node + linkType: hard + +"@types/hast@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10c0/3249781a511b38f1d330fd1e3344eed3c4e7ea8eff82e835d35da78e637480d36fad37a78be5a7aed8465d237ad0446abc1150859d0fde395354ea634decf9f7 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.7": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -1677,30 +3255,48 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:22.15.21": - version: 22.15.21 - resolution: "@types/node@npm:22.15.21" +"@types/node@npm:*": + version: 24.0.4 + resolution: "@types/node@npm:24.0.4" + dependencies: + undici-types: "npm:~7.8.0" + checksum: 10c0/590e8cb0ec59fb9cd566402120e690d87ecbdf57f1ee2b8493266121ed33aa4b25949a0c6156b84a6ffb9250baaf1f80e9af142da542ed603e6ee73fc4d1115f + languageName: node + linkType: hard + +"@types/node@npm:22.15.33": + version: 22.15.33 + resolution: "@types/node@npm:22.15.33" dependencies: undici-types: "npm:~6.21.0" - checksum: 10c0/f092bbccda2131c2b2c8f720338080aa0ef1d928f5f1062c03954a4f7dafa7ee3ed29bc3e51bd4e2584473b3d943c637a2b39ad7174898970818270187cf10c1 + checksum: 10c0/ee040c29c891aa37fffc27d04a8529318c391356346933646b7692eaf62236831ad532f6ebaf43ebd6a2ef1f0f091860d8a0a83a4e3c5a4f66d37aa1b2c99f31 languageName: node linkType: hard -"@types/react-dom@npm:19.1.5": - version: 19.1.5 - resolution: "@types/react-dom@npm:19.1.5" +"@types/ramda@npm:~0.30.0": + version: 0.30.2 + resolution: "@types/ramda@npm:0.30.2" + dependencies: + types-ramda: "npm:^0.30.1" + checksum: 10c0/dda95008860f594eb7b4fd9819adeb2dcd4d4e2baca6cb33f692f6f8ea76d04a7fd81f9a057c5c67555612769e5592cb15f91de6c9f8b619b8b1d806d19dc9ea + languageName: node + linkType: hard + +"@types/react-dom@npm:19.1.6": + version: 19.1.6 + resolution: "@types/react-dom@npm:19.1.6" peerDependencies: "@types/react": ^19.0.0 - checksum: 10c0/2a29e77cf6bb6e9f57bcfa54509c216cad2e16e244f0bd56369966ec88c072b9c91f6011d14f9e18fbfe2b801b18b86f616de75e5c8aef0be73c1f74abb33b49 + checksum: 10c0/7ba74eee2919e3f225e898b65fdaa16e54952aaf9e3472a080ddc82ca54585e46e60b3c52018d21d4b7053f09d27b8293e9f468b85f9932ff452cd290cc131e8 languageName: node linkType: hard -"@types/react@npm:19.1.4": - version: 19.1.4 - resolution: "@types/react@npm:19.1.4" +"@types/react@npm:*, @types/react@npm:19.1.8": + version: 19.1.8 + resolution: "@types/react@npm:19.1.8" dependencies: csstype: "npm:^3.0.2" - checksum: 10c0/501350d4f9cef13c5dd1b1496fa70ebaff52f6fa359b623b51c9d817e5bc4333fa3c8b7a6a4cbc88c643385052d66a243c3ceccfd6926062f917a2dd0535f6b3 + checksum: 10c0/4908772be6dc941df276931efeb0e781777fa76e4d5d12ff9f75eb2dcc2db3065e0100efde16fde562c5bafa310cc8f50c1ee40a22640459e066e72cd342143e languageName: node linkType: hard @@ -1718,6 +3314,57 @@ __metadata: languageName: node linkType: hard +"@types/swagger-ui-react@npm:5": + version: 5.18.0 + resolution: "@types/swagger-ui-react@npm:5.18.0" + dependencies: + "@types/react": "npm:*" + checksum: 10c0/948cdd763e7f247a5a620ccef109b2f3baa967e44ec0e02e11492543bcd39793b65dfa5399600d6e7233ffd21917cab403d63c6d614109b83e11017384b8a023 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + +"@types/unist@npm:*": + version: 3.0.3 + resolution: "@types/unist@npm:3.0.3" + checksum: 10c0/2b1e4adcab78388e088fcc3c0ae8700f76619dbcb4741d7d201f87e2cb346bfc29a89003cfea2d76c996e1061452e14fcd737e8b25aacf949c1f2d6b2bc3dd60 + languageName: node + linkType: hard + +"@types/unist@npm:^2": + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 10c0/24dcdf25a168f453bb70298145eb043cfdbb82472db0bc0b56d6d51cd2e484b9ed8271d4ac93000a80da568f2402e9339723db262d0869e2bf13bc58e081768d + languageName: node + linkType: hard + +"@types/urijs@npm:^1.19.19": + version: 1.19.25 + resolution: "@types/urijs@npm:1.19.25" + checksum: 10c0/462464294f0cd5f2271e1ab760a45abe252a946559444188a4ad0edba39b1a8bff41b140b79596a5e3c44a5d0d29f78c9ab97b5e82efb1e8617093a549c22bf6 + languageName: node + linkType: hard + +"@types/use-sync-external-store@npm:^0.0.6": + version: 0.0.6 + resolution: "@types/use-sync-external-store@npm:0.0.6" + checksum: 10c0/77c045a98f57488201f678b181cccd042279aff3da34540ad242f893acc52b358bd0a8207a321b8ac09adbcef36e3236944390e2df4fcedb556ce7bb2a88f2a8 + languageName: node + linkType: hard + +"@types/webpack-env@npm:1.18.8": + version: 1.18.8 + resolution: "@types/webpack-env@npm:1.18.8" + checksum: 10c0/527a5d1eb75c5243e4f3665d956c7c340f899955dd25d16c9fd9750406f32e95a3a17d207640295038e8235c0c2a2daf084f420e088e58b965d82fc74f6012d7 + languageName: node + linkType: hard + "@types/yauzl@npm:^2.9.1": version: 2.10.3 resolution: "@types/yauzl@npm:2.10.3" @@ -1728,80 +3375,104 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.32.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.32.1" + version: 8.35.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.35.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.32.1" - "@typescript-eslint/type-utils": "npm:8.32.1" - "@typescript-eslint/utils": "npm:8.32.1" - "@typescript-eslint/visitor-keys": "npm:8.32.1" + "@typescript-eslint/scope-manager": "npm:8.35.0" + "@typescript-eslint/type-utils": "npm:8.35.0" + "@typescript-eslint/utils": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" graphemer: "npm:^1.4.0" ignore: "npm:^7.0.0" natural-compare: "npm:^1.4.0" ts-api-utils: "npm:^2.1.0" peerDependencies: - "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + "@typescript-eslint/parser": ^8.35.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/29dbafc1f02e1167e6d1e92908de6bf7df1cc1fc9ae1de3f4d4abf5d2b537be16b173bcd05770270529eb2fd17a3ac63c2f40d308f7fbbf6d6f286ba564afd64 + checksum: 10c0/27391f1b168a175fdc62370e5afe51317d4433115abbbff8ee0aea8ecd7bf6dd541a76f8e0cc94119750ae3146863204862640acb45394f0b92809e88d39f881 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.32.1 - resolution: "@typescript-eslint/parser@npm:8.32.1" + version: 8.35.0 + resolution: "@typescript-eslint/parser@npm:8.35.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.32.1" - "@typescript-eslint/types": "npm:8.32.1" - "@typescript-eslint/typescript-estree": "npm:8.32.1" - "@typescript-eslint/visitor-keys": "npm:8.32.1" + "@typescript-eslint/scope-manager": "npm:8.35.0" + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/typescript-estree": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/01095f5b6e0a2e0631623be3f44be0f2960ceb24de33b64cb790e24a1468018d2b4d6874d1fa08a4928c2a02f208dd66cbc49735c7e8b54d564e420daabf84d1 + checksum: 10c0/8f1cda98f8bee3d79266974e5e5c831a0ca473e928fb16f1dc1c85ee24f2cb9c0fcf3c1bcbbef9d6044cf063f6e59d3198b766a27000776830fe591043e11625 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.32.1": - version: 8.32.1 - resolution: "@typescript-eslint/scope-manager@npm:8.32.1" +"@typescript-eslint/project-service@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/project-service@npm:8.35.0" dependencies: - "@typescript-eslint/types": "npm:8.32.1" - "@typescript-eslint/visitor-keys": "npm:8.32.1" - checksum: 10c0/d2cb1f7736388972137d6e510b2beae4bac033fcab274e04de90ebba3ce466c71fe47f1795357e032e4a6c8b2162016b51b58210916c37212242c82d35352e9f + "@typescript-eslint/tsconfig-utils": "npm:^8.35.0" + "@typescript-eslint/types": "npm:^8.35.0" + debug: "npm:^4.3.4" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/c2d6d44b6b2ff3ecabec8ade824163196799060ac457661eb94049487d770ce68d128b33a2f24090adf1ebcb66ff6c9a05fc6659349b9a0784a5a080ecf8ff81 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.32.1": - version: 8.32.1 - resolution: "@typescript-eslint/type-utils@npm:8.32.1" +"@typescript-eslint/scope-manager@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/scope-manager@npm:8.35.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.32.1" - "@typescript-eslint/utils": "npm:8.32.1" + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" + checksum: 10c0/a27cf27a1852bb0d6ea08f475fcc79557f1977be96ef563d92127e8011e4065566441c32c40eb7a530111ffd3a8489919da7f8a2b7466a610cfc9c07670a9601 + languageName: node + linkType: hard + +"@typescript-eslint/tsconfig-utils@npm:8.35.0, @typescript-eslint/tsconfig-utils@npm:^8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.35.0" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/baa18e7137ba72f7d138f50d1168e8f334198a36499f954821e2369027e5b3d53ca93c354943e7782ba5caab604b050af10f353ccca34fbc0b23c48d6174832f + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/type-utils@npm:8.35.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.35.0" + "@typescript-eslint/utils": "npm:8.35.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.1.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/f10186340ce194681804d9a57feb6d8d6c3adbd059c70df58f4656b0d9efd412fb0c2d80c182f9db83bad1a301754e0c24fe26f3354bef3a1795ab9c835cb763 + checksum: 10c0/9e23a332484a055eb73ba8918f95a981e0cec8fa623ba9ee0b57328af052628d630a415e32e0dbe95318574e62d4066f8aecc994728b3cedd906f36c616ec362 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.32.1": - version: 8.32.1 - resolution: "@typescript-eslint/types@npm:8.32.1" - checksum: 10c0/86f59b29c12e7e8abe45a1659b6fae5e7b0cfaf09ab86dd596ed9d468aa61082bbccd509d25f769b197fbfdf872bbef0b323a2ded6ceaca351f7c679f1ba3bd3 +"@typescript-eslint/types@npm:8.35.0, @typescript-eslint/types@npm:^8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/types@npm:8.35.0" + checksum: 10c0/a2711a932680805e83252b5d7c55ac30437bdc4d40c444606cf6ccb6ba23a682da015ec03c64635e77bf733f84d9bb76810bf4f7177fd3a660db8a2c8a05e845 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.32.1": - version: 8.32.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.32.1" +"@typescript-eslint/typescript-estree@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.35.0" dependencies: - "@typescript-eslint/types": "npm:8.32.1" - "@typescript-eslint/visitor-keys": "npm:8.32.1" + "@typescript-eslint/project-service": "npm:8.35.0" + "@typescript-eslint/tsconfig-utils": "npm:8.35.0" + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1810,156 +3481,186 @@ __metadata: ts-api-utils: "npm:^2.1.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/b5ae0d91ef1b46c9f3852741e26b7a14c28bb58ee8a283b9530ac484332ca58a7216b9d22eda23c5449b5fd69c6e4601ef3ebbd68e746816ae78269036c08cda + checksum: 10c0/7e94f6a92efc5832289e8bfd0b61209aa501224c935359253c29aeef8e0b981b370ee2a43e2909991c3c3cf709fcccb6380474e0e9a863e8f89e2fbd213aed59 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.32.1": - version: 8.32.1 - resolution: "@typescript-eslint/utils@npm:8.32.1" +"@typescript-eslint/utils@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/utils@npm:8.35.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.32.1" - "@typescript-eslint/types": "npm:8.32.1" - "@typescript-eslint/typescript-estree": "npm:8.32.1" + "@typescript-eslint/scope-manager": "npm:8.35.0" + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/typescript-estree": "npm:8.35.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/a2b90c0417cd3a33c6e22f9cc28c356f251bb8928ef1d25e057feda007d522d281bdc37a9a0d05b70312f00a7b3f350ca06e724867025ea85bba5a4c766732e7 + checksum: 10c0/e3317df7875305bee16edd573e4bfdafc099f26f9c284d8adb351333683aacd5b668320870653dff7ec7e0da1982bbf89dc06197bc193a3be65362f21452dbea languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.32.1": - version: 8.32.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.32.1" +"@typescript-eslint/visitor-keys@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.35.0" dependencies: - "@typescript-eslint/types": "npm:8.32.1" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/9c05053dfd048f681eb96e09ceefa8841a617b8b5950eea05e0844b38fe3510a284eb936324caa899c3ceb4bc23efe56ac01437fab378ac1beeb1c6c00404978 + "@typescript-eslint/types": "npm:8.35.0" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/df18ca9b6931cb58f5dc404fcc94f9e0cc1c22f3053c7013ab588bb8ccccd3d58a70c577c01267845d57fa124a8cf8371260d284dad97505c56b2abcf70a3dce languageName: node linkType: hard -"@unrs/resolver-binding-darwin-arm64@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.7.2" +"@unrs/resolver-binding-android-arm-eabi@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.9.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.9.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-arm64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.9.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-x64@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.7.2" +"@unrs/resolver-binding-darwin-x64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.9.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-freebsd-x64@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.7.2" +"@unrs/resolver-binding-freebsd-x64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.9.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.2" +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.2" +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.2" +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-musl@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.7.2" +"@unrs/resolver-binding-linux-arm64-musl@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.9.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.2" +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.2" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.2" +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.2" +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.2" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.2" +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-gnu@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.7.2" +"@unrs/resolver-binding-linux-x64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.9.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-musl@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.7.2" +"@unrs/resolver-binding-linux-x64-musl@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.9.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-wasm32-wasi@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.7.2" +"@unrs/resolver-binding-wasm32-wasi@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.9.2" dependencies: - "@napi-rs/wasm-runtime": "npm:^0.2.9" + "@napi-rs/wasm-runtime": "npm:^0.2.11" conditions: cpu=wasm32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.2" +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.2" +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-x64-msvc@npm:1.7.2": - version: 1.7.2 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.7.2" +"@unrs/resolver-binding-win32-x64-msvc@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.9.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -1969,12 +3670,28 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.14.0": - version: 8.14.1 - resolution: "acorn@npm:8.14.1" +"acorn-walk@npm:^8.1.1": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 + languageName: node + linkType: hard + +"acorn@npm:^8.11.0, acorn@npm:^8.14.1, acorn@npm:^8.15.0, acorn@npm:^8.4.1": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" bin: acorn: bin/acorn - checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 languageName: node linkType: hard @@ -1988,6 +3705,41 @@ __metadata: languageName: node linkType: hard +"ajv-draft-04@npm:^1.0.0, ajv-draft-04@npm:~1.0.0": + version: 1.0.0 + resolution: "ajv-draft-04@npm:1.0.0" + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/6044310bd38c17d77549fd326bd40ce1506fa10b0794540aa130180808bf94117fac8c9b448c621512bea60e4a947278f6a978e87f10d342950c15b33ddd9271 + languageName: node + linkType: hard + +"ajv-errors@npm:~3.0.0": + version: 3.0.0 + resolution: "ajv-errors@npm:3.0.0" + peerDependencies: + ajv: ^8.0.1 + checksum: 10c0/f3d864ebd4bc0b51ad622b5a889cc8903000295eaa058d59c2102f293fe126c3d901419da143eaa817b863cac2e92ae2ef6f55e6c31d07bf272099afe73961ae + languageName: node + linkType: hard + +"ajv-formats@npm:~2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + "ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -2000,6 +3752,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.0, ajv@npm:^8.17.1": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + "ansi-colors@npm:^4.1.1": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -2023,6 +3787,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" @@ -2032,6 +3803,20 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"apg-lite@npm:^1.0.3, apg-lite@npm:^1.0.4": + version: 1.0.5 + resolution: "apg-lite@npm:1.0.5" + checksum: 10c0/60060daf71743539df845382bdfa0bffe2268bd02f0285d4714a4ed8ce610b5810eb157b831cf2b3133d248e6de338c83c48ab9164a5f6069bb0e9c146531b53 + languageName: node + linkType: hard + "arch@npm:^2.2.0": version: 2.2.0 resolution: "arch@npm:2.2.0" @@ -2039,6 +3824,22 @@ __metadata: languageName: node linkType: hard +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a + languageName: node + linkType: hard + +"argparse@npm:^1.0.10": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -2072,17 +3873,26 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": + version: 3.1.9 + resolution: "array-includes@npm:3.1.9" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - is-string: "npm:^1.0.7" - checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 + es-abstract: "npm:^1.24.0" + es-object-atoms: "npm:^1.1.1" + get-intrinsic: "npm:^1.3.0" + is-string: "npm:^1.1.1" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/0235fa69078abeac05ac4250699c44996bc6f774a9cbe45db48674ce6bd142f09b327d31482ff75cf03344db4ea03eae23edb862d59378b484b47ed842574856 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 languageName: node linkType: hard @@ -2100,7 +3910,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.5": +"array.prototype.findlastindex@npm:^1.2.6": version: 1.2.6 resolution: "array.prototype.findlastindex@npm:1.2.6" dependencies: @@ -2115,7 +3925,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.3": version: 1.3.3 resolution: "array.prototype.flat@npm:1.3.3" dependencies: @@ -2197,6 +4007,15 @@ __metadata: languageName: node linkType: hard +"astring@npm:^1.8.1": + version: 1.9.0 + resolution: "astring@npm:1.9.0" + bin: + astring: bin/astring + checksum: 10c0/e7519544d9824494e80ef0e722bb3a0c543a31440d59691c13aeaceb75b14502af536b23f08db50aa6c632dafaade54caa25f0788aa7550b6b2d6e2df89e0830 + languageName: node + linkType: hard + "async-function@npm:^1.0.0": version: 1.0.0 resolution: "async-function@npm:1.0.0" @@ -2225,6 +4044,15 @@ __metadata: languageName: node linkType: hard +"autolinker@npm:^3.11.0": + version: 3.16.2 + resolution: "autolinker@npm:3.16.2" + dependencies: + tslib: "npm:^2.3.0" + checksum: 10c0/91e083bfa4393fdcd29f595e1db657d852fd74cbd1fec719f30f3d57c910e72d5e0a0b10f2b17e1e6297b52b2f5c12eb6d0cbe024c0d92671e81d8ab906fe981 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -2255,6 +4083,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.9.0": + version: 1.10.0 + resolution: "axios@npm:1.10.0" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/2239cb269cc789eac22f5d1aabd58e1a83f8f364c92c2caa97b6f5cbb4ab2903d2e557d9dc670b5813e9bcdebfb149e783fb8ab3e45098635cd2f559b06bd5d8 + languageName: node + linkType: hard + "axobject-query@npm:^4.1.0": version: 4.1.0 resolution: "axobject-query@npm:4.1.0" @@ -2269,7 +4108,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": +"base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf @@ -2285,6 +4124,15 @@ __metadata: languageName: node linkType: hard +"bcryptjs@npm:^3.0.2": + version: 3.0.2 + resolution: "bcryptjs@npm:3.0.2" + bin: + bcrypt: bin/bcrypt + checksum: 10c0/a0923cac99f83e913f8f4e4f42df6a27c6593b24d509900331d1280c4050b1544e602a0ac67b43f7bb5c969991c3ed77fd72f19b7dc873be8ee794da3d925c7e + languageName: node + linkType: hard + "blob-util@npm:^2.0.2": version: 2.0.2 resolution: "blob-util@npm:2.0.2" @@ -2300,21 +4148,21 @@ __metadata: linkType: hard "brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 languageName: node linkType: hard "brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf languageName: node linkType: hard @@ -2344,12 +4192,30 @@ __metadata: languageName: node linkType: hard -"busboy@npm:1.6.0": - version: 1.6.0 - resolution: "busboy@npm:1.6.0" +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - streamsearch: "npm:^1.1.0" - checksum: 10c0/fa7e836a2b82699b6e074393428b91ae579d4f9e21f5ac468e1b459a244341d722d2d22d10920cdd849743dbece6dca11d72de939fb75a7448825cf2babfba1f + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c languageName: node linkType: hard @@ -2392,6 +4258,13 @@ __metadata: languageName: node linkType: hard +"call-me-maybe@npm:^1.0.1, call-me-maybe@npm:^1.0.2": + version: 1.0.2 + resolution: "call-me-maybe@npm:1.0.2" + checksum: 10c0/8eff5dbb61141ebb236ed71b4e9549e488bcb5451c48c11e5667d5c75b0532303788a1101e6978cafa2d0c8c1a727805599c2741e3e0982855c9f1d78cd06c9f + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -2400,9 +4273,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001579": - version: 1.0.30001718 - resolution: "caniuse-lite@npm:1.0.30001718" - checksum: 10c0/67f9ad09bc16443e28d14f265d6e468480cd8dc1900d0d8b982222de80c699c4f2306599c3da8a3fa7139f110d4b30d49dbac78f215470f479abb6ffe141d5d3 + version: 1.0.30001726 + resolution: "caniuse-lite@npm:1.0.30001726" + checksum: 10c0/2c5f91da7fd9ebf8c6b432818b1498ea28aca8de22b30dafabe2a2a6da1e014f10e67e14f8e68e872a0867b6b4cd6001558dde04e3ab9770c9252ca5c8849d0e languageName: node linkType: hard @@ -2413,7 +4286,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -2423,6 +4296,27 @@ __metadata: languageName: node linkType: hard +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: 10c0/ea4ca9c29887335eed86d78fc67a640168342b1274da84c097abb0575a253d1265281a5052f9a863979e952bcc267b4ecaaf4fe233a7e1e0d8a47806c65b96c7 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: 10c0/ad015c3d7163563b8a0ee1f587fb0ef305ef344e9fd937f79ca51cccc233786a01d591d989d5bf7b2e66b528ac9efba47f3b1897358324e69932f6d4b25adfe1 + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 10c0/29f05081c5817bd1e975b0bf61e77b60a40f62ad371d0f0ce0fdb48ab922278bc744d1fbe33771dced751887a8403f265ff634542675c8d7375f6ff4811efd0e + languageName: node + linkType: hard + "check-more-types@npm:^2.24.0": version: 2.24.0 resolution: "check-more-types@npm:2.24.0" @@ -2430,6 +4324,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.3": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -2453,6 +4356,13 @@ __metadata: languageName: node linkType: hard +"classnames@npm:^2.5.1": + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -2499,6 +4409,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + "clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" @@ -2565,6 +4486,13 @@ __metadata: languageName: node linkType: hard +"comma-separated-tokens@npm:^1.0.0": + version: 1.0.8 + resolution: "comma-separated-tokens@npm:1.0.8" + checksum: 10c0/c3bcfeaa6d50313528a006a40bcc0f9576086665c9b48d4b3a76ddd63e7d6174734386c98be1881cbf6ecfc25e1db61cd775a7b896d2ea7a65de28f83a0f9b17 + languageName: node + linkType: hard + "commander@npm:^6.2.1": version: 6.2.1 resolution: "commander@npm:6.2.1" @@ -2579,6 +4507,13 @@ __metadata: languageName: node linkType: hard +"compare-versions@npm:^6.1.1": + version: 6.1.1 + resolution: "compare-versions@npm:6.1.1" + checksum: 10c0/415205c7627f9e4f358f571266422980c9fe2d99086be0c9a48008ef7c771f32b0fbe8e97a441ffedc3910872f917a0675fe0fe3c3b6d331cda6d8690be06338 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -2586,6 +4521,22 @@ __metadata: languageName: node linkType: hard +"copy-to-clipboard@npm:^3.3.1": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: "npm:^1.0.6" + checksum: 10c0/3ebf5e8ee00601f8c440b83ec08d838e8eabb068c1fae94a9cda6b42f288f7e1b552f3463635f419af44bf7675afc8d0390d30876cf5c2d5d35f86d9c56a3e5f + languageName: node + linkType: hard + +"core-js-pure@npm:^3.30.2": + version: 3.43.0 + resolution: "core-js-pure@npm:3.43.0" + checksum: 10c0/b888513800543af7aac13b8e33eb5153d5a8304f11fe0ec7a331878df830dcb428c723ebd5266ae52b047ffb4a86750b384aed24de731b23bc5ebdbcf05aeec5 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -2593,7 +4544,14 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6": +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -2604,6 +4562,13 @@ __metadata: languageName: node linkType: hard +"css.escape@npm:1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: 10c0/5e09035e5bf6c2c422b40c6df2eb1529657a17df37fda5d0433d722609527ab98090baf25b13970ca754079a0f3161dd3dfc0e743563ded8cfa0749d861c1525 + languageName: node + linkType: hard + "csstype@npm:^3.0.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -2611,9 +4576,9 @@ __metadata: languageName: node linkType: hard -"cypress@npm:14.3.3": - version: 14.3.3 - resolution: "cypress@npm:14.3.3" +"cypress@npm:14.5.0": + version: 14.5.0 + resolution: "cypress@npm:14.5.0" dependencies: "@cypress/request": "npm:^3.0.8" "@cypress/xvfb": "npm:^1.2.4" @@ -2641,6 +4606,7 @@ __metadata: figures: "npm:^3.2.0" fs-extra: "npm:^9.1.0" getos: "npm:^3.2.1" + hasha: "npm:5.2.2" is-installed-globally: "npm:~0.4.0" lazy-ass: "npm:^1.6.0" listr2: "npm:^3.8.3" @@ -2660,7 +4626,7 @@ __metadata: yauzl: "npm:^2.10.0" bin: cypress: bin/cypress - checksum: 10c0/b802fd1c29069037cf72d59fdfdb79c8b4779e5dd1fa58ea67c8b520fd66e64e204db9d03817950519779af081b925416ffd5ec23f7dcbf6ac52a9da1af5cfec + checksum: 10c0/b76b05c029625357fbc34f22b632c55f9f981f86c3a568a88ea3d8982b8299e4bd4275e966b2ec767f9a989c6e9059fb03a4a8086048b4e990079b1cab19ba11 languageName: node linkType: hard @@ -2720,16 +4686,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.0, debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: "npm:^2.1.1" - checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a - languageName: node - linkType: hard - -"debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0": +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0": version: 4.4.1 resolution: "debug@npm:4.4.1" dependencies: @@ -2741,6 +4698,22 @@ __metadata: languageName: node linkType: hard +"debug@npm:^3.1.0, debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"deep-extend@npm:0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -2748,6 +4721,13 @@ __metadata: languageName: node linkType: hard +"deepmerge@npm:~4.3.0": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + "define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" @@ -2777,6 +4757,13 @@ __metadata: languageName: node linkType: hard +"dependency-graph@npm:0.11.0, dependency-graph@npm:~0.11.0": + version: 0.11.0 + resolution: "dependency-graph@npm:0.11.0" + checksum: 10c0/9e6968d1534fdb502f7f3a25a3819b499f9d60f8389193950ed0b4d1618f1341b36b5d039f2cee256cfe10c9e8198ace16b271e370df06a93fac206e81602e7c + languageName: node + linkType: hard + "detect-libc@npm:^2.0.3, detect-libc@npm:^2.0.4": version: 2.0.4 resolution: "detect-libc@npm:2.0.4" @@ -2791,6 +4778,22 @@ __metadata: languageName: node linkType: hard +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -2800,6 +4803,18 @@ __metadata: languageName: node linkType: hard +"dompurify@npm:=3.2.4": + version: 3.2.4 + resolution: "dompurify@npm:3.2.4" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/6be56810fb7ad2776155c8fc2967af5056783c030094362c7d0cf1ad13f2129cf922d8eefab528a34bdebfb98e2f44b306a983ab93aefb9d6f24c18a3d027a05 + languageName: node + linkType: hard + "dotenv-cli@npm:8.0.0": version: 8.0.0 resolution: "dotenv-cli@npm:8.0.0" @@ -2828,6 +4843,13 @@ __metadata: languageName: node linkType: hard +"drange@npm:^1.0.2": + version: 1.1.1 + resolution: "drange@npm:1.1.1" + checksum: 10c0/d63f364467be64d766d2dae10ee7e4f305fa50375f910c7525fb5983cab326ad0f1a4a3abdf2379e7d7949c0011a291114d5c6c238970a940a08a6ccba02f7b3 + languageName: node + linkType: hard + "dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": version: 1.0.1 resolution: "dunder-proto@npm:1.0.1" @@ -2839,6 +4861,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + "ecc-jsbn@npm:~0.1.1": version: 0.1.2 resolution: "ecc-jsbn@npm:0.1.2" @@ -2863,26 +4892,35 @@ __metadata: languageName: node linkType: hard +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + "end-of-stream@npm:^1.1.0": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" dependencies: once: "npm:^1.4.0" - checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8 languageName: node linkType: hard "enhanced-resolve@npm:^5.18.1": - version: 5.18.1 - resolution: "enhanced-resolve@npm:5.18.1" + version: 5.18.2 + resolution: "enhanced-resolve@npm:5.18.2" dependencies: graceful-fs: "npm:^4.2.4" tapable: "npm:^2.2.0" - checksum: 10c0/4cffd9b125225184e2abed9fdf0ed3dbd2224c873b165d0838fd066cde32e0918626cba2f1f4bf6860762f13a7e2364fd89a82b99566be2873d813573ac71846 + checksum: 10c0/2a45105daded694304b0298d1c0351a981842249a9867513d55e41321a4ccf37dfd35b0c1e9ceae290eab73654b09aa7a910d618ea6f9441e97c52bc424a2372 languageName: node linkType: hard -"enquirer@npm:^2.3.6": +"enquirer@npm:^2.3.6, enquirer@npm:^2.4.1": version: 2.4.1 resolution: "enquirer@npm:2.4.1" dependencies: @@ -2892,26 +4930,47 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9": - version: 1.23.9 - resolution: "es-abstract@npm:1.23.9" +"entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": + version: 1.24.0 + resolution: "es-abstract@npm:1.24.0" dependencies: array-buffer-byte-length: "npm:^1.0.2" arraybuffer.prototype.slice: "npm:^1.0.4" available-typed-arrays: "npm:^1.0.7" call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" + call-bound: "npm:^1.0.4" data-view-buffer: "npm:^1.0.2" data-view-byte-length: "npm:^1.0.2" data-view-byte-offset: "npm:^1.0.1" es-define-property: "npm:^1.0.1" es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" + es-object-atoms: "npm:^1.1.1" es-set-tostringtag: "npm:^2.1.0" es-to-primitive: "npm:^1.3.0" function.prototype.name: "npm:^1.1.8" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.0" + get-intrinsic: "npm:^1.3.0" + get-proto: "npm:^1.0.1" get-symbol-description: "npm:^1.1.0" globalthis: "npm:^1.0.4" gopd: "npm:^1.2.0" @@ -2923,21 +4982,24 @@ __metadata: is-array-buffer: "npm:^3.0.5" is-callable: "npm:^1.2.7" is-data-view: "npm:^1.0.2" + is-negative-zero: "npm:^2.0.3" is-regex: "npm:^1.2.1" + is-set: "npm:^2.0.3" is-shared-array-buffer: "npm:^1.0.4" is-string: "npm:^1.1.1" is-typed-array: "npm:^1.1.15" - is-weakref: "npm:^1.1.0" + is-weakref: "npm:^1.1.1" math-intrinsics: "npm:^1.1.0" - object-inspect: "npm:^1.13.3" + object-inspect: "npm:^1.13.4" object-keys: "npm:^1.1.1" object.assign: "npm:^4.1.7" own-keys: "npm:^1.0.1" - regexp.prototype.flags: "npm:^1.5.3" + regexp.prototype.flags: "npm:^1.5.4" safe-array-concat: "npm:^1.1.3" safe-push-apply: "npm:^1.0.0" safe-regex-test: "npm:^1.1.0" set-proto: "npm:^1.0.0" + stop-iteration-iterator: "npm:^1.1.0" string.prototype.trim: "npm:^1.2.10" string.prototype.trimend: "npm:^1.0.9" string.prototype.trimstart: "npm:^1.0.8" @@ -2946,8 +5008,24 @@ __metadata: typed-array-byte-offset: "npm:^1.0.4" typed-array-length: "npm:^1.0.7" unbox-primitive: "npm:^1.1.0" - which-typed-array: "npm:^1.1.18" - checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b + which-typed-array: "npm:^1.1.19" + checksum: 10c0/b256e897be32df5d382786ce8cce29a1dd8c97efbab77a26609bd70f2ed29fbcfc7a31758cb07488d532e7ccccdfca76c1118f2afe5a424cdc05ca007867c318 + languageName: node + linkType: hard + +"es-aggregate-error@npm:^1.0.7": + version: 1.0.14 + resolution: "es-aggregate-error@npm:1.0.14" + dependencies: + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.24.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + globalthis: "npm:^1.0.4" + has-property-descriptors: "npm:^1.0.2" + set-function-name: "npm:^2.0.2" + checksum: 10c0/65922e6183c970a08e60eb1452c7695807fd761b0de90a93b6682446b07f2fa8272204f5c219295a26c99849fbff987c8c8112afe5f6efda1a0bc19d1e3a15ca languageName: node linkType: hard @@ -3030,6 +5108,106 @@ __metadata: languageName: node linkType: hard +"es6-promise@npm:^3.2.1": + version: 3.3.1 + resolution: "es6-promise@npm:3.3.1" + checksum: 10c0/b4fc87cb8509c001f62f860f97b05d1fd3f87220c8b832578e6a483c719ca272b73a77f2231cb26395fa865e1cab2fd4298ab67786b69e97b8d757b938f4fc1f + languageName: node + linkType: hard + +"esbuild@npm:^0.25.1": + version: 0.25.5 + resolution: "esbuild@npm:0.25.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.5" + "@esbuild/android-arm": "npm:0.25.5" + "@esbuild/android-arm64": "npm:0.25.5" + "@esbuild/android-x64": "npm:0.25.5" + "@esbuild/darwin-arm64": "npm:0.25.5" + "@esbuild/darwin-x64": "npm:0.25.5" + "@esbuild/freebsd-arm64": "npm:0.25.5" + "@esbuild/freebsd-x64": "npm:0.25.5" + "@esbuild/linux-arm": "npm:0.25.5" + "@esbuild/linux-arm64": "npm:0.25.5" + "@esbuild/linux-ia32": "npm:0.25.5" + "@esbuild/linux-loong64": "npm:0.25.5" + "@esbuild/linux-mips64el": "npm:0.25.5" + "@esbuild/linux-ppc64": "npm:0.25.5" + "@esbuild/linux-riscv64": "npm:0.25.5" + "@esbuild/linux-s390x": "npm:0.25.5" + "@esbuild/linux-x64": "npm:0.25.5" + "@esbuild/netbsd-arm64": "npm:0.25.5" + "@esbuild/netbsd-x64": "npm:0.25.5" + "@esbuild/openbsd-arm64": "npm:0.25.5" + "@esbuild/openbsd-x64": "npm:0.25.5" + "@esbuild/sunos-x64": "npm:0.25.5" + "@esbuild/win32-arm64": "npm:0.25.5" + "@esbuild/win32-ia32": "npm:0.25.5" + "@esbuild/win32-x64": "npm:0.25.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/aba8cbc11927fa77562722ed5e95541ce2853f67ad7bdc40382b558abc2e0ec57d92ffb820f082ba2047b4ef9f3bc3da068cdebe30dfd3850cfa3827a78d604e + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -3044,11 +5222,11 @@ __metadata: languageName: node linkType: hard -"eslint-config-next@npm:15.3.2": - version: 15.3.2 - resolution: "eslint-config-next@npm:15.3.2" +"eslint-config-next@npm:15.3.4": + version: 15.3.4 + resolution: "eslint-config-next@npm:15.3.4" dependencies: - "@next/eslint-plugin-next": "npm:15.3.2" + "@next/eslint-plugin-next": "npm:15.3.4" "@rushstack/eslint-patch": "npm:^1.10.3" "@typescript-eslint/eslint-plugin": "npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" "@typescript-eslint/parser": "npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" @@ -3064,7 +5242,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/91cd6ba638d46c494f5cddc592c5705e342d5c459bc754b50bbf6d2047dc50e57fb7c907f3865fa92312d2df682900c102105b82a90d04cbd2519eb67d9ed172 + checksum: 10c0/f7ad0760e4a848ed0ce5543c4d9efea02cd70b49e123875cd87b7c791e72c2d8671988ed103f7468394e90c5361978aafae67bbbb60bd87acb1a83ccbd5f9636 languageName: node linkType: hard @@ -3114,44 +5292,44 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.12.0": - version: 2.12.0 - resolution: "eslint-module-utils@npm:2.12.0" +"eslint-module-utils@npm:^2.12.1": + version: 2.12.1 + resolution: "eslint-module-utils@npm:2.12.1" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 + checksum: 10c0/6f4efbe7a91ae49bf67b4ab3644cb60bc5bd7db4cb5521de1b65be0847ffd3fb6bce0dd68f0995e1b312d137f768e2a1f842ee26fe73621afa05f850628fdc40 languageName: node linkType: hard "eslint-plugin-import@npm:^2.31.0": - version: 2.31.0 - resolution: "eslint-plugin-import@npm:2.31.0" + version: 2.32.0 + resolution: "eslint-plugin-import@npm:2.32.0" dependencies: "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.8" - array.prototype.findlastindex: "npm:^1.2.5" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" + array-includes: "npm:^3.1.9" + array.prototype.findlastindex: "npm:^1.2.6" + array.prototype.flat: "npm:^1.3.3" + array.prototype.flatmap: "npm:^1.3.3" debug: "npm:^3.2.7" doctrine: "npm:^2.1.0" eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.0" + eslint-module-utils: "npm:^2.12.1" hasown: "npm:^2.0.2" - is-core-module: "npm:^2.15.1" + is-core-module: "npm:^2.16.1" is-glob: "npm:^4.0.3" minimatch: "npm:^3.1.2" object.fromentries: "npm:^2.0.8" object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.0" + object.values: "npm:^1.2.1" semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimend: "npm:^1.0.9" tsconfig-paths: "npm:^3.15.0" peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a + checksum: 10c0/bfb1b8fc8800398e62ddfefbf3638d185286edfed26dfe00875cc2846d954491b4f5112457831588b757fa789384e1ae585f812614c4797f0499fa234fd4a48b languageName: node linkType: hard @@ -3217,13 +5395,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.3.0": - version: 8.3.0 - resolution: "eslint-scope@npm:8.3.0" +"eslint-scope@npm:^8.4.0": + version: 8.4.0 + resolution: "eslint-scope@npm:8.4.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/23bf54345573201fdf06d29efa345ab508b355492f6c6cc9e2b9f6d02b896f369b6dd5315205be94b8853809776c4d13353b85c6b531997b164ff6c3328ecf5b + checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 languageName: node linkType: hard @@ -3234,24 +5412,24 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 languageName: node linkType: hard -"eslint@npm:9.27.0": - version: 9.27.0 - resolution: "eslint@npm:9.27.0" +"eslint@npm:9.29.0": + version: 9.29.0 + resolution: "eslint@npm:9.29.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.20.0" + "@eslint/config-array": "npm:^0.20.1" "@eslint/config-helpers": "npm:^0.2.1" "@eslint/core": "npm:^0.14.0" "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.27.0" + "@eslint/js": "npm:9.29.0" "@eslint/plugin-kit": "npm:^0.3.1" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" @@ -3263,9 +5441,9 @@ __metadata: cross-spawn: "npm:^7.0.6" debug: "npm:^4.3.2" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.3.0" - eslint-visitor-keys: "npm:^4.2.0" - espree: "npm:^10.3.0" + eslint-scope: "npm:^8.4.0" + eslint-visitor-keys: "npm:^4.2.1" + espree: "npm:^10.4.0" esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" @@ -3287,18 +5465,18 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/135d301e37cd961000a9c1d3f0e1863bed29a61435dfddedba3db295973193024382190fd8790a8de83777d10f450082a29eaee8bc9ce0fb1bc1f2b0bb882280 + checksum: 10c0/75e3f841e0f8b0fa93dbb2ba6ae538bd8b611c3654117bc3dadf90bb009923dfd2c15ec2948dc6e6b8b571317cc125c5cceb9255da8cd644ee740020df645dd8 languageName: node linkType: hard -"espree@npm:^10.0.1, espree@npm:^10.3.0": - version: 10.3.0 - resolution: "espree@npm:10.3.0" +"espree@npm:^10.0.1, espree@npm:^10.4.0": + version: 10.4.0 + resolution: "espree@npm:10.4.0" dependencies: - acorn: "npm:^8.14.0" + acorn: "npm:^8.15.0" acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b languageName: node linkType: hard @@ -3327,13 +5505,20 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.2": +"esutils@npm:2.0.3, esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + "eventemitter2@npm:6.4.7": version: 6.4.7 resolution: "eventemitter2@npm:6.4.7" @@ -3358,6 +5543,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:^5.1.1": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + "executable@npm:^4.1.1": version: 4.1.1 resolution: "executable@npm:4.1.1" @@ -3367,6 +5569,13 @@ __metadata: languageName: node linkType: hard +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 + languageName: node + linkType: hard + "extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -3425,7 +5634,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": version: 3.3.3 resolution: "fast-glob@npm:3.3.3" dependencies: @@ -3438,6 +5647,13 @@ __metadata: languageName: node linkType: hard +"fast-json-patch@npm:^3.0.0-1": + version: 3.1.1 + resolution: "fast-json-patch@npm:3.1.1" + checksum: 10c0/8a0438b4818bb53153275fe5b38033610e8c9d9eb11869e6a7dc05eb92fa70f3caa57015e344eb3ae1e71c7a75ad4cc6bc2dc9e0ff281d6ed8ecd44505210ca8 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -3452,6 +5668,27 @@ __metadata: languageName: node linkType: hard +"fast-memoize@npm:^2.5.2": + version: 2.5.2 + resolution: "fast-memoize@npm:2.5.2" + checksum: 10c0/6f658f182f6eaf25a8ecdaf49affee4cac20df4e61e7ef3f04145fb86e887e7a0bd9975740ce88a9015da99459d7386eaf1342ac15be820f72f4be1ecf934d95 + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.0.7": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: 10c0/d90ec1c963394919828872f21edaa3ad6f1dddd288d2bd4e977027afff09f5db40f94e39536d4646f7e01761d704d72d51dce5af1b93717f3489ef808f5f4e4d + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.19.1 resolution: "fastq@npm:1.19.1" @@ -3461,6 +5698,15 @@ __metadata: languageName: node linkType: hard +"fault@npm:^1.0.0": + version: 1.0.4 + resolution: "fault@npm:1.0.4" + dependencies: + format: "npm:^0.2.0" + checksum: 10c0/c86c11500c1b676787296f31ade8473adcc6784f118f07c1a9429730b6288d0412f96e069ce010aa57e4f65a9cccb5abee8868bbe3c5f10de63b20482c9baebd + languageName: node + linkType: hard + "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -3471,14 +5717,14 @@ __metadata: linkType: hard "fdir@npm:^6.4.4": - version: 6.4.4 - resolution: "fdir@npm:6.4.4" + version: 6.4.6 + resolution: "fdir@npm:6.4.6" peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd + checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 languageName: node linkType: hard @@ -3509,7 +5755,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^5.0.0": +"find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" dependencies: @@ -3536,6 +5782,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + "for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" @@ -3545,6 +5801,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + "forever-agent@npm:~0.6.1": version: 0.6.1 resolution: "forever-agent@npm:0.6.1" @@ -3552,15 +5818,34 @@ __metadata: languageName: node linkType: hard -"form-data@npm:~4.0.0": - version: 4.0.2 - resolution: "form-data@npm:4.0.2" +"form-data@npm:^4.0.0, form-data@npm:~4.0.0": + version: 4.0.3 + resolution: "form-data@npm:4.0.3" dependencies: asynckit: "npm:^0.4.0" combined-stream: "npm:^1.0.8" es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" mime-types: "npm:^2.1.12" - checksum: 10c0/e534b0cf025c831a0929bf4b9bbe1a9a6b03e273a8161f9947286b9b13bf8fb279c6944aae0070c4c311100c6d6dbb815cd955dc217728caf73fad8dc5b8ee9c + checksum: 10c0/f0cf45873d600110b5fadf5804478377694f73a1ed97aaa370a74c90cebd7fe6e845a081171668a5476477d0d55a73a4e03d6682968fa8661eac2a81d651fcdb + languageName: node + linkType: hard + +"format@npm:^0.2.0": + version: 0.2.2 + resolution: "format@npm:0.2.2" + checksum: 10c0/6032ba747541a43abf3e37b402b2f72ee08ebcb58bf84d816443dd228959837f1cddf1e8775b29fa27ff133f4bd146d041bfca5f9cf27f048edf3d493cf8fee6 + languageName: node + linkType: hard + +"fs-extra@npm:^11.3.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a languageName: node linkType: hard @@ -3576,6 +5861,15 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -3604,6 +5898,13 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + "get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": version: 1.3.0 resolution: "get-intrinsic@npm:1.3.0" @@ -3648,6 +5949,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.1.0": version: 1.1.0 resolution: "get-symbol-description@npm:1.1.0" @@ -3704,6 +6012,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + "global-dirs@npm:^3.0.0": version: 3.0.1 resolution: "global-dirs@npm:3.0.1" @@ -3730,6 +6054,20 @@ __metadata: languageName: node linkType: hard +"globby@npm:11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + "gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" @@ -3737,7 +6075,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -3799,6 +6137,16 @@ __metadata: languageName: node linkType: hard +"hasha@npm:5.2.2": + version: 5.2.2 + resolution: "hasha@npm:5.2.2" + dependencies: + is-stream: "npm:^2.0.0" + type-fest: "npm:^0.8.0" + checksum: 10c0/9d10d4e665a37beea6e18ba3a0c0399a05b26e505c5ff2fe9115b64fedb3ca95f68c89cf15b08ee4d09fd3064b5e1bfc8e8247353c7aa6b7388471d0f86dca74 + languageName: node + linkType: hard + "hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -3808,6 +6156,57 @@ __metadata: languageName: node linkType: hard +"hast-util-parse-selector@npm:^2.0.0": + version: 2.2.5 + resolution: "hast-util-parse-selector@npm:2.2.5" + checksum: 10c0/29b7ee77960ded6a99d30c287d922243071cc07b39f2006f203bd08ee54eb8f66bdaa86ef6527477c766e2382d520b60ee4e4087f189888c35d8bcc020173648 + languageName: node + linkType: hard + +"hastscript@npm:^6.0.0": + version: 6.0.0 + resolution: "hastscript@npm:6.0.0" + dependencies: + "@types/hast": "npm:^2.0.0" + comma-separated-tokens: "npm:^1.0.0" + hast-util-parse-selector: "npm:^2.0.0" + property-information: "npm:^5.0.0" + space-separated-tokens: "npm:^1.0.0" + checksum: 10c0/f76d9cf373cb075c8523c8ad52709f09f7e02b7c9d3152b8d35c65c265b9f1878bed6023f215a7d16523921036d40a7da292cb6f4399af9b5eccac2a5a5eb330 + languageName: node + linkType: hard + +"highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0": + version: 10.7.3 + resolution: "highlight.js@npm:10.7.3" + checksum: 10c0/073837eaf816922427a9005c56c42ad8786473dc042332dfe7901aa065e92bc3d94ebf704975257526482066abb2c8677cc0326559bb8621e046c21c5991c434 + languageName: node + linkType: hard + +"highlightjs-vue@npm:^1.0.0": + version: 1.0.0 + resolution: "highlightjs-vue@npm:1.0.0" + checksum: 10c0/9be378c70b864ca5eee87b07859222e31c946a8ad176227e54f7006a498223974ebe19fcce6e38ad5eb3c1ed0e16a580c4edefdf2cb882b6dfab1c3866cc047a + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + "http-signature@npm:~1.4.0": version: 1.4.0 resolution: "http-signature@npm:1.4.0" @@ -3819,6 +6218,23 @@ __metadata: languageName: node linkType: hard +"http2-client@npm:^1.2.5": + version: 1.3.5 + resolution: "http2-client@npm:1.3.5" + checksum: 10c0/4974f10f5c8b5b7b9e23771190471d02690e9a22c22e028d84715b7ecdcda05017fc9e565476558da3bdf0ba642d24186a94818d0b9afee706ccf9874034be73 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" @@ -3826,7 +6242,23 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13": +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb @@ -3841,9 +6273,23 @@ __metadata: linkType: hard "ignore@npm:^7.0.0": - version: 7.0.4 - resolution: "ignore@npm:7.0.4" - checksum: 10c0/90e1f69ce352b9555caecd9cbfd07abe7626d312a6f90efbbb52c7edca6ea8df065d66303863b30154ab1502afb2da8bc59d5b04e1719a52ef75bbf675c488eb + version: 7.0.5 + resolution: "ignore@npm:7.0.5" + checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d + languageName: node + linkType: hard + +"immer@npm:^9.0.6": + version: 9.0.21 + resolution: "immer@npm:9.0.21" + checksum: 10c0/03ea3ed5d4d72e8bd428df4a38ad7e483ea8308e9a113d3b42e0ea2cc0cc38340eb0a6aca69592abbbf047c685dbda04e3d34bf2ff438ab57339ed0a34cc0a05 + languageName: node + linkType: hard + +"immutable@npm:^3.x.x": + version: 3.8.2 + resolution: "immutable@npm:3.8.2" + checksum: 10c0/fb6a2999ad3bda9e51741721e42547076dd492635ee4df9241224055fe953ec843583a700088cc4915f23dc326e5084f4e17f1bbd7388c3e872ef5a242e0ac5e languageName: node linkType: hard @@ -3871,6 +6317,13 @@ __metadata: languageName: node linkType: hard +"inherits@npm:^2.0.1": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + "ini@npm:2.0.0": version: 2.0.0 resolution: "ini@npm:2.0.0" @@ -3889,6 +6342,42 @@ __metadata: languageName: node linkType: hard +"invariant@npm:^2.2.2": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 10c0/1505b1de5a1fd74022c05fb21b0e683a8f5229366bac8dc4d34cf6935bcfd104d1125a5e6b083fb778847629f76e5bdac538de5367bdf2b927a1356164e23985 + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + checksum: 10c0/d623abae7130a7015c6bf33d99151d4e7005572fd170b86568ff4de5ae86ac7096608b87dd4a1d4dbbd497e392b6396930ba76c9297a69455909cebb68005905 + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -3955,7 +6444,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0": +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" dependencies: @@ -3985,6 +6474,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: 10c0/a4ad53c4c5c4f5a12214e7053b10326711f6a71f0c63ba1314a77bd71df566b778e4ebd29f9fb6815f07a4dc50c3767fb19bd6fc9fa05e601410f1d64ffeac48 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -4029,6 +6525,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: 10c0/ec4c64e5624c0f240922324bc697e166554f09d3ddc7633fc526084502626445d0a871fbd8cae52a9844e83bd0bb414193cc5a66806d7b2867907003fc70c5ea + languageName: node + linkType: hard + "is-installed-globally@npm:~0.4.0": version: 0.4.0 resolution: "is-installed-globally@npm:0.4.0" @@ -4046,6 +6549,13 @@ __metadata: languageName: node linkType: hard +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e + languageName: node + linkType: hard + "is-number-object@npm:^1.1.1": version: 1.1.1 resolution: "is-number-object@npm:1.1.1" @@ -4105,7 +6615,7 @@ __metadata: languageName: node linkType: hard -"is-string@npm:^1.0.7, is-string@npm:^1.1.1": +"is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" dependencies: @@ -4156,7 +6666,7 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1": version: 1.1.1 resolution: "is-weakref@npm:1.1.1" dependencies: @@ -4189,6 +6699,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -4210,6 +6727,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + "jiti@npm:2.4.2, jiti@npm:^2.4.2": version: 2.4.2 resolution: "jiti@npm:2.4.2" @@ -4226,6 +6756,13 @@ __metadata: languageName: node linkType: hard +"js-file-download@npm:^0.4.12": + version: 0.4.12 + resolution: "js-file-download@npm:0.4.12" + checksum: 10c0/3caec1491fa744214409e0bcb1fb18d76e3d56715c477ee033cb7d8becb5cf777803409dc1995c913bf1a2270dac98d78f07d83bba319b8e800bc7bf2a7266a7 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -4233,7 +6770,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^4.1.0": +"js-yaml@npm:=4.1.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: @@ -4244,6 +6781,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" @@ -4251,6 +6795,13 @@ __metadata: languageName: node linkType: hard +"jsep@npm:^1.2.0, jsep@npm:^1.3.6, jsep@npm:^1.4.0": + version: 1.4.0 + resolution: "jsep@npm:1.4.0" + checksum: 10c0/fe60adf47e050e22eadced42514a51a15a3cf0e2d147896584486acd8ee670fc16641101b9aeb81f4aaba382043d29744b7aac41171e8106515b14f27e0c7116 + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -4265,6 +6816,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + "json-schema@npm:0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" @@ -4297,6 +6855,22 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonc-parser@npm:~2.2.1": + version: 2.2.1 + resolution: "jsonc-parser@npm:2.2.1" + checksum: 10c0/cfb4e9d0050355f6c30602ed2330e5a6d5bac9b1bc98426cf83f624d43e6306c069db0ab1532c49383337303188e9db2f28625d1b147d6927594071dc605e792 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -4310,6 +6884,34 @@ __metadata: languageName: node linkType: hard +"jsonpath-plus@npm:^10.3.0, jsonpath-plus@npm:^6.0.1 || ^10.1.0": + version: 10.3.0 + resolution: "jsonpath-plus@npm:10.3.0" + dependencies: + "@jsep-plugin/assignment": "npm:^1.3.0" + "@jsep-plugin/regex": "npm:^1.0.4" + jsep: "npm:^1.4.0" + bin: + jsonpath: bin/jsonpath-cli.js + jsonpath-plus: bin/jsonpath-cli.js + checksum: 10c0/f5ff53078ecab98e8afd1dcdb4488e528653fa5a03a32d671f52db1ae9c3236e6e072d75e1949a80929fd21b07603924a586f829b40ad35993fa0247fa4f7506 + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.0": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 10c0/89929e58b400fcb96928c0504fcf4fc3f919d81e9543ceb055df125538470ee25290bb4984251e172e6ef8fcc55761eb998c118da763a82051ad89d4cb073fe7 + languageName: node + linkType: hard + +"jsonschema@npm:^1.5.0": + version: 1.5.0 + resolution: "jsonschema@npm:1.5.0" + checksum: 10c0/c24ddb8d741f02efc0da3ad9b597a275f6b595062903d3edbfaa535c3f9c4c98613df68da5cb6635ed9aeab30d658986fea61d7662fc5b2b92840d5a1e21235e + languageName: node + linkType: hard + "jsprim@npm:^2.0.2": version: 2.0.2 resolution: "jsprim@npm:2.0.2" @@ -4366,6 +6968,13 @@ __metadata: languageName: node linkType: hard +"leven@npm:3.1.0, leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -4486,6 +7095,15 @@ __metadata: languageName: node linkType: hard +"linkify-it@npm:^5.0.0": + version: 5.0.0 + resolution: "linkify-it@npm:5.0.0" + dependencies: + uc.micro: "npm:^2.0.0" + checksum: 10c0/ff4abbcdfa2003472fc3eb4b8e60905ec97718e11e33cca52059919a4c80cc0e0c2a14d23e23d8c00e5402bc5a885cdba8ca053a11483ab3cc8b3c7a52f88e2d + languageName: node + linkType: hard + "listr2@npm:^3.8.3": version: 3.14.0 resolution: "listr2@npm:3.14.0" @@ -4516,6 +7134,20 @@ __metadata: languageName: node linkType: hard +"lodash.debounce@npm:^4": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + +"lodash.isempty@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.isempty@npm:4.4.0" + checksum: 10c0/6c7eaa0802398736809b9e8aed8b8ac1abca9be71788fd719ba9d7f5b4c23e8dc63b7f049df4131713dda30a2fdedc2f655268e9deb8cd5a985dfc934afca194 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -4523,6 +7155,13 @@ __metadata: languageName: node linkType: hard +"lodash.omitby@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.omitby@npm:4.6.0" + checksum: 10c0/4608b1d8c4063b63349a3462852465fbe74781d737fbb26a0a7f00b0e65f6ccbc13fa490a38f9380103d93fc398e3873983038efadfafc67ccafbb25d9bc7bf4 + languageName: node + linkType: hard + "lodash.once@npm:^4.1.1": version: 4.1.1 resolution: "lodash.once@npm:4.1.1" @@ -4530,7 +7169,35 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.21": +"lodash.topath@npm:^4.5.2": + version: 4.5.2 + resolution: "lodash.topath@npm:4.5.2" + checksum: 10c0/f555a1459c11c807517be6c3a3e8030a9e92a291b2d6b598511e0bddbe99297e870b20e097019b613a3035d061bac63cb42621386c0b9dc22fd3d85e58459653 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: 10c0/262d400bb0952f112162a320cc4a75dea4f66078b9e7e3075ffbc9c6aa30b3e9df3cf20e7da7d566105e1ccf7804e4fbd7d804eee0b53de05d83f16ffbf41c5e + languageName: node + linkType: hard + +"lodash.uniqby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.uniqby@npm:4.7.0" + checksum: 10c0/c505c0de20ca759599a2ba38710e8fb95ff2d2028e24d86c901ef2c74be8056518571b9b754bfb75053b2818d30dd02243e4a4621a6940c206bbb3f7626db656 + languageName: node + linkType: hard + +"lodash.uniqwith@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniqwith@npm:4.5.0" + checksum: 10c0/3db1748302f5903cd2e4c361eb084bcfc48fe4062e37be4860363a0be643bf6617c1f115d61189b69623056a55acbcd451a52b3042b4864d5acc86a3b0ac83df + languageName: node + linkType: hard + +"lodash@npm:^4.15.0, lodash@npm:^4.17.21, lodash@npm:~4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -4559,7 +7226,21 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.4.0": +"loglevel-plugin-prefix@npm:0.8.4": + version: 0.8.4 + resolution: "loglevel-plugin-prefix@npm:0.8.4" + checksum: 10c0/357524eec4c165ff823b5bbf72e8373ff529e5cb95c1f4b20749847bd5b5b16ab328d6d33d1a9019f1a2dc52e28fca5d595e52f2ee20e24986182a6f9552a9ec + languageName: node + linkType: hard + +"loglevel@npm:^1.9.2": + version: 1.9.2 + resolution: "loglevel@npm:1.9.2" + checksum: 10c0/1e317fa4648fe0b4a4cffef6de037340592cee8547b07d4ce97a487abe9153e704b98451100c799b032c72bb89c9366d71c9fb8192ada8703269263ae77acdc7 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -4570,12 +7251,36 @@ __metadata: languageName: node linkType: hard -"lucide-react@npm:^0.510.0": - version: 0.510.0 - resolution: "lucide-react@npm:0.510.0" +"lowlight@npm:^1.17.0": + version: 1.20.0 + resolution: "lowlight@npm:1.20.0" + dependencies: + fault: "npm:^1.0.0" + highlight.js: "npm:~10.7.0" + checksum: 10c0/728bce6f6fe8b157f48d3324e597f452ce0eed2ccff1c0f41a9047380f944e971eb45bceb31f08fbb64d8f338dabb166f10049b35b92c7ec5cf0241d6adb3dea + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lucide-react@npm:^0.515.0": + version: 0.515.0 + resolution: "lucide-react@npm:0.515.0" peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10c0/00b3efed64c370cd5ae97023583996ff83939baf6f4af11393d536ca9e520b0cc1a82a81aa6d0350625bff398daaa69357df74383631f2c3a0aeb6974f4237c7 + checksum: 10c0/00485e09ab3d0bbb34797b1f368c269e8708522b6e2f46fd84dd5bd99741546487be9a65a260f274e8049b81cc37687566e26132f5752352c8d9bc8e5d0b3dea + languageName: node + linkType: hard + +"lunr@npm:^2.3.9": + version: 2.3.9 + resolution: "lunr@npm:2.3.9" + checksum: 10c0/77d7dbb4fbd602aac161e2b50887d8eda28c0fa3b799159cee380fbb311f1e614219126ecbbd2c3a9c685f1720a8109b3c1ca85cc893c39b6c9cc6a62a1d8a8b languageName: node linkType: hard @@ -4588,6 +7293,48 @@ __metadata: languageName: node linkType: hard +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"markdown-it@npm:^14.1.0": + version: 14.1.0 + resolution: "markdown-it@npm:14.1.0" + dependencies: + argparse: "npm:^2.0.1" + entities: "npm:^4.4.0" + linkify-it: "npm:^5.0.0" + mdurl: "npm:^2.0.0" + punycode.js: "npm:^2.3.1" + uc.micro: "npm:^2.1.0" + bin: + markdown-it: bin/markdown-it.mjs + checksum: 10c0/9a6bb444181d2db7016a4173ae56a95a62c84d4cbfb6916a399b11d3e6581bf1cc2e4e1d07a2f022ae72c25f56db90fbe1e529fca16fbf9541659dc53480d4b4 + languageName: node + linkType: hard + "math-intrinsics@npm:^1.1.0": version: 1.1.0 resolution: "math-intrinsics@npm:1.1.0" @@ -4595,10 +7342,18 @@ __metadata: languageName: node linkType: hard +"mdurl@npm:^2.0.0": + version: 2.0.0 + resolution: "mdurl@npm:2.0.0" + checksum: 10c0/633db522272f75ce4788440669137c77540d74a83e9015666a9557a152c02e245b192edc20bc90ae953bbab727503994a53b236b4d9c99bdaee594d0e7dd2ce0 + languageName: node + linkType: hard + "meetup@workspace:.": version: 0.0.0-use.local resolution: "meetup@workspace:." dependencies: + "@asteasolutions/zod-to-openapi": "npm:^8.0.0-beta.4" "@auth/prisma-adapter": "npm:^2.9.1" "@eslint/eslintrc": "npm:3.3.1" "@fortawesome/fontawesome-svg-core": "npm:^6.7.2" @@ -4606,40 +7361,55 @@ __metadata: "@fortawesome/free-regular-svg-icons": "npm:^6.7.2" "@fortawesome/free-solid-svg-icons": "npm:^6.7.2" "@fortawesome/react-fontawesome": "npm:^0.2.2" - "@prisma/client": "npm:^6.8.2" - "@radix-ui/react-dropdown-menu": "npm:^2.1.14" + "@hookform/resolvers": "npm:^5.0.1" + "@prisma/client": "npm:^6.9.0" + "@radix-ui/react-avatar": "npm:^1.1.10" + "@radix-ui/react-collapsible": "npm:^1.1.11" + "@radix-ui/react-dialog": "npm:^1.1.14" + "@radix-ui/react-dropdown-menu": "npm:^2.1.15" "@radix-ui/react-hover-card": "npm:^1.1.13" "@radix-ui/react-label": "npm:^2.1.6" "@radix-ui/react-scroll-area": "npm:^1.2.8" "@radix-ui/react-select": "npm:^2.2.4" - "@radix-ui/react-separator": "npm:^1.1.6" - "@radix-ui/react-slot": "npm:^1.2.2" + "@radix-ui/react-separator": "npm:^1.1.7" + "@radix-ui/react-slot": "npm:^1.2.3" "@radix-ui/react-switch": "npm:^1.2.4" "@radix-ui/react-tabs": "npm:^1.1.11" - "@tailwindcss/postcss": "npm:4.1.7" - "@types/node": "npm:22.15.21" - "@types/react": "npm:19.1.4" - "@types/react-dom": "npm:19.1.5" + "@radix-ui/react-tooltip": "npm:^1.2.7" + "@tailwindcss/postcss": "npm:4.1.10" + "@tanstack/react-query": "npm:^5.80.7" + "@types/node": "npm:22.15.33" + "@types/react": "npm:19.1.8" + "@types/react-dom": "npm:19.1.6" + "@types/swagger-ui-react": "npm:5" + "@types/webpack-env": "npm:1.18.8" + bcryptjs: "npm:^3.0.2" class-variance-authority: "npm:^0.7.1" clsx: "npm:^2.1.1" - cypress: "npm:14.3.3" + cypress: "npm:14.5.0" dotenv-cli: "npm:8.0.0" - eslint: "npm:9.27.0" - eslint-config-next: "npm:15.3.2" + eslint: "npm:9.29.0" + eslint-config-next: "npm:15.3.4" eslint-config-prettier: "npm:10.1.5" - lucide-react: "npm:^0.510.0" - next: "npm:15.3.2" + lucide-react: "npm:^0.515.0" + next: "npm:15.4.0-canary.95" next-auth: "npm:^5.0.0-beta.25" next-themes: "npm:^0.4.6" - postcss: "npm:8.5.3" + orval: "npm:7.10.0" + postcss: "npm:8.5.6" prettier: "npm:3.5.3" - prisma: "npm:6.8.2" + prisma: "npm:6.10.1" react: "npm:^19.0.0" react-dom: "npm:^19.0.0" + react-hook-form: "npm:^7.56.4" + swagger-ui-react: "npm:^5.24.1" tailwind-merge: "npm:^3.2.0" - tailwindcss: "npm:4.1.7" - tw-animate-css: "npm:1.3.0" + tailwindcss: "npm:4.1.10" + ts-node: "npm:10.9.2" + tsconfig-paths: "npm:4.2.0" + tw-animate-css: "npm:1.3.4" typescript: "npm:5.8.3" + zod: "npm:^3.25.60" languageName: unknown linkType: soft @@ -4650,7 +7420,7 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.3.0": +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb @@ -4690,7 +7460,16 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.1.2": +"minim@npm:~0.23.8": + version: 0.23.8 + resolution: "minim@npm:0.23.8" + dependencies: + lodash: "npm:^4.15.0" + checksum: 10c0/51563ef7481a262ae9bda18ae927b339977f77f1a11adfba0d7bef0096dbd9303ca9d6cb5d7ffea68c16b47fc124358670bc0bee136289f61d6ae3632256577f + languageName: node + linkType: hard + +"minimatch@npm:3.1.2, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -4699,7 +7478,25 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.4": +"minimatch@npm:^6.2.0": + version: 6.2.0 + resolution: "minimatch@npm:6.2.0" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/0884fcf2dd6d3cb5b76e21c33e1797f32c6d4bdd3cefe693ea4f8bb829734b2ca0eee94f0a4f622e9f9fa305f838d2b4f5251df38fcbf98bf1a03a0d07d4ce2d + languageName: node + linkType: hard + +"minimatch@npm:^7.4.3": + version: 7.4.6 + resolution: "minimatch@npm:7.4.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/e587bf3d90542555a3d58aca94c549b72d58b0a66545dd00eef808d0d66e5d9a163d3084da7f874e83ca8cc47e91c670e6c6f6593a3e7bb27fcc0e6512e87c67 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -4715,7 +7512,67 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^7.0.4, minipass@npm:^7.1.2": +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 @@ -4747,7 +7604,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.6, nanoid@npm:^3.3.8": +"nanoid@npm:^3.3.11, nanoid@npm:^3.3.6": version: 3.3.11 resolution: "nanoid@npm:3.3.11" bin: @@ -4756,7 +7613,7 @@ __metadata: languageName: node linkType: hard -"napi-postinstall@npm:^0.2.2": +"napi-postinstall@npm:^0.2.4": version: 0.2.4 resolution: "napi-postinstall@npm:0.2.4" bin: @@ -4772,11 +7629,25 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"neotraverse@npm:=0.6.18": + version: 0.6.18 + resolution: "neotraverse@npm:0.6.18" + checksum: 10c0/46f4c53cbbdc53671150916b544a9f46e27781f8003985237507542190173bec131168d89b846535f9c34c0a2a7debb1ab3a4f7a93d08218e2c194a363708ffa + languageName: node + linkType: hard + "next-auth@npm:^5.0.0-beta.25": - version: 5.0.0-beta.28 - resolution: "next-auth@npm:5.0.0-beta.28" + version: 5.0.0-beta.29 + resolution: "next-auth@npm:5.0.0-beta.29" dependencies: - "@auth/core": "npm:0.39.1" + "@auth/core": "npm:0.40.0" peerDependencies: "@simplewebauthn/browser": ^9.0.1 "@simplewebauthn/server": ^9.0.2 @@ -4790,7 +7661,7 @@ __metadata: optional: true nodemailer: optional: true - checksum: 10c0/56ab8c5e9bdbffe65191a1afa1d18b95df9f61686f9d2faca3f53098eb59491df5929540d8bdb3258a0ab8d26ff2707e6256e34212c329c624f3014652cb8701 + checksum: 10c0/2c6bada9a5f28a9a172d3ad295bfb05b648a4fced01f9988154df1ebca712cf460fb49173ada4c26de4c7ab180256f40ac19d16e2147c1c68f2a7475ab5d5ea8 languageName: node linkType: hard @@ -4804,29 +7675,27 @@ __metadata: languageName: node linkType: hard -"next@npm:15.3.2": - version: 15.3.2 - resolution: "next@npm:15.3.2" +"next@npm:15.4.0-canary.95": + version: 15.4.0-canary.95 + resolution: "next@npm:15.4.0-canary.95" dependencies: - "@next/env": "npm:15.3.2" - "@next/swc-darwin-arm64": "npm:15.3.2" - "@next/swc-darwin-x64": "npm:15.3.2" - "@next/swc-linux-arm64-gnu": "npm:15.3.2" - "@next/swc-linux-arm64-musl": "npm:15.3.2" - "@next/swc-linux-x64-gnu": "npm:15.3.2" - "@next/swc-linux-x64-musl": "npm:15.3.2" - "@next/swc-win32-arm64-msvc": "npm:15.3.2" - "@next/swc-win32-x64-msvc": "npm:15.3.2" - "@swc/counter": "npm:0.1.3" + "@next/env": "npm:15.4.0-canary.95" + "@next/swc-darwin-arm64": "npm:15.4.0-canary.95" + "@next/swc-darwin-x64": "npm:15.4.0-canary.95" + "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.95" + "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.95" + "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.95" + "@next/swc-linux-x64-musl": "npm:15.4.0-canary.95" + "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.95" + "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.95" "@swc/helpers": "npm:0.5.15" - busboy: "npm:1.6.0" caniuse-lite: "npm:^1.0.30001579" postcss: "npm:8.4.31" sharp: "npm:^0.34.1" styled-jsx: "npm:5.1.6" peerDependencies: "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.41.2 + "@playwright/test": ^1.51.1 babel-plugin-react-compiler: "*" react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -4861,11 +7730,137 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/81bc21e7853cd19ba0dbfedda8a0221819a12286146f43752cb6ecaeed7a8e5f1f3027bdd89e70ee1fd793d2be0f7e181f1944d2ffe8ee0aefef4c312aed4e27 + checksum: 10c0/7841ffa1522278ae2205e3343be2ab61bb5d6a1492c062f2469031c59f00dff3bd102d336a224d6956c6d0c57700ff0818d7f9e5ee926a5315ab73ae39062f2e languageName: node linkType: hard -"npm-run-path@npm:^4.0.0": +"nimma@npm:0.2.3": + version: 0.2.3 + resolution: "nimma@npm:0.2.3" + dependencies: + "@jsep-plugin/regex": "npm:^1.0.1" + "@jsep-plugin/ternary": "npm:^1.0.2" + astring: "npm:^1.8.1" + jsep: "npm:^1.2.0" + jsonpath-plus: "npm:^6.0.1 || ^10.1.0" + lodash.topath: "npm:^4.5.2" + dependenciesMeta: + jsonpath-plus: + optional: true + lodash.topath: + optional: true + checksum: 10c0/7e31b03e84b1c9ce0aeacce5a026629e3bc8ed7be1989ec098de416d071227506b290069e88bb54e2005642c6a6012696f5c427b52a0a9bbe1a9d193f4a9efb5 + languageName: node + linkType: hard + +"node-abort-controller@npm:^3.1.1": + version: 3.1.1 + resolution: "node-abort-controller@npm:3.1.1" + checksum: 10c0/f7ad0e7a8e33809d4f3a0d1d65036a711c39e9d23e0319d80ebe076b9a3b4432b4d6b86a7fab65521de3f6872ffed36fc35d1327487c48eb88c517803403eda3 + languageName: node + linkType: hard + +"node-addon-api@npm:^8.0.0, node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0, node-addon-api@npm:^8.3.1": + version: 8.4.0 + resolution: "node-addon-api@npm:8.4.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/d51be099e1b9a6ac4a72f1a60787004d44c8ffe4be1efa38755d54b2a9f4f66647cc6913070e0ed20256d0e6eacceabfff90175fba2ef71153c2d06f8db8e7a9 + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch-commonjs@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch-commonjs@npm:3.3.2" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/87d36ed3e6dcb9dea96783700bc0becf0fdbcdc26c975e16b01a0d3a6e2f420c7e589e765bbfad461ae5377d4c5bd5f6937969a9dd34a0d736a81ac898f5c26a + languageName: node + linkType: hard + +"node-fetch-h2@npm:^2.3.0": + version: 2.3.0 + resolution: "node-fetch-h2@npm:2.3.0" + dependencies: + http2-client: "npm:^1.2.5" + checksum: 10c0/10f117c5aa1d475fff05028dddd617a61606083e4d6c4195dd5f5b03c973182e0d125e804771e6888d04f7d92b5c9c27a6149d1beedd6af1e0744f163e8a02d9 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.8.0, node-gyp-build@npm:^4.8.2, node-gyp-build@npm:^4.8.4": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + languageName: node + linkType: hard + +"node-readfiles@npm:^0.2.0": + version: 0.2.0 + resolution: "node-readfiles@npm:0.2.0" + dependencies: + es6-promise: "npm:^3.2.1" + checksum: 10c0/9de2f741baae29f2422b22ef4399b5f7cb6c20372d4e88447a98d00a92cf1a35efdf942d24eee153a87d885aa7e7442b4bc6de33d4b91c47ba9da501780c76a1 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: @@ -4874,10 +7869,68 @@ __metadata: languageName: node linkType: hard +"oas-kit-common@npm:^1.0.8": + version: 1.0.8 + resolution: "oas-kit-common@npm:1.0.8" + dependencies: + fast-safe-stringify: "npm:^2.0.7" + checksum: 10c0/5619a0bd19a07b52af1afeff26e44601002c0fd558d0020fdb720cb3723b60c83b80efede3a62110ce315f15b971751fb46396760e0e507fb8fd412cdc3808dd + languageName: node + linkType: hard + +"oas-linter@npm:^3.2.2": + version: 3.2.2 + resolution: "oas-linter@npm:3.2.2" + dependencies: + "@exodus/schemasafe": "npm:^1.0.0-rc.2" + should: "npm:^13.2.1" + yaml: "npm:^1.10.0" + checksum: 10c0/5a8ea3d8a0bf185b676659d1e1c0b9b50695aeff53ccd5c264c8e99b4a7c0021f802b937913d76f0bc1a6a2b8ae151df764d95302b0829063b9b26f8c436871c + languageName: node + linkType: hard + +"oas-resolver@npm:^2.5.6": + version: 2.5.6 + resolution: "oas-resolver@npm:2.5.6" + dependencies: + node-fetch-h2: "npm:^2.3.0" + oas-kit-common: "npm:^1.0.8" + reftools: "npm:^1.1.9" + yaml: "npm:^1.10.0" + yargs: "npm:^17.0.1" + bin: + resolve: resolve.js + checksum: 10c0/cfba5ba3f7ea6673a840836cf194a80ba7f77e6d1ee005aa35cc838cad56d7e455fa53753ae7cc38810c96405b8606e675098ea7023639cf546cb10343f180f9 + languageName: node + linkType: hard + +"oas-schema-walker@npm:^1.1.5": + version: 1.1.5 + resolution: "oas-schema-walker@npm:1.1.5" + checksum: 10c0/8ba6bd2a9a8ede2c5574f217653a9e2b889a7c5be69c664a57e293591c58952e8510f4f9e2a82fd5f52491c859ce5c2b68342e9b971e9667f6b811e7fb56fd54 + languageName: node + linkType: hard + +"oas-validator@npm:^5.0.8": + version: 5.0.8 + resolution: "oas-validator@npm:5.0.8" + dependencies: + call-me-maybe: "npm:^1.0.1" + oas-kit-common: "npm:^1.0.8" + oas-linter: "npm:^3.2.2" + oas-resolver: "npm:^2.5.6" + oas-schema-walker: "npm:^1.1.5" + reftools: "npm:^1.1.9" + should: "npm:^13.2.1" + yaml: "npm:^1.10.0" + checksum: 10c0/16bb722042dcba93892c50db2201df6aeea9c3dd60e2f7bc18b36f23c610d136f52a5946908817f6fdd4139219fa4b177f952b9831039078b4c8730fa026b180 + languageName: node + linkType: hard + "oauth4webapi@npm:^3.3.0": - version: 3.5.1 - resolution: "oauth4webapi@npm:3.5.1" - checksum: 10c0/5d57ba4299d61173b28ff0612fdfcc550b02c2ce4afcd1641103960c02af18268b55a70f26d47bbfc956680967c307546284b4a0b1f13845589e247f798ff395 + version: 3.5.3 + resolution: "oauth4webapi@npm:3.5.3" + checksum: 10c0/3c8b6854c68067481b4934386354e39824201dc4eade50b02448330a0eca3f4a68038548861e2a193eb12c55d934097c8c4b7e556036813da60646e556f61056 languageName: node linkType: hard @@ -4888,7 +7941,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.13.3": +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 @@ -4951,7 +8004,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.6, object.values@npm:^1.2.0, object.values@npm:^1.2.1": +"object.values@npm:^1.1.6, object.values@npm:^1.2.1": version: 1.2.1 resolution: "object.values@npm:1.2.1" dependencies: @@ -4972,7 +8025,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0": +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -4981,6 +8034,51 @@ __metadata: languageName: node linkType: hard +"openapi-path-templating@npm:^2.2.1": + version: 2.2.1 + resolution: "openapi-path-templating@npm:2.2.1" + dependencies: + apg-lite: "npm:^1.0.4" + checksum: 10c0/5b42e2d6c1f709272e227502b94aea072d7157cd9bc1f3e7f9c74ea81ed51138fd23de096991fff8cefcdd73ab6f5292fe495804ba9c7ae9071b9d30c0c50575 + languageName: node + linkType: hard + +"openapi-server-url-templating@npm:^1.3.0": + version: 1.3.0 + resolution: "openapi-server-url-templating@npm:1.3.0" + dependencies: + apg-lite: "npm:^1.0.4" + checksum: 10c0/8018822c2932d675457f3d1ad632d308e1d5c3becbda9eed27518a9e0117a792e320354f4b5ccbc4db89980899e82f0de420e36ecf71ba5d47d5b5c51e703ac0 + languageName: node + linkType: hard + +"openapi3-ts@npm:4.2.2": + version: 4.2.2 + resolution: "openapi3-ts@npm:4.2.2" + dependencies: + yaml: "npm:^2.3.4" + checksum: 10c0/8569c0cecf12353d57d7cebe28d495a2b33a06f6f9ebb1b9c808490f9ea87e7e480c62ffb9c3632f78647b09ca722bbc39b36804e73cea1f8fc7626785a23b99 + languageName: node + linkType: hard + +"openapi3-ts@npm:4.4.0": + version: 4.4.0 + resolution: "openapi3-ts@npm:4.4.0" + dependencies: + yaml: "npm:^2.5.0" + checksum: 10c0/900b834279fc8a43c545728ad75ec7c26934ec5344225b60d1e1c0df44d742d7e7379aea18d9034e03031f079d3308ba5a68600682eece3ed41cdbdd10346a9e + languageName: node + linkType: hard + +"openapi3-ts@npm:^4.1.2, openapi3-ts@npm:^4.2.2": + version: 4.5.0 + resolution: "openapi3-ts@npm:4.5.0" + dependencies: + yaml: "npm:^2.8.0" + checksum: 10c0/97de2d24e9ceffb89e1388e137e4a6e17ee57a02dce0c938a5e98b1338ac72b31e8b2ce8dd28945ad43fae8bee2a145892cb548ba5ae60b0930f1b6b79b0747d + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -4995,6 +8093,42 @@ __metadata: languageName: node linkType: hard +"orval@npm:7.10.0": + version: 7.10.0 + resolution: "orval@npm:7.10.0" + dependencies: + "@apidevtools/swagger-parser": "npm:^10.1.1" + "@orval/angular": "npm:7.10.0" + "@orval/axios": "npm:7.10.0" + "@orval/core": "npm:7.10.0" + "@orval/fetch": "npm:7.10.0" + "@orval/hono": "npm:7.10.0" + "@orval/mcp": "npm:7.10.0" + "@orval/mock": "npm:7.10.0" + "@orval/query": "npm:7.10.0" + "@orval/swr": "npm:7.10.0" + "@orval/zod": "npm:7.10.0" + ajv: "npm:^8.17.1" + cac: "npm:^6.7.14" + chalk: "npm:^4.1.2" + chokidar: "npm:^4.0.3" + enquirer: "npm:^2.4.1" + execa: "npm:^5.1.1" + find-up: "npm:5.0.0" + fs-extra: "npm:^11.3.0" + lodash.uniq: "npm:^4.5.0" + openapi3-ts: "npm:4.2.2" + string-argv: "npm:^0.3.2" + tsconfck: "npm:^2.0.1" + typedoc: "npm:^0.28.0" + typedoc-plugin-markdown: "npm:^4.4.2" + typescript: "npm:^5.6.3" + bin: + orval: dist/bin/orval.js + checksum: 10c0/ed789c0ee3ba26777fbf8fac9d77d682ac507c4733e9123784af3e457e290285b966f97050b0257ffacdd0b721239d26b1847c6231264f80a964b1ca8189bf01 + languageName: node + linkType: hard + "ospath@npm:^1.2.2": version: 1.2.2 resolution: "ospath@npm:1.2.2" @@ -5040,6 +8174,20 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -5049,6 +8197,20 @@ __metadata: languageName: node linkType: hard +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + dependencies: + character-entities: "npm:^1.0.0" + character-entities-legacy: "npm:^1.0.0" + character-reference-invalid: "npm:^1.0.0" + is-alphanumerical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + is-hexadecimal: "npm:^1.0.0" + checksum: 10c0/f85a22c0ea406ff26b53fdc28641f01cc36fa49eb2e3135f02693286c89ef0bcefc2262d99b3688e20aac2a14fd10b75c518583e875c1b9fe3d1f937795e0854 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -5070,6 +8232,23 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + "pend@npm:~1.2.0": version: 1.2.0 resolution: "pend@npm:1.2.0" @@ -5112,6 +8291,13 @@ __metadata: languageName: node linkType: hard +"pony-cause@npm:^1.1.1": + version: 1.1.1 + resolution: "pony-cause@npm:1.1.1" + checksum: 10c0/63ee3e22c3a9ddda3aca17c2368657934b6c713a1af5b44b48aa6d06a1afc0f0c1f49e20b641be94f33f6c5bd2877977c4b6ca8de2514756b9351318ec4f14a5 + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -5130,14 +8316,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.5.3, postcss@npm:^8.4.41": - version: 8.5.3 - resolution: "postcss@npm:8.5.3" +"postcss@npm:8.5.6, postcss@npm:^8.4.41": + version: 8.5.6 + resolution: "postcss@npm:8.5.6" dependencies: - nanoid: "npm:^3.3.8" + nanoid: "npm:^3.3.11" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3 + checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024 languageName: node linkType: hard @@ -5180,12 +8366,12 @@ __metadata: languageName: node linkType: hard -"prisma@npm:6.8.2": - version: 6.8.2 - resolution: "prisma@npm:6.8.2" +"prisma@npm:6.10.1": + version: 6.10.1 + resolution: "prisma@npm:6.10.1" dependencies: - "@prisma/config": "npm:6.8.2" - "@prisma/engines": "npm:6.8.2" + "@prisma/config": "npm:6.10.1" + "@prisma/engines": "npm:6.10.1" peerDependencies: typescript: ">=5.1.0" peerDependenciesMeta: @@ -5193,7 +8379,28 @@ __metadata: optional: true bin: prisma: build/index.js - checksum: 10c0/0b7a889a8da8207a4957ff256bd5baf029260f067585527058a46ba4054a13b47ab90bd0ebae1cf74db6e99b3fa99f065a83384fe5cd9ad3ecf07228756eff79 + checksum: 10c0/7708736147fae3d0d537782f74ba18e574a72ae0e4c90c2f1ba9f5f8a994d1596ce206540241f18282407f846a6d0c904d6d67c0c959fe51bab4d7d402516185 + languageName: node + linkType: hard + +"prismjs@npm:^1.27.0": + version: 1.30.0 + resolution: "prismjs@npm:1.30.0" + checksum: 10c0/f56205bfd58ef71ccfcbcb691fd0eb84adc96c6ff21b0b69fc6fdcf02be42d6ef972ba4aed60466310de3d67733f6a746f89f2fb79c00bf217406d465b3e8f23 + languageName: node + linkType: hard + +"prismjs@npm:~1.27.0": + version: 1.27.0 + resolution: "prismjs@npm:1.27.0" + checksum: 10c0/841cbf53e837a42df9155c5ce1be52c4a0a8967ac916b52a27d066181a3578186c634e52d06d0547fb62b65c486b99b95f826dd54966619f9721b884f486b498 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 languageName: node linkType: hard @@ -5204,6 +8411,16 @@ __metadata: languageName: node linkType: hard +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + "prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -5215,6 +8432,15 @@ __metadata: languageName: node linkType: hard +"property-information@npm:^5.0.0": + version: 5.6.0 + resolution: "property-information@npm:5.6.0" + dependencies: + xtend: "npm:^4.0.0" + checksum: 10c0/d54b77c31dc13bb6819559080b2c67d37d94be7dc271f404f139a16a57aa96fcc0b3ad806d4a5baef9e031744853e4afe3df2e37275aacb1f78079bbb652c5af + languageName: node + linkType: hard + "proxy-from-env@npm:1.0.0": version: 1.0.0 resolution: "proxy-from-env@npm:1.0.0" @@ -5222,13 +8448,27 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + "pump@npm:^3.0.0": - version: 3.0.2 - resolution: "pump@npm:3.0.2" + version: 3.0.3 + resolution: "pump@npm:3.0.3" dependencies: end-of-stream: "npm:^1.1.0" once: "npm:^1.3.1" - checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f + checksum: 10c0/ada5cdf1d813065bbc99aa2c393b8f6beee73b5de2890a8754c9f488d7323ffd2ca5f5a0943b48934e3fcbd97637d0337369c3c631aeb9614915db629f1c75c9 + languageName: node + linkType: hard + +"punycode.js@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode.js@npm:2.3.1" + checksum: 10c0/1d12c1c0e06127fa5db56bd7fdf698daf9a78104456a6b67326877afc21feaa821257b171539caedd2f0524027fa38e67b13dd094159c8d70b6d26d2bea4dfdb languageName: node linkType: hard @@ -5248,6 +8488,13 @@ __metadata: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 10c0/3258bc3dbdf322ff2663619afe5947c7926a6ef5fb78ad7d384602974c467fadfc8272af44f5eb8cddd0d011aae8fabf3a929a8eee4b86edcc0a21e6bd10f9aa + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -5255,6 +8502,65 @@ __metadata: languageName: node linkType: hard +"ramda-adjunct@npm:^5.0.0, ramda-adjunct@npm:^5.1.0": + version: 5.1.0 + resolution: "ramda-adjunct@npm:5.1.0" + peerDependencies: + ramda: ">= 0.30.0" + checksum: 10c0/8d8e74648439b3b68f3d6e8d094e9a4f3a9e95db115b8d7b0b96510ac6b9724e80e7917890bdfeade4f6e44c299e4a629e8fb6048778115c2c21001cabed6544 + languageName: node + linkType: hard + +"ramda@npm:^0.30.1, ramda@npm:~0.30.0": + version: 0.30.1 + resolution: "ramda@npm:0.30.1" + checksum: 10c0/3ea3e35c80e1a1b78c23de0c72d3382c3446f42052b113b851f1b7fc421e33a45ce92e7aef3c705cc6de3812a209d03417af5c264f67126cda539fd66c8bea71 + languageName: node + linkType: hard + +"randexp@npm:^0.5.3": + version: 0.5.3 + resolution: "randexp@npm:0.5.3" + dependencies: + drange: "npm:^1.0.2" + ret: "npm:^0.2.0" + checksum: 10c0/44ad4e6e7661c090939e062916ccf1477de27eb2b91dfa8c113de9f3116ddf2016ac090323d5d2fa0947c3ff8e9b24798ee5e25cb2c37f22df2e72cda56232b6 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"react-copy-to-clipboard@npm:5.1.0": + version: 5.1.0 + resolution: "react-copy-to-clipboard@npm:5.1.0" + dependencies: + copy-to-clipboard: "npm:^3.3.1" + prop-types: "npm:^15.8.1" + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + checksum: 10c0/de70d9f9c2d17cee207888ed791d4a042c300e5ca732503434d49e6745cff56c0d5ebcc82ab86237e9c2248e636d1d031b9f9cf9913ecec61d82a0e5ebc93881 + languageName: node + linkType: hard + +"react-debounce-input@npm:=3.3.0": + version: 3.3.0 + resolution: "react-debounce-input@npm:3.3.0" + dependencies: + lodash.debounce: "npm:^4" + prop-types: "npm:^15.8.1" + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + checksum: 10c0/a015dc31ebb2777bdcc14b2b466994ff670f823c978bd5d3ee0bfd7955ccf4de48fadeac39a0a97bd8d628502c0808f384e48bf650d6a141b2f04c43275f0e29 + languageName: node + linkType: hard + "react-dom@npm:^19.0.0": version: 19.1.0 resolution: "react-dom@npm:19.1.0" @@ -5266,6 +8572,46 @@ __metadata: languageName: node linkType: hard +"react-hook-form@npm:^7.56.4": + version: 7.58.1 + resolution: "react-hook-form@npm:7.58.1" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + checksum: 10c0/981b9982b7eb497c3afff86c219175fdd4d92a24e3533518035239545dda23f5ebc6ba647fb29a250f768bdf811ba413094ce0103fbf36b436737fc18aa1bb49 + languageName: node + linkType: hard + +"react-immutable-proptypes@npm:2.2.0": + version: 2.2.0 + resolution: "react-immutable-proptypes@npm:2.2.0" + dependencies: + invariant: "npm:^2.2.2" + peerDependencies: + immutable: ">=3.6.2" + checksum: 10c0/4f3e147303be418d157a00246c9988068df0d21cb92e40f9d78a09538da71b967f5ddbd7f7facf54f05b5ddb011cc717afa82c8c490b0188bf90a6251acc9fb9 + languageName: node + linkType: hard + +"react-immutable-pure-component@npm:^2.2.0": + version: 2.2.2 + resolution: "react-immutable-pure-component@npm:2.2.2" + peerDependencies: + immutable: ">= 2 || >= 4.0.0-rc" + react: ">= 16.6" + react-dom: ">= 16.6" + checksum: 10c0/d13dc10069bd13059ab91741169c6adaa2a44efb425fc3cf7506925f8cfcde40ef8c7d88f0ac5977a9b1eb5b6456f7fe530a1c670df727424dd72a1642163675 + languageName: node + linkType: hard + +"react-inspector@npm:^6.0.1": + version: 6.0.2 + resolution: "react-inspector@npm:6.0.2" + peerDependencies: + react: ^16.8.4 || ^17.0.0 || ^18.0.0 + checksum: 10c0/8f9b23c21b4d95722e28c9455c2bf00fd9437347714382594461f98e5b9954d60864d0f4e74e881639b065e752a97ba52a65e39930c234072e5bff291bb02b5e + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -5273,6 +8619,25 @@ __metadata: languageName: node linkType: hard +"react-redux@npm:^9.2.0": + version: 9.2.0 + resolution: "react-redux@npm:9.2.0" + dependencies: + "@types/use-sync-external-store": "npm:^0.0.6" + use-sync-external-store: "npm:^1.4.0" + peerDependencies: + "@types/react": ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + redux: + optional: true + checksum: 10c0/00d485f9d9219ca1507b4d30dde5f6ff8fb68ba642458f742e0ec83af052f89e65cd668249b99299e1053cc6ad3d2d8ac6cb89e2f70d2ac5585ae0d7fa0ef259 + languageName: node + linkType: hard + "react-remove-scroll-bar@npm:^2.3.7": version: 2.3.8 resolution: "react-remove-scroll-bar@npm:2.3.8" @@ -5290,8 +8655,8 @@ __metadata: linkType: hard "react-remove-scroll@npm:^2.6.3": - version: 2.7.0 - resolution: "react-remove-scroll@npm:2.7.0" + version: 2.7.1 + resolution: "react-remove-scroll@npm:2.7.1" dependencies: react-remove-scroll-bar: "npm:^2.3.7" react-style-singleton: "npm:^2.2.3" @@ -5304,7 +8669,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/cf8b9a1b0808cafe9f2b1fbb2ab56e3efff7f311fba847f26154b972a681c003c288af517cf48d0b68704c2be0d3d73152e7ec2cc8590fa495135b0aac07a871 + checksum: 10c0/7ad8f6ffd3e2aedf9b3d79f0c9088a9a3d7c5332d80c923427a6d97fe0626fb4cb33a6d9174d19fad57d860be69c96f68497a0619c3a8af0e8a5332e49bdde31 languageName: node linkType: hard @@ -5324,6 +8689,22 @@ __metadata: languageName: node linkType: hard +"react-syntax-highlighter@npm:^15.6.1": + version: 15.6.1 + resolution: "react-syntax-highlighter@npm:15.6.1" + dependencies: + "@babel/runtime": "npm:^7.3.1" + highlight.js: "npm:^10.4.1" + highlightjs-vue: "npm:^1.0.0" + lowlight: "npm:^1.17.0" + prismjs: "npm:^1.27.0" + refractor: "npm:^3.6.0" + peerDependencies: + react: ">= 0.14.0" + checksum: 10c0/4a4cf4695c45d7a6b25078970fb79ae5a85edeba5be0a2508766ee18e8aee1c0c4cdd97bf54f5055e4af671fe7e5e71348e81cafe09a0eb07a763ae876b7f073 + languageName: node + linkType: hard + "react@npm:^19.0.0": version: 19.1.0 resolution: "react@npm:19.1.0" @@ -5331,6 +8712,29 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + +"redux-immutable@npm:^4.0.0": + version: 4.0.0 + resolution: "redux-immutable@npm:4.0.0" + peerDependencies: + immutable: ^3.8.1 || ^4.0.0-rc.1 + checksum: 10c0/c706c9f72a1fbce92d54ab9117ab641b6d7ee69f2860ec6de827dbed5bed918d4677a0895e6564bb59011202bb5e639cf69f4e2d2d14086053b32e5c4e35f512 + languageName: node + linkType: hard + +"redux@npm:^5.0.1": + version: 5.0.1 + resolution: "redux@npm:5.0.1" + checksum: 10c0/b10c28357194f38e7d53b760ed5e64faa317cc63de1fb95bc5d9e127fab956392344368c357b8e7a9bedb0c35b111e7efa522210cfdc3b3c75e5074718e9069c + languageName: node + linkType: hard + "reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": version: 1.0.10 resolution: "reflect.getprototypeof@npm:1.0.10" @@ -5347,7 +8751,25 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.5.3": +"refractor@npm:^3.6.0": + version: 3.6.0 + resolution: "refractor@npm:3.6.0" + dependencies: + hastscript: "npm:^6.0.0" + parse-entities: "npm:^2.0.0" + prismjs: "npm:~1.27.0" + checksum: 10c0/63ab62393c8c2fd7108c2ea1eff721c0ad2a1a6eee60fdd1b47f4bb25cf298667dc97d041405b3e718b0817da12b37a86ed07ebee5bd2ca6405611f1bae456db + languageName: node + linkType: hard + +"reftools@npm:^1.1.9": + version: 1.1.9 + resolution: "reftools@npm:1.1.9" + checksum: 10c0/4b44c9e75d6e5328b43b974de08776ee1718a0b48f24e033b2699f872cc9a698234a4aa0553b9e1a766b828aeb9834e4aa988410f0279e86179edb33b270da6c + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" dependencies: @@ -5361,6 +8783,25 @@ __metadata: languageName: node linkType: hard +"remarkable@npm:^2.0.1": + version: 2.0.1 + resolution: "remarkable@npm:2.0.1" + dependencies: + argparse: "npm:^1.0.10" + autolinker: "npm:^3.11.0" + bin: + remarkable: bin/remarkable.js + checksum: 10c0/e2c23bfd2e45234110bc3220e44fcac5e4a8199691ff6959d9cd0bac34ffca2f123d3913946cbef517018bc8e5ab00beafc527a04782b7afbe5e9706d1c0c77a + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.2": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 10c0/87fa21bfdb2fbdedc44b9a5b118b7c1239bdd2c2c1e42742ef9119b7d412a5137a1d23f1a83dc6bb686f4f27429ac6f542e3d923090b44181bafa41e8ac0174d + languageName: node + linkType: hard + "request-progress@npm:^3.0.0": version: 3.0.0 resolution: "request-progress@npm:3.0.0" @@ -5370,6 +8811,34 @@ __metadata: languageName: node linkType: hard +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 10c0/b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 + languageName: node + linkType: hard + +"reselect@npm:^5.1.1": + version: 5.1.1 + resolution: "reselect@npm:5.1.1" + checksum: 10c0/219c30da122980f61853db3aebd173524a2accd4b3baec770e3d51941426c87648a125ca08d8c57daa6b8b086f2fdd2703cb035dd6231db98cdbe1176a71f489 + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -5446,6 +8915,20 @@ __metadata: languageName: node linkType: hard +"ret@npm:^0.2.0": + version: 0.2.2 + resolution: "ret@npm:0.2.2" + checksum: 10c0/1a41e543913cda851abb1dae4852efa97bb693ce58fde3b51cc1cae94e2599dd70b91ad6268a4a07fc238305be06fed91723ef6d08863c48a0d02e0a74b943cd + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + "reusify@npm:^1.0.4": version: 1.1.0 resolution: "reusify@npm:1.1.0" @@ -5491,7 +8974,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -5519,7 +9002,14 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safe-stable-stringify@npm:^1.1": + version: 1.1.1 + resolution: "safe-stable-stringify@npm:1.1.1" + checksum: 10c0/03e36df1444fc52eacb069b1ca1289061b6ffe75b184ac7df22bc962ee7e7226a4371491be21574bc8df81e33fa5a11eb54a85b6a68bf25394ee4453fe0d9d81 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 @@ -5542,7 +9032,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.0, semver@npm:^7.7.1, semver@npm:^7.7.2": +"semver@npm:^7.3.5, semver@npm:^7.6.0, semver@npm:^7.7.1, semver@npm:^7.7.2": version: 7.7.2 resolution: "semver@npm:7.7.2" bin: @@ -5551,6 +9041,15 @@ __metadata: languageName: node linkType: hard +"serialize-error@npm:^8.1.0": + version: 8.1.0 + resolution: "serialize-error@npm:8.1.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/8cfd89f43ca93e283c5f1d16178a536bdfac9bc6029f4a9df988610cc399bc4f2478d1f10ce40b9dff66b863a5158a19b438fbec929045c96d92174f6bca1e88 + languageName: node + linkType: hard + "set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -5588,6 +9087,18 @@ __metadata: languageName: node linkType: hard +"sha.js@npm:^2.4.11": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + bin: + sha.js: ./bin.js + checksum: 10c0/b7a371bca8821c9cc98a0aeff67444a03d48d745cb103f17228b96793f455f0eb0a691941b89ea1e60f6359207e36081d9be193252b0f128e0daf9cfea2815a5 + languageName: node + linkType: hard + "sharp@npm:^0.34.1": version: 0.34.2 resolution: "sharp@npm:0.34.2" @@ -5679,6 +9190,72 @@ __metadata: languageName: node linkType: hard +"short-unique-id@npm:^5.3.2": + version: 5.3.2 + resolution: "short-unique-id@npm:5.3.2" + bin: + short-unique-id: bin/short-unique-id + suid: bin/short-unique-id + checksum: 10c0/d411ca922731f5e9dbce0820616fa3a62b2a42692094a7d99d32b230fcae556284a3b89f86ca17e449b2bc7efee08f185abc63000570a4e0d451f5e883b55a8d + languageName: node + linkType: hard + +"should-equal@npm:^2.0.0": + version: 2.0.0 + resolution: "should-equal@npm:2.0.0" + dependencies: + should-type: "npm:^1.4.0" + checksum: 10c0/b375e1da2586671e2b9442ac5b700af508f56438af9923f69123b1fe4e02ccddc9a8a3eb803447a6df91e616cec236c41d6f28fdaa100467f9fdb81651089538 + languageName: node + linkType: hard + +"should-format@npm:^3.0.3": + version: 3.0.3 + resolution: "should-format@npm:3.0.3" + dependencies: + should-type: "npm:^1.3.0" + should-type-adaptors: "npm:^1.0.1" + checksum: 10c0/ef2a31148d79a3fabd0dc6c1c1b10f90d9e071ad8e1f99452bd01e8aceaca62985b43974cf8103185fa1a3ade85947c6f664e44ca9af253afd1ce93c223bd8e4 + languageName: node + linkType: hard + +"should-type-adaptors@npm:^1.0.1": + version: 1.1.0 + resolution: "should-type-adaptors@npm:1.1.0" + dependencies: + should-type: "npm:^1.3.0" + should-util: "npm:^1.0.0" + checksum: 10c0/cf127f8807f69ace9db04dbec3f274330a854405feef9821b5fa525748961da65747869cca36c813132b98757bd3e42d53541579cb16630ccf3c0dd9c0082320 + languageName: node + linkType: hard + +"should-type@npm:^1.3.0, should-type@npm:^1.4.0": + version: 1.4.0 + resolution: "should-type@npm:1.4.0" + checksum: 10c0/50cb50d776ee117b151068367c09ec12ac8e6f5fe2bd4d167413972813f06e930fe8624232a56c335846d3afcb784455f9a9690baa4350b3919bd001f0c4c94b + languageName: node + linkType: hard + +"should-util@npm:^1.0.0": + version: 1.0.1 + resolution: "should-util@npm:1.0.1" + checksum: 10c0/1790719e05eae9edae86e44cbbad98529bd333df3f7cdfd63ea80acb6af718990e70abbc173aa9ccb93fff5ab6ee08d38412d707ff4003840be2256a278a61f3 + languageName: node + linkType: hard + +"should@npm:^13.2.1": + version: 13.2.3 + resolution: "should@npm:13.2.3" + dependencies: + should-equal: "npm:^2.0.0" + should-format: "npm:^3.0.3" + should-type: "npm:^1.4.0" + should-type-adaptors: "npm:^1.0.1" + should-util: "npm:^1.0.0" + checksum: 10c0/99581d8615f6fb27cd23c9f431cfacef58d118a90d0cccf58775b90631a47441397cfbdcbe6379e2718e9e60f293e3dfc0e87857f4b5a36fe962814e46ab05fa + languageName: node + linkType: hard + "side-channel-list@npm:^1.0.0": version: 1.0.0 resolution: "side-channel-list@npm:1.0.0" @@ -5727,13 +9304,29 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.2": +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-eval@npm:1.0.1": + version: 1.0.1 + resolution: "simple-eval@npm:1.0.1" + dependencies: + jsep: "npm:^1.3.6" + checksum: 10c0/0fc9f84e3bca0c87c78d12dac7dd04bcb448d4060b95101ea7bfdf8aec941cdbbb924230bd0b0a40a319e335c92abd439760be65c06bab04b2d829688c6fcd2a + languageName: node + linkType: hard + "simple-swizzle@npm:^0.2.2": version: 0.2.2 resolution: "simple-swizzle@npm:0.2.2" @@ -5743,6 +9336,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + "slice-ansi@npm:^3.0.0": version: 3.0.0 resolution: "slice-ansi@npm:3.0.0" @@ -5765,6 +9365,34 @@ __metadata: languageName: node linkType: hard +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.5 + resolution: "socks@npm:2.8.5" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/e427d0eb0451cfd04e20b9156ea8c0e9b5e38a8d70f21e55c30fbe4214eda37cfc25d782c63f9adc5fbdad6d062a0f127ef2cefc9a44b6fee2b9ea5d1ed10827 + languageName: node + linkType: hard + "source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" @@ -5772,6 +9400,27 @@ __metadata: languageName: node linkType: hard +"space-separated-tokens@npm:^1.0.0": + version: 1.1.5 + resolution: "space-separated-tokens@npm:1.1.5" + checksum: 10c0/3ee0a6905f89e1ffdfe474124b1ade9fe97276a377a0b01350bc079b6ec566eb5b219e26064cc5b7f3899c05bde51ffbc9154290b96eaf82916a1e2c2c13ead9 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + "sshpk@npm:^1.18.0": version: 1.18.0 resolution: "sshpk@npm:1.18.0" @@ -5793,6 +9442,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + "stable-hash@npm:^0.0.5": version: 0.0.5 resolution: "stable-hash@npm:0.0.5" @@ -5800,14 +9458,24 @@ __metadata: languageName: node linkType: hard -"streamsearch@npm:^1.1.0": +"stop-iteration-iterator@npm:^1.1.0": version: 1.1.0 - resolution: "streamsearch@npm:1.1.0" - checksum: 10c0/fbd9aecc2621364384d157f7e59426f4bfd385e8b424b5aaa79c83a6f5a1c8fd2e4e3289e95de1eb3511cb96bb333d6281a9919fafce760e4edb35b2cd2facab + resolution: "stop-iteration-iterator@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + internal-slot: "npm:^1.1.0" + checksum: 10c0/de4e45706bb4c0354a4b1122a2b8cc45a639e86206807ce0baf390ee9218d3ef181923fa4d2b67443367c491aa255c5fbaa64bb74648e3c5b48299928af86c09 languageName: node linkType: hard -"string-width@npm:^4.1.0, string-width@npm:^4.2.0": +"string-argv@npm:^0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -5818,6 +9486,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + "string.prototype.includes@npm:^2.0.1": version: 2.0.1 resolution: "string.prototype.includes@npm:2.0.1" @@ -5875,7 +9554,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": +"string.prototype.trimend@npm:^1.0.9": version: 1.0.9 resolution: "string.prototype.trimend@npm:1.0.9" dependencies: @@ -5898,7 +9577,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -5907,6 +9586,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -5969,17 +9657,110 @@ __metadata: languageName: node linkType: hard -"tailwind-merge@npm:^3.2.0": - version: 3.3.0 - resolution: "tailwind-merge@npm:3.3.0" - checksum: 10c0/a50cd141100486f98541dfab3705712af5860556689b7496dc6b0284374f02d12d5471f0f40035f6bb8b1c749c422060a1f3e5f8900057d8a7786b111c8472e6 +"swagger-client@npm:^3.35.5": + version: 3.35.5 + resolution: "swagger-client@npm:3.35.5" + dependencies: + "@babel/runtime-corejs3": "npm:^7.22.15" + "@scarf/scarf": "npm:=1.4.0" + "@swagger-api/apidom-core": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-error": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-json-pointer": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-3-1": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-reference": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swaggerexpert/cookie": "npm:^2.0.2" + deepmerge: "npm:~4.3.0" + fast-json-patch: "npm:^3.0.0-1" + js-yaml: "npm:^4.1.0" + neotraverse: "npm:=0.6.18" + node-abort-controller: "npm:^3.1.1" + node-fetch-commonjs: "npm:^3.3.2" + openapi-path-templating: "npm:^2.2.1" + openapi-server-url-templating: "npm:^1.3.0" + ramda: "npm:^0.30.1" + ramda-adjunct: "npm:^5.1.0" + checksum: 10c0/7179807ac977c1b7ee4f121d16a8f9f902467dfc026f4cff7fadb4d02e3b4f6a21f54612614435b3d43efbbce1376871aedb34f2c186de9391625f1c1674d948 languageName: node linkType: hard -"tailwindcss@npm:4.1.7": - version: 4.1.7 - resolution: "tailwindcss@npm:4.1.7" - checksum: 10c0/abe56f990bd4b03e0b332a2a39063e7f0f7359e6591282ba4e56ac18e5c58baca6b271072221253fcab7d9534d50f384f13fc41b66b06e0e427ef3f0ab2035bf +"swagger-ui-react@npm:^5.24.1": + version: 5.25.2 + resolution: "swagger-ui-react@npm:5.25.2" + dependencies: + "@babel/runtime-corejs3": "npm:^7.27.1" + "@scarf/scarf": "npm:=1.4.0" + base64-js: "npm:^1.5.1" + classnames: "npm:^2.5.1" + css.escape: "npm:1.5.1" + deep-extend: "npm:0.6.0" + dompurify: "npm:=3.2.4" + ieee754: "npm:^1.2.1" + immutable: "npm:^3.x.x" + js-file-download: "npm:^0.4.12" + js-yaml: "npm:=4.1.0" + lodash: "npm:^4.17.21" + prop-types: "npm:^15.8.1" + randexp: "npm:^0.5.3" + randombytes: "npm:^2.1.0" + react-copy-to-clipboard: "npm:5.1.0" + react-debounce-input: "npm:=3.3.0" + react-immutable-proptypes: "npm:2.2.0" + react-immutable-pure-component: "npm:^2.2.0" + react-inspector: "npm:^6.0.1" + react-redux: "npm:^9.2.0" + react-syntax-highlighter: "npm:^15.6.1" + redux: "npm:^5.0.1" + redux-immutable: "npm:^4.0.0" + remarkable: "npm:^2.0.1" + reselect: "npm:^5.1.1" + serialize-error: "npm:^8.1.0" + sha.js: "npm:^2.4.11" + swagger-client: "npm:^3.35.5" + url-parse: "npm:^1.5.10" + xml: "npm:=1.0.1" + xml-but-prettier: "npm:^1.0.1" + zenscroll: "npm:^4.0.2" + peerDependencies: + react: ">=16.8.0 <19" + react-dom: ">=16.8.0 <19" + checksum: 10c0/036fe857782ecba1410be7789a23be185a2af369274aaafa853b4b17c5216df2f39e7470149487de55fab8be7ca3f0e9174c752f4ffcb97f0e7909a8b002d2fa + languageName: node + linkType: hard + +"swagger2openapi@npm:^7.0.8": + version: 7.0.8 + resolution: "swagger2openapi@npm:7.0.8" + dependencies: + call-me-maybe: "npm:^1.0.1" + node-fetch: "npm:^2.6.1" + node-fetch-h2: "npm:^2.3.0" + node-readfiles: "npm:^0.2.0" + oas-kit-common: "npm:^1.0.8" + oas-resolver: "npm:^2.5.6" + oas-schema-walker: "npm:^1.1.5" + oas-validator: "npm:^5.0.8" + reftools: "npm:^1.1.9" + yaml: "npm:^1.10.0" + yargs: "npm:^17.0.1" + bin: + boast: boast.js + oas-validate: oas-validate.js + swagger2openapi: swagger2openapi.js + checksum: 10c0/441a4d3a7d353f99395b14a0c8d6124be6390f2f8aa53336905e7314a7f80b66f5f2a40ac0dc2dbe2f7bc01f52a223a94f54a2ece345095fd3ad8ae8b03d688b + languageName: node + linkType: hard + +"tailwind-merge@npm:^3.2.0": + version: 3.3.1 + resolution: "tailwind-merge@npm:3.3.1" + checksum: 10c0/b84c6a78d4669fa12bf5ab8f0cdc4400a3ce0a7c006511af4af4be70bb664a27466dbe13ee9e3b31f50ddf6c51d380e8192ce0ec9effce23ca729d71a9f63818 + languageName: node + linkType: hard + +"tailwindcss@npm:4.1.10": + version: 4.1.10 + resolution: "tailwindcss@npm:4.1.10" + checksum: 10c0/9da74ee1f25d6065150f132a3eb18caad82cd9902b7c552278eb627266c68b12990a22bb4b6169d04ce775c058a8d2638a5051be905be99961889c572e2aeab8 languageName: node linkType: hard @@ -6018,13 +9799,13 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.13": - version: 0.2.13 - resolution: "tinyglobby@npm:0.2.13" +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" dependencies: fdir: "npm:^6.4.4" picomatch: "npm:^4.0.2" - checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c + checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 languageName: node linkType: hard @@ -6062,6 +9843,13 @@ __metadata: languageName: node linkType: hard +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: 10c0/f2cf1f2c70f374fd87b0cdc8007453ba9e981c4305a8bf4eac10a30e62ecdfd28bca7d18f8f15b15a506bf8a7bfb20dbe3539f0fcf2a2c8396c1a78d53e1f179 + languageName: node + linkType: hard + "tough-cookie@npm:^5.0.0": version: 5.1.2 resolution: "tough-cookie@npm:5.1.2" @@ -6071,6 +9859,13 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + "tree-kill@npm:1.2.2": version: 1.2.2 resolution: "tree-kill@npm:1.2.2" @@ -6080,6 +9875,44 @@ __metadata: languageName: node linkType: hard +"tree-sitter-json@npm:=0.24.8": + version: 0.24.8 + resolution: "tree-sitter-json@npm:0.24.8" + dependencies: + node-addon-api: "npm:^8.2.2" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.2" + peerDependencies: + tree-sitter: ^0.21.1 + peerDependenciesMeta: + tree-sitter: + optional: true + checksum: 10c0/cc528770947d4b24e2a389b8c9f9ac103841a4447278903700cbb893414d21564366a9d9c0fc1c6b7c2d4bbe311b8622e95f3b4df3886ee3c8e2e44c839261c1 + languageName: node + linkType: hard + +"tree-sitter@npm:=0.21.1": + version: 0.21.1 + resolution: "tree-sitter@npm:0.21.1" + dependencies: + node-addon-api: "npm:^8.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.0" + checksum: 10c0/c144830c28ce588f5c5cf060390286ffece760636bfff03cf9110a7910504be3da6873d3bdc4faa9d5424433401122adbba605c9754bfd6fca63500265738ffb + languageName: node + linkType: hard + +"tree-sitter@npm:=0.22.4": + version: 0.22.4 + resolution: "tree-sitter@npm:0.22.4" + dependencies: + node-addon-api: "npm:^8.3.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.4" + checksum: 10c0/28d03778bdd8b4910aa064a9f3478c3e0ee697948282556b11452f6987a721535f4a9a8c528d9c04e0a0e8b759b8372a2118b9f21f5e200b48438a57a18e9977 + languageName: node + linkType: hard + "ts-api-utils@npm:^2.1.0": version: 2.1.0 resolution: "ts-api-utils@npm:2.1.0" @@ -6089,6 +9922,83 @@ __metadata: languageName: node linkType: hard +"ts-mixer@npm:^6.0.3, ts-mixer@npm:^6.0.4": + version: 6.0.4 + resolution: "ts-mixer@npm:6.0.4" + checksum: 10c0/4c442fc99cdffd4a3f0ce55c624fb703f4ded5cab6912f97705489565c4a74d3e4213f10c33499ec5150900a628d38537a9a6a9e35b5045b65129a84b4db21ae + languageName: node + linkType: hard + +"ts-node@npm:10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 + languageName: node + linkType: hard + +"ts-toolbelt@npm:^9.6.0": + version: 9.6.0 + resolution: "ts-toolbelt@npm:9.6.0" + checksum: 10c0/838f9a2f0fe881d5065257a23b402c41315b33ff987b73db3e2b39fcb70640c4c7220e1ef118ed5676763543724fdbf4eda7b0e2c17acb667ed1401336af9f8c + languageName: node + linkType: hard + +"tsconfck@npm:^2.0.1": + version: 2.1.2 + resolution: "tsconfck@npm:2.1.2" + peerDependencies: + typescript: ^4.3.5 || ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + tsconfck: bin/tsconfck.js + checksum: 10c0/6efc9cbbccdbbcafc86a744a1804fcd8438097c2beaac370444cc413fa1582a019a74002a111e3005b89ca0b0169ace730161864628fc751754e29b335c3c79f + languageName: node + linkType: hard + +"tsconfig-paths@npm:4.2.0": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: "npm:^2.2.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/09a5877402d082bb1134930c10249edeebc0211f36150c35e1c542e5b91f1047b1ccf7da1e59babca1ef1f014c525510f4f870de7c9bda470c73bb4e2721b3ea + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" @@ -6101,7 +10011,14 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.8.0": +"tslib@npm:^1.14.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.0, tslib@npm:^2.8.0, tslib@npm:^2.8.1": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 @@ -6117,10 +10034,10 @@ __metadata: languageName: node linkType: hard -"tw-animate-css@npm:1.3.0": - version: 1.3.0 - resolution: "tw-animate-css@npm:1.3.0" - checksum: 10c0/c72a2c189d6aebd6cc31189c3ca1cf4cf2c3f37f005d0879cd40cfdd6550bfb665384e9a50b91dfc9befe9860ff09adb536a7f7431bf18132aef7e04734a02f2 +"tw-animate-css@npm:1.3.4": + version: 1.3.4 + resolution: "tw-animate-css@npm:1.3.4" + checksum: 10c0/fc17e27684351ee151dd0bcef848ef72d1ec4bce6769ece079f30ac8a481c52a6c9d523f7ecd55ef73adc4b7375fdc7a46bb2598335fb06d86d0bc65a6c3e37b languageName: node linkType: hard @@ -6140,6 +10057,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -6147,6 +10071,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.8.0": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-buffer@npm:1.0.3" @@ -6200,7 +10131,42 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.8.3": +"typedoc-plugin-markdown@npm:^4.4.2": + version: 4.7.0 + resolution: "typedoc-plugin-markdown@npm:4.7.0" + peerDependencies: + typedoc: 0.28.x + checksum: 10c0/066cb8a0f96bb24c22069830d189904d624204b7ceaaeab78c72008ebb2c2bddb55170ae39fac31352caf20516a1a2360300cf384c9683f7b42465dc2c354bd1 + languageName: node + linkType: hard + +"typedoc@npm:^0.28.0": + version: 0.28.5 + resolution: "typedoc@npm:0.28.5" + dependencies: + "@gerrit0/mini-shiki": "npm:^3.2.2" + lunr: "npm:^2.3.9" + markdown-it: "npm:^14.1.0" + minimatch: "npm:^9.0.5" + yaml: "npm:^2.7.1" + peerDependencies: + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x + bin: + typedoc: bin/typedoc + checksum: 10c0/fc8235dbe8f14da24fdb088467b01887b3f1375b27d5caf0276ae405f03aa1f523e94aea52fe8ce1a3d477ae9e3f4f69fdc28614275445a828a77db88784e6ce + languageName: node + linkType: hard + +"types-ramda@npm:^0.30.1": + version: 0.30.1 + resolution: "types-ramda@npm:0.30.1" + dependencies: + ts-toolbelt: "npm:^9.6.0" + checksum: 10c0/4a8b230ae9772e6534f65b1a154dd5604bcd1d74e27b49686337a215e83aa8fc93e49f8c49af395418d2950cb9fb9b900662077c1d4b73ff6fe4f4bcb83ab2d6 + languageName: node + linkType: hard + +"typescript@npm:5.8.3, typescript@npm:^5.6.3": version: 5.8.3 resolution: "typescript@npm:5.8.3" bin: @@ -6210,7 +10176,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.8.3#optional!builtin": +"typescript@patch:typescript@npm%3A5.8.3#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": version: 5.8.3 resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" bin: @@ -6220,6 +10186,13 @@ __metadata: languageName: node linkType: hard +"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": + version: 2.1.0 + resolution: "uc.micro@npm:2.1.0" + checksum: 10c0/8862eddb412dda76f15db8ad1c640ccc2f47cdf8252a4a30be908d535602c8d33f9855dfcccb8b8837855c1ce1eaa563f7fa7ebe3c98fd0794351aab9b9c55fa + languageName: node + linkType: hard + "unbox-primitive@npm:^1.1.0": version: 1.1.0 resolution: "unbox-primitive@npm:1.1.0" @@ -6239,6 +10212,31 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~7.8.0": + version: 7.8.0 + resolution: "undici-types@npm:7.8.0" + checksum: 10c0/9d9d246d1dc32f318d46116efe3cfca5a72d4f16828febc1918d94e58f6ffcf39c158aa28bf5b4fc52f410446bc7858f35151367bd7a49f21746cab6497b709b + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -6246,29 +10244,42 @@ __metadata: languageName: node linkType: hard +"unraw@npm:^3.0.0": + version: 3.0.0 + resolution: "unraw@npm:3.0.0" + checksum: 10c0/cd1e7a961c8dc075bdf07300bc046da6bc8c4f1b88c68191c392520f0c64914fa783d48f2431c668f79b1afbd4bab16e864c7aca3cc06ddc94567c1fec114b43 + languageName: node + linkType: hard + "unrs-resolver@npm:^1.6.2": - version: 1.7.2 - resolution: "unrs-resolver@npm:1.7.2" + version: 1.9.2 + resolution: "unrs-resolver@npm:1.9.2" dependencies: - "@unrs/resolver-binding-darwin-arm64": "npm:1.7.2" - "@unrs/resolver-binding-darwin-x64": "npm:1.7.2" - "@unrs/resolver-binding-freebsd-x64": "npm:1.7.2" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.7.2" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.7.2" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.7.2" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.7.2" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.7.2" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.7.2" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.7.2" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.7.2" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.7.2" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.7.2" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.7.2" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.7.2" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.7.2" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.7.2" - napi-postinstall: "npm:^0.2.2" + "@unrs/resolver-binding-android-arm-eabi": "npm:1.9.2" + "@unrs/resolver-binding-android-arm64": "npm:1.9.2" + "@unrs/resolver-binding-darwin-arm64": "npm:1.9.2" + "@unrs/resolver-binding-darwin-x64": "npm:1.9.2" + "@unrs/resolver-binding-freebsd-x64": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.9.2" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.9.2" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.9.2" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.9.2" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.9.2" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.9.2" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.9.2" + napi-postinstall: "npm:^0.2.4" dependenciesMeta: + "@unrs/resolver-binding-android-arm-eabi": + optional: true + "@unrs/resolver-binding-android-arm64": + optional: true "@unrs/resolver-binding-darwin-arm64": optional: true "@unrs/resolver-binding-darwin-x64": @@ -6303,7 +10314,7 @@ __metadata: optional: true "@unrs/resolver-binding-win32-x64-msvc": optional: true - checksum: 10c0/c293db95c59b08e33f3bfb00042120fb90fd5448bd1790cd2dc779a13eb6062dddf04a91b72c73d3635b0c539552435675ce816fa52e66bb0cd7b7e5a2f6399c + checksum: 10c0/e3481cc19ea4b25f888e2412bbd80a729b13527a41b035e784b71d1a7d4e2109b58b174adce989085eb75c787435e80ffb385db2b1598288474f53beb01438c0 languageName: node linkType: hard @@ -6323,6 +10334,23 @@ __metadata: languageName: node linkType: hard +"urijs@npm:^1.19.11": + version: 1.19.11 + resolution: "urijs@npm:1.19.11" + checksum: 10c0/96e15eea5b41a99361d506e4d8fcc64dc43f334bd5fd34e08261467b6954b97a6b45929a8d6c79e2dc76aadfd6ca950e0f4bd7f3c0757a08978429634d07eda1 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.10": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: "npm:^2.1.1" + requires-port: "npm:^1.0.0" + checksum: 10c0/bd5aa9389f896974beb851c112f63b466505a04b4807cea2e5a3b7092f6fbb75316f0491ea84e44f66fed55f1b440df5195d7e3a8203f64fcefa19d182f5be87 + languageName: node + linkType: hard + "use-callback-ref@npm:^1.3.3": version: 1.3.3 resolution: "use-callback-ref@npm:1.3.3" @@ -6354,6 +10382,22 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.4.0, use-sync-external-store@npm:^1.5.0": + version: 1.5.0 + resolution: "use-sync-external-store@npm:1.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/1b8663515c0be34fa653feb724fdcce3984037c78dd4a18f68b2c8be55cc1a1084c578d5b75f158d41b5ddffc2bf5600766d1af3c19c8e329bb20af2ec6f52f4 + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 + languageName: node + linkType: hard + "uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -6363,6 +10407,20 @@ __metadata: languageName: node linkType: hard +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 + languageName: node + linkType: hard + +"validator@npm:^13.11.0": + version: 13.15.15 + resolution: "validator@npm:13.15.15" + checksum: 10c0/f5349d1fbb9cc36f9f6c5dab1880764ddad1d0d2b084e2a71e5964f7de1635d20e406611559df9a3db24828ce775cbee5e3b6dd52f0d555a61939ed7ea5990bd + languageName: node + linkType: hard + "verror@npm:1.10.0": version: 1.10.0 resolution: "verror@npm:1.10.0" @@ -6374,6 +10432,37 @@ __metadata: languageName: node linkType: hard +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"web-tree-sitter@npm:=0.24.5": + version: 0.24.5 + resolution: "web-tree-sitter@npm:0.24.5" + checksum: 10c0/e6b88e4967227ab4272fb20a063882fe877c6a948a0367e6fae324807a31f082151f5110f1f2beeddba98714af20bc13cb6b62aac6aad986e24da31796ba1ce1 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -6420,7 +10509,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": version: 1.1.19 resolution: "which-typed-array@npm:1.1.19" dependencies: @@ -6446,6 +10535,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -6453,6 +10553,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -6464,14 +10575,14 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 languageName: node linkType: hard @@ -6482,6 +10593,43 @@ __metadata: languageName: node linkType: hard +"xml-but-prettier@npm:^1.0.1": + version: 1.0.1 + resolution: "xml-but-prettier@npm:1.0.1" + dependencies: + repeat-string: "npm:^1.5.2" + checksum: 10c0/d493d7bf0f9f94faa9e6e142355045cbab10593770fa1a5e502369169f4abb1ab7ff134194f7de501ccebfe0f440a72b97363b1ad55172d3cd21fc2eab0b7ce9 + languageName: node + linkType: hard + +"xml@npm:=1.0.1": + version: 1.0.1 + resolution: "xml@npm:1.0.1" + checksum: 10c0/04bcc9b8b5e7b49392072fbd9c6b0f0958bd8e8f8606fee460318e43991349a68cbc5384038d179ff15aef7d222285f69ca0f067f53d071084eb14c7fdb30411 + languageName: node + linkType: hard + +"xtend@npm:^4.0.0": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + "yallist@npm:^5.0.0": version: 5.0.0 resolution: "yallist@npm:5.0.0" @@ -6489,6 +10637,44 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + +"yaml@npm:^2.3.4, yaml@npm:^2.5.0, yaml@npm:^2.7.1, yaml@npm:^2.8.0": + version: 2.8.0 + resolution: "yaml@npm:2.8.0" + bin: + yaml: bin.mjs + checksum: 10c0/f6f7310cf7264a8107e72c1376f4de37389945d2fb4656f8060eca83f01d2d703f9d1b925dd8f39852a57034fafefde6225409ddd9f22aebfda16c6141b71858 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.0.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + "yauzl@npm:^2.10.0": version: 2.10.0 resolution: "yauzl@npm:2.10.0" @@ -6499,9 +10685,30 @@ __metadata: languageName: node linkType: hard +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f languageName: node linkType: hard + +"zenscroll@npm:^4.0.2": + version: 4.0.2 + resolution: "zenscroll@npm:4.0.2" + checksum: 10c0/419e87ebe3a22a3b2ac22cd02aeccb900c9c330f539efdb1efc382090157d466373ee615812caef5bbe2da140e3c7df222236c8cfd8e697e97d4d91cf3f81c63 + languageName: node + linkType: hard + +"zod@npm:^3.25.60": + version: 3.25.67 + resolution: "zod@npm:3.25.67" + checksum: 10c0/80a0cab3033272c4ab9312198081f0c4ea88e9673c059aa36dc32024906363729db54bdb78f3dc9d5529bd1601f74974d5a56c0a23e40c6f04a9270c9ff22336 + languageName: node + linkType: hard