diff --git a/apps/backend/package.json b/apps/backend/package.json index c88a41ab..a916cf70 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -53,7 +53,7 @@ "@types/supertest": "^6.0.2", "globals": "^15.14.0", "jest": "^29.7.0", - "prisma": "^6.3.1", + "prisma": "^6.6.0", "source-map-support": "^0.5.21", "supertest": "^7.0.0", "ts-jest": "^29.2.5", @@ -63,14 +63,22 @@ "typescript": "^5.7.3" }, "jest": { - "moduleFileExtensions": ["js", "json", "ts"], + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], "rootDir": "./", - "modulePaths": [""], + "modulePaths": [ + "" + ], "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, - "collectCoverageFrom": ["**/*.(t|j)s"], + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], "coverageDirectory": "../coverage", "testEnvironment": "node" }, diff --git a/apps/backend/prisma/migrations/20250425065153_add_messages/migration.sql b/apps/backend/prisma/migrations/20250425065153_add_messages/migration.sql new file mode 100644 index 00000000..260d1ad8 --- /dev/null +++ b/apps/backend/prisma/migrations/20250425065153_add_messages/migration.sql @@ -0,0 +1,24 @@ +-- CreateTable +CREATE TABLE "messages" ( + "id" TEXT NOT NULL, + "order_id" TEXT NOT NULL, + "sender_address" TEXT NOT NULL, + "content" TEXT NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "messages_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Order" ( + "id" TEXT NOT NULL, + + CONSTRAINT "Order_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "messages" ADD CONSTRAINT "messages_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "Order"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "messages" ADD CONSTRAINT "messages_sender_address_fkey" FOREIGN KEY ("sender_address") REFERENCES "users"("wallet_address") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/apps/backend/prisma/migrations/migration_lock.toml b/apps/backend/prisma/migrations/migration_lock.toml index 648c57fd..044d57cd 100644 --- a/apps/backend/prisma/migrations/migration_lock.toml +++ b/apps/backend/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (e.g., Git) -provider = "postgresql" \ No newline at end of file +provider = "postgresql" diff --git a/apps/backend/prisma/schema.prisma b/apps/backend/prisma/schema.prisma index 315c447c..b0745bb5 100644 --- a/apps/backend/prisma/schema.prisma +++ b/apps/backend/prisma/schema.prisma @@ -52,8 +52,29 @@ model User { telegramUsername String? @map("telegram_username") @db.VarChar(50) country String @db.VarChar(100) isSeller Boolean @default(false) @map("is_seller") + messages Message[] @relation("UserMessages") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") @@map("users") } + + +model Message { + id String @id @default(uuid()) + orderId String @map("order_id") + senderAddress String @map("sender_address") + content String + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + + order Order @relation(fields: [orderId], references: [id]) + sender User @relation("UserMessages", fields: [senderAddress], references: [walletAddress]) + + @@map("messages") +} + +model Order { + id String @id @default(uuid()) + messages Message[] +} diff --git a/apps/backend/src/core/graphql/schema.gql b/apps/backend/src/core/graphql/schema.gql index d7b25bb5..3248a1fa 100644 --- a/apps/backend/src/core/graphql/schema.gql +++ b/apps/backend/src/core/graphql/schema.gql @@ -3,33 +3,33 @@ # ------------------------------------------------------ type Category { - createdAt: DateTime! - id: ID! - imageUrl: String - name: String! - updatedAt: DateTime! + createdAt: DateTime! + id: ID! + imageUrl: String + name: String! + updatedAt: DateTime! } input CreateCategoryInput { - name: String! + name: String! } input CreateProductInput { - categoryId: String! - description: String - name: String! - price: Float! - slug: String! + categoryId: String! + description: String + name: String! + price: Float! + slug: String! } input CreateUserInput { - country: String! - email: String! - isSeller: Boolean! = false - name: String! - surname: String! - telegramUsername: String - walletAddress: String! + country: String! + email: String! + isSeller: Boolean! = false + name: String! + surname: String! + telegramUsername: String + walletAddress: String! } """ @@ -38,66 +38,66 @@ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date scalar DateTime type Mutation { - createCategory(data: CreateCategoryInput!): Category! - createProduct(data: CreateProductInput!): ProductDTO! - createProductImage(createProductImage: ProductImageDTO!): ProductImage! - createUser(data: CreateUserInput!): User! - updateUser(data: UpdateUserInput!, walletAddress: String!): User! + createCategory(data: CreateCategoryInput!): Category! + createProduct(data: CreateProductInput!): ProductDTO! + createProductImage(createProductImage: ProductImageDTO!): ProductImage! + createUser(data: CreateUserInput!): User! + updateUser(data: UpdateUserInput!, walletAddress: String!): User! } type ProductDTO { - categoryId: String! - createdAt: DateTime! - description: String - id: ID! - name: String! - price: Float! - slug: String! - updatedAt: DateTime! + categoryId: String! + createdAt: DateTime! + description: String + id: ID! + name: String! + price: Float! + slug: String! + updatedAt: DateTime! } type ProductImage { - createdAt: DateTime! - id: ID! - imageUrl: String! - productId: String! - updatedAt: DateTime! + createdAt: DateTime! + id: ID! + imageUrl: String! + productId: String! + updatedAt: DateTime! } input ProductImageDTO { - imageUrl: String! - productId: String! + imageUrl: String! + productId: String! } type Query { - categories: [Category!]! - category(id: String!): Category - product(id: String!): ProductDTO - productImage(id: String!): ProductImage - productImages: [ProductImage!]! - products: [ProductDTO!]! - user(walletAddress: String!): User - users: [User!]! + categories: [Category!]! + category(id: String!): Category + product(id: String!): ProductDTO + productImage(id: String!): ProductImage + productImages: [ProductImage!]! + products: [ProductDTO!]! + user(walletAddress: String!): User + users: [User!]! } input UpdateUserInput { - country: String - email: String - isSeller: Boolean = false - name: String - surname: String - telegramUsername: String - walletAddress: String + country: String + email: String + isSeller: Boolean = false + name: String + surname: String + telegramUsername: String + walletAddress: String } type User { - country: String! - createdAt: DateTime! - email: String! - isSeller: Boolean! - name: String! - surname: String! - telegramUsername: String - updatedAt: DateTime! - walletAddress: String! -} + country: String! + createdAt: DateTime! + email: String! + isSeller: Boolean! + name: String! + surname: String! + telegramUsername: String + updatedAt: DateTime! + walletAddress: String! +} \ No newline at end of file diff --git a/apps/backend/src/modules/message/dto/create-message.input.ts b/apps/backend/src/modules/message/dto/create-message.input.ts new file mode 100644 index 00000000..8c70b43a --- /dev/null +++ b/apps/backend/src/modules/message/dto/create-message.input.ts @@ -0,0 +1,13 @@ +import { InputType, Int, Field } from '@nestjs/graphql'; + +@InputType() +export class CreateMessageInput { + @Field() + orderId: string; + + @Field() + senderAddress: string; + + @Field() + content: string; +} diff --git a/apps/backend/src/modules/message/dto/update-message.input.ts b/apps/backend/src/modules/message/dto/update-message.input.ts new file mode 100644 index 00000000..c9747d55 --- /dev/null +++ b/apps/backend/src/modules/message/dto/update-message.input.ts @@ -0,0 +1,8 @@ +import { CreateMessageInput } from './create-message.input'; +import { InputType, Field, Int, PartialType } from '@nestjs/graphql'; + +@InputType() +export class UpdateMessageInput extends PartialType(CreateMessageInput) { + @Field(() => Int) + id: number; +} diff --git a/apps/backend/src/modules/message/entities/message.entity.ts b/apps/backend/src/modules/message/entities/message.entity.ts new file mode 100644 index 00000000..55f14f44 --- /dev/null +++ b/apps/backend/src/modules/message/entities/message.entity.ts @@ -0,0 +1,22 @@ +import { ObjectType, Field, Int, ID } from '@nestjs/graphql'; + +@ObjectType() +export class Message { + @Field(() => ID) + id: string; + + @Field() + orderId: string; + + @Field() + senderAddress: string; + + @Field() + content: string; + + @Field() + createdAt: Date; + + @Field() + updatedAt: Date; +} diff --git a/apps/backend/src/modules/message/message.module.ts b/apps/backend/src/modules/message/message.module.ts new file mode 100644 index 00000000..ada0cc93 --- /dev/null +++ b/apps/backend/src/modules/message/message.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { MessageService } from './message.service'; +import { MessageResolver } from './message.resolver'; +import { PrismaService } from 'src/core/prisma/prisma.service'; + +@Module({ + providers: [MessageResolver, MessageService, PrismaService], +}) +export class MessageModule {} + + diff --git a/apps/backend/src/modules/message/message.resolver.spec.ts b/apps/backend/src/modules/message/message.resolver.spec.ts new file mode 100644 index 00000000..0c307b73 --- /dev/null +++ b/apps/backend/src/modules/message/message.resolver.spec.ts @@ -0,0 +1,88 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MessageResolver } from './message.resolver'; +import { MessageService } from './message.service'; +import { CreateMessageInput } from './dto/create-message.input'; + +describe('MessageResolver', () => { + let resolver: MessageResolver; + let messageService: MessageService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + MessageResolver, + { + provide: MessageService, + useValue: { + getMessagesByOrder: jest.fn(), + sendMessage: jest.fn(), + }, + }, + ], + }).compile(); + + resolver = module.get(MessageResolver); + messageService = module.get(MessageService); + }); + + it('should be defined', () => { + expect(resolver).toBeDefined(); + }); + + describe('getMessagesByOrder', () => { + it('should return messages for a given order', async () => { + const orderId = 'order-id'; + const mockMessages = [ + { + id: 'message-id-1', + orderId: orderId, + senderAddress: 'user-address', + content: 'Test content 1', + createdAt: new Date(), + updatedAt: new Date(), + }, + { + id: 'message-id-2', + orderId: orderId, + senderAddress: 'user-address', + content: 'Test content 2', + createdAt: new Date(), + updatedAt: new Date(), + }, + ]; + + (messageService.getMessagesByOrder as jest.Mock).mockResolvedValue(mockMessages); + + const result = await resolver.getMessagesByOrder(orderId); + + expect(result).toEqual(mockMessages); + expect(messageService.getMessagesByOrder).toHaveBeenCalledWith(orderId); + }); + }); + + describe('sendMessage', () => { + it('should send a new message and return it', async () => { + const createMessageInput: CreateMessageInput = { + orderId: 'order-id', + senderAddress: 'user-address', + content: 'Test content', + }; + + const mockCreatedMessage = { + id: 'message-id', + orderId: createMessageInput.orderId, + senderAddress: createMessageInput.senderAddress, + content: createMessageInput.content, + createdAt: new Date(), + updatedAt: new Date(), + }; + + (messageService.sendMessage as jest.Mock).mockResolvedValue(mockCreatedMessage); + + const result = await resolver.sendMessage(createMessageInput); + + expect(result).toEqual(mockCreatedMessage); + expect(messageService.sendMessage).toHaveBeenCalledWith(createMessageInput); + }); + }); +}); diff --git a/apps/backend/src/modules/message/message.resolver.ts b/apps/backend/src/modules/message/message.resolver.ts new file mode 100644 index 00000000..b48107c8 --- /dev/null +++ b/apps/backend/src/modules/message/message.resolver.ts @@ -0,0 +1,21 @@ +import { Resolver, Query, Mutation, Args } from '@nestjs/graphql'; +import { MessageService } from './message.service'; +import { Message } from './entities/message.entity'; +import { CreateMessageInput } from './dto/create-message.input'; + +@Resolver(() => Message) +export class MessageResolver { + constructor(private readonly messageService: MessageService) {} + + @Query(() => [Message]) + async getMessagesByOrder(@Args('orderId') orderId: string) { + return this.messageService.getMessagesByOrder(orderId); + } + + @Mutation(() => Message) + async sendMessage(@Args('data') data: CreateMessageInput) { + return this.messageService.sendMessage(data); + } + +} + diff --git a/apps/backend/src/modules/message/message.service.spec.ts b/apps/backend/src/modules/message/message.service.spec.ts new file mode 100644 index 00000000..727c4c87 --- /dev/null +++ b/apps/backend/src/modules/message/message.service.spec.ts @@ -0,0 +1,97 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MessageService } from './message.service'; +import { PrismaService } from 'src/core/prisma/prisma.service'; +import { CreateMessageInput } from './dto/create-message.input'; + +describe('MessageService', () => { + let service: MessageService; + let prismaService: PrismaService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + MessageService, + { + provide: PrismaService, + useValue: { + message: { + create: jest.fn(), + findMany: jest.fn(), + }, + }, + }, + ], + }).compile(); + + service = module.get(MessageService); + prismaService = module.get(PrismaService); + }); + + describe('sendMessage', () => { + it('should send a new message and return it', async () => { + const createMessageInput: CreateMessageInput = { + orderId: 'order-id', + senderAddress: 'user-address', + content: 'Test content', + }; + + const mockCreatedMessage = { + id: 'message-id', + orderId: createMessageInput.orderId, + senderAddress: createMessageInput.senderAddress, + content: createMessageInput.content, + createdAt: new Date(), + updatedAt: new Date(), + }; + + // Mocking prismaService.message.create + (prismaService.message.create as jest.Mock).mockResolvedValue(mockCreatedMessage); + + const result = await service.sendMessage(createMessageInput); + + // Assertions + expect(result).toEqual(mockCreatedMessage); + expect(prismaService.message.create).toHaveBeenCalledWith({ + data: { + orderId: createMessageInput.orderId, + senderAddress: createMessageInput.senderAddress, + content: createMessageInput.content, + }, + }); + }); + }); + + describe('getMessagesByOrder', () => { + it('should return all messages for a given order', async () => { + const orderId = 'order-id'; + const mockMessages = [ + { + id: 'message-id-1', + orderId: orderId, + senderAddress: 'user-address', + content: 'Test content 1', + createdAt: new Date(), + updatedAt: new Date(), + }, + { + id: 'message-id-2', + orderId: orderId, + senderAddress: 'user-address', + content: 'Test content 2', + createdAt: new Date(), + updatedAt: new Date(), + }, + ]; + + // Mocking prismaService.message.findMany + (prismaService.message.findMany as jest.Mock).mockResolvedValue(mockMessages); + + const result = await service.getMessagesByOrder(orderId); + expect(result).toEqual(mockMessages); + expect(prismaService.message.findMany).toHaveBeenCalledWith({ + where: { orderId: orderId }, + orderBy: { createdAt: 'asc' }, + }); + }); + }); +}); diff --git a/apps/backend/src/modules/message/message.service.ts b/apps/backend/src/modules/message/message.service.ts new file mode 100644 index 00000000..631dda0d --- /dev/null +++ b/apps/backend/src/modules/message/message.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@nestjs/common'; +import { CreateMessageInput } from './dto/create-message.input'; +import { PrismaService } from 'src/core/prisma/prisma.service'; + +@Injectable() +export class MessageService { + constructor(private readonly prisma: PrismaService) {} + + async sendMessage(data: CreateMessageInput) { + return this.prisma.message.create({ + data: { + orderId: data.orderId, + senderAddress: data.senderAddress, + content: data.content, + }, + }); + } + + async getMessagesByOrder(orderId: string) { + return this.prisma.message.findMany({ + where: { orderId: orderId }, + orderBy: { createdAt: 'asc' }, + }); + } + +} + diff --git a/package-lock.json b/package-lock.json index 38dea00a..da4c8bbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "@types/supertest": "^6.0.2", "globals": "^15.14.0", "jest": "^29.7.0", - "prisma": "^6.3.1", + "prisma": "^6.6.0", "source-map-support": "^0.5.21", "supertest": "^7.0.0", "ts-jest": "^29.2.5", @@ -2210,9 +2210,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", + "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", "cpu": [ "ppc64" ], @@ -2227,9 +2227,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", + "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", "cpu": [ "arm" ], @@ -2244,9 +2244,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", + "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", "cpu": [ "arm64" ], @@ -2261,9 +2261,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", + "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", "cpu": [ "x64" ], @@ -2278,9 +2278,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", + "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", "cpu": [ "arm64" ], @@ -2295,9 +2295,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", + "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", "cpu": [ "x64" ], @@ -2312,9 +2312,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", + "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", "cpu": [ "arm64" ], @@ -2329,9 +2329,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", + "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", "cpu": [ "x64" ], @@ -2346,9 +2346,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", + "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", "cpu": [ "arm" ], @@ -2363,9 +2363,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", + "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", "cpu": [ "arm64" ], @@ -2380,9 +2380,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", + "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", "cpu": [ "ia32" ], @@ -2397,9 +2397,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", + "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", "cpu": [ "loong64" ], @@ -2414,9 +2414,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", + "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", "cpu": [ "mips64el" ], @@ -2431,9 +2431,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", + "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", "cpu": [ "ppc64" ], @@ -2448,9 +2448,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", + "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", "cpu": [ "riscv64" ], @@ -2465,9 +2465,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", + "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", "cpu": [ "s390x" ], @@ -2482,9 +2482,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", + "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", "cpu": [ "x64" ], @@ -2499,9 +2499,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", - "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", + "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", "cpu": [ "arm64" ], @@ -2516,9 +2516,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", + "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", "cpu": [ "x64" ], @@ -2533,9 +2533,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", - "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", + "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", "cpu": [ "arm64" ], @@ -2550,9 +2550,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", + "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", "cpu": [ "x64" ], @@ -2567,9 +2567,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", + "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", "cpu": [ "x64" ], @@ -2584,9 +2584,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", + "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", "cpu": [ "arm64" ], @@ -2601,9 +2601,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", + "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", "cpu": [ "ia32" ], @@ -2618,9 +2618,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", + "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", "cpu": [ "x64" ], @@ -6757,9 +6757,9 @@ } }, "node_modules/@prisma/config": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.5.0.tgz", - "integrity": "sha512-sOH/2Go9Zer67DNFLZk6pYOHj+rumSb0VILgltkoxOjYnlLqUpHPAN826vnx8HigqnOCxj9LRhT6U7uLiIIWgw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.6.0.tgz", + "integrity": "sha512-d8FlXRHsx72RbN8nA2QCRORNv5AcUnPXgtPvwhXmYkQSMF/j9cKaJg+9VcUzBRXGy9QBckNzEQDEJZdEOZ+ubA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -6768,53 +6768,53 @@ } }, "node_modules/@prisma/debug": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.5.0.tgz", - "integrity": "sha512-fc/nusYBlJMzDmDepdUtH9aBsJrda2JNErP9AzuHbgUEQY0/9zQYZdNlXmKoIWENtio+qarPNe/+DQtrX5kMcQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.6.0.tgz", + "integrity": "sha512-DL6n4IKlW5k2LEXzpN60SQ1kP/F6fqaCgU/McgaYsxSf43GZ8lwtmXLke9efS+L1uGmrhtBUP4npV/QKF8s2ZQ==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.5.0.tgz", - "integrity": "sha512-FVPQYHgOllJklN9DUyujXvh3hFJCY0NX86sDmBErLvoZjy2OXGiZ5FNf3J/C4/RZZmCypZBYpBKEhx7b7rEsdw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.6.0.tgz", + "integrity": "sha512-nC0IV4NHh7500cozD1fBoTwTD1ydJERndreIjpZr/S3mno3P6tm8qnXmIND5SwUkibNeSJMpgl4gAnlqJ/gVlg==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.5.0", - "@prisma/engines-version": "6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60", - "@prisma/fetch-engine": "6.5.0", - "@prisma/get-platform": "6.5.0" + "@prisma/debug": "6.6.0", + "@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", + "@prisma/fetch-engine": "6.6.0", + "@prisma/get-platform": "6.6.0" } }, "node_modules/@prisma/engines-version": { - "version": "6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60.tgz", - "integrity": "sha512-iK3EmiVGFDCmXjSpdsKGNqy9hOdLnvYBrJB61far/oP03hlIxrb04OWmDjNTwtmZ3UZdA5MCvI+f+3k2jPTflQ==", + "version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a.tgz", + "integrity": "sha512-JzRaQ5Em1fuEcbR3nUsMNYaIYrOT1iMheenjCvzZblJcjv/3JIuxXN7RCNT5i6lRkLodW5ojCGhR7n5yvnNKrw==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.5.0.tgz", - "integrity": "sha512-3LhYA+FXP6pqY8FLHCjewyE8pGXXJ7BxZw2rhPq+CZAhvflVzq4K8Qly3OrmOkn6wGlz79nyLQdknyCG2HBTuA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.6.0.tgz", + "integrity": "sha512-Ohfo8gKp05LFLZaBlPUApM0M7k43a0jmo86YY35u1/4t+vuQH9mRGU7jGwVzGFY3v+9edeb/cowb1oG4buM1yw==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.5.0", - "@prisma/engines-version": "6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60", - "@prisma/get-platform": "6.5.0" + "@prisma/debug": "6.6.0", + "@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", + "@prisma/get-platform": "6.6.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.5.0.tgz", - "integrity": "sha512-xYcvyJwNMg2eDptBYFqFLUCfgi+wZLcj6HDMsj0Qw0irvauG4IKmkbywnqwok0B+k+W+p+jThM2DKTSmoPCkzw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.6.0.tgz", + "integrity": "sha512-3qCwmnT4Jh5WCGUrkWcc6VZaw0JY7eWN175/pcb5Z6FiLZZ3ygY93UX0WuV41bG51a6JN/oBH0uywJ90Y+V5eA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.5.0" + "@prisma/debug": "6.6.0" } }, "node_modules/@protobufjs/aspromise": { @@ -15653,9 +15653,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", + "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", "devOptional": true, "hasInstallScript": true, "license": "MIT", @@ -15666,31 +15666,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@esbuild/aix-ppc64": "0.25.3", + "@esbuild/android-arm": "0.25.3", + "@esbuild/android-arm64": "0.25.3", + "@esbuild/android-x64": "0.25.3", + "@esbuild/darwin-arm64": "0.25.3", + "@esbuild/darwin-x64": "0.25.3", + "@esbuild/freebsd-arm64": "0.25.3", + "@esbuild/freebsd-x64": "0.25.3", + "@esbuild/linux-arm": "0.25.3", + "@esbuild/linux-arm64": "0.25.3", + "@esbuild/linux-ia32": "0.25.3", + "@esbuild/linux-loong64": "0.25.3", + "@esbuild/linux-mips64el": "0.25.3", + "@esbuild/linux-ppc64": "0.25.3", + "@esbuild/linux-riscv64": "0.25.3", + "@esbuild/linux-s390x": "0.25.3", + "@esbuild/linux-x64": "0.25.3", + "@esbuild/netbsd-arm64": "0.25.3", + "@esbuild/netbsd-x64": "0.25.3", + "@esbuild/openbsd-arm64": "0.25.3", + "@esbuild/openbsd-x64": "0.25.3", + "@esbuild/sunos-x64": "0.25.3", + "@esbuild/win32-arm64": "0.25.3", + "@esbuild/win32-ia32": "0.25.3", + "@esbuild/win32-x64": "0.25.3" } }, "node_modules/esbuild-register": { @@ -21158,15 +21158,15 @@ "license": "MIT" }, "node_modules/prisma": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.5.0.tgz", - "integrity": "sha512-yUGXmWqv5F4PByMSNbYFxke/WbnyTLjnJ5bKr8fLkcnY7U5rU9rUTh/+Fja+gOrRxEgtCbCtca94IeITj4j/pg==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.6.0.tgz", + "integrity": "sha512-SYCUykz+1cnl6Ugd8VUvtTQq5+j1Q7C0CtzKPjQ8JyA2ALh0EEJkMCS+KgdnvKW1lrxjtjCyJSHOOT236mENYg==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.5.0", - "@prisma/engines": "6.5.0" + "@prisma/config": "6.6.0", + "@prisma/engines": "6.6.0" }, "bin": { "prisma": "build/index.js"