From b635d1260e2bfc8d46cadec652f1c8b74cd1a0e4 Mon Sep 17 00:00:00 2001 From: Culpam Date: Sat, 16 May 2026 17:01:47 +0300 Subject: [PATCH 1/7] task solution --- src/errors/AppError.ts | 12 + src/generated/prisma/browser.ts | 23 + src/generated/prisma/client.ts | 53 + src/generated/prisma/commonInputTypes.ts | 402 ++++ src/generated/prisma/enums.ts | 12 + src/generated/prisma/internal/class.ts | 265 +++ .../prisma/internal/prismaNamespace.ts | 852 ++++++++ .../prisma/internal/prismaNamespaceBrowser.ts | 113 ++ src/generated/prisma/models.ts | 11 + src/generated/prisma/models/User.ts | 1775 +++++++++++++++++ src/index.js | 1 - src/index.ts | 31 + src/lib/prisma.ts | 12 + src/middlewares/asyncHandler.ts | 15 + src/middlewares/auth.middleware.ts | 23 + src/middlewares/error.middleware.ts | 26 + src/modules/auth/auth.controller.ts | 65 + src/modules/auth/auth.routes.ts | 21 + src/modules/auth/auth.service.ts | 178 ++ src/modules/auth/auth.validator.ts | 236 +++ src/modules/profile/profile.controller.ts | 82 + src/modules/profile/profile.routes.ts | 35 + src/modules/profile/profile.service.ts | 183 ++ src/modules/users/users.repository.ts | 137 ++ src/modules/users/users.service.ts | 23 + src/types/exspress.d.ts | 11 + src/utils/jwt.ts | 43 + src/utils/mailer.ts | 101 + src/utils/password.ts | 59 + src/utils/token.ts | 7 + 30 files changed, 4806 insertions(+), 1 deletion(-) create mode 100644 src/errors/AppError.ts create mode 100644 src/generated/prisma/browser.ts create mode 100644 src/generated/prisma/client.ts create mode 100644 src/generated/prisma/commonInputTypes.ts create mode 100644 src/generated/prisma/enums.ts create mode 100644 src/generated/prisma/internal/class.ts create mode 100644 src/generated/prisma/internal/prismaNamespace.ts create mode 100644 src/generated/prisma/internal/prismaNamespaceBrowser.ts create mode 100644 src/generated/prisma/models.ts create mode 100644 src/generated/prisma/models/User.ts delete mode 100644 src/index.js create mode 100644 src/index.ts create mode 100644 src/lib/prisma.ts create mode 100644 src/middlewares/asyncHandler.ts create mode 100644 src/middlewares/auth.middleware.ts create mode 100644 src/middlewares/error.middleware.ts create mode 100644 src/modules/auth/auth.controller.ts create mode 100644 src/modules/auth/auth.routes.ts create mode 100644 src/modules/auth/auth.service.ts create mode 100644 src/modules/auth/auth.validator.ts create mode 100644 src/modules/profile/profile.controller.ts create mode 100644 src/modules/profile/profile.routes.ts create mode 100644 src/modules/profile/profile.service.ts create mode 100644 src/modules/users/users.repository.ts create mode 100644 src/modules/users/users.service.ts create mode 100644 src/types/exspress.d.ts create mode 100644 src/utils/jwt.ts create mode 100644 src/utils/mailer.ts create mode 100644 src/utils/password.ts create mode 100644 src/utils/token.ts diff --git a/src/errors/AppError.ts b/src/errors/AppError.ts new file mode 100644 index 00000000..b0693dda --- /dev/null +++ b/src/errors/AppError.ts @@ -0,0 +1,12 @@ +export class AppError extends Error { + statusCode: number; + details?: unknown; + + constructor(statusCode: number, message: string, details?: unknown) { + super(message); + + this.name = 'AppError'; + this.statusCode = statusCode; + this.details = details; + } +} diff --git a/src/generated/prisma/browser.ts b/src/generated/prisma/browser.ts new file mode 100644 index 00000000..44b11000 --- /dev/null +++ b/src/generated/prisma/browser.ts @@ -0,0 +1,23 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file should be your main import to use Prisma-related types and utilities in a browser. + * Use it to get access to models, enums, and input types. + * + * This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only. + * See `client.ts` for the standard, server-side entry point. + * + * 🟢 You can import this file directly. + */ + +import * as Prisma from './internal/prismaNamespaceBrowser.js'; +export { Prisma }; +export * as $Enums from './enums.js'; +export * from './enums.js'; +/** + * Model User + * + */ +export type User = Prisma.UserModel; diff --git a/src/generated/prisma/client.ts b/src/generated/prisma/client.ts new file mode 100644 index 00000000..6d7bc1c5 --- /dev/null +++ b/src/generated/prisma/client.ts @@ -0,0 +1,53 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file should be your main import to use Prisma. Through it you get access to all the models, enums, and input types. + * If you're looking for something you can import in the client-side of your application, please refer to the `browser.ts` file instead. + * + * 🟢 You can import this file directly. + */ + +import * as process from 'node:process'; +import * as path from 'node:path'; +import { fileURLToPath } from 'node:url'; +globalThis['__dirname'] = path.dirname(fileURLToPath(import.meta.url)); + +import * as runtime from '@prisma/client/runtime/client'; +import * as $Enums from './enums.js'; +import * as $Class from './internal/class.js'; +import * as Prisma from './internal/prismaNamespace.js'; + +export * as $Enums from './enums.js'; +export * from './enums.js'; +/** + * ## Prisma Client + * + * Type-safe database client for TypeScript + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) + * }) + * // Fetch zero or more Users + * const users = await prisma.user.findMany() + * ``` + * + * Read more in our [docs](https://pris.ly/d/client). + */ +export const PrismaClient = $Class.getPrismaClientClass(); +export type PrismaClient< + LogOpts extends Prisma.LogLevel = never, + OmitOpts extends + Prisma.PrismaClientOptions['omit'] = Prisma.PrismaClientOptions['omit'], + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = $Class.PrismaClient; +export { Prisma }; + +/** + * Model User + * + */ +export type User = Prisma.UserModel; diff --git a/src/generated/prisma/commonInputTypes.ts b/src/generated/prisma/commonInputTypes.ts new file mode 100644 index 00000000..46037957 --- /dev/null +++ b/src/generated/prisma/commonInputTypes.ts @@ -0,0 +1,402 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports various common sort, input & filter types that are not directly linked to a particular model. + * + * 🟢 You can import this file directly. + */ + +import type * as runtime from '@prisma/client/runtime/client'; +import * as $Enums from './enums.js'; +import type * as Prisma from './internal/prismaNamespace.js'; + +export type IntFilter<$PrismaModel = never> = { + equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; + in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + not?: Prisma.NestedIntFilter<$PrismaModel> | number; +}; + +export type StringFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + mode?: Prisma.QueryMode; + not?: Prisma.NestedStringFilter<$PrismaModel> | string; +}; + +export type BoolFilter<$PrismaModel = never> = { + equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; + not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean; +}; + +export type StringNullableFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + mode?: Prisma.QueryMode; + not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null; +}; + +export type DateTimeNullableFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; + in?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + notIn?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: + | Prisma.NestedDateTimeNullableFilter<$PrismaModel> + | Date + | string + | null; +}; + +export type DateTimeFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string; +}; + +export type SortOrderInput = { + sort: Prisma.SortOrder; + nulls?: Prisma.NullsOrder; +}; + +export type IntWithAggregatesFilter<$PrismaModel = never> = { + equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; + in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _avg?: Prisma.NestedFloatFilter<$PrismaModel>; + _sum?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedIntFilter<$PrismaModel>; + _max?: Prisma.NestedIntFilter<$PrismaModel>; +}; + +export type StringWithAggregatesFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + mode?: Prisma.QueryMode; + not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedStringFilter<$PrismaModel>; + _max?: Prisma.NestedStringFilter<$PrismaModel>; +}; + +export type BoolWithAggregatesFilter<$PrismaModel = never> = { + equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; + not?: Prisma.NestedBoolWithAggregatesFilter<$PrismaModel> | boolean; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedBoolFilter<$PrismaModel>; + _max?: Prisma.NestedBoolFilter<$PrismaModel>; +}; + +export type StringNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + mode?: Prisma.QueryMode; + not?: + | Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> + | string + | null; + _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; + _min?: Prisma.NestedStringNullableFilter<$PrismaModel>; + _max?: Prisma.NestedStringNullableFilter<$PrismaModel>; +}; + +export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; + in?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + notIn?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: + | Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> + | Date + | string + | null; + _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; + _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; + _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; +}; + +export type DateTimeWithAggregatesFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedDateTimeFilter<$PrismaModel>; + _max?: Prisma.NestedDateTimeFilter<$PrismaModel>; +}; + +export type NestedIntFilter<$PrismaModel = never> = { + equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; + in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + not?: Prisma.NestedIntFilter<$PrismaModel> | number; +}; + +export type NestedStringFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + not?: Prisma.NestedStringFilter<$PrismaModel> | string; +}; + +export type NestedBoolFilter<$PrismaModel = never> = { + equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; + not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean; +}; + +export type NestedStringNullableFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null; +}; + +export type NestedDateTimeNullableFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; + in?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + notIn?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: + | Prisma.NestedDateTimeNullableFilter<$PrismaModel> + | Date + | string + | null; +}; + +export type NestedDateTimeFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string; +}; + +export type NestedIntWithAggregatesFilter<$PrismaModel = never> = { + equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; + in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; + lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _avg?: Prisma.NestedFloatFilter<$PrismaModel>; + _sum?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedIntFilter<$PrismaModel>; + _max?: Prisma.NestedIntFilter<$PrismaModel>; +}; + +export type NestedFloatFilter<$PrismaModel = never> = { + equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>; + in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>; + notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>; + lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>; + lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>; + gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>; + gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>; + not?: Prisma.NestedFloatFilter<$PrismaModel> | number; +}; + +export type NestedStringWithAggregatesFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedStringFilter<$PrismaModel>; + _max?: Prisma.NestedStringFilter<$PrismaModel>; +}; + +export type NestedBoolWithAggregatesFilter<$PrismaModel = never> = { + equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; + not?: Prisma.NestedBoolWithAggregatesFilter<$PrismaModel> | boolean; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedBoolFilter<$PrismaModel>; + _max?: Prisma.NestedBoolFilter<$PrismaModel>; +}; + +export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; + in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; + lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; + gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; + contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; + not?: + | Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> + | string + | null; + _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; + _min?: Prisma.NestedStringNullableFilter<$PrismaModel>; + _max?: Prisma.NestedStringNullableFilter<$PrismaModel>; +}; + +export type NestedIntNullableFilter<$PrismaModel = never> = { + equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null; + in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null; + notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null; + lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; + gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; + not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null; +}; + +export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; + in?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + notIn?: + | Date[] + | string[] + | Prisma.ListDateTimeFieldRefInput<$PrismaModel> + | null; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: + | Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> + | Date + | string + | null; + _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; + _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; + _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; +}; + +export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; + not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string; + _count?: Prisma.NestedIntFilter<$PrismaModel>; + _min?: Prisma.NestedDateTimeFilter<$PrismaModel>; + _max?: Prisma.NestedDateTimeFilter<$PrismaModel>; +}; diff --git a/src/generated/prisma/enums.ts b/src/generated/prisma/enums.ts new file mode 100644 index 00000000..ce747514 --- /dev/null +++ b/src/generated/prisma/enums.ts @@ -0,0 +1,12 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports all enum related types from the schema. + * + * 🟢 You can import this file directly. + */ + +// This file is empty because there are no enums in the schema. +export {}; diff --git a/src/generated/prisma/internal/class.ts b/src/generated/prisma/internal/class.ts new file mode 100644 index 00000000..ad410582 --- /dev/null +++ b/src/generated/prisma/internal/class.ts @@ -0,0 +1,265 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * WARNING: This is an internal file that is subject to change! + * + * 🛑 Under no circumstances should you import this file directly! 🛑 + * + * Please import the `PrismaClient` class from the `client.ts` file instead. + */ + +import * as runtime from '@prisma/client/runtime/client'; +import type * as Prisma from './prismaNamespace.js'; + +const config: runtime.GetPrismaClientConfig = { + previewFeatures: [], + clientVersion: '7.8.0', + engineVersion: '3c6e192761c0362d496ed980de936e2f3cebcd3a', + activeProvider: 'postgresql', + inlineSchema: + 'generator client {\n provider = "prisma-client"\n output = "../src/generated/prisma"\n}\n\ndatasource db {\n provider = "postgresql"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n email String @unique\n passwordHash String\n isActivated Boolean @default(false)\n activationToken String? @unique\n\n resetPasswordToken String? @unique\n resetTokenExpires DateTime?\n\n pendingEmail String?\n emailChangeToken String? @unique\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n', + runtimeDataModel: { + models: {}, + enums: {}, + types: {}, + }, + parameterizationSchema: { + strings: [], + graph: '', + }, +}; + +config.runtimeDataModel = JSON.parse( + '{"models":{"User":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"name","kind":"scalar","type":"String"},{"name":"email","kind":"scalar","type":"String"},{"name":"passwordHash","kind":"scalar","type":"String"},{"name":"isActivated","kind":"scalar","type":"Boolean"},{"name":"activationToken","kind":"scalar","type":"String"},{"name":"resetPasswordToken","kind":"scalar","type":"String"},{"name":"resetTokenExpires","kind":"scalar","type":"DateTime"},{"name":"pendingEmail","kind":"scalar","type":"String"},{"name":"emailChangeToken","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null}},"enums":{},"types":{}}', +); +config.parameterizationSchema = { + strings: JSON.parse( + '["where","User.findUnique","User.findUniqueOrThrow","orderBy","cursor","User.findFirst","User.findFirstOrThrow","User.findMany","data","User.createOne","User.createMany","User.createManyAndReturn","User.updateOne","User.updateMany","User.updateManyAndReturn","create","update","User.upsertOne","User.deleteOne","User.deleteMany","having","_count","_avg","_sum","_min","_max","User.groupBy","User.aggregate","AND","OR","NOT","id","name","email","passwordHash","isActivated","activationToken","resetPasswordToken","resetTokenExpires","pendingEmail","emailChangeToken","createdAt","updatedAt","equals","in","notIn","lt","lte","gt","gte","not","contains","startsWith","endsWith","set","increment","decrement","multiply","divide"]', + ), + graph: + 'QQsQDxwAAC8AMB0AAAQAEB4AAC8AMB8CAAAAASABADEAISEBAAAAASIBADEAISMgADIAISQBAAAAASUBAAAAASZAADQAIScBADMAISgBAAAAASlAADUAISpAADUAIQEAAAABACABAAAAAQAgDxwAAC8AMB0AAAQAEB4AAC8AMB8CADAAISABADEAISEBADEAISIBADEAISMgADIAISQBADMAISUBADMAISZAADQAIScBADMAISgBADMAISlAADUAISpAADUAIQUkAAA2ACAlAAA2ACAmAAA2ACAnAAA2ACAoAAA2ACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACAMHwIAAAABIAEAAAABIQEAAAABIgEAAAABIyAAAAABJAEAAAABJQEAAAABJkAAAAABJwEAAAABKAEAAAABKUAAAAABKkAAAAABAQgAAAkAIAwfAgAAAAEgAQAAAAEhAQAAAAEiAQAAAAEjIAAAAAEkAQAAAAElAQAAAAEmQAAAAAEnAQAAAAEoAQAAAAEpQAAAAAEqQAAAAAEBCAAACwAwAQgAAAsAMAwfAgBBACEgAQA8ACEhAQA8ACEiAQA8ACEjIAA9ACEkAQA-ACElAQA-ACEmQAA_ACEnAQA-ACEoAQA-ACEpQABAACEqQABAACECAAAAAQAgCAAADgAgDB8CAEEAISABADwAISEBADwAISIBADwAISMgAD0AISQBAD4AISUBAD4AISZAAD8AIScBAD4AISgBAD4AISlAAEAAISpAAEAAIQIAAAAEACAIAAAQACACAAAABAAgCAAAEAAgAwAAAAEAIA8AAAkAIBAAAA4AIAEAAAABACABAAAABAAgChUAADcAIBYAADgAIBcAADsAIBgAADoAIBkAADkAICQAADYAICUAADYAICYAADYAICcAADYAICgAADYAIA8cAAAaADAdAAAXABAeAAAaADAfAgAbACEgAQAcACEhAQAcACEiAQAcACEjIAAdACEkAQAeACElAQAeACEmQAAfACEnAQAeACEoAQAeACEpQAAgACEqQAAgACEDAAAABAAgAwAAFgAwFAAAFwAgAwAAAAQAIAMAAAUAMAQAAAEAIA8cAAAaADAdAAAXABAeAAAaADAfAgAbACEgAQAcACEhAQAcACEiAQAcACEjIAAdACEkAQAeACElAQAeACEmQAAfACEnAQAeACEoAQAeACEpQAAgACEqQAAgACENFQAAIgAgFgAALgAgFwAAIgAgGAAAIgAgGQAAIgAgKwIAAAABLAIAAAAELQIAAAAELgIAAAABLwIAAAABMAIAAAABMQIAAAABMgIALQAhDhUAACIAIBgAACwAIBkAACwAICsBAAAAASwBAAAABC0BAAAABC4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACsAITMBAAAAATQBAAAAATUBAAAAAQUVAAAiACAYAAAqACAZAAAqACArIAAAAAEyIAApACEOFQAAJQAgGAAAKAAgGQAAKAAgKwEAAAABLAEAAAAFLQEAAAAFLgEAAAABLwEAAAABMAEAAAABMQEAAAABMgEAJwAhMwEAAAABNAEAAAABNQEAAAABCxUAACUAIBgAACYAIBkAACYAICtAAAAAASxAAAAABS1AAAAABS5AAAAAAS9AAAAAATBAAAAAATFAAAAAATJAACQAIQsVAAAiACAYAAAjACAZAAAjACArQAAAAAEsQAAAAAQtQAAAAAQuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAhACELFQAAIgAgGAAAIwAgGQAAIwAgK0AAAAABLEAAAAAELUAAAAAELkAAAAABL0AAAAABMEAAAAABMUAAAAABMkAAIQAhCCsCAAAAASwCAAAABC0CAAAABC4CAAAAAS8CAAAAATACAAAAATECAAAAATICACIAIQgrQAAAAAEsQAAAAAQtQAAAAAQuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAjACELFQAAJQAgGAAAJgAgGQAAJgAgK0AAAAABLEAAAAAFLUAAAAAFLkAAAAABL0AAAAABMEAAAAABMUAAAAABMkAAJAAhCCsCAAAAASwCAAAABS0CAAAABS4CAAAAAS8CAAAAATACAAAAATECAAAAATICACUAIQgrQAAAAAEsQAAAAAUtQAAAAAUuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAmACEOFQAAJQAgGAAAKAAgGQAAKAAgKwEAAAABLAEAAAAFLQEAAAAFLgEAAAABLwEAAAABMAEAAAABMQEAAAABMgEAJwAhMwEAAAABNAEAAAABNQEAAAABCysBAAAAASwBAAAABS0BAAAABS4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACgAITMBAAAAATQBAAAAATUBAAAAAQUVAAAiACAYAAAqACAZAAAqACArIAAAAAEyIAApACECKyAAAAABMiAAKgAhDhUAACIAIBgAACwAIBkAACwAICsBAAAAASwBAAAABC0BAAAABC4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACsAITMBAAAAATQBAAAAATUBAAAAAQsrAQAAAAEsAQAAAAQtAQAAAAQuAQAAAAEvAQAAAAEwAQAAAAExAQAAAAEyAQAsACEzAQAAAAE0AQAAAAE1AQAAAAENFQAAIgAgFgAALgAgFwAAIgAgGAAAIgAgGQAAIgAgKwIAAAABLAIAAAAELQIAAAAELgIAAAABLwIAAAABMAIAAAABMQIAAAABMgIALQAhCCsIAAAAASwIAAAABC0IAAAABC4IAAAAAS8IAAAAATAIAAAAATEIAAAAATIIAC4AIQ8cAAAvADAdAAAEABAeAAAvADAfAgAwACEgAQAxACEhAQAxACEiAQAxACEjIAAyACEkAQAzACElAQAzACEmQAA0ACEnAQAzACEoAQAzACEpQAA1ACEqQAA1ACEIKwIAAAABLAIAAAAELQIAAAAELgIAAAABLwIAAAABMAIAAAABMQIAAAABMgIAIgAhCysBAAAAASwBAAAABC0BAAAABC4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACwAITMBAAAAATQBAAAAATUBAAAAAQIrIAAAAAEyIAAqACELKwEAAAABLAEAAAAFLQEAAAAFLgEAAAABLwEAAAABMAEAAAABMQEAAAABMgEAKAAhMwEAAAABNAEAAAABNQEAAAABCCtAAAAAASxAAAAABS1AAAAABS5AAAAAAS9AAAAAATBAAAAAATFAAAAAATJAACYAIQgrQAAAAAEsQAAAAAQtQAAAAAQuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAjACEAAAAAAAABNgEAAAABATYgAAAAAQE2AQAAAAEBNkAAAAABATZAAAAAAQU2AgAAAAE3AgAAAAE4AgAAAAE5AgAAAAE6AgAAAAEAAAAABRUABhYABxcACBgACRkACgAAAAAABRUABhYABxcACBgACRkACgECAQIDAQUGAQYHAQcIAQkKAQoMAgsNAwwPAQ0RAg4SBBETARIUARMVAhoYBRsZCw', +}; + +async function decodeBase64AsWasm( + wasmBase64: string, +): Promise { + const { Buffer } = await import('node:buffer'); + const wasmArray = Buffer.from(wasmBase64, 'base64'); + return new WebAssembly.Module(wasmArray); +} + +config.compilerWasm = { + getRuntime: async () => + await import( + '@prisma/client/runtime/query_compiler_fast_bg.postgresql.mjs' + ), + + getQueryCompilerWasmModule: async () => { + const { wasm } = await import( + '@prisma/client/runtime/query_compiler_fast_bg.postgresql.wasm-base64.mjs' + ); + return await decodeBase64AsWasm(wasm); + }, + + importName: './query_compiler_fast_bg.js', +}; + +export type LogOptions = + 'log' extends keyof ClientOptions + ? ClientOptions['log'] extends Array + ? Prisma.GetEvents + : never + : never; + +export interface PrismaClientConstructor { + /** + * ## Prisma Client + * + * Type-safe database client for TypeScript + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) + * }) + * // Fetch zero or more Users + * const users = await prisma.user.findMany() + * ``` + * + * Read more in our [docs](https://pris.ly/d/client). + */ + + new < + Options extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions, + LogOpts extends LogOptions = LogOptions, + OmitOpts extends Prisma.PrismaClientOptions['omit'] = Options extends { + omit: infer U; + } + ? U + : Prisma.PrismaClientOptions['omit'], + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, + >( + options: Prisma.Subset, + ): PrismaClient; +} + +/** + * ## Prisma Client + * + * Type-safe database client for TypeScript + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) + * }) + * // Fetch zero or more Users + * const users = await prisma.user.findMany() + * ``` + * + * Read more in our [docs](https://pris.ly/d/client). + */ + +export interface PrismaClient< + in LogOpts extends Prisma.LogLevel = never, + in out OmitOpts extends Prisma.PrismaClientOptions['omit'] = undefined, + in out ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> { + [K: symbol]: { types: Prisma.TypeMap['other'] }; + + $on( + eventType: V, + callback: ( + event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent, + ) => void, + ): PrismaClient; + + /** + * Connect with the database + */ + $connect(): runtime.Types.Utils.JsPromise; + + /** + * Disconnect from the database + */ + $disconnect(): runtime.Types.Utils.JsPromise; + + /** + * Executes a prepared raw query and returns the number of affected rows. + * @example + * ``` + * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};` + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $executeRaw( + query: TemplateStringsArray | Prisma.Sql, + ...values: any[] + ): Prisma.PrismaPromise; + + /** + * Executes a raw query and returns the number of affected rows. + * Susceptible to SQL injections, see documentation. + * @example + * ``` + * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com') + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $executeRawUnsafe( + query: string, + ...values: any[] + ): Prisma.PrismaPromise; + + /** + * Performs a prepared raw query and returns the `SELECT` data. + * @example + * ``` + * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};` + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $queryRaw( + query: TemplateStringsArray | Prisma.Sql, + ...values: any[] + ): Prisma.PrismaPromise; + + /** + * Performs a raw query and returns the `SELECT` data. + * Susceptible to SQL injections, see documentation. + * @example + * ``` + * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com') + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $queryRawUnsafe( + query: string, + ...values: any[] + ): Prisma.PrismaPromise; + + /** + * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole. + * @example + * ``` + * const [george, bob, alice] = await prisma.$transaction([ + * prisma.user.create({ data: { name: 'George' } }), + * prisma.user.create({ data: { name: 'Bob' } }), + * prisma.user.create({ data: { name: 'Alice' } }), + * ]) + * ``` + * + * Read more in our [docs](https://www.prisma.io/docs/orm/prisma-client/queries/transactions). + */ + $transaction

[]>( + arg: [...P], + options?: { + maxWait?: number; + timeout?: number; + isolationLevel?: Prisma.TransactionIsolationLevel; + }, + ): runtime.Types.Utils.JsPromise>; + + $transaction( + fn: ( + prisma: Omit, + ) => runtime.Types.Utils.JsPromise, + options?: { + maxWait?: number; + timeout?: number; + isolationLevel?: Prisma.TransactionIsolationLevel; + }, + ): runtime.Types.Utils.JsPromise; + + $extends: runtime.Types.Extensions.ExtendsHook< + 'extends', + Prisma.TypeMapCb, + ExtArgs, + runtime.Types.Utils.Call< + Prisma.TypeMapCb, + { + extArgs: ExtArgs; + } + > + >; + + /** + * `prisma.user`: Exposes CRUD operations for the **User** model. + * Example usage: + * ```ts + * // Fetch zero or more Users + * const users = await prisma.user.findMany() + * ``` + */ + get user(): Prisma.UserDelegate; +} + +export function getPrismaClientClass(): PrismaClientConstructor { + return runtime.getPrismaClient(config) as unknown as PrismaClientConstructor; +} diff --git a/src/generated/prisma/internal/prismaNamespace.ts b/src/generated/prisma/internal/prismaNamespace.ts new file mode 100644 index 00000000..801f2c58 --- /dev/null +++ b/src/generated/prisma/internal/prismaNamespace.ts @@ -0,0 +1,852 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * WARNING: This is an internal file that is subject to change! + * + * 🛑 Under no circumstances should you import this file directly! 🛑 + * + * All exports from this file are wrapped under a `Prisma` namespace object in the client.ts file. + * While this enables partial backward compatibility, it is not part of the stable public API. + * + * If you are looking for your Models, Enums, and Input Types, please import them from the respective + * model files in the `model` directory! + */ + +import * as runtime from '@prisma/client/runtime/client'; +import type * as Prisma from '../models.js'; +import { type PrismaClient } from './class.js'; + +export type * from '../models.js'; + +export type DMMF = typeof runtime.DMMF; + +export type PrismaPromise = runtime.Types.Public.PrismaPromise; + +/** + * Prisma Errors + */ + +export const PrismaClientKnownRequestError = + runtime.PrismaClientKnownRequestError; +export type PrismaClientKnownRequestError = + runtime.PrismaClientKnownRequestError; + +export const PrismaClientUnknownRequestError = + runtime.PrismaClientUnknownRequestError; +export type PrismaClientUnknownRequestError = + runtime.PrismaClientUnknownRequestError; + +export const PrismaClientRustPanicError = runtime.PrismaClientRustPanicError; +export type PrismaClientRustPanicError = runtime.PrismaClientRustPanicError; + +export const PrismaClientInitializationError = + runtime.PrismaClientInitializationError; +export type PrismaClientInitializationError = + runtime.PrismaClientInitializationError; + +export const PrismaClientValidationError = runtime.PrismaClientValidationError; +export type PrismaClientValidationError = runtime.PrismaClientValidationError; + +/** + * Re-export of sql-template-tag + */ +export const sql = runtime.sqltag; +export const empty = runtime.empty; +export const join = runtime.join; +export const raw = runtime.raw; +export const Sql = runtime.Sql; +export type Sql = runtime.Sql; + +/** + * Decimal.js + */ +export const Decimal = runtime.Decimal; +export type Decimal = runtime.Decimal; + +export type DecimalJsLike = runtime.DecimalJsLike; + +/** + * Extensions + */ +export type Extension = runtime.Types.Extensions.UserArgs; +export const getExtensionContext = runtime.Extensions.getExtensionContext; +export type Args = runtime.Types.Public.Args< + T, + F +>; +export type Payload< + T, + F extends runtime.Operation = never, +> = runtime.Types.Public.Payload; +export type Result< + T, + A, + F extends runtime.Operation, +> = runtime.Types.Public.Result; +export type Exact = runtime.Types.Public.Exact; + +export type PrismaVersion = { + client: string; + engine: string; +}; + +/** + * Prisma Client JS version: 7.8.0 + * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a + */ +export const prismaVersion: PrismaVersion = { + client: '7.8.0', + engine: '3c6e192761c0362d496ed980de936e2f3cebcd3a', +}; + +/** + * Utility Types + */ + +export type Bytes = runtime.Bytes; +export type JsonObject = runtime.JsonObject; +export type JsonArray = runtime.JsonArray; +export type JsonValue = runtime.JsonValue; +export type InputJsonObject = runtime.InputJsonObject; +export type InputJsonArray = runtime.InputJsonArray; +export type InputJsonValue = runtime.InputJsonValue; + +export const NullTypes = { + DbNull: runtime.NullTypes.DbNull as new ( + secret: never, + ) => typeof runtime.DbNull, + JsonNull: runtime.NullTypes.JsonNull as new ( + secret: never, + ) => typeof runtime.JsonNull, + AnyNull: runtime.NullTypes.AnyNull as new ( + secret: never, + ) => typeof runtime.AnyNull, +}; +/** + * Helper for filtering JSON entries that have `null` on the database (empty on the db) + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ +export const DbNull = runtime.DbNull; + +/** + * Helper for filtering JSON entries that have JSON `null` values (not empty on the db) + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ +export const JsonNull = runtime.JsonNull; + +/** + * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull` + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ +export const AnyNull = runtime.AnyNull; + +type SelectAndInclude = { + select: any; + include: any; +}; + +type SelectAndOmit = { + select: any; + omit: any; +}; + +/** + * From T, pick a set of properties whose keys are in the union K + */ +type Prisma__Pick = { + [P in K]: T[P]; +}; + +export type Enumerable = T | Array; + +/** + * Subset + * @desc From `T` pick properties that exist in `U`. Simple version of Intersection + */ +export type Subset = { + [key in keyof T]: key extends keyof U ? T[key] : never; +}; + +/** + * SelectSubset + * @desc From `T` pick properties that exist in `U`. Simple version of Intersection. + * Additionally, it validates, if both select and include are present. If the case, it errors. + */ +export type SelectSubset = { + [key in keyof T]: key extends keyof U ? T[key] : never; +} & (T extends SelectAndInclude + ? 'Please either choose `select` or `include`.' + : T extends SelectAndOmit + ? 'Please either choose `select` or `omit`.' + : {}); + +/** + * Subset + Intersection + * @desc From `T` pick properties that exist in `U` and intersect `K` + */ +export type SubsetIntersection = { + [key in keyof T]: key extends keyof U ? T[key] : never; +} & K; + +type Without = { [P in Exclude]?: never }; + +/** + * XOR is needed to have a real mutually exclusive union type + * https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types + */ +export type XOR = T extends object + ? U extends object + ? (Without & U) | (Without & T) + : U + : T; + +/** + * Is T a Record? + */ +type IsObject = + T extends Array + ? False + : T extends Date + ? False + : T extends Uint8Array + ? False + : T extends BigInt + ? False + : T extends object + ? True + : False; + +/** + * If it's T[], return T + */ +export type UnEnumerate = T extends Array ? U : T; + +/** + * From ts-toolbelt + */ + +type __Either = Omit & + { + // Merge all but K + [P in K]: Prisma__Pick; // With K possibilities + }[K]; + +type EitherStrict = Strict<__Either>; + +type EitherLoose = ComputeRaw<__Either>; + +type _Either = { + 1: EitherStrict; + 0: EitherLoose; +}[strict]; + +export type Either< + O extends object, + K extends Key, + strict extends Boolean = 1, +> = O extends unknown ? _Either : never; + +export type Union = any; + +export type PatchUndefined = { + [K in keyof O]: O[K] extends undefined ? At : O[K]; +} & {}; + +/** Helper Types for "Merge" **/ +export type IntersectOf = ( + U extends unknown ? (k: U) => void : never +) extends (k: infer I) => void + ? I + : never; + +export type Overwrite = { + [K in keyof O]: K extends keyof O1 ? O1[K] : O[K]; +} & {}; + +type _Merge = IntersectOf< + Overwrite< + U, + { + [K in keyof U]-?: At; + } + > +>; + +type Key = string | number | symbol; +type AtStrict = O[K & keyof O]; +type AtLoose = O extends unknown + ? AtStrict + : never; +export type At = { + 1: AtStrict; + 0: AtLoose; +}[strict]; + +export type ComputeRaw = A extends Function + ? A + : { + [K in keyof A]: A[K]; + } & {}; + +export type OptionalFlat = { + [K in keyof O]?: O[K]; +} & {}; + +type _Record = { + [P in K]: T; +}; + +// cause typescript not to expand types and preserve names +type NoExpand = T extends unknown ? T : never; + +// this type assumes the passed object is entirely optional +export type AtLeast = NoExpand< + O extends unknown + ? + | (K extends keyof O ? { [P in K]: O[P] } & O : O) + | ({ [P in keyof O as P extends K ? P : never]-?: O[P] } & O) + : never +>; + +type _Strict = U extends unknown + ? U & OptionalFlat<_Record, keyof U>, never>> + : never; + +export type Strict = ComputeRaw<_Strict>; +/** End Helper Types for "Merge" **/ + +export type Merge = ComputeRaw<_Merge>>; + +export type Boolean = True | False; + +export type True = 1; + +export type False = 0; + +export type Not = { + 0: 1; + 1: 0; +}[B]; + +export type Extends = [A1] extends [never] + ? 0 // anything `never` is false + : A1 extends A2 + ? 1 + : 0; + +export type Has = Not< + Extends, U1> +>; + +export type Or = { + 0: { + 0: 0; + 1: 1; + }; + 1: { + 0: 1; + 1: 1; + }; +}[B1][B2]; + +export type Keys = U extends unknown ? keyof U : never; + +export type GetScalarType = O extends object + ? { + [P in keyof T]: P extends keyof O ? O[P] : never; + } + : never; + +type FieldPaths> = + IsObject extends True ? U : T; + +export type GetHavingFields = { + [K in keyof T]: Or< + Or, Extends<'AND', K>>, + Extends<'NOT', K> + > extends True + ? // infer is only needed to not hit TS limit + // based on the brilliant idea of Pierre-Antoine Mills + // https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437 + T[K] extends infer TK + ? GetHavingFields< + UnEnumerate extends object ? Merge> : never + > + : never + : {} extends FieldPaths + ? never + : K; +}[keyof T]; + +/** + * Convert tuple to union + */ +type _TupleToUnion = T extends (infer E)[] ? E : never; +type TupleToUnion = _TupleToUnion; +export type MaybeTupleToUnion = T extends any[] ? TupleToUnion : T; + +/** + * Like `Pick`, but additionally can also accept an array of keys + */ +export type PickEnumerable< + T, + K extends Enumerable | keyof T, +> = Prisma__Pick>; + +/** + * Exclude all keys with underscores + */ +export type ExcludeUnderscoreKeys = T extends `_${string}` + ? never + : T; + +export type FieldRef = runtime.FieldRef; + +type FieldRefInputType = Model extends never + ? never + : FieldRef; + +export const ModelName = { + User: 'User', +} as const; + +export type ModelName = (typeof ModelName)[keyof typeof ModelName]; + +export interface TypeMapCb + extends runtime.Types.Utils.Fn< + { extArgs: runtime.Types.Extensions.InternalArgs }, + runtime.Types.Utils.Record + > { + returns: TypeMap; +} + +export type TypeMap< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, + GlobalOmitOptions = {}, +> = { + globalOmitOptions: { + omit: GlobalOmitOptions; + }; + meta: { + modelProps: 'user'; + txIsolationLevel: TransactionIsolationLevel; + }; + model: { + User: { + payload: Prisma.$UserPayload; + fields: Prisma.UserFieldRefs; + operations: { + findUnique: { + args: Prisma.UserFindUniqueArgs; + result: runtime.Types.Utils.PayloadToResult | null; + }; + findUniqueOrThrow: { + args: Prisma.UserFindUniqueOrThrowArgs; + result: runtime.Types.Utils.PayloadToResult; + }; + findFirst: { + args: Prisma.UserFindFirstArgs; + result: runtime.Types.Utils.PayloadToResult | null; + }; + findFirstOrThrow: { + args: Prisma.UserFindFirstOrThrowArgs; + result: runtime.Types.Utils.PayloadToResult; + }; + findMany: { + args: Prisma.UserFindManyArgs; + result: runtime.Types.Utils.PayloadToResult[]; + }; + create: { + args: Prisma.UserCreateArgs; + result: runtime.Types.Utils.PayloadToResult; + }; + createMany: { + args: Prisma.UserCreateManyArgs; + result: BatchPayload; + }; + createManyAndReturn: { + args: Prisma.UserCreateManyAndReturnArgs; + result: runtime.Types.Utils.PayloadToResult[]; + }; + delete: { + args: Prisma.UserDeleteArgs; + result: runtime.Types.Utils.PayloadToResult; + }; + update: { + args: Prisma.UserUpdateArgs; + result: runtime.Types.Utils.PayloadToResult; + }; + deleteMany: { + args: Prisma.UserDeleteManyArgs; + result: BatchPayload; + }; + updateMany: { + args: Prisma.UserUpdateManyArgs; + result: BatchPayload; + }; + updateManyAndReturn: { + args: Prisma.UserUpdateManyAndReturnArgs; + result: runtime.Types.Utils.PayloadToResult[]; + }; + upsert: { + args: Prisma.UserUpsertArgs; + result: runtime.Types.Utils.PayloadToResult; + }; + aggregate: { + args: Prisma.UserAggregateArgs; + result: runtime.Types.Utils.Optional; + }; + groupBy: { + args: Prisma.UserGroupByArgs; + result: runtime.Types.Utils.Optional[]; + }; + count: { + args: Prisma.UserCountArgs; + result: + | runtime.Types.Utils.Optional + | number; + }; + }; + }; + }; +} & { + other: { + payload: any; + operations: { + $executeRaw: { + args: [query: TemplateStringsArray | Sql, ...values: any[]]; + result: any; + }; + $executeRawUnsafe: { + args: [query: string, ...values: any[]]; + result: any; + }; + $queryRaw: { + args: [query: TemplateStringsArray | Sql, ...values: any[]]; + result: any; + }; + $queryRawUnsafe: { + args: [query: string, ...values: any[]]; + result: any; + }; + }; + }; +}; + +/** + * Enums + */ + +export const TransactionIsolationLevel = runtime.makeStrictEnum({ + ReadUncommitted: 'ReadUncommitted', + ReadCommitted: 'ReadCommitted', + RepeatableRead: 'RepeatableRead', + Serializable: 'Serializable', +} as const); + +export type TransactionIsolationLevel = + (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]; + +export const UserScalarFieldEnum = { + id: 'id', + name: 'name', + email: 'email', + passwordHash: 'passwordHash', + isActivated: 'isActivated', + activationToken: 'activationToken', + resetPasswordToken: 'resetPasswordToken', + resetTokenExpires: 'resetTokenExpires', + pendingEmail: 'pendingEmail', + emailChangeToken: 'emailChangeToken', + createdAt: 'createdAt', + updatedAt: 'updatedAt', +} as const; + +export type UserScalarFieldEnum = + (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]; + +export const SortOrder = { + asc: 'asc', + desc: 'desc', +} as const; + +export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]; + +export const QueryMode = { + default: 'default', + insensitive: 'insensitive', +} as const; + +export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]; + +export const NullsOrder = { + first: 'first', + last: 'last', +} as const; + +export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]; + +/** + * Field references + */ + +/** + * Reference to a field of type 'Int' + */ +export type IntFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'Int' +>; + +/** + * Reference to a field of type 'Int[]' + */ +export type ListIntFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'Int[]' +>; + +/** + * Reference to a field of type 'String' + */ +export type StringFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'String' +>; + +/** + * Reference to a field of type 'String[]' + */ +export type ListStringFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'String[]' +>; + +/** + * Reference to a field of type 'Boolean' + */ +export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'Boolean' +>; + +/** + * Reference to a field of type 'DateTime' + */ +export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'DateTime' +>; + +/** + * Reference to a field of type 'DateTime[]' + */ +export type ListDateTimeFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'DateTime[]' +>; + +/** + * Reference to a field of type 'Float' + */ +export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'Float' +>; + +/** + * Reference to a field of type 'Float[]' + */ +export type ListFloatFieldRefInput<$PrismaModel> = FieldRefInputType< + $PrismaModel, + 'Float[]' +>; + +/** + * Batch Payload for updateMany & deleteMany & createMany + */ +export type BatchPayload = { + count: number; +}; + +export const defineExtension = runtime.Extensions + .defineExtension as unknown as runtime.Types.Extensions.ExtendsHook< + 'define', + TypeMapCb, + runtime.Types.Extensions.DefaultArgs +>; +export type DefaultPrismaClient = PrismaClient; +export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'; +export type PrismaClientOptions = ( + | { + /** + * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-pg`. + */ + adapter: runtime.SqlDriverAdapterFactory; + accelerateUrl?: never; + } + | { + /** + * Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database. + */ + accelerateUrl: string; + adapter?: never; + } +) & { + /** + * @default "colorless" + */ + errorFormat?: ErrorFormat; + /** + * @example + * ``` + * // Shorthand for `emit: 'stdout'` + * log: ['query', 'info', 'warn', 'error'] + * + * // Emit as events only + * log: [ + * { emit: 'event', level: 'query' }, + * { emit: 'event', level: 'info' }, + * { emit: 'event', level: 'warn' } + * { emit: 'event', level: 'error' } + * ] + * + * / Emit as events and log to stdout + * og: [ + * { emit: 'stdout', level: 'query' }, + * { emit: 'stdout', level: 'info' }, + * { emit: 'stdout', level: 'warn' } + * { emit: 'stdout', level: 'error' } + * + * ``` + * Read more in our [docs](https://pris.ly/d/logging). + */ + log?: (LogLevel | LogDefinition)[]; + /** + * The default values for transactionOptions + * maxWait ?= 2000 + * timeout ?= 5000 + */ + transactionOptions?: { + maxWait?: number; + timeout?: number; + isolationLevel?: TransactionIsolationLevel; + }; + /** + * Global configuration for omitting model fields by default. + * + * @example + * ``` + * const prisma = new PrismaClient({ + * omit: { + * user: { + * password: true + * } + * } + * }) + * ``` + */ + omit?: GlobalOmitConfig; + /** + * SQL commenter plugins that add metadata to SQL queries as comments. + * Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/ + * + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter, + * comments: [ + * traceContext(), + * queryInsights(), + * ], + * }) + * ``` + */ + comments?: runtime.SqlCommenterPlugin[]; + /** + * Optional maximum size for the query plan cache. If not provided, a default size will be used. + * A value of `0` can be used to disable the cache entirely. A higher cache size can improve + * performance for applications that execute a large number of unique queries, while a smaller + * cache size can reduce memory usage. + * + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter, + * queryPlanCacheMaxSize: 100, + * }) + * ``` + */ + queryPlanCacheMaxSize?: number; +}; +export type GlobalOmitConfig = { + user?: Prisma.UserOmit; +}; + +/* Types for Logging */ +export type LogLevel = 'info' | 'query' | 'warn' | 'error'; +export type LogDefinition = { + level: LogLevel; + emit: 'stdout' | 'event'; +}; + +export type CheckIsLogLevel = T extends LogLevel ? T : never; + +export type GetLogType = CheckIsLogLevel< + T extends LogDefinition ? T['level'] : T +>; + +export type GetEvents = + T extends Array ? GetLogType : never; + +export type QueryEvent = { + timestamp: Date; + query: string; + params: string; + duration: number; + target: string; +}; + +export type LogEvent = { + timestamp: Date; + message: string; + target: string; +}; +/* End Types for Logging */ + +export type PrismaAction = + | 'findUnique' + | 'findUniqueOrThrow' + | 'findMany' + | 'findFirst' + | 'findFirstOrThrow' + | 'create' + | 'createMany' + | 'createManyAndReturn' + | 'update' + | 'updateMany' + | 'updateManyAndReturn' + | 'upsert' + | 'delete' + | 'deleteMany' + | 'executeRaw' + | 'queryRaw' + | 'aggregate' + | 'count' + | 'runCommandRaw' + | 'findRaw' + | 'groupBy'; + +/** + * `PrismaClient` proxy available in interactive transactions. + */ +export type TransactionClient = Omit< + DefaultPrismaClient, + runtime.ITXClientDenyList +>; diff --git a/src/generated/prisma/internal/prismaNamespaceBrowser.ts b/src/generated/prisma/internal/prismaNamespaceBrowser.ts new file mode 100644 index 00000000..dca88972 --- /dev/null +++ b/src/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -0,0 +1,113 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * WARNING: This is an internal file that is subject to change! + * + * 🛑 Under no circumstances should you import this file directly! 🛑 + * + * All exports from this file are wrapped under a `Prisma` namespace object in the browser.ts file. + * While this enables partial backward compatibility, it is not part of the stable public API. + * + * If you are looking for your Models, Enums, and Input Types, please import them from the respective + * model files in the `model` directory! + */ + +import * as runtime from '@prisma/client/runtime/index-browser'; + +export type * from '../models.js'; +export type * from './prismaNamespace.js'; + +export const Decimal = runtime.Decimal; + +export const NullTypes = { + DbNull: runtime.NullTypes.DbNull as new ( + secret: never, + ) => typeof runtime.DbNull, + JsonNull: runtime.NullTypes.JsonNull as new ( + secret: never, + ) => typeof runtime.JsonNull, + AnyNull: runtime.NullTypes.AnyNull as new ( + secret: never, + ) => typeof runtime.AnyNull, +}; +/** + * Helper for filtering JSON entries that have `null` on the database (empty on the db) + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ +export const DbNull = runtime.DbNull; + +/** + * Helper for filtering JSON entries that have JSON `null` values (not empty on the db) + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ +export const JsonNull = runtime.JsonNull; + +/** + * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull` + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ +export const AnyNull = runtime.AnyNull; + +export const ModelName = { + User: 'User', +} as const; + +export type ModelName = (typeof ModelName)[keyof typeof ModelName]; + +/* + * Enums + */ + +export const TransactionIsolationLevel = runtime.makeStrictEnum({ + ReadUncommitted: 'ReadUncommitted', + ReadCommitted: 'ReadCommitted', + RepeatableRead: 'RepeatableRead', + Serializable: 'Serializable', +} as const); + +export type TransactionIsolationLevel = + (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]; + +export const UserScalarFieldEnum = { + id: 'id', + name: 'name', + email: 'email', + passwordHash: 'passwordHash', + isActivated: 'isActivated', + activationToken: 'activationToken', + resetPasswordToken: 'resetPasswordToken', + resetTokenExpires: 'resetTokenExpires', + pendingEmail: 'pendingEmail', + emailChangeToken: 'emailChangeToken', + createdAt: 'createdAt', + updatedAt: 'updatedAt', +} as const; + +export type UserScalarFieldEnum = + (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]; + +export const SortOrder = { + asc: 'asc', + desc: 'desc', +} as const; + +export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]; + +export const QueryMode = { + default: 'default', + insensitive: 'insensitive', +} as const; + +export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]; + +export const NullsOrder = { + first: 'first', + last: 'last', +} as const; + +export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]; diff --git a/src/generated/prisma/models.ts b/src/generated/prisma/models.ts new file mode 100644 index 00000000..93c7681b --- /dev/null +++ b/src/generated/prisma/models.ts @@ -0,0 +1,11 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This is a barrel export file for all models and their related types. + * + * 🟢 You can import this file directly. + */ +export type * from './models/User.js'; +export type * from './commonInputTypes.js'; diff --git a/src/generated/prisma/models/User.ts b/src/generated/prisma/models/User.ts new file mode 100644 index 00000000..6d34df6c --- /dev/null +++ b/src/generated/prisma/models/User.ts @@ -0,0 +1,1775 @@ +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports the `User` model and its related types. + * + * 🟢 You can import this file directly. + */ +import type * as runtime from '@prisma/client/runtime/client'; +import type * as $Enums from '../enums.js'; +import type * as Prisma from '../internal/prismaNamespace.js'; + +/** + * Model User + * + */ +export type UserModel = + runtime.Types.Result.DefaultSelection; + +export type AggregateUser = { + _count: UserCountAggregateOutputType | null; + _avg: UserAvgAggregateOutputType | null; + _sum: UserSumAggregateOutputType | null; + _min: UserMinAggregateOutputType | null; + _max: UserMaxAggregateOutputType | null; +}; + +export type UserAvgAggregateOutputType = { + id: number | null; +}; + +export type UserSumAggregateOutputType = { + id: number | null; +}; + +export type UserMinAggregateOutputType = { + id: number | null; + name: string | null; + email: string | null; + passwordHash: string | null; + isActivated: boolean | null; + activationToken: string | null; + resetPasswordToken: string | null; + resetTokenExpires: Date | null; + pendingEmail: string | null; + emailChangeToken: string | null; + createdAt: Date | null; + updatedAt: Date | null; +}; + +export type UserMaxAggregateOutputType = { + id: number | null; + name: string | null; + email: string | null; + passwordHash: string | null; + isActivated: boolean | null; + activationToken: string | null; + resetPasswordToken: string | null; + resetTokenExpires: Date | null; + pendingEmail: string | null; + emailChangeToken: string | null; + createdAt: Date | null; + updatedAt: Date | null; +}; + +export type UserCountAggregateOutputType = { + id: number; + name: number; + email: number; + passwordHash: number; + isActivated: number; + activationToken: number; + resetPasswordToken: number; + resetTokenExpires: number; + pendingEmail: number; + emailChangeToken: number; + createdAt: number; + updatedAt: number; + _all: number; +}; + +export type UserAvgAggregateInputType = { + id?: true; +}; + +export type UserSumAggregateInputType = { + id?: true; +}; + +export type UserMinAggregateInputType = { + id?: true; + name?: true; + email?: true; + passwordHash?: true; + isActivated?: true; + activationToken?: true; + resetPasswordToken?: true; + resetTokenExpires?: true; + pendingEmail?: true; + emailChangeToken?: true; + createdAt?: true; + updatedAt?: true; +}; + +export type UserMaxAggregateInputType = { + id?: true; + name?: true; + email?: true; + passwordHash?: true; + isActivated?: true; + activationToken?: true; + resetPasswordToken?: true; + resetTokenExpires?: true; + pendingEmail?: true; + emailChangeToken?: true; + createdAt?: true; + updatedAt?: true; +}; + +export type UserCountAggregateInputType = { + id?: true; + name?: true; + email?: true; + passwordHash?: true; + isActivated?: true; + activationToken?: true; + resetPasswordToken?: true; + resetTokenExpires?: true; + pendingEmail?: true; + emailChangeToken?: true; + createdAt?: true; + updatedAt?: true; + _all?: true; +}; + +export type UserAggregateArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Filter which User to aggregate. + */ + where?: Prisma.UserWhereInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Users to fetch. + */ + orderBy?: + | Prisma.UserOrderByWithRelationInput + | Prisma.UserOrderByWithRelationInput[]; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: Prisma.UserWhereUniqueInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Users from the position of the cursor. + */ + take?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Users. + */ + skip?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Users + **/ + _count?: true | UserCountAggregateInputType; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: UserAvgAggregateInputType; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: UserSumAggregateInputType; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: UserMinAggregateInputType; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: UserMaxAggregateInputType; +}; + +export type GetUserAggregateType = { + [P in keyof T & keyof AggregateUser]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType; +}; + +export type UserGroupByArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + where?: Prisma.UserWhereInput; + orderBy?: + | Prisma.UserOrderByWithAggregationInput + | Prisma.UserOrderByWithAggregationInput[]; + by: Prisma.UserScalarFieldEnum[] | Prisma.UserScalarFieldEnum; + having?: Prisma.UserScalarWhereWithAggregatesInput; + take?: number; + skip?: number; + _count?: UserCountAggregateInputType | true; + _avg?: UserAvgAggregateInputType; + _sum?: UserSumAggregateInputType; + _min?: UserMinAggregateInputType; + _max?: UserMaxAggregateInputType; +}; + +export type UserGroupByOutputType = { + id: number; + name: string; + email: string; + passwordHash: string; + isActivated: boolean; + activationToken: string | null; + resetPasswordToken: string | null; + resetTokenExpires: Date | null; + pendingEmail: string | null; + emailChangeToken: string | null; + createdAt: Date; + updatedAt: Date; + _count: UserCountAggregateOutputType | null; + _avg: UserAvgAggregateOutputType | null; + _sum: UserSumAggregateOutputType | null; + _min: UserMinAggregateOutputType | null; + _max: UserMaxAggregateOutputType | null; +}; + +export type GetUserGroupByPayload = + Prisma.PrismaPromise< + Array< + Prisma.PickEnumerable & { + [P in keyof T & keyof UserGroupByOutputType]: P extends '_count' + ? T[P] extends boolean + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType; + } + > + >; + +export type UserWhereInput = { + AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; + OR?: Prisma.UserWhereInput[]; + NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; + id?: Prisma.IntFilter<'User'> | number; + name?: Prisma.StringFilter<'User'> | string; + email?: Prisma.StringFilter<'User'> | string; + passwordHash?: Prisma.StringFilter<'User'> | string; + isActivated?: Prisma.BoolFilter<'User'> | boolean; + activationToken?: Prisma.StringNullableFilter<'User'> | string | null; + resetPasswordToken?: Prisma.StringNullableFilter<'User'> | string | null; + resetTokenExpires?: + | Prisma.DateTimeNullableFilter<'User'> + | Date + | string + | null; + pendingEmail?: Prisma.StringNullableFilter<'User'> | string | null; + emailChangeToken?: Prisma.StringNullableFilter<'User'> | string | null; + createdAt?: Prisma.DateTimeFilter<'User'> | Date | string; + updatedAt?: Prisma.DateTimeFilter<'User'> | Date | string; +}; + +export type UserOrderByWithRelationInput = { + id?: Prisma.SortOrder; + name?: Prisma.SortOrder; + email?: Prisma.SortOrder; + passwordHash?: Prisma.SortOrder; + isActivated?: Prisma.SortOrder; + activationToken?: Prisma.SortOrderInput | Prisma.SortOrder; + resetPasswordToken?: Prisma.SortOrderInput | Prisma.SortOrder; + resetTokenExpires?: Prisma.SortOrderInput | Prisma.SortOrder; + pendingEmail?: Prisma.SortOrderInput | Prisma.SortOrder; + emailChangeToken?: Prisma.SortOrderInput | Prisma.SortOrder; + createdAt?: Prisma.SortOrder; + updatedAt?: Prisma.SortOrder; +}; + +export type UserWhereUniqueInput = Prisma.AtLeast< + { + id?: number; + email?: string; + activationToken?: string; + resetPasswordToken?: string; + emailChangeToken?: string; + AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; + OR?: Prisma.UserWhereInput[]; + NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; + name?: Prisma.StringFilter<'User'> | string; + passwordHash?: Prisma.StringFilter<'User'> | string; + isActivated?: Prisma.BoolFilter<'User'> | boolean; + resetTokenExpires?: + | Prisma.DateTimeNullableFilter<'User'> + | Date + | string + | null; + pendingEmail?: Prisma.StringNullableFilter<'User'> | string | null; + createdAt?: Prisma.DateTimeFilter<'User'> | Date | string; + updatedAt?: Prisma.DateTimeFilter<'User'> | Date | string; + }, + 'id' | 'email' | 'activationToken' | 'resetPasswordToken' | 'emailChangeToken' +>; + +export type UserOrderByWithAggregationInput = { + id?: Prisma.SortOrder; + name?: Prisma.SortOrder; + email?: Prisma.SortOrder; + passwordHash?: Prisma.SortOrder; + isActivated?: Prisma.SortOrder; + activationToken?: Prisma.SortOrderInput | Prisma.SortOrder; + resetPasswordToken?: Prisma.SortOrderInput | Prisma.SortOrder; + resetTokenExpires?: Prisma.SortOrderInput | Prisma.SortOrder; + pendingEmail?: Prisma.SortOrderInput | Prisma.SortOrder; + emailChangeToken?: Prisma.SortOrderInput | Prisma.SortOrder; + createdAt?: Prisma.SortOrder; + updatedAt?: Prisma.SortOrder; + _count?: Prisma.UserCountOrderByAggregateInput; + _avg?: Prisma.UserAvgOrderByAggregateInput; + _max?: Prisma.UserMaxOrderByAggregateInput; + _min?: Prisma.UserMinOrderByAggregateInput; + _sum?: Prisma.UserSumOrderByAggregateInput; +}; + +export type UserScalarWhereWithAggregatesInput = { + AND?: + | Prisma.UserScalarWhereWithAggregatesInput + | Prisma.UserScalarWhereWithAggregatesInput[]; + OR?: Prisma.UserScalarWhereWithAggregatesInput[]; + NOT?: + | Prisma.UserScalarWhereWithAggregatesInput + | Prisma.UserScalarWhereWithAggregatesInput[]; + id?: Prisma.IntWithAggregatesFilter<'User'> | number; + name?: Prisma.StringWithAggregatesFilter<'User'> | string; + email?: Prisma.StringWithAggregatesFilter<'User'> | string; + passwordHash?: Prisma.StringWithAggregatesFilter<'User'> | string; + isActivated?: Prisma.BoolWithAggregatesFilter<'User'> | boolean; + activationToken?: + | Prisma.StringNullableWithAggregatesFilter<'User'> + | string + | null; + resetPasswordToken?: + | Prisma.StringNullableWithAggregatesFilter<'User'> + | string + | null; + resetTokenExpires?: + | Prisma.DateTimeNullableWithAggregatesFilter<'User'> + | Date + | string + | null; + pendingEmail?: + | Prisma.StringNullableWithAggregatesFilter<'User'> + | string + | null; + emailChangeToken?: + | Prisma.StringNullableWithAggregatesFilter<'User'> + | string + | null; + createdAt?: Prisma.DateTimeWithAggregatesFilter<'User'> | Date | string; + updatedAt?: Prisma.DateTimeWithAggregatesFilter<'User'> | Date | string; +}; + +export type UserCreateInput = { + name: string; + email: string; + passwordHash: string; + isActivated?: boolean; + activationToken?: string | null; + resetPasswordToken?: string | null; + resetTokenExpires?: Date | string | null; + pendingEmail?: string | null; + emailChangeToken?: string | null; + createdAt?: Date | string; + updatedAt?: Date | string; +}; + +export type UserUncheckedCreateInput = { + id?: number; + name: string; + email: string; + passwordHash: string; + isActivated?: boolean; + activationToken?: string | null; + resetPasswordToken?: string | null; + resetTokenExpires?: Date | string | null; + pendingEmail?: string | null; + emailChangeToken?: string | null; + createdAt?: Date | string; + updatedAt?: Date | string; +}; + +export type UserUpdateInput = { + name?: Prisma.StringFieldUpdateOperationsInput | string; + email?: Prisma.StringFieldUpdateOperationsInput | string; + passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; + isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; + activationToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetPasswordToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetTokenExpires?: + | Prisma.NullableDateTimeFieldUpdateOperationsInput + | Date + | string + | null; + pendingEmail?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + emailChangeToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; +}; + +export type UserUncheckedUpdateInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number; + name?: Prisma.StringFieldUpdateOperationsInput | string; + email?: Prisma.StringFieldUpdateOperationsInput | string; + passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; + isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; + activationToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetPasswordToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetTokenExpires?: + | Prisma.NullableDateTimeFieldUpdateOperationsInput + | Date + | string + | null; + pendingEmail?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + emailChangeToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; +}; + +export type UserCreateManyInput = { + id?: number; + name: string; + email: string; + passwordHash: string; + isActivated?: boolean; + activationToken?: string | null; + resetPasswordToken?: string | null; + resetTokenExpires?: Date | string | null; + pendingEmail?: string | null; + emailChangeToken?: string | null; + createdAt?: Date | string; + updatedAt?: Date | string; +}; + +export type UserUpdateManyMutationInput = { + name?: Prisma.StringFieldUpdateOperationsInput | string; + email?: Prisma.StringFieldUpdateOperationsInput | string; + passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; + isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; + activationToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetPasswordToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetTokenExpires?: + | Prisma.NullableDateTimeFieldUpdateOperationsInput + | Date + | string + | null; + pendingEmail?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + emailChangeToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; +}; + +export type UserUncheckedUpdateManyInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number; + name?: Prisma.StringFieldUpdateOperationsInput | string; + email?: Prisma.StringFieldUpdateOperationsInput | string; + passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; + isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; + activationToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetPasswordToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + resetTokenExpires?: + | Prisma.NullableDateTimeFieldUpdateOperationsInput + | Date + | string + | null; + pendingEmail?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + emailChangeToken?: + | Prisma.NullableStringFieldUpdateOperationsInput + | string + | null; + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; +}; + +export type UserCountOrderByAggregateInput = { + id?: Prisma.SortOrder; + name?: Prisma.SortOrder; + email?: Prisma.SortOrder; + passwordHash?: Prisma.SortOrder; + isActivated?: Prisma.SortOrder; + activationToken?: Prisma.SortOrder; + resetPasswordToken?: Prisma.SortOrder; + resetTokenExpires?: Prisma.SortOrder; + pendingEmail?: Prisma.SortOrder; + emailChangeToken?: Prisma.SortOrder; + createdAt?: Prisma.SortOrder; + updatedAt?: Prisma.SortOrder; +}; + +export type UserAvgOrderByAggregateInput = { + id?: Prisma.SortOrder; +}; + +export type UserMaxOrderByAggregateInput = { + id?: Prisma.SortOrder; + name?: Prisma.SortOrder; + email?: Prisma.SortOrder; + passwordHash?: Prisma.SortOrder; + isActivated?: Prisma.SortOrder; + activationToken?: Prisma.SortOrder; + resetPasswordToken?: Prisma.SortOrder; + resetTokenExpires?: Prisma.SortOrder; + pendingEmail?: Prisma.SortOrder; + emailChangeToken?: Prisma.SortOrder; + createdAt?: Prisma.SortOrder; + updatedAt?: Prisma.SortOrder; +}; + +export type UserMinOrderByAggregateInput = { + id?: Prisma.SortOrder; + name?: Prisma.SortOrder; + email?: Prisma.SortOrder; + passwordHash?: Prisma.SortOrder; + isActivated?: Prisma.SortOrder; + activationToken?: Prisma.SortOrder; + resetPasswordToken?: Prisma.SortOrder; + resetTokenExpires?: Prisma.SortOrder; + pendingEmail?: Prisma.SortOrder; + emailChangeToken?: Prisma.SortOrder; + createdAt?: Prisma.SortOrder; + updatedAt?: Prisma.SortOrder; +}; + +export type UserSumOrderByAggregateInput = { + id?: Prisma.SortOrder; +}; + +export type StringFieldUpdateOperationsInput = { + set?: string; +}; + +export type BoolFieldUpdateOperationsInput = { + set?: boolean; +}; + +export type NullableStringFieldUpdateOperationsInput = { + set?: string | null; +}; + +export type NullableDateTimeFieldUpdateOperationsInput = { + set?: Date | string | null; +}; + +export type DateTimeFieldUpdateOperationsInput = { + set?: Date | string; +}; + +export type IntFieldUpdateOperationsInput = { + set?: number; + increment?: number; + decrement?: number; + multiply?: number; + divide?: number; +}; + +export type UserSelect< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = runtime.Types.Extensions.GetSelect< + { + id?: boolean; + name?: boolean; + email?: boolean; + passwordHash?: boolean; + isActivated?: boolean; + activationToken?: boolean; + resetPasswordToken?: boolean; + resetTokenExpires?: boolean; + pendingEmail?: boolean; + emailChangeToken?: boolean; + createdAt?: boolean; + updatedAt?: boolean; + }, + ExtArgs['result']['user'] +>; + +export type UserSelectCreateManyAndReturn< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = runtime.Types.Extensions.GetSelect< + { + id?: boolean; + name?: boolean; + email?: boolean; + passwordHash?: boolean; + isActivated?: boolean; + activationToken?: boolean; + resetPasswordToken?: boolean; + resetTokenExpires?: boolean; + pendingEmail?: boolean; + emailChangeToken?: boolean; + createdAt?: boolean; + updatedAt?: boolean; + }, + ExtArgs['result']['user'] +>; + +export type UserSelectUpdateManyAndReturn< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = runtime.Types.Extensions.GetSelect< + { + id?: boolean; + name?: boolean; + email?: boolean; + passwordHash?: boolean; + isActivated?: boolean; + activationToken?: boolean; + resetPasswordToken?: boolean; + resetTokenExpires?: boolean; + pendingEmail?: boolean; + emailChangeToken?: boolean; + createdAt?: boolean; + updatedAt?: boolean; + }, + ExtArgs['result']['user'] +>; + +export type UserSelectScalar = { + id?: boolean; + name?: boolean; + email?: boolean; + passwordHash?: boolean; + isActivated?: boolean; + activationToken?: boolean; + resetPasswordToken?: boolean; + resetTokenExpires?: boolean; + pendingEmail?: boolean; + emailChangeToken?: boolean; + createdAt?: boolean; + updatedAt?: boolean; +}; + +export type UserOmit< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = runtime.Types.Extensions.GetOmit< + | 'id' + | 'name' + | 'email' + | 'passwordHash' + | 'isActivated' + | 'activationToken' + | 'resetPasswordToken' + | 'resetTokenExpires' + | 'pendingEmail' + | 'emailChangeToken' + | 'createdAt' + | 'updatedAt', + ExtArgs['result']['user'] +>; + +export type $UserPayload< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + name: 'User'; + objects: {}; + scalars: runtime.Types.Extensions.GetPayloadResult< + { + id: number; + name: string; + email: string; + passwordHash: string; + isActivated: boolean; + activationToken: string | null; + resetPasswordToken: string | null; + resetTokenExpires: Date | null; + pendingEmail: string | null; + emailChangeToken: string | null; + createdAt: Date; + updatedAt: Date; + }, + ExtArgs['result']['user'] + >; + composites: {}; +}; + +export type UserGetPayload< + S extends boolean | null | undefined | UserDefaultArgs, +> = runtime.Types.Result.GetResult; + +export type UserCountArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = Omit & { + select?: UserCountAggregateInputType | true; +}; + +export interface UserDelegate< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, + GlobalOmitOptions = {}, +> { + [K: symbol]: { + types: Prisma.TypeMap['model']['User']; + meta: { name: 'User' }; + }; + /** + * Find zero or one User that matches the filter. + * @param {UserFindUniqueArgs} args - Arguments to find a User + * @example + * // Get one User + * const user = await prisma.user.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique( + args: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'findUnique', + GlobalOmitOptions + > | null, + null, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Find one User that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {UserFindUniqueOrThrowArgs} args - Arguments to find a User + * @example + * // Get one User + * const user = await prisma.user.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow( + args: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'findUniqueOrThrow', + GlobalOmitOptions + >, + never, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Find the first User that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFindFirstArgs} args - Arguments to find a User + * @example + * // Get one User + * const user = await prisma.user.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst( + args?: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'findFirst', + GlobalOmitOptions + > | null, + null, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Find the first User that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFindFirstOrThrowArgs} args - Arguments to find a User + * @example + * // Get one User + * const user = await prisma.user.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow( + args?: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'findFirstOrThrow', + GlobalOmitOptions + >, + never, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Find zero or more Users that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Users + * const users = await prisma.user.findMany() + * + * // Get first 10 Users + * const users = await prisma.user.findMany({ take: 10 }) + * + * // Only select the `id` + * const userWithIdOnly = await prisma.user.findMany({ select: { id: true } }) + * + */ + findMany( + args?: Prisma.SelectSubset>, + ): Prisma.PrismaPromise< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'findMany', + GlobalOmitOptions + > + >; + + /** + * Create a User. + * @param {UserCreateArgs} args - Arguments to create a User. + * @example + * // Create one User + * const User = await prisma.user.create({ + * data: { + * // ... data to create a User + * } + * }) + * + */ + create( + args: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'create', + GlobalOmitOptions + >, + never, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Create many Users. + * @param {UserCreateManyArgs} args - Arguments to create many Users. + * @example + * // Create many Users + * const user = await prisma.user.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany( + args?: Prisma.SelectSubset>, + ): Prisma.PrismaPromise; + + /** + * Create many Users and returns the data saved in the database. + * @param {UserCreateManyAndReturnArgs} args - Arguments to create many Users. + * @example + * // Create many Users + * const user = await prisma.user.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Users and only return the `id` + * const userWithIdOnly = await prisma.user.createManyAndReturn({ + * select: { id: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn( + args?: Prisma.SelectSubset>, + ): Prisma.PrismaPromise< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'createManyAndReturn', + GlobalOmitOptions + > + >; + + /** + * Delete a User. + * @param {UserDeleteArgs} args - Arguments to delete one User. + * @example + * // Delete one User + * const User = await prisma.user.delete({ + * where: { + * // ... filter to delete one User + * } + * }) + * + */ + delete( + args: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'delete', + GlobalOmitOptions + >, + never, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Update one User. + * @param {UserUpdateArgs} args - Arguments to update one User. + * @example + * // Update one User + * const user = await prisma.user.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update( + args: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'update', + GlobalOmitOptions + >, + never, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Delete zero or more Users. + * @param {UserDeleteManyArgs} args - Arguments to filter Users to delete. + * @example + * // Delete a few Users + * const { count } = await prisma.user.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany( + args?: Prisma.SelectSubset>, + ): Prisma.PrismaPromise; + + /** + * Update zero or more Users. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Users + * const user = await prisma.user.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany( + args: Prisma.SelectSubset>, + ): Prisma.PrismaPromise; + + /** + * Update zero or more Users and returns the data updated in the database. + * @param {UserUpdateManyAndReturnArgs} args - Arguments to update many Users. + * @example + * // Update many Users + * const user = await prisma.user.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Users and only return the `id` + * const userWithIdOnly = await prisma.user.updateManyAndReturn({ + * select: { id: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn( + args: Prisma.SelectSubset>, + ): Prisma.PrismaPromise< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'updateManyAndReturn', + GlobalOmitOptions + > + >; + + /** + * Create or update one User. + * @param {UserUpsertArgs} args - Arguments to update or create a User. + * @example + * // Update or create a User + * const user = await prisma.user.upsert({ + * create: { + * // ... data to create a User + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the User we want to update + * } + * }) + */ + upsert( + args: Prisma.SelectSubset>, + ): Prisma.Prisma__UserClient< + runtime.Types.Result.GetResult< + Prisma.$UserPayload, + T, + 'upsert', + GlobalOmitOptions + >, + never, + ExtArgs, + GlobalOmitOptions + >; + + /** + * Count the number of Users. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserCountArgs} args - Arguments to filter Users to count. + * @example + * // Count the number of Users + * const count = await prisma.user.count({ + * where: { + * // ... the filter for the Users we want to count + * } + * }) + **/ + count( + args?: Prisma.Subset, + ): Prisma.PrismaPromise< + T extends runtime.Types.Utils.Record<'select', any> + ? T['select'] extends true + ? number + : Prisma.GetScalarType + : number + >; + + /** + * Allows you to perform aggregations operations on a User. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate( + args: Prisma.Subset, + ): Prisma.PrismaPromise>; + + /** + * Group by User. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends UserGroupByArgs, + HasSelectOrTake extends Prisma.Or< + Prisma.Extends<'skip', Prisma.Keys>, + Prisma.Extends<'take', Prisma.Keys> + >, + OrderByArg extends Prisma.True extends HasSelectOrTake + ? { orderBy: UserGroupByArgs['orderBy'] } + : { orderBy?: UserGroupByArgs['orderBy'] }, + OrderFields extends Prisma.ExcludeUnderscoreKeys< + Prisma.Keys> + >, + ByFields extends Prisma.MaybeTupleToUnion, + ByValid extends Prisma.Has, + HavingFields extends Prisma.GetHavingFields, + HavingValid extends Prisma.Has, + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, + InputErrors extends ByEmpty extends Prisma.True + ? `Error: "by" must not be empty.` + : HavingValid extends Prisma.False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ]; + }[HavingFields] + : 'take' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`; + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`; + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`; + }[OrderFields], + >( + args: Prisma.SubsetIntersection & + InputErrors, + ): {} extends InputErrors + ? GetUserGroupByPayload + : Prisma.PrismaPromise; + /** + * Fields of the User model + */ + readonly fields: UserFieldRefs; +} + +/** + * The delegate class that acts as a "Promise-like" for User. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ +export interface Prisma__UserClient< + T, + Null = never, + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, + GlobalOmitOptions = {}, +> extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: 'PrismaPromise'; + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then( + onfulfilled?: + | ((value: T) => TResult1 | PromiseLike) + | undefined + | null, + onrejected?: + | ((reason: any) => TResult2 | PromiseLike) + | undefined + | null, + ): runtime.Types.Utils.JsPromise; + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch( + onrejected?: + | ((reason: any) => TResult | PromiseLike) + | undefined + | null, + ): runtime.Types.Utils.JsPromise; + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally( + onfinally?: (() => void) | undefined | null, + ): runtime.Types.Utils.JsPromise; +} + +/** + * Fields of the User model + */ +export interface UserFieldRefs { + readonly id: Prisma.FieldRef<'User', 'Int'>; + readonly name: Prisma.FieldRef<'User', 'String'>; + readonly email: Prisma.FieldRef<'User', 'String'>; + readonly passwordHash: Prisma.FieldRef<'User', 'String'>; + readonly isActivated: Prisma.FieldRef<'User', 'Boolean'>; + readonly activationToken: Prisma.FieldRef<'User', 'String'>; + readonly resetPasswordToken: Prisma.FieldRef<'User', 'String'>; + readonly resetTokenExpires: Prisma.FieldRef<'User', 'DateTime'>; + readonly pendingEmail: Prisma.FieldRef<'User', 'String'>; + readonly emailChangeToken: Prisma.FieldRef<'User', 'String'>; + readonly createdAt: Prisma.FieldRef<'User', 'DateTime'>; + readonly updatedAt: Prisma.FieldRef<'User', 'DateTime'>; +} + +// Custom InputTypes +/** + * User findUnique + */ +export type UserFindUniqueArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * Filter, which User to fetch. + */ + where: Prisma.UserWhereUniqueInput; +}; + +/** + * User findUniqueOrThrow + */ +export type UserFindUniqueOrThrowArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * Filter, which User to fetch. + */ + where: Prisma.UserWhereUniqueInput; +}; + +/** + * User findFirst + */ +export type UserFindFirstArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * Filter, which User to fetch. + */ + where?: Prisma.UserWhereInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Users to fetch. + */ + orderBy?: + | Prisma.UserOrderByWithRelationInput + | Prisma.UserOrderByWithRelationInput[]; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Users. + */ + cursor?: Prisma.UserWhereUniqueInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Users from the position of the cursor. + */ + take?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Users. + */ + skip?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Users. + */ + distinct?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[]; +}; + +/** + * User findFirstOrThrow + */ +export type UserFindFirstOrThrowArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * Filter, which User to fetch. + */ + where?: Prisma.UserWhereInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Users to fetch. + */ + orderBy?: + | Prisma.UserOrderByWithRelationInput + | Prisma.UserOrderByWithRelationInput[]; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Users. + */ + cursor?: Prisma.UserWhereUniqueInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Users from the position of the cursor. + */ + take?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Users. + */ + skip?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Users. + */ + distinct?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[]; +}; + +/** + * User findMany + */ +export type UserFindManyArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * Filter, which Users to fetch. + */ + where?: Prisma.UserWhereInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Users to fetch. + */ + orderBy?: + | Prisma.UserOrderByWithRelationInput + | Prisma.UserOrderByWithRelationInput[]; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Users. + */ + cursor?: Prisma.UserWhereUniqueInput; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Users from the position of the cursor. + */ + take?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Users. + */ + skip?: number; + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Users. + */ + distinct?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[]; +}; + +/** + * User create + */ +export type UserCreateArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * The data needed to create a User. + */ + data: Prisma.XOR; +}; + +/** + * User createMany + */ +export type UserCreateManyArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * The data used to create many Users. + */ + data: Prisma.UserCreateManyInput | Prisma.UserCreateManyInput[]; + skipDuplicates?: boolean; +}; + +/** + * User createManyAndReturn + */ +export type UserCreateManyAndReturnArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelectCreateManyAndReturn | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * The data used to create many Users. + */ + data: Prisma.UserCreateManyInput | Prisma.UserCreateManyInput[]; + skipDuplicates?: boolean; +}; + +/** + * User update + */ +export type UserUpdateArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * The data needed to update a User. + */ + data: Prisma.XOR; + /** + * Choose, which User to update. + */ + where: Prisma.UserWhereUniqueInput; +}; + +/** + * User updateMany + */ +export type UserUpdateManyArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * The data used to update Users. + */ + data: Prisma.XOR< + Prisma.UserUpdateManyMutationInput, + Prisma.UserUncheckedUpdateManyInput + >; + /** + * Filter which Users to update + */ + where?: Prisma.UserWhereInput; + /** + * Limit how many Users to update. + */ + limit?: number; +}; + +/** + * User updateManyAndReturn + */ +export type UserUpdateManyAndReturnArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelectUpdateManyAndReturn | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * The data used to update Users. + */ + data: Prisma.XOR< + Prisma.UserUpdateManyMutationInput, + Prisma.UserUncheckedUpdateManyInput + >; + /** + * Filter which Users to update + */ + where?: Prisma.UserWhereInput; + /** + * Limit how many Users to update. + */ + limit?: number; +}; + +/** + * User upsert + */ +export type UserUpsertArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * The filter to search for the User to update in case it exists. + */ + where: Prisma.UserWhereUniqueInput; + /** + * In case the User found by the `where` argument doesn't exist, create a new User with this data. + */ + create: Prisma.XOR; + /** + * In case the User was found with the provided `where` argument, update it with this data. + */ + update: Prisma.XOR; +}; + +/** + * User delete + */ +export type UserDeleteArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; + /** + * Filter which User to delete. + */ + where: Prisma.UserWhereUniqueInput; +}; + +/** + * User deleteMany + */ +export type UserDeleteManyArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Filter which Users to delete + */ + where?: Prisma.UserWhereInput; + /** + * Limit how many Users to delete. + */ + limit?: number; +}; + +/** + * User without action + */ +export type UserDefaultArgs< + ExtArgs extends + runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, +> = { + /** + * Select specific fields to fetch from the User + */ + select?: Prisma.UserSelect | null; + /** + * Omit specific fields from the User + */ + omit?: Prisma.UserOmit | null; +}; diff --git a/src/index.js b/src/index.js deleted file mode 100644 index ad9a93a7..00000000 --- a/src/index.js +++ /dev/null @@ -1 +0,0 @@ -'use strict'; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 00000000..81e17be5 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,31 @@ +import express from 'express'; +import cors from 'cors'; +import dotenv from 'dotenv'; +import { errorMiddleware } from './middlewares/error.middleware.js'; +import { AppError } from './errors/AppError.js'; +import { authRoutes } from './modules/auth/auth.routes.js'; +import { profileRoutes } from './modules/profile/profile.routes.js'; + +dotenv.config(); + +const app = express(); + +const PORT = process.env.PORT ?? 3000; + +app.use(cors()); +app.use(express.json()); + +// +app.use('/auth', authRoutes); +app.use('/profile', profileRoutes); +// + +app.use((_req, _res, next) => { + next(new AppError(404, 'Route not found')); +}); + +app.use(errorMiddleware); + +app.listen(PORT, () => { + console.log(`Server is running on http://localhost:${PORT}`); +}); diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts new file mode 100644 index 00000000..93f5aea0 --- /dev/null +++ b/src/lib/prisma.ts @@ -0,0 +1,12 @@ +import 'dotenv/config'; + +import { PrismaClient } from '../generated/prisma/client.js'; +import { PrismaPg } from '@prisma/adapter-pg'; + +const adapter = new PrismaPg({ + connectionString: process.env.DATABASE_URL!, +}); + +export const prisma = new PrismaClient({ + adapter, +}); diff --git a/src/middlewares/asyncHandler.ts b/src/middlewares/asyncHandler.ts new file mode 100644 index 00000000..f1b5a8d4 --- /dev/null +++ b/src/middlewares/asyncHandler.ts @@ -0,0 +1,15 @@ +import type { RequestHandler } from 'express'; +import type { ParamsDictionary, Query } from 'express-serve-static-core'; + +export const asyncHandler = < + Params extends ParamsDictionary = ParamsDictionary, + ResBody = unknown, + ReqBody = unknown, + ReqQuery extends Query = Query, +>( + handler: RequestHandler, +): RequestHandler => { + return (req, res, next) => { + Promise.resolve(handler(req, res, next)).catch(next); + }; +}; diff --git a/src/middlewares/auth.middleware.ts b/src/middlewares/auth.middleware.ts new file mode 100644 index 00000000..4020512f --- /dev/null +++ b/src/middlewares/auth.middleware.ts @@ -0,0 +1,23 @@ +import type { RequestHandler } from 'express'; +import { AppError } from '../errors/AppError.js'; +import { validateAccessToken } from '../utils/jwt.js'; + +export const authMiddleware: RequestHandler = (req, _res, next) => { + const authHeader = req.headers.authorization; + + const [type, token] = authHeader?.split(' ') || []; + + if (type !== 'Bearer' || !token) { + throw new AppError(401, 'Invalid authorization header'); + } + + const userData = validateAccessToken(token); + + if (!userData) { + throw new AppError(401, 'Invalid or expired token'); + } + + req.user = userData; + + next(); +}; diff --git a/src/middlewares/error.middleware.ts b/src/middlewares/error.middleware.ts new file mode 100644 index 00000000..2628b61a --- /dev/null +++ b/src/middlewares/error.middleware.ts @@ -0,0 +1,26 @@ +import type { ErrorRequestHandler } from 'express'; +import { AppError } from '../errors/AppError.js'; + +export const errorMiddleware: ErrorRequestHandler = ( + error, + _req, + res, + _next, +) => { + if (error instanceof AppError) { + return res.status(error.statusCode).json({ + error: { + message: error.message, + details: error.details, + }, + }); + } + + console.error(error); + + return res.status(500).json({ + error: { + message: 'Internal Server Error', + }, + }); +}; diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts new file mode 100644 index 00000000..874b71ec --- /dev/null +++ b/src/modules/auth/auth.controller.ts @@ -0,0 +1,65 @@ +import type { RequestHandler } from 'express'; +import { authService } from './auth.service.js'; + +type ActivateParams = { + token: string; +}; + +type ResetPasswordParams = { + token: string; +}; + +const register: RequestHandler = async (req, res) => { + const user = await authService.register(req.body); + + res.status(201).json({ user }); +}; + +const activate: RequestHandler = async (req, res) => { + const { token } = req.params; + + const user = await authService.activate(token); + + res.json({ + user, + message: 'Account activated successfully', + }); +}; + +const login: RequestHandler = async (req, res) => { + const authData = await authService.login(req.body); + + res.json(authData); +}; + +const logout: RequestHandler = async (req, res) => { + res.status(204).send(); +}; + +const forgotPassword: RequestHandler = async (req, res) => { + await authService.forgotPassword(req.body); + + res.json({ + message: + 'If an account with that email exists, a password reset link has been sent', + }); +}; + +const resetPassword: RequestHandler = async (req, res) => { + const { token } = req.params; + + await authService.resetPassword(token, req.body); + + res.json({ + message: 'Password has been reset successfully', + }); +}; + +export const authController = { + register, + activate, + login, + logout, + forgotPassword, + resetPassword, +}; diff --git a/src/modules/auth/auth.routes.ts b/src/modules/auth/auth.routes.ts new file mode 100644 index 00000000..438fd7d5 --- /dev/null +++ b/src/modules/auth/auth.routes.ts @@ -0,0 +1,21 @@ +import { Router } from 'express'; +import { authController } from './auth.controller.js'; +import { asyncHandler } from '../../middlewares/asyncHandler.js'; +import { authMiddleware } from '../../middlewares/auth.middleware.js'; + +export const authRoutes = Router(); + +authRoutes.post('/register', asyncHandler(authController.register)); +authRoutes.get('/activate/:token', asyncHandler(authController.activate)); +authRoutes.post('/login', asyncHandler(authController.login)); +authRoutes.post('/logout', authMiddleware, authController.logout); + +authRoutes.post( + '/forgot-password', + asyncHandler(authController.forgotPassword), +); + +authRoutes.post( + '/reset-password/:token', + asyncHandler(authController.resetPassword), +); diff --git a/src/modules/auth/auth.service.ts b/src/modules/auth/auth.service.ts new file mode 100644 index 00000000..97b840a8 --- /dev/null +++ b/src/modules/auth/auth.service.ts @@ -0,0 +1,178 @@ +import { authValidator } from './auth.validator.js'; +import { usersRepository } from '../users/users.repository.js'; +import { usersService, type NormalizedUser } from '../users/users.service.js'; +import { comparePasswords, hashPassword } from '../../utils/password.js'; +import { generateToken } from '../../utils/token.js'; +import { AppError } from '../../errors/AppError.js'; +import { generateAccessToken } from '../../utils/jwt.js'; +import { mailer } from '../../utils/mailer.js'; + +type ForgotPasswordInput = { + email: string; +}; + +type RegisterInput = { + name: string; + email: string; + password: string; +}; + +type LoginInput = { + email: string; + password: string; +}; + +type AuthResponse = { + user: NormalizedUser; + accessToken: string; +}; + +const register = async (input: unknown): Promise => { + const validationResult = authValidator.validateRegisterInput(input); + + if (!validationResult.isValid) { + throw new AppError(400, 'Validation failed', validationResult.errors); + } + + const { name, email, password } = input as RegisterInput; + + const normalizedName = name.trim(); + const normalizedEmail = email.trim().toLowerCase(); + + const existingUser = await usersRepository.findByEmail(normalizedEmail); + + if (existingUser) { + throw new AppError(409, 'Email already in use'); + } + + const passwordHash = await hashPassword(password); + const activationToken = generateToken(); + + const newUser = await usersRepository.create({ + name: normalizedName, + email: normalizedEmail, + passwordHash, + activationToken, + }); + + await mailer.sendActivationLink(normalizedEmail, activationToken); + + return usersService.normalize(newUser); +}; + +const activate = async (token: string): Promise => { + if (!token.trim()) { + throw new AppError(400, 'Activation token is required'); + } + + const user = await usersRepository.findByActivationToken(token); + + if (!user) { + throw new AppError(404, 'Invalid activation token'); + } + + const activatedUser = await usersRepository.activate(user.id); + + return usersService.normalize(activatedUser); +}; + +const login = async (input: unknown): Promise => { + const validationResult = authValidator.validateLoginInput(input); + + if (!validationResult.isValid) { + throw new AppError(400, 'Validation failed', validationResult.errors); + } + + const { email, password } = input as LoginInput; + + const normalizedEmail = email.trim().toLowerCase(); + + const user = await usersRepository.findByEmail(normalizedEmail); + + if (!user) { + throw new AppError(401, 'Invalid email or password'); + } + + const isPasswordValid = await comparePasswords(password, user.passwordHash); + + if (!isPasswordValid) { + throw new AppError(401, 'Invalid email or password'); + } + + if (!user.isActivated) { + throw new AppError(403, 'Account is not activated'); + } + + const normalizedUser = usersService.normalize(user); + + const accessToken = generateAccessToken(normalizedUser); + + return { + user: normalizedUser, + accessToken, + }; +}; + +const forgotPassword = async (input: unknown): Promise => { + const validationResult = authValidator.validateForgotPasswordInput(input); + + if (!validationResult.isValid) { + throw new AppError(400, 'Validation failed', validationResult.errors); + } + + const { email } = input as ForgotPasswordInput; + + const normalizedEmail = email.trim().toLowerCase(); + + const user = await usersRepository.findByEmail(normalizedEmail); + + if (!user) { + return; + } + + const resetToken = generateToken(); + + const resetTokenExpires = new Date(Date.now() + 30 * 60 * 1000); + + await usersRepository.setPasswordResetToken( + user.id, + resetToken, + resetTokenExpires, + ); + + await mailer.sendPasswordResetLink(normalizedEmail, resetToken); +}; + +const resetPassword = async (token: string, input: unknown): Promise => { + if (!token.trim()) { + throw new AppError(400, 'Reset token is required'); + } + + const validationResult = authValidator.validateResetPasswordInput(input); + + if (!validationResult.isValid) { + throw new AppError(400, 'Validation failed', validationResult.errors); + } + + const { password } = input as { password: string }; + + const user = await usersRepository.findByPasswordResetToken(token); + + if (!user || !user.resetTokenExpires || user.resetTokenExpires < new Date()) { + throw new AppError(400, 'Invalid or expired reset token'); + } + + const passwordHash = await hashPassword(password); + + await usersRepository.updatePassword(user.id, passwordHash); + + await usersRepository.clearPasswordResetToken(user.id); +}; + +export const authService = { + register, + activate, + login, + forgotPassword, + resetPassword, +}; diff --git a/src/modules/auth/auth.validator.ts b/src/modules/auth/auth.validator.ts new file mode 100644 index 00000000..4fd14821 --- /dev/null +++ b/src/modules/auth/auth.validator.ts @@ -0,0 +1,236 @@ +import { validatePassword } from '../../utils/password.js'; + +export type RegisterValidationErrors = { + name?: string; + email?: string; + password?: string[]; +}; + +export type RegisterValidationResult = { + isValid: boolean; + errors: RegisterValidationErrors; +}; + +export type LoginValidationErrors = { + email?: string; + password?: string; +}; + +export type LoginValidationResult = { + isValid: boolean; + errors: LoginValidationErrors; +}; + +export type ForgotPasswordValidationErrors = { + email?: string; +}; + +export type ForgotPasswordValidationResult = { + isValid: boolean; + errors: ForgotPasswordValidationErrors; +}; + +export type ResetPasswordValidationErrors = { + password?: string[]; + confirmation?: string; +}; + +export type ResetPasswordValidationResult = { + isValid: boolean; + errors: ResetPasswordValidationErrors; +}; + +const validateEmail = (email: unknown): string | null => { + if (typeof email !== 'string' || email.trim() === '') { + return 'Email is required'; + } + + const emailPattern = /^[\w.+-]+@([\w-]+\.)+[\w-]{2,}$/; + + const normalizedEmail = email.trim(); + + if (!emailPattern.test(normalizedEmail)) { + return 'Invalid email format'; + } + + return null; +}; + +const validateStrongPassword = (password: unknown): string[] | null => { + const validation = validatePassword(password); + + if (!validation.isValid) { + return validation.errors; + } + + return null; +}; + +const validateRequiredPassword = (password: unknown): string | null => { + if (typeof password !== 'string' || password.trim() === '') { + return 'Password is required'; + } + + return null; +}; + +const validateRegisterInput = (input: unknown): RegisterValidationResult => { + const errors: RegisterValidationErrors = {}; + + if (typeof input !== 'object' || input === null) { + return { + isValid: false, + errors: { + name: 'Invalid input', + email: 'Invalid input', + password: ['Invalid input'], + }, + }; + } + + const { name, email, password } = input as { + name?: unknown; + email?: unknown; + password?: unknown; + }; + + if (typeof name !== 'string' || name.trim() === '') { + errors.name = 'Name is required'; + } + + const emailError = validateEmail(email); + + if (emailError) { + errors.email = emailError; + } + + const passwordErrors = validateStrongPassword(password); + + if (passwordErrors) { + errors.password = passwordErrors; + } + + return { + isValid: Object.keys(errors).length === 0, + errors, + }; +}; + +const validateLoginInput = (input: unknown): LoginValidationResult => { + const errors: LoginValidationErrors = {}; + + if (typeof input !== 'object' || input === null) { + return { + isValid: false, + errors: { + email: 'Invalid input', + password: 'Invalid input', + }, + }; + } + + const { email, password } = input as { + email?: unknown; + password?: unknown; + }; + + const emailError = validateEmail(email); + + if (emailError) { + errors.email = emailError; + } + + const passwordError = validateRequiredPassword(password); + + if (passwordError) { + errors.password = passwordError; + } + + return { + isValid: Object.keys(errors).length === 0, + errors, + }; +}; + +const validateForgotPasswordInput = ( + input: unknown, +): ForgotPasswordValidationResult => { + const errors: ForgotPasswordValidationErrors = {}; + + if (typeof input !== 'object' || input === null) { + return { + isValid: false, + errors: { + email: 'Invalid input', + }, + }; + } + + const { email } = input as { + email?: unknown; + }; + + const emailError = validateEmail(email); + + if (emailError) { + errors.email = emailError; + } + + return { + isValid: Object.keys(errors).length === 0, + errors, + }; +}; + +const validateResetPasswordInput = ( + input: unknown, +): ResetPasswordValidationResult => { + const errors: ResetPasswordValidationErrors = {}; + + if (typeof input !== 'object' || input === null) { + return { + isValid: false, + errors: { + password: ['Invalid input'], + confirmation: 'Invalid input', + }, + }; + } + + const { password, confirmation } = input as { + password?: unknown; + confirmation?: unknown; + }; + + const passwordErrors = validateStrongPassword(password); + + if (passwordErrors) { + errors.password = passwordErrors; + } + + if (typeof confirmation !== 'string' || confirmation.trim() === '') { + errors.confirmation = 'Password confirmation is required'; + } + + if ( + typeof password === 'string' && + typeof confirmation === 'string' && + confirmation.trim() !== '' && + password !== confirmation + ) { + errors.confirmation = 'Password confirmation does not match'; + } + + return { + isValid: Object.keys(errors).length === 0, + errors, + }; +}; + +export const authValidator = { + validateEmail, + validateRegisterInput, + validateLoginInput, + validateForgotPasswordInput, + validateResetPasswordInput, +}; diff --git a/src/modules/profile/profile.controller.ts b/src/modules/profile/profile.controller.ts new file mode 100644 index 00000000..56d938c2 --- /dev/null +++ b/src/modules/profile/profile.controller.ts @@ -0,0 +1,82 @@ +import type { RequestHandler } from 'express'; +import { AppError } from '../../errors/AppError.js'; +import { profileService } from './profile.service.js'; + +type ConfirmEmailParams = { + token: string; +}; + +const getProfile: RequestHandler = async (req, res) => { + const user = req.user; + + if (!user) { + throw new AppError(401, 'Unauthorized'); + } + + const profile = await profileService.getProfile(user.id); + + res.json({ user: profile }); +}; + +const updateName: RequestHandler = async (req, res) => { + const user = req.user; + + if (!user) { + throw new AppError(401, 'Unauthorized'); + } + + const name = req.body?.name; + + const updatedUser = await profileService.updateName(user.id, name); + + res.json({ user: updatedUser }); +}; + +const changePassword: RequestHandler = async (req, res) => { + const user = req.user; + + if (!user) { + throw new AppError(401, 'Unauthorized'); + } + + await profileService.changePassword(user.id, req.body); + + res.status(204).send(); +}; + +const changeEmail: RequestHandler = async (req, res) => { + const user = req.user; + + if (!user) { + throw new AppError(401, 'Unauthorized'); + } + + await profileService.changeEmail(user.id, req.body); + + res.json({ + message: + 'Email change confirmation has been sent to your new email address', + }); +}; + +const confirmEmailChange: RequestHandler = async ( + req, + res, +) => { + const { token } = req.params; + + const user = await profileService.confirmEmailChange(token); + + res.json({ + user, + message: 'Email has been changed successfully', + }); +}; + +export const profileController = { + getProfile, + updateName, + changePassword, + changeEmail, + confirmEmailChange, +}; diff --git a/src/modules/profile/profile.routes.ts b/src/modules/profile/profile.routes.ts new file mode 100644 index 00000000..1c488dd8 --- /dev/null +++ b/src/modules/profile/profile.routes.ts @@ -0,0 +1,35 @@ +import { Router } from 'express'; +import { profileController } from './profile.controller.js'; +import { asyncHandler } from '../../middlewares/asyncHandler.js'; +import { authMiddleware } from '../../middlewares/auth.middleware.js'; + +export const profileRoutes = Router(); + +profileRoutes.get( + '/', + authMiddleware, + asyncHandler(profileController.getProfile), +); + +profileRoutes.patch( + '/name', + authMiddleware, + asyncHandler(profileController.updateName), +); + +profileRoutes.patch( + '/password', + authMiddleware, + asyncHandler(profileController.changePassword), +); + +profileRoutes.patch( + '/email', + authMiddleware, + asyncHandler(profileController.changeEmail), +); + +profileRoutes.get( + '/email/confirm/:token', + asyncHandler(profileController.confirmEmailChange), +); diff --git a/src/modules/profile/profile.service.ts b/src/modules/profile/profile.service.ts new file mode 100644 index 00000000..5b9e6bd7 --- /dev/null +++ b/src/modules/profile/profile.service.ts @@ -0,0 +1,183 @@ +import { AppError } from '../../errors/AppError.js'; +import { mailer } from '../../utils/mailer.js'; +import { + comparePasswords, + hashPassword, + validatePassword, +} from '../../utils/password.js'; +import { generateToken } from '../../utils/token.js'; +import { usersRepository } from '../users/users.repository.js'; +import { usersService, type NormalizedUser } from '../users/users.service.js'; + +const getProfile = async (userId: number): Promise => { + const user = await usersRepository.findById(userId); + + if (!user) { + throw new AppError(404, 'User not found'); + } + + return usersService.normalize(user); +}; + +const updateName = async ( + userId: number, + name: unknown, +): Promise => { + if (typeof name !== 'string' || name.trim() === '') { + throw new AppError(400, 'Name is required'); + } + + const updatedUser = await usersRepository.updateName(userId, name.trim()); + + return usersService.normalize(updatedUser); +}; + +const changePassword = async ( + userId: number, + input: unknown, +): Promise => { + if (typeof input !== 'object' || input === null) { + throw new AppError(400, 'Invalid input'); + } + + const { oldPassword, newPassword, confirmation } = input as { + oldPassword?: unknown; + newPassword?: unknown; + confirmation?: unknown; + }; + + if (typeof oldPassword !== 'string' || oldPassword.trim() === '') { + throw new AppError(400, 'Old password is required'); + } + + if (typeof newPassword !== 'string' || newPassword.trim() === '') { + throw new AppError(400, 'New password is required'); + } + + if (typeof confirmation !== 'string' || confirmation.trim() === '') { + throw new AppError(400, 'Password confirmation is required'); + } + + if (newPassword !== confirmation) { + throw new AppError(400, 'Password confirmation does not match'); + } + + const passwordValidation = validatePassword(newPassword); + + if (!passwordValidation.isValid) { + throw new AppError(400, 'Validation failed', { + newPassword: passwordValidation.errors, + }); + } + + const user = await usersRepository.findById(userId); + + if (!user) { + throw new AppError(404, 'User not found'); + } + + const isOldPasswordValid = await comparePasswords( + oldPassword, + user.passwordHash, + ); + + if (!isOldPasswordValid) { + throw new AppError(400, 'Old password is incorrect'); + } + + const newPasswordHash = await hashPassword(newPassword); + + await usersRepository.updatePassword(userId, newPasswordHash); +}; + +const changeEmail = async (userId: number, input: unknown): Promise => { + if (typeof input !== 'object' || input === null) { + throw new AppError(400, 'Invalid input'); + } + + const { newEmail, password } = input as { + newEmail?: unknown; + password?: unknown; + }; + + if (typeof newEmail !== 'string' || newEmail.trim() === '') { + throw new AppError(400, 'New email is required'); + } + + if (typeof password !== 'string' || password.trim() === '') { + throw new AppError(400, 'Password is required'); + } + + const emailPattern = /^[\w.+-]+@([\w-]+\.)+[\w-]{2,}$/; + const normalizedEmail = newEmail.trim().toLowerCase(); + + if (!emailPattern.test(normalizedEmail)) { + throw new AppError(400, 'Invalid email format'); + } + + const user = await usersRepository.findById(userId); + + if (!user) { + throw new AppError(404, 'User not found'); + } + + if (user.email === normalizedEmail) { + throw new AppError(400, 'New email must be different from current email'); + } + + const isPasswordValid = await comparePasswords(password, user.passwordHash); + + if (!isPasswordValid) { + throw new AppError(400, 'Password is incorrect'); + } + + const existingUser = await usersRepository.findByEmail(normalizedEmail); + + if (existingUser) { + throw new AppError(409, 'Email is already in use'); + } + + const emailChangeToken = generateToken(); + + await usersRepository.setEmailChangeData( + userId, + normalizedEmail, + emailChangeToken, + ); + + await mailer.sendEmailChangeConfirmation(normalizedEmail, emailChangeToken); + await mailer.sendEmailChangeNotification(user.email, normalizedEmail); +}; + +const confirmEmailChange = async (token: string): Promise => { + if (!token.trim()) { + throw new AppError(400, 'Email change token is required'); + } + + const user = await usersRepository.findByEmailChangeToken(token); + + if (!user || !user.pendingEmail) { + throw new AppError(404, 'Invalid email change token'); + } + + const existingUser = await usersRepository.findByEmail(user.pendingEmail); + + if (existingUser) { + throw new AppError(409, 'Email is already in use'); + } + + const updatedUser = await usersRepository.confirmEmailChange( + user.id, + user.pendingEmail, + ); + + return usersService.normalize(updatedUser); +}; + +export const profileService = { + updateName, + getProfile, + changePassword, + changeEmail, + confirmEmailChange, +}; diff --git a/src/modules/users/users.repository.ts b/src/modules/users/users.repository.ts new file mode 100644 index 00000000..d938fcdd --- /dev/null +++ b/src/modules/users/users.repository.ts @@ -0,0 +1,137 @@ +import { prisma } from '../../lib/prisma.js'; + +type CreateUserData = { + name: string; + email: string; + passwordHash: string; + activationToken: string; +}; + +const findByEmail = (email: string) => { + return prisma.user.findUnique({ + where: { email }, + }); +}; + +const create = (data: CreateUserData) => { + return prisma.user.create({ + data, + }); +}; + +const findByActivationToken = (token: string) => { + return prisma.user.findUnique({ + where: { activationToken: token }, + }); +}; + +const activate = (userId: number) => { + return prisma.user.update({ + where: { id: userId }, + data: { + isActivated: true, + activationToken: null, + }, + }); +}; + +const updateName = (userId: number, name: string) => { + return prisma.user.update({ + where: { id: userId }, + data: { name }, + }); +}; + +const findById = (userId: number) => { + return prisma.user.findUnique({ + where: { id: userId }, + }); +}; + +const updatePassword = (userId: number, passwordHash: string) => { + return prisma.user.update({ + where: { id: userId }, + data: { passwordHash }, + }); +}; + +const setPasswordResetToken = ( + userId: number, + resetPasswordToken: string, + resetTokenExpires: Date, +) => { + return prisma.user.update({ + where: { id: userId }, + data: { + resetPasswordToken, + resetTokenExpires, + }, + }); +}; + +const findByPasswordResetToken = (token: string) => { + return prisma.user.findUnique({ + where: { + resetPasswordToken: token, + }, + }); +}; + +const clearPasswordResetToken = (userId: number) => { + return prisma.user.update({ + where: { id: userId }, + data: { + resetPasswordToken: null, + resetTokenExpires: null, + }, + }); +}; + +const setEmailChangeData = ( + userId: number, + pendingEmail: string, + emailChangeToken: string, +) => { + return prisma.user.update({ + where: { id: userId }, + data: { + pendingEmail, + emailChangeToken, + }, + }); +}; + +const findByEmailChangeToken = (token: string) => { + return prisma.user.findUnique({ + where: { + emailChangeToken: token, + }, + }); +}; + +const confirmEmailChange = (userId: number, newEmail: string) => { + return prisma.user.update({ + where: { id: userId }, + data: { + email: newEmail, + pendingEmail: null, + emailChangeToken: null, + }, + }); +}; + +export const usersRepository = { + findByEmail, + create, + findByActivationToken, + activate, + updateName, + findById, + updatePassword, + setPasswordResetToken, + findByPasswordResetToken, + clearPasswordResetToken, + setEmailChangeData, + findByEmailChangeToken, + confirmEmailChange, +}; diff --git a/src/modules/users/users.service.ts b/src/modules/users/users.service.ts new file mode 100644 index 00000000..687c74ab --- /dev/null +++ b/src/modules/users/users.service.ts @@ -0,0 +1,23 @@ +import type { User } from '../../generated/prisma/client.js'; + +export type NormalizedUser = { + id: number; + name: string; + email: string; + isActivated: boolean; +}; + +const normalize = (user: User): NormalizedUser => { + const { id, name, email, isActivated } = user; + + return { + id, + name, + email, + isActivated, + }; +}; + +export const usersService = { + normalize, +}; diff --git a/src/types/exspress.d.ts b/src/types/exspress.d.ts new file mode 100644 index 00000000..f26302db --- /dev/null +++ b/src/types/exspress.d.ts @@ -0,0 +1,11 @@ +import type { NormalizedUser } from '../modules/users/users.service.js'; + +declare global { + namespace Express { + interface Request { + user?: NormalizedUser; + } + } +} + +export {}; diff --git a/src/utils/jwt.ts b/src/utils/jwt.ts new file mode 100644 index 00000000..cb0f8b8f --- /dev/null +++ b/src/utils/jwt.ts @@ -0,0 +1,43 @@ +import 'dotenv/config'; +import jwt from 'jsonwebtoken'; +import type { NormalizedUser } from '../modules/users/users.service.js'; + +const ACCESS_TOKEN_SECRET = process.env.JWT_ACCESS_SECRET; + +if (!ACCESS_TOKEN_SECRET) { + throw new Error('JWT_ACCESS_SECRET is not defined in environment variables'); +} + +export const generateAccessToken = (user: NormalizedUser): string => { + return jwt.sign(user, ACCESS_TOKEN_SECRET, { expiresIn: '15m' }); +}; + +export const validateAccessToken = (token: string): NormalizedUser | null => { + try { + const payload = jwt.verify(token, ACCESS_TOKEN_SECRET); + + if (typeof payload !== 'object' || payload === null) { + return null; + } + + const { id, name, email, isActivated } = payload; + + if ( + typeof id !== 'number' || + typeof name !== 'string' || + typeof email !== 'string' || + typeof isActivated !== 'boolean' + ) { + return null; + } + + return { + id, + name, + email, + isActivated, + }; + } catch { + return null; + } +}; diff --git a/src/utils/mailer.ts b/src/utils/mailer.ts new file mode 100644 index 00000000..4fee5c99 --- /dev/null +++ b/src/utils/mailer.ts @@ -0,0 +1,101 @@ +import 'dotenv/config'; +import nodemailer from 'nodemailer'; + +const SMTP_USER = process.env.SMTP_USER; +const SMTP_PASSWORD = process.env.SMTP_PASSWORD; +const API_URL = process.env.API_URL ?? 'http://localhost:3000'; + +if (!SMTP_USER || !SMTP_PASSWORD) { + throw new Error('SMTP_USER or SMTP_PASSWORD is not defined'); +} + +const transporter = nodemailer.createTransport({ + host: 'smtp.gmail.com', + port: 465, + secure: true, + auth: { + user: SMTP_USER, + pass: SMTP_PASSWORD, + }, + tls: + process.env.NODE_ENV === 'development' + ? { + rejectUnauthorized: false, + } + : undefined, +}); + +transporter.verify((error) => { + if (error) { + console.error('SMTP connection error:', error); + } else { + console.log('SMTP server is ready to send emails'); + } +}); + +const send = (email: string, subject: string, html: string) => { + return transporter.sendMail({ + from: `"Auth API" <${SMTP_USER}>`, + to: email, + subject, + html, + }); +}; + +const sendActivationLink = (email: string, activationToken: string) => { + const link = `${API_URL}/auth/activate/${activationToken}`; + + const html = ` +

Account activation

+

Please click the link below to activate your account:

+
${link} + `; + + return send(email, 'Account activation', html); +}; + +const sendPasswordResetLink = (email: string, resetToken: string) => { + const link = `${API_URL}/auth/reset-password/${resetToken}`; + + const html = ` +

Password reset

+

Please click the link below to reset your password:

+ ${link} + `; + + return send(email, 'Password reset', html); +}; + +const sendEmailChangeConfirmation = ( + newEmail: string, + emailChangeToken: string, +) => { + const link = `${API_URL}/profile/email/confirm/${emailChangeToken}`; + + const html = ` +

Email change confirmation

+

Please click the link below to confirm your new email:

+ ${link} + `; + + return send(newEmail, 'Confirm email change', html); +}; + +const sendEmailChangeNotification = (oldEmail: string, newEmail: string) => { + const html = ` +

Email change requested

+

Your account email change was requested.

+

New email: ${newEmail}

+

If this was not you, please secure your account.

+ `; + + return send(oldEmail, 'Email change requested', html); +}; + +export const mailer = { + send, + sendActivationLink, + sendPasswordResetLink, + sendEmailChangeConfirmation, + sendEmailChangeNotification, +}; diff --git a/src/utils/password.ts b/src/utils/password.ts new file mode 100644 index 00000000..735dcd72 --- /dev/null +++ b/src/utils/password.ts @@ -0,0 +1,59 @@ +import bcrypt from 'bcrypt'; + +export type PasswordValidationResult = { + isValid: boolean; + errors: string[]; +}; + +const SALT_ROUNDS = 10; + +export function validatePassword(password: unknown): PasswordValidationResult { + const errors: string[] = []; + + if (typeof password !== 'string') { + return { + isValid: false, + errors: ['Password must be a string'], + }; + } + + if (password.trim().length === 0) { + errors.push('Password cannot be empty'); + } + + if (password.length < 8) { + errors.push('Password must be at least 8 characters long'); + } + + if (!/[A-Z]/.test(password)) { + errors.push('Password must contain at least one uppercase letter'); + } + + if (!/[a-z]/.test(password)) { + errors.push('Password must contain at least one lowercase letter'); + } + + if (!/[0-9]/.test(password)) { + errors.push('Password must contain at least one digit'); + } + + if (!/[^A-Za-z0-9]/.test(password)) { + errors.push('Password must contain at least one special character'); + } + + return { + isValid: errors.length === 0, + errors, + }; +} + +export function hashPassword(password: string): Promise { + return bcrypt.hash(password, SALT_ROUNDS); +} + +export function comparePasswords( + password: string, + hashedPassword: string, +): Promise { + return bcrypt.compare(password, hashedPassword); +} diff --git a/src/utils/token.ts b/src/utils/token.ts new file mode 100644 index 00000000..0fe11294 --- /dev/null +++ b/src/utils/token.ts @@ -0,0 +1,7 @@ +import crypto from 'node:crypto'; + +const TOKEN_LENGTH = 32; + +export const generateToken = (): string => { + return crypto.randomBytes(TOKEN_LENGTH).toString('hex'); +}; From 7c4470fa7e0f62b6de89ed2df7248b51955f0bd5 Mon Sep 17 00:00:00 2001 From: Culpam Date: Sat, 16 May 2026 17:05:52 +0300 Subject: [PATCH 2/7] Fix TypeScript ESLint setup --- .eslintrc.cjs | 19 + package-lock.json | 3158 ++++++++++++++++++++++++++++++++++++++++++--- package.json | 32 +- 3 files changed, 3052 insertions(+), 157 deletions(-) create mode 100644 .eslintrc.cjs diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 00000000..d2e8676f --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,19 @@ +module.exports = { + extends: [ + '@mate-academy/eslint-config', + 'plugin:@typescript-eslint/recommended', + ], + parser: '@typescript-eslint/parser', + plugins: ['jest', '@typescript-eslint'], + env: { + jest: true, + node: true, + }, + ignorePatterns: ['dist/', 'node_modules/', 'src/generated/'], + rules: { + 'no-console': 'off', + 'no-shadow': 'off', + indent: 'off', + 'no-proto': 0, + }, +}; diff --git a/package-lock.json b/package-lock.json index 288d83dd..504ae5cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,14 +9,37 @@ "version": "1.0.0", "hasInstallScript": true, "license": "GPL-3.0", + "dependencies": { + "@prisma/adapter-pg": "^7.8.0", + "@prisma/client": "^7.8.0", + "bcrypt": "^6.0.0", + "cors": "^2.8.6", + "dotenv": "^17.4.2", + "express": "^5.2.1", + "jsonwebtoken": "^9.0.3", + "nodemailer": "^8.0.7", + "pg": "^8.20.0" + }, "devDependencies": { "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^1.8.6", + "@mate-academy/scripts": "^2.1.3", + "@types/bcrypt": "^6.0.0", + "@types/cors": "^2.8.19", + "@types/express": "^5.0.6", + "@types/jsonwebtoken": "^9.0.10", + "@types/node": "^25.6.2", + "@types/nodemailer": "^8.0.0", + "@types/pg": "^8.20.0", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", "jest": "^29.7.0", - "prettier": "^3.3.2" + "prettier": "3.5.3", + "prisma": "^7.8.0", + "tsx": "^4.21.0", + "typescript": "^6.0.3" } }, "node_modules/@ampproject/remapping": { @@ -535,6 +558,478 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@electric-sql/pglite": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.4.1.tgz", + "integrity": "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@electric-sql/pglite-socket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.1.1.tgz", + "integrity": "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "pglite-server": "dist/scripts/server.js" + }, + "peerDependencies": { + "@electric-sql/pglite": "0.4.1" + } + }, + "node_modules/@electric-sql/pglite-tools": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.3.1.tgz", + "integrity": "sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==", + "devOptional": true, + "license": "Apache-2.0", + "peerDependencies": { + "@electric-sql/pglite": "0.4.1" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -630,6 +1125,19 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@hono/node-server": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", + "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1449,6 +1957,13 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@mate-academy/eslint-config": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@mate-academy/eslint-config/-/eslint-config-0.0.29.tgz", @@ -1467,10 +1982,11 @@ } }, "node_modules/@mate-academy/scripts": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.8.6.tgz", - "integrity": "sha512-b4om/whj4G9emyi84ORE3FRZzCRwRIesr8tJHXa8EvJdOaAPDpzcJ8A0sFfMsWH9NUOVmOwkBtOXDu5eZZ00Ig==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-2.1.3.tgz", + "integrity": "sha512-a07wHTj/1QUK2Aac5zHad+sGw4rIvcNl5lJmJpAD7OxeSbnCdyI6RXUHwXhjF5MaVo9YHrJ0xVahyERS2IIyBQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/rest": "^17.11.2", "@types/get-port": "^4.2.0", @@ -1487,6 +2003,16 @@ "mate-scripts": "bin/mateScripts.js" } }, + "node_modules/@mate-academy/scripts/node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -1877,28 +2403,409 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, + "node_modules/@prisma/adapter-pg": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.8.0.tgz", + "integrity": "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg==", + "license": "Apache-2.0", "dependencies": { - "type-detect": "4.0.8" + "@prisma/driver-adapter-utils": "7.8.0", + "@types/pg": "^8.16.0", + "pg": "^8.16.3", + "postgres-array": "3.0.4" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, + "node_modules/@prisma/client": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz", + "integrity": "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==", + "license": "Apache-2.0", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@prisma/client-runtime-utils": "7.8.0" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24.0" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/client-runtime-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.8.0.tgz", + "integrity": "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/config": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.8.0.tgz", + "integrity": "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "c12": "3.3.4", + "deepmerge-ts": "7.1.5", + "effect": "3.20.0", + "empathic": "2.0.0" + } + }, + "node_modules/@prisma/debug": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.8.0.tgz", + "integrity": "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/dev": { + "version": "0.24.3", + "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.24.3.tgz", + "integrity": "sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "@electric-sql/pglite": "0.4.1", + "@electric-sql/pglite-socket": "0.1.1", + "@electric-sql/pglite-tools": "0.3.1", + "@hono/node-server": "1.19.11", + "@prisma/get-platform": "7.2.0", + "@prisma/query-plan-executor": "7.2.0", + "@prisma/streams-local": "0.1.2", + "foreground-child": "3.3.1", + "get-port-please": "3.2.0", + "hono": "^4.12.8", + "http-status-codes": "2.3.0", + "pathe": "2.0.3", + "proper-lockfile": "4.1.2", + "remeda": "2.33.4", + "std-env": "3.10.0", + "valibot": "1.2.0", + "zeptomatch": "2.1.0" + } + }, + "node_modules/@prisma/driver-adapter-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.8.0.tgz", + "integrity": "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.8.0" + } + }, + "node_modules/@prisma/engines": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.8.0.tgz", + "integrity": "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.8.0", + "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "@prisma/fetch-engine": "7.8.0", + "@prisma/get-platform": "7.8.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a.tgz", + "integrity": "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", + "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.8.0" + } + }, + "node_modules/@prisma/fetch-engine": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.8.0.tgz", + "integrity": "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.8.0", + "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "@prisma/get-platform": "7.8.0" + } + }, + "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", + "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.8.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.2.0.tgz", + "integrity": "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.2.0" + } + }, + "node_modules/@prisma/get-platform/node_modules/@prisma/debug": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.2.0.tgz", + "integrity": "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/query-plan-executor": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/query-plan-executor/-/query-plan-executor-7.2.0.tgz", + "integrity": "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/streams-local": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@prisma/streams-local/-/streams-local-0.1.2.tgz", + "integrity": "sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "ajv": "^8.12.0", + "better-result": "^2.7.0", + "env-paths": "^3.0.0", + "proper-lockfile": "^4.1.2" + }, + "engines": { + "bun": ">=1.3.6", + "node": ">=22.0.0" + } + }, + "node_modules/@prisma/streams-local/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@prisma/streams-local/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@prisma/studio-core": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.27.3.tgz", + "integrity": "sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@radix-ui/react-toggle": "1.1.10", + "chart.js": "4.5.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24.0", + "pnpm": "8" + }, + "peerDependencies": { + "@types/react": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "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 + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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 + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { @@ -1927,6 +2834,13 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1968,6 +2882,72 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/bcrypt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/get-port": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/get-port/-/get-port-4.2.0.tgz", @@ -1987,6 +2967,13 @@ "@types/node": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -2017,13 +3004,98 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { - "version": "20.14.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", - "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "version": "25.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz", + "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@types/nodemailer": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-8.0.0.tgz", + "integrity": "sha512-fyf8jWULsCo0d0BuoQ75i6IeoHs47qcqxWc7yUdUcV0pOZGjUTTOvwdG1PRXUDqN/8A64yQdQdnA2pZgcdi+cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pg": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "@types/http-errors": "*", + "@types/node": "*" } }, "node_modules/@types/stack-utils": { @@ -2047,14 +3119,98 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2062,13 +3218,22 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -2078,13 +3243,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2106,21 +3272,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -2130,10 +3298,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2142,15 +3311,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", - "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2164,12 +3334,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2185,6 +3356,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2198,6 +3370,19 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -2331,6 +3516,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2437,6 +3623,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2620,6 +3816,20 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bcrypt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/before-after-hook": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", @@ -2627,6 +3837,37 @@ "dev": true, "peer": true }, + "node_modules/better-result": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/better-result/-/better-result-2.9.2.tgz", + "integrity": "sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2690,12 +3931,56 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.4.tgz", + "integrity": "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "confbox": "^0.2.4", + "defu": "^6.1.6", + "dotenv": "^17.3.1", + "exsolve": "^1.0.8", + "giget": "^3.2.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "rc9": "^3.0.1" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -2715,6 +4000,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2776,6 +4090,35 @@ "node": ">=10" } }, + "node_modules/chart.js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", + "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -2857,12 +4200,76 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -2973,10 +4380,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "devOptional": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2986,6 +4394,14 @@ "node": ">= 8" } }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT", + "peer": true + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -3038,12 +4454,12 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3083,6 +4499,16 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3117,12 +4543,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3155,6 +4614,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3175,12 +4635,55 @@ } }, "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/effect": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.20.0.tgz", + "integrity": "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" } }, "node_modules/electron-to-chromium": { @@ -3207,6 +4710,25 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3216,6 +4738,19 @@ "once": "^1.4.0" } }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3286,13 +4821,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3301,16 +4833,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -3358,6 +4889,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -3367,6 +4940,12 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -3974,6 +5553,15 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -4022,11 +5610,84 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "devOptional": true }, "node_modules/fast-diff": { "version": "1.3.0", @@ -4035,16 +5696,17 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -4055,6 +5717,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4074,6 +5737,23 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -4116,6 +5796,27 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4161,6 +5862,54 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -4200,7 +5949,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4232,6 +5980,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4251,16 +6009,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4290,6 +6053,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-port-please": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", + "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -4319,6 +6102,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/giget": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-3.2.0.tgz", + "integrity": "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==", + "devOptional": true, + "license": "MIT", + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4382,6 +6175,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -4398,12 +6192,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4413,7 +6207,14 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "devOptional": true + }, + "node_modules/grammex": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.12.tgz", + "integrity": "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==", + "devOptional": true, + "license": "MIT" }, "node_modules/graphemer": { "version": "1.4.0", @@ -4421,6 +6222,13 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/graphmatch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/graphmatch/-/graphmatch-1.1.1.tgz", + "integrity": "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -4464,10 +6272,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4494,7 +6302,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -4502,12 +6309,49 @@ "node": ">= 0.4" } }, + "node_modules/hono": { + "version": "4.12.19", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.19.tgz", + "integrity": "sha512-xa3eYXYXx68XTT4hZ7dRzsXBhaq85ToSrlUJNoR0gwz/1Ap/CNwX47wfvV7pc/xWhjKVVkLT7zBJy8chhNguqQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-status-codes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", + "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -4517,6 +6361,22 @@ "node": ">=10.17.0" } }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -4584,8 +6444,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { "version": "1.0.7", @@ -4601,6 +6460,15 @@ "node": ">= 0.4" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -4816,6 +6684,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "devOptional": true, + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -4938,7 +6819,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "devOptional": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -6595,6 +8476,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6673,12 +8564,67 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -6746,12 +8692,61 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "devOptional": true, + "license": "Apache-2.0" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6761,6 +8756,22 @@ "yallist": "^3.0.2" } }, + "node_modules/lru.min": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", + "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", + "devOptional": true, + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, "node_modules/macos-release": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", @@ -6809,6 +8820,36 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6820,15 +8861,17 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -6837,6 +8880,31 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -6868,10 +8936,44 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mysql2": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz", + "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.7.0", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "lru.min": "^1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } }, "node_modules/natural-compare": { "version": "1.4.0", @@ -6879,6 +8981,15 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6916,6 +9027,15 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/node-addon-api": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.7.0.tgz", + "integrity": "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -6936,6 +9056,17 @@ } } }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -6948,6 +9079,15 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, + "node_modules/nodemailer": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.7.tgz", + "integrity": "sha512-pkjE4mkBzQjdJT4/UmlKl3pX0rC9fZmjh7c6C9o7lv66Ac6w9WCnzPzhbPNxwZAzlF4mdq4CSWB5+FbK6FWCow==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6969,11 +9109,20 @@ "node": ">=8" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7057,11 +9206,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -7205,6 +9372,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7227,7 +9403,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -7258,10 +9434,123 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/pg": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.12.0", + "pg-pool": "^3.13.0", + "pg-protocol": "^1.13.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.3.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", + "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz", + "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz", + "integrity": "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz", + "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-types/node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -7353,13 +9642,78 @@ "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.4", + "exsolve": "^1.0.8", + "pathe": "^2.0.3" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">= 0.4" + } + }, + "node_modules/postgres": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", + "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", + "devOptional": true, + "license": "Unlicense", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/porsager" + } + }, + "node_modules/postgres-array": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz", + "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/prelude-ls": { @@ -7372,10 +9726,11 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -7424,6 +9779,40 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/prisma": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.8.0.tgz", + "integrity": "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/config": "7.8.0", + "@prisma/dev": "0.24.3", + "@prisma/engines": "7.8.0", + "@prisma/studio-core": "0.27.3", + "mysql2": "3.15.3", + "postgres": "3.4.7" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24.0" + }, + "peerDependencies": { + "better-sqlite3": ">=9.0.0", + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -7437,6 +9826,31 @@ "node": ">= 6" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7460,7 +9874,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "individual", @@ -7472,6 +9886,21 @@ } ] }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7492,12 +9921,86 @@ } ] }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc9": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.1.tgz", + "integrity": "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.6", + "destr": "^2.0.5" + } + }, + "node_modules/react": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", + "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", + "devOptional": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", + "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.6" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -7528,6 +10031,16 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/remeda": { + "version": "2.33.4", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.33.4.tgz", + "integrity": "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/remeda" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7537,6 +10050,16 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -7593,6 +10116,16 @@ "node": ">=10" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -7619,6 +10152,32 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7660,6 +10219,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", @@ -7677,6 +10256,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "devOptional": true, + "license": "MIT", + "peer": true + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -7686,6 +10279,57 @@ "semver": "bin/semver.js" } }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", + "devOptional": true + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -7718,11 +10362,17 @@ "node": ">= 0.4" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "devOptional": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -7734,21 +10384,75 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7761,7 +10465,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "devOptional": true }, "node_modules/sinon": { "version": "9.2.4", @@ -7855,12 +10559,31 @@ "source-map": "^0.6.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -7882,6 +10605,22 @@ "node": ">=8" } }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -8096,6 +10835,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -8162,6 +10910,25 @@ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, + "node_modules/tsx": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.0.tgz", + "integrity": "sha512-8ccZMPD69s1AbKXx0C5ddTNZfNjwV04iIKgjZmKfKxMynEtSYcK0Lh7iQFh53fI5Yu4pb9usgAiqyPmEONaALg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -8195,6 +10962,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", @@ -8269,11 +11067,11 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "peer": true, + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8298,10 +11096,10 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "license": "MIT" }, "node_modules/universal-user-agent": { "version": "7.0.2", @@ -8319,6 +11117,15 @@ "node": ">= 10.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", @@ -8372,6 +11179,30 @@ "node": ">=10.12.0" } }, + "node_modules/valibot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", + "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -8401,7 +11232,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, @@ -8642,8 +11473,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -8658,6 +11488,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -8711,6 +11550,17 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zeptomatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.1.0.tgz", + "integrity": "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "grammex": "^3.1.11", + "graphmatch": "^1.1.0" + } } } } diff --git a/package.json b/package.json index 5e195a15..3f0db7c7 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,12 @@ "version": "1.0.0", "description": "Auth app", "main": "src/index.js", + "type": "module", "scripts": { + "dev": "tsx watch src/index.ts", + "build": "tsc", + "start": "node dist/index.js", "init": "mate-scripts init", - "start": "node src/index.js", "lint": "npm run format && mate-scripts lint", "format": "prettier --ignore-path .prettierignore --write './src/**/*.{js,ts}'", "test:only": "mate-scripts test", @@ -17,14 +20,37 @@ "license": "GPL-3.0", "devDependencies": { "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^1.8.6", + "@mate-academy/scripts": "^2.1.3", + "@types/bcrypt": "^6.0.0", + "@types/cors": "^2.8.19", + "@types/express": "^5.0.6", + "@types/jsonwebtoken": "^9.0.10", + "@types/node": "^25.6.2", + "@types/nodemailer": "^8.0.0", + "@types/pg": "^8.20.0", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", "jest": "^29.7.0", - "prettier": "^3.3.2" + "prettier": "3.5.3", + "prisma": "^7.8.0", + "tsx": "^4.21.0", + "typescript": "^6.0.3" }, "mateAcademy": { "projectType": "javascript" + }, + "dependencies": { + "@prisma/adapter-pg": "^7.8.0", + "@prisma/client": "^7.8.0", + "bcrypt": "^6.0.0", + "cors": "^2.8.6", + "dotenv": "^17.4.2", + "express": "^5.2.1", + "jsonwebtoken": "^9.0.3", + "nodemailer": "^8.0.7", + "pg": "^8.20.0" } } From 61570d04447bb0ebb092be63b0eaf9275f46a461 Mon Sep 17 00:00:00 2001 From: Culpam Date: Sat, 16 May 2026 19:06:58 +0300 Subject: [PATCH 3/7] Remove generated Prisma files --- .gitignore | 5 +- src/generated/prisma/browser.ts | 23 - src/generated/prisma/client.ts | 53 - src/generated/prisma/commonInputTypes.ts | 402 ---- src/generated/prisma/enums.ts | 12 - src/generated/prisma/internal/class.ts | 265 --- .../prisma/internal/prismaNamespace.ts | 852 -------- .../prisma/internal/prismaNamespaceBrowser.ts | 113 -- src/generated/prisma/models.ts | 11 - src/generated/prisma/models/User.ts | 1775 ----------------- 10 files changed, 2 insertions(+), 3509 deletions(-) delete mode 100644 src/generated/prisma/browser.ts delete mode 100644 src/generated/prisma/client.ts delete mode 100644 src/generated/prisma/commonInputTypes.ts delete mode 100644 src/generated/prisma/enums.ts delete mode 100644 src/generated/prisma/internal/class.ts delete mode 100644 src/generated/prisma/internal/prismaNamespace.ts delete mode 100644 src/generated/prisma/internal/prismaNamespaceBrowser.ts delete mode 100644 src/generated/prisma/models.ts delete mode 100644 src/generated/prisma/models/User.ts diff --git a/.gitignore b/.gitignore index ed48a299..b0a7b276 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,5 @@ node_modules # MacOS .DS_Store -# env files -*.env -.env* +.env +src/generated/ diff --git a/src/generated/prisma/browser.ts b/src/generated/prisma/browser.ts deleted file mode 100644 index 44b11000..00000000 --- a/src/generated/prisma/browser.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * This file should be your main import to use Prisma-related types and utilities in a browser. - * Use it to get access to models, enums, and input types. - * - * This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only. - * See `client.ts` for the standard, server-side entry point. - * - * 🟢 You can import this file directly. - */ - -import * as Prisma from './internal/prismaNamespaceBrowser.js'; -export { Prisma }; -export * as $Enums from './enums.js'; -export * from './enums.js'; -/** - * Model User - * - */ -export type User = Prisma.UserModel; diff --git a/src/generated/prisma/client.ts b/src/generated/prisma/client.ts deleted file mode 100644 index 6d7bc1c5..00000000 --- a/src/generated/prisma/client.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * This file should be your main import to use Prisma. Through it you get access to all the models, enums, and input types. - * If you're looking for something you can import in the client-side of your application, please refer to the `browser.ts` file instead. - * - * 🟢 You can import this file directly. - */ - -import * as process from 'node:process'; -import * as path from 'node:path'; -import { fileURLToPath } from 'node:url'; -globalThis['__dirname'] = path.dirname(fileURLToPath(import.meta.url)); - -import * as runtime from '@prisma/client/runtime/client'; -import * as $Enums from './enums.js'; -import * as $Class from './internal/class.js'; -import * as Prisma from './internal/prismaNamespace.js'; - -export * as $Enums from './enums.js'; -export * from './enums.js'; -/** - * ## Prisma Client - * - * Type-safe database client for TypeScript - * @example - * ``` - * const prisma = new PrismaClient({ - * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) - * }) - * // Fetch zero or more Users - * const users = await prisma.user.findMany() - * ``` - * - * Read more in our [docs](https://pris.ly/d/client). - */ -export const PrismaClient = $Class.getPrismaClientClass(); -export type PrismaClient< - LogOpts extends Prisma.LogLevel = never, - OmitOpts extends - Prisma.PrismaClientOptions['omit'] = Prisma.PrismaClientOptions['omit'], - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = $Class.PrismaClient; -export { Prisma }; - -/** - * Model User - * - */ -export type User = Prisma.UserModel; diff --git a/src/generated/prisma/commonInputTypes.ts b/src/generated/prisma/commonInputTypes.ts deleted file mode 100644 index 46037957..00000000 --- a/src/generated/prisma/commonInputTypes.ts +++ /dev/null @@ -1,402 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * This file exports various common sort, input & filter types that are not directly linked to a particular model. - * - * 🟢 You can import this file directly. - */ - -import type * as runtime from '@prisma/client/runtime/client'; -import * as $Enums from './enums.js'; -import type * as Prisma from './internal/prismaNamespace.js'; - -export type IntFilter<$PrismaModel = never> = { - equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; - in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - not?: Prisma.NestedIntFilter<$PrismaModel> | number; -}; - -export type StringFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - mode?: Prisma.QueryMode; - not?: Prisma.NestedStringFilter<$PrismaModel> | string; -}; - -export type BoolFilter<$PrismaModel = never> = { - equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; - not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean; -}; - -export type StringNullableFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - mode?: Prisma.QueryMode; - not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null; -}; - -export type DateTimeNullableFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; - in?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - notIn?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: - | Prisma.NestedDateTimeNullableFilter<$PrismaModel> - | Date - | string - | null; -}; - -export type DateTimeFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string; -}; - -export type SortOrderInput = { - sort: Prisma.SortOrder; - nulls?: Prisma.NullsOrder; -}; - -export type IntWithAggregatesFilter<$PrismaModel = never> = { - equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; - in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _avg?: Prisma.NestedFloatFilter<$PrismaModel>; - _sum?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedIntFilter<$PrismaModel>; - _max?: Prisma.NestedIntFilter<$PrismaModel>; -}; - -export type StringWithAggregatesFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - mode?: Prisma.QueryMode; - not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedStringFilter<$PrismaModel>; - _max?: Prisma.NestedStringFilter<$PrismaModel>; -}; - -export type BoolWithAggregatesFilter<$PrismaModel = never> = { - equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; - not?: Prisma.NestedBoolWithAggregatesFilter<$PrismaModel> | boolean; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedBoolFilter<$PrismaModel>; - _max?: Prisma.NestedBoolFilter<$PrismaModel>; -}; - -export type StringNullableWithAggregatesFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - mode?: Prisma.QueryMode; - not?: - | Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> - | string - | null; - _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; - _min?: Prisma.NestedStringNullableFilter<$PrismaModel>; - _max?: Prisma.NestedStringNullableFilter<$PrismaModel>; -}; - -export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; - in?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - notIn?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: - | Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> - | Date - | string - | null; - _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; - _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; - _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; -}; - -export type DateTimeWithAggregatesFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedDateTimeFilter<$PrismaModel>; - _max?: Prisma.NestedDateTimeFilter<$PrismaModel>; -}; - -export type NestedIntFilter<$PrismaModel = never> = { - equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; - in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - not?: Prisma.NestedIntFilter<$PrismaModel> | number; -}; - -export type NestedStringFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - not?: Prisma.NestedStringFilter<$PrismaModel> | string; -}; - -export type NestedBoolFilter<$PrismaModel = never> = { - equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; - not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean; -}; - -export type NestedStringNullableFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null; -}; - -export type NestedDateTimeNullableFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; - in?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - notIn?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: - | Prisma.NestedDateTimeNullableFilter<$PrismaModel> - | Date - | string - | null; -}; - -export type NestedDateTimeFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string; -}; - -export type NestedIntWithAggregatesFilter<$PrismaModel = never> = { - equals?: number | Prisma.IntFieldRefInput<$PrismaModel>; - in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>; - lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _avg?: Prisma.NestedFloatFilter<$PrismaModel>; - _sum?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedIntFilter<$PrismaModel>; - _max?: Prisma.NestedIntFilter<$PrismaModel>; -}; - -export type NestedFloatFilter<$PrismaModel = never> = { - equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>; - in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>; - notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>; - lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>; - lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>; - gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>; - gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>; - not?: Prisma.NestedFloatFilter<$PrismaModel> | number; -}; - -export type NestedStringWithAggregatesFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel>; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedStringFilter<$PrismaModel>; - _max?: Prisma.NestedStringFilter<$PrismaModel>; -}; - -export type NestedBoolWithAggregatesFilter<$PrismaModel = never> = { - equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>; - not?: Prisma.NestedBoolWithAggregatesFilter<$PrismaModel> | boolean; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedBoolFilter<$PrismaModel>; - _max?: Prisma.NestedBoolFilter<$PrismaModel>; -}; - -export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null; - in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null; - lt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - lte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gt?: string | Prisma.StringFieldRefInput<$PrismaModel>; - gte?: string | Prisma.StringFieldRefInput<$PrismaModel>; - contains?: string | Prisma.StringFieldRefInput<$PrismaModel>; - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>; - not?: - | Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> - | string - | null; - _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; - _min?: Prisma.NestedStringNullableFilter<$PrismaModel>; - _max?: Prisma.NestedStringNullableFilter<$PrismaModel>; -}; - -export type NestedIntNullableFilter<$PrismaModel = never> = { - equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null; - in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null; - notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null; - lt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - lte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gt?: number | Prisma.IntFieldRefInput<$PrismaModel>; - gte?: number | Prisma.IntFieldRefInput<$PrismaModel>; - not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null; -}; - -export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null; - in?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - notIn?: - | Date[] - | string[] - | Prisma.ListDateTimeFieldRefInput<$PrismaModel> - | null; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: - | Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> - | Date - | string - | null; - _count?: Prisma.NestedIntNullableFilter<$PrismaModel>; - _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; - _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>; -}; - -export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>; - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>; - not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string; - _count?: Prisma.NestedIntFilter<$PrismaModel>; - _min?: Prisma.NestedDateTimeFilter<$PrismaModel>; - _max?: Prisma.NestedDateTimeFilter<$PrismaModel>; -}; diff --git a/src/generated/prisma/enums.ts b/src/generated/prisma/enums.ts deleted file mode 100644 index ce747514..00000000 --- a/src/generated/prisma/enums.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * This file exports all enum related types from the schema. - * - * 🟢 You can import this file directly. - */ - -// This file is empty because there are no enums in the schema. -export {}; diff --git a/src/generated/prisma/internal/class.ts b/src/generated/prisma/internal/class.ts deleted file mode 100644 index ad410582..00000000 --- a/src/generated/prisma/internal/class.ts +++ /dev/null @@ -1,265 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * WARNING: This is an internal file that is subject to change! - * - * 🛑 Under no circumstances should you import this file directly! 🛑 - * - * Please import the `PrismaClient` class from the `client.ts` file instead. - */ - -import * as runtime from '@prisma/client/runtime/client'; -import type * as Prisma from './prismaNamespace.js'; - -const config: runtime.GetPrismaClientConfig = { - previewFeatures: [], - clientVersion: '7.8.0', - engineVersion: '3c6e192761c0362d496ed980de936e2f3cebcd3a', - activeProvider: 'postgresql', - inlineSchema: - 'generator client {\n provider = "prisma-client"\n output = "../src/generated/prisma"\n}\n\ndatasource db {\n provider = "postgresql"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n email String @unique\n passwordHash String\n isActivated Boolean @default(false)\n activationToken String? @unique\n\n resetPasswordToken String? @unique\n resetTokenExpires DateTime?\n\n pendingEmail String?\n emailChangeToken String? @unique\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n', - runtimeDataModel: { - models: {}, - enums: {}, - types: {}, - }, - parameterizationSchema: { - strings: [], - graph: '', - }, -}; - -config.runtimeDataModel = JSON.parse( - '{"models":{"User":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"name","kind":"scalar","type":"String"},{"name":"email","kind":"scalar","type":"String"},{"name":"passwordHash","kind":"scalar","type":"String"},{"name":"isActivated","kind":"scalar","type":"Boolean"},{"name":"activationToken","kind":"scalar","type":"String"},{"name":"resetPasswordToken","kind":"scalar","type":"String"},{"name":"resetTokenExpires","kind":"scalar","type":"DateTime"},{"name":"pendingEmail","kind":"scalar","type":"String"},{"name":"emailChangeToken","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null}},"enums":{},"types":{}}', -); -config.parameterizationSchema = { - strings: JSON.parse( - '["where","User.findUnique","User.findUniqueOrThrow","orderBy","cursor","User.findFirst","User.findFirstOrThrow","User.findMany","data","User.createOne","User.createMany","User.createManyAndReturn","User.updateOne","User.updateMany","User.updateManyAndReturn","create","update","User.upsertOne","User.deleteOne","User.deleteMany","having","_count","_avg","_sum","_min","_max","User.groupBy","User.aggregate","AND","OR","NOT","id","name","email","passwordHash","isActivated","activationToken","resetPasswordToken","resetTokenExpires","pendingEmail","emailChangeToken","createdAt","updatedAt","equals","in","notIn","lt","lte","gt","gte","not","contains","startsWith","endsWith","set","increment","decrement","multiply","divide"]', - ), - graph: - 'QQsQDxwAAC8AMB0AAAQAEB4AAC8AMB8CAAAAASABADEAISEBAAAAASIBADEAISMgADIAISQBAAAAASUBAAAAASZAADQAIScBADMAISgBAAAAASlAADUAISpAADUAIQEAAAABACABAAAAAQAgDxwAAC8AMB0AAAQAEB4AAC8AMB8CADAAISABADEAISEBADEAISIBADEAISMgADIAISQBADMAISUBADMAISZAADQAIScBADMAISgBADMAISlAADUAISpAADUAIQUkAAA2ACAlAAA2ACAmAAA2ACAnAAA2ACAoAAA2ACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACAMHwIAAAABIAEAAAABIQEAAAABIgEAAAABIyAAAAABJAEAAAABJQEAAAABJkAAAAABJwEAAAABKAEAAAABKUAAAAABKkAAAAABAQgAAAkAIAwfAgAAAAEgAQAAAAEhAQAAAAEiAQAAAAEjIAAAAAEkAQAAAAElAQAAAAEmQAAAAAEnAQAAAAEoAQAAAAEpQAAAAAEqQAAAAAEBCAAACwAwAQgAAAsAMAwfAgBBACEgAQA8ACEhAQA8ACEiAQA8ACEjIAA9ACEkAQA-ACElAQA-ACEmQAA_ACEnAQA-ACEoAQA-ACEpQABAACEqQABAACECAAAAAQAgCAAADgAgDB8CAEEAISABADwAISEBADwAISIBADwAISMgAD0AISQBAD4AISUBAD4AISZAAD8AIScBAD4AISgBAD4AISlAAEAAISpAAEAAIQIAAAAEACAIAAAQACACAAAABAAgCAAAEAAgAwAAAAEAIA8AAAkAIBAAAA4AIAEAAAABACABAAAABAAgChUAADcAIBYAADgAIBcAADsAIBgAADoAIBkAADkAICQAADYAICUAADYAICYAADYAICcAADYAICgAADYAIA8cAAAaADAdAAAXABAeAAAaADAfAgAbACEgAQAcACEhAQAcACEiAQAcACEjIAAdACEkAQAeACElAQAeACEmQAAfACEnAQAeACEoAQAeACEpQAAgACEqQAAgACEDAAAABAAgAwAAFgAwFAAAFwAgAwAAAAQAIAMAAAUAMAQAAAEAIA8cAAAaADAdAAAXABAeAAAaADAfAgAbACEgAQAcACEhAQAcACEiAQAcACEjIAAdACEkAQAeACElAQAeACEmQAAfACEnAQAeACEoAQAeACEpQAAgACEqQAAgACENFQAAIgAgFgAALgAgFwAAIgAgGAAAIgAgGQAAIgAgKwIAAAABLAIAAAAELQIAAAAELgIAAAABLwIAAAABMAIAAAABMQIAAAABMgIALQAhDhUAACIAIBgAACwAIBkAACwAICsBAAAAASwBAAAABC0BAAAABC4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACsAITMBAAAAATQBAAAAATUBAAAAAQUVAAAiACAYAAAqACAZAAAqACArIAAAAAEyIAApACEOFQAAJQAgGAAAKAAgGQAAKAAgKwEAAAABLAEAAAAFLQEAAAAFLgEAAAABLwEAAAABMAEAAAABMQEAAAABMgEAJwAhMwEAAAABNAEAAAABNQEAAAABCxUAACUAIBgAACYAIBkAACYAICtAAAAAASxAAAAABS1AAAAABS5AAAAAAS9AAAAAATBAAAAAATFAAAAAATJAACQAIQsVAAAiACAYAAAjACAZAAAjACArQAAAAAEsQAAAAAQtQAAAAAQuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAhACELFQAAIgAgGAAAIwAgGQAAIwAgK0AAAAABLEAAAAAELUAAAAAELkAAAAABL0AAAAABMEAAAAABMUAAAAABMkAAIQAhCCsCAAAAASwCAAAABC0CAAAABC4CAAAAAS8CAAAAATACAAAAATECAAAAATICACIAIQgrQAAAAAEsQAAAAAQtQAAAAAQuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAjACELFQAAJQAgGAAAJgAgGQAAJgAgK0AAAAABLEAAAAAFLUAAAAAFLkAAAAABL0AAAAABMEAAAAABMUAAAAABMkAAJAAhCCsCAAAAASwCAAAABS0CAAAABS4CAAAAAS8CAAAAATACAAAAATECAAAAATICACUAIQgrQAAAAAEsQAAAAAUtQAAAAAUuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAmACEOFQAAJQAgGAAAKAAgGQAAKAAgKwEAAAABLAEAAAAFLQEAAAAFLgEAAAABLwEAAAABMAEAAAABMQEAAAABMgEAJwAhMwEAAAABNAEAAAABNQEAAAABCysBAAAAASwBAAAABS0BAAAABS4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACgAITMBAAAAATQBAAAAATUBAAAAAQUVAAAiACAYAAAqACAZAAAqACArIAAAAAEyIAApACECKyAAAAABMiAAKgAhDhUAACIAIBgAACwAIBkAACwAICsBAAAAASwBAAAABC0BAAAABC4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACsAITMBAAAAATQBAAAAATUBAAAAAQsrAQAAAAEsAQAAAAQtAQAAAAQuAQAAAAEvAQAAAAEwAQAAAAExAQAAAAEyAQAsACEzAQAAAAE0AQAAAAE1AQAAAAENFQAAIgAgFgAALgAgFwAAIgAgGAAAIgAgGQAAIgAgKwIAAAABLAIAAAAELQIAAAAELgIAAAABLwIAAAABMAIAAAABMQIAAAABMgIALQAhCCsIAAAAASwIAAAABC0IAAAABC4IAAAAAS8IAAAAATAIAAAAATEIAAAAATIIAC4AIQ8cAAAvADAdAAAEABAeAAAvADAfAgAwACEgAQAxACEhAQAxACEiAQAxACEjIAAyACEkAQAzACElAQAzACEmQAA0ACEnAQAzACEoAQAzACEpQAA1ACEqQAA1ACEIKwIAAAABLAIAAAAELQIAAAAELgIAAAABLwIAAAABMAIAAAABMQIAAAABMgIAIgAhCysBAAAAASwBAAAABC0BAAAABC4BAAAAAS8BAAAAATABAAAAATEBAAAAATIBACwAITMBAAAAATQBAAAAATUBAAAAAQIrIAAAAAEyIAAqACELKwEAAAABLAEAAAAFLQEAAAAFLgEAAAABLwEAAAABMAEAAAABMQEAAAABMgEAKAAhMwEAAAABNAEAAAABNQEAAAABCCtAAAAAASxAAAAABS1AAAAABS5AAAAAAS9AAAAAATBAAAAAATFAAAAAATJAACYAIQgrQAAAAAEsQAAAAAQtQAAAAAQuQAAAAAEvQAAAAAEwQAAAAAExQAAAAAEyQAAjACEAAAAAAAABNgEAAAABATYgAAAAAQE2AQAAAAEBNkAAAAABATZAAAAAAQU2AgAAAAE3AgAAAAE4AgAAAAE5AgAAAAE6AgAAAAEAAAAABRUABhYABxcACBgACRkACgAAAAAABRUABhYABxcACBgACRkACgECAQIDAQUGAQYHAQcIAQkKAQoMAgsNAwwPAQ0RAg4SBBETARIUARMVAhoYBRsZCw', -}; - -async function decodeBase64AsWasm( - wasmBase64: string, -): Promise { - const { Buffer } = await import('node:buffer'); - const wasmArray = Buffer.from(wasmBase64, 'base64'); - return new WebAssembly.Module(wasmArray); -} - -config.compilerWasm = { - getRuntime: async () => - await import( - '@prisma/client/runtime/query_compiler_fast_bg.postgresql.mjs' - ), - - getQueryCompilerWasmModule: async () => { - const { wasm } = await import( - '@prisma/client/runtime/query_compiler_fast_bg.postgresql.wasm-base64.mjs' - ); - return await decodeBase64AsWasm(wasm); - }, - - importName: './query_compiler_fast_bg.js', -}; - -export type LogOptions = - 'log' extends keyof ClientOptions - ? ClientOptions['log'] extends Array - ? Prisma.GetEvents - : never - : never; - -export interface PrismaClientConstructor { - /** - * ## Prisma Client - * - * Type-safe database client for TypeScript - * @example - * ``` - * const prisma = new PrismaClient({ - * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) - * }) - * // Fetch zero or more Users - * const users = await prisma.user.findMany() - * ``` - * - * Read more in our [docs](https://pris.ly/d/client). - */ - - new < - Options extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions, - LogOpts extends LogOptions = LogOptions, - OmitOpts extends Prisma.PrismaClientOptions['omit'] = Options extends { - omit: infer U; - } - ? U - : Prisma.PrismaClientOptions['omit'], - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, - >( - options: Prisma.Subset, - ): PrismaClient; -} - -/** - * ## Prisma Client - * - * Type-safe database client for TypeScript - * @example - * ``` - * const prisma = new PrismaClient({ - * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) - * }) - * // Fetch zero or more Users - * const users = await prisma.user.findMany() - * ``` - * - * Read more in our [docs](https://pris.ly/d/client). - */ - -export interface PrismaClient< - in LogOpts extends Prisma.LogLevel = never, - in out OmitOpts extends Prisma.PrismaClientOptions['omit'] = undefined, - in out ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> { - [K: symbol]: { types: Prisma.TypeMap['other'] }; - - $on( - eventType: V, - callback: ( - event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent, - ) => void, - ): PrismaClient; - - /** - * Connect with the database - */ - $connect(): runtime.Types.Utils.JsPromise; - - /** - * Disconnect from the database - */ - $disconnect(): runtime.Types.Utils.JsPromise; - - /** - * Executes a prepared raw query and returns the number of affected rows. - * @example - * ``` - * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};` - * ``` - * - * Read more in our [docs](https://pris.ly/d/raw-queries). - */ - $executeRaw( - query: TemplateStringsArray | Prisma.Sql, - ...values: any[] - ): Prisma.PrismaPromise; - - /** - * Executes a raw query and returns the number of affected rows. - * Susceptible to SQL injections, see documentation. - * @example - * ``` - * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com') - * ``` - * - * Read more in our [docs](https://pris.ly/d/raw-queries). - */ - $executeRawUnsafe( - query: string, - ...values: any[] - ): Prisma.PrismaPromise; - - /** - * Performs a prepared raw query and returns the `SELECT` data. - * @example - * ``` - * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};` - * ``` - * - * Read more in our [docs](https://pris.ly/d/raw-queries). - */ - $queryRaw( - query: TemplateStringsArray | Prisma.Sql, - ...values: any[] - ): Prisma.PrismaPromise; - - /** - * Performs a raw query and returns the `SELECT` data. - * Susceptible to SQL injections, see documentation. - * @example - * ``` - * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com') - * ``` - * - * Read more in our [docs](https://pris.ly/d/raw-queries). - */ - $queryRawUnsafe( - query: string, - ...values: any[] - ): Prisma.PrismaPromise; - - /** - * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole. - * @example - * ``` - * const [george, bob, alice] = await prisma.$transaction([ - * prisma.user.create({ data: { name: 'George' } }), - * prisma.user.create({ data: { name: 'Bob' } }), - * prisma.user.create({ data: { name: 'Alice' } }), - * ]) - * ``` - * - * Read more in our [docs](https://www.prisma.io/docs/orm/prisma-client/queries/transactions). - */ - $transaction

[]>( - arg: [...P], - options?: { - maxWait?: number; - timeout?: number; - isolationLevel?: Prisma.TransactionIsolationLevel; - }, - ): runtime.Types.Utils.JsPromise>; - - $transaction( - fn: ( - prisma: Omit, - ) => runtime.Types.Utils.JsPromise, - options?: { - maxWait?: number; - timeout?: number; - isolationLevel?: Prisma.TransactionIsolationLevel; - }, - ): runtime.Types.Utils.JsPromise; - - $extends: runtime.Types.Extensions.ExtendsHook< - 'extends', - Prisma.TypeMapCb, - ExtArgs, - runtime.Types.Utils.Call< - Prisma.TypeMapCb, - { - extArgs: ExtArgs; - } - > - >; - - /** - * `prisma.user`: Exposes CRUD operations for the **User** model. - * Example usage: - * ```ts - * // Fetch zero or more Users - * const users = await prisma.user.findMany() - * ``` - */ - get user(): Prisma.UserDelegate; -} - -export function getPrismaClientClass(): PrismaClientConstructor { - return runtime.getPrismaClient(config) as unknown as PrismaClientConstructor; -} diff --git a/src/generated/prisma/internal/prismaNamespace.ts b/src/generated/prisma/internal/prismaNamespace.ts deleted file mode 100644 index 801f2c58..00000000 --- a/src/generated/prisma/internal/prismaNamespace.ts +++ /dev/null @@ -1,852 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * WARNING: This is an internal file that is subject to change! - * - * 🛑 Under no circumstances should you import this file directly! 🛑 - * - * All exports from this file are wrapped under a `Prisma` namespace object in the client.ts file. - * While this enables partial backward compatibility, it is not part of the stable public API. - * - * If you are looking for your Models, Enums, and Input Types, please import them from the respective - * model files in the `model` directory! - */ - -import * as runtime from '@prisma/client/runtime/client'; -import type * as Prisma from '../models.js'; -import { type PrismaClient } from './class.js'; - -export type * from '../models.js'; - -export type DMMF = typeof runtime.DMMF; - -export type PrismaPromise = runtime.Types.Public.PrismaPromise; - -/** - * Prisma Errors - */ - -export const PrismaClientKnownRequestError = - runtime.PrismaClientKnownRequestError; -export type PrismaClientKnownRequestError = - runtime.PrismaClientKnownRequestError; - -export const PrismaClientUnknownRequestError = - runtime.PrismaClientUnknownRequestError; -export type PrismaClientUnknownRequestError = - runtime.PrismaClientUnknownRequestError; - -export const PrismaClientRustPanicError = runtime.PrismaClientRustPanicError; -export type PrismaClientRustPanicError = runtime.PrismaClientRustPanicError; - -export const PrismaClientInitializationError = - runtime.PrismaClientInitializationError; -export type PrismaClientInitializationError = - runtime.PrismaClientInitializationError; - -export const PrismaClientValidationError = runtime.PrismaClientValidationError; -export type PrismaClientValidationError = runtime.PrismaClientValidationError; - -/** - * Re-export of sql-template-tag - */ -export const sql = runtime.sqltag; -export const empty = runtime.empty; -export const join = runtime.join; -export const raw = runtime.raw; -export const Sql = runtime.Sql; -export type Sql = runtime.Sql; - -/** - * Decimal.js - */ -export const Decimal = runtime.Decimal; -export type Decimal = runtime.Decimal; - -export type DecimalJsLike = runtime.DecimalJsLike; - -/** - * Extensions - */ -export type Extension = runtime.Types.Extensions.UserArgs; -export const getExtensionContext = runtime.Extensions.getExtensionContext; -export type Args = runtime.Types.Public.Args< - T, - F ->; -export type Payload< - T, - F extends runtime.Operation = never, -> = runtime.Types.Public.Payload; -export type Result< - T, - A, - F extends runtime.Operation, -> = runtime.Types.Public.Result; -export type Exact = runtime.Types.Public.Exact; - -export type PrismaVersion = { - client: string; - engine: string; -}; - -/** - * Prisma Client JS version: 7.8.0 - * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a - */ -export const prismaVersion: PrismaVersion = { - client: '7.8.0', - engine: '3c6e192761c0362d496ed980de936e2f3cebcd3a', -}; - -/** - * Utility Types - */ - -export type Bytes = runtime.Bytes; -export type JsonObject = runtime.JsonObject; -export type JsonArray = runtime.JsonArray; -export type JsonValue = runtime.JsonValue; -export type InputJsonObject = runtime.InputJsonObject; -export type InputJsonArray = runtime.InputJsonArray; -export type InputJsonValue = runtime.InputJsonValue; - -export const NullTypes = { - DbNull: runtime.NullTypes.DbNull as new ( - secret: never, - ) => typeof runtime.DbNull, - JsonNull: runtime.NullTypes.JsonNull as new ( - secret: never, - ) => typeof runtime.JsonNull, - AnyNull: runtime.NullTypes.AnyNull as new ( - secret: never, - ) => typeof runtime.AnyNull, -}; -/** - * Helper for filtering JSON entries that have `null` on the database (empty on the db) - * - * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field - */ -export const DbNull = runtime.DbNull; - -/** - * Helper for filtering JSON entries that have JSON `null` values (not empty on the db) - * - * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field - */ -export const JsonNull = runtime.JsonNull; - -/** - * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull` - * - * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field - */ -export const AnyNull = runtime.AnyNull; - -type SelectAndInclude = { - select: any; - include: any; -}; - -type SelectAndOmit = { - select: any; - omit: any; -}; - -/** - * From T, pick a set of properties whose keys are in the union K - */ -type Prisma__Pick = { - [P in K]: T[P]; -}; - -export type Enumerable = T | Array; - -/** - * Subset - * @desc From `T` pick properties that exist in `U`. Simple version of Intersection - */ -export type Subset = { - [key in keyof T]: key extends keyof U ? T[key] : never; -}; - -/** - * SelectSubset - * @desc From `T` pick properties that exist in `U`. Simple version of Intersection. - * Additionally, it validates, if both select and include are present. If the case, it errors. - */ -export type SelectSubset = { - [key in keyof T]: key extends keyof U ? T[key] : never; -} & (T extends SelectAndInclude - ? 'Please either choose `select` or `include`.' - : T extends SelectAndOmit - ? 'Please either choose `select` or `omit`.' - : {}); - -/** - * Subset + Intersection - * @desc From `T` pick properties that exist in `U` and intersect `K` - */ -export type SubsetIntersection = { - [key in keyof T]: key extends keyof U ? T[key] : never; -} & K; - -type Without = { [P in Exclude]?: never }; - -/** - * XOR is needed to have a real mutually exclusive union type - * https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types - */ -export type XOR = T extends object - ? U extends object - ? (Without & U) | (Without & T) - : U - : T; - -/** - * Is T a Record? - */ -type IsObject = - T extends Array - ? False - : T extends Date - ? False - : T extends Uint8Array - ? False - : T extends BigInt - ? False - : T extends object - ? True - : False; - -/** - * If it's T[], return T - */ -export type UnEnumerate = T extends Array ? U : T; - -/** - * From ts-toolbelt - */ - -type __Either = Omit & - { - // Merge all but K - [P in K]: Prisma__Pick; // With K possibilities - }[K]; - -type EitherStrict = Strict<__Either>; - -type EitherLoose = ComputeRaw<__Either>; - -type _Either = { - 1: EitherStrict; - 0: EitherLoose; -}[strict]; - -export type Either< - O extends object, - K extends Key, - strict extends Boolean = 1, -> = O extends unknown ? _Either : never; - -export type Union = any; - -export type PatchUndefined = { - [K in keyof O]: O[K] extends undefined ? At : O[K]; -} & {}; - -/** Helper Types for "Merge" **/ -export type IntersectOf = ( - U extends unknown ? (k: U) => void : never -) extends (k: infer I) => void - ? I - : never; - -export type Overwrite = { - [K in keyof O]: K extends keyof O1 ? O1[K] : O[K]; -} & {}; - -type _Merge = IntersectOf< - Overwrite< - U, - { - [K in keyof U]-?: At; - } - > ->; - -type Key = string | number | symbol; -type AtStrict = O[K & keyof O]; -type AtLoose = O extends unknown - ? AtStrict - : never; -export type At = { - 1: AtStrict; - 0: AtLoose; -}[strict]; - -export type ComputeRaw = A extends Function - ? A - : { - [K in keyof A]: A[K]; - } & {}; - -export type OptionalFlat = { - [K in keyof O]?: O[K]; -} & {}; - -type _Record = { - [P in K]: T; -}; - -// cause typescript not to expand types and preserve names -type NoExpand = T extends unknown ? T : never; - -// this type assumes the passed object is entirely optional -export type AtLeast = NoExpand< - O extends unknown - ? - | (K extends keyof O ? { [P in K]: O[P] } & O : O) - | ({ [P in keyof O as P extends K ? P : never]-?: O[P] } & O) - : never ->; - -type _Strict = U extends unknown - ? U & OptionalFlat<_Record, keyof U>, never>> - : never; - -export type Strict = ComputeRaw<_Strict>; -/** End Helper Types for "Merge" **/ - -export type Merge = ComputeRaw<_Merge>>; - -export type Boolean = True | False; - -export type True = 1; - -export type False = 0; - -export type Not = { - 0: 1; - 1: 0; -}[B]; - -export type Extends = [A1] extends [never] - ? 0 // anything `never` is false - : A1 extends A2 - ? 1 - : 0; - -export type Has = Not< - Extends, U1> ->; - -export type Or = { - 0: { - 0: 0; - 1: 1; - }; - 1: { - 0: 1; - 1: 1; - }; -}[B1][B2]; - -export type Keys = U extends unknown ? keyof U : never; - -export type GetScalarType = O extends object - ? { - [P in keyof T]: P extends keyof O ? O[P] : never; - } - : never; - -type FieldPaths> = - IsObject extends True ? U : T; - -export type GetHavingFields = { - [K in keyof T]: Or< - Or, Extends<'AND', K>>, - Extends<'NOT', K> - > extends True - ? // infer is only needed to not hit TS limit - // based on the brilliant idea of Pierre-Antoine Mills - // https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437 - T[K] extends infer TK - ? GetHavingFields< - UnEnumerate extends object ? Merge> : never - > - : never - : {} extends FieldPaths - ? never - : K; -}[keyof T]; - -/** - * Convert tuple to union - */ -type _TupleToUnion = T extends (infer E)[] ? E : never; -type TupleToUnion = _TupleToUnion; -export type MaybeTupleToUnion = T extends any[] ? TupleToUnion : T; - -/** - * Like `Pick`, but additionally can also accept an array of keys - */ -export type PickEnumerable< - T, - K extends Enumerable | keyof T, -> = Prisma__Pick>; - -/** - * Exclude all keys with underscores - */ -export type ExcludeUnderscoreKeys = T extends `_${string}` - ? never - : T; - -export type FieldRef = runtime.FieldRef; - -type FieldRefInputType = Model extends never - ? never - : FieldRef; - -export const ModelName = { - User: 'User', -} as const; - -export type ModelName = (typeof ModelName)[keyof typeof ModelName]; - -export interface TypeMapCb - extends runtime.Types.Utils.Fn< - { extArgs: runtime.Types.Extensions.InternalArgs }, - runtime.Types.Utils.Record - > { - returns: TypeMap; -} - -export type TypeMap< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, - GlobalOmitOptions = {}, -> = { - globalOmitOptions: { - omit: GlobalOmitOptions; - }; - meta: { - modelProps: 'user'; - txIsolationLevel: TransactionIsolationLevel; - }; - model: { - User: { - payload: Prisma.$UserPayload; - fields: Prisma.UserFieldRefs; - operations: { - findUnique: { - args: Prisma.UserFindUniqueArgs; - result: runtime.Types.Utils.PayloadToResult | null; - }; - findUniqueOrThrow: { - args: Prisma.UserFindUniqueOrThrowArgs; - result: runtime.Types.Utils.PayloadToResult; - }; - findFirst: { - args: Prisma.UserFindFirstArgs; - result: runtime.Types.Utils.PayloadToResult | null; - }; - findFirstOrThrow: { - args: Prisma.UserFindFirstOrThrowArgs; - result: runtime.Types.Utils.PayloadToResult; - }; - findMany: { - args: Prisma.UserFindManyArgs; - result: runtime.Types.Utils.PayloadToResult[]; - }; - create: { - args: Prisma.UserCreateArgs; - result: runtime.Types.Utils.PayloadToResult; - }; - createMany: { - args: Prisma.UserCreateManyArgs; - result: BatchPayload; - }; - createManyAndReturn: { - args: Prisma.UserCreateManyAndReturnArgs; - result: runtime.Types.Utils.PayloadToResult[]; - }; - delete: { - args: Prisma.UserDeleteArgs; - result: runtime.Types.Utils.PayloadToResult; - }; - update: { - args: Prisma.UserUpdateArgs; - result: runtime.Types.Utils.PayloadToResult; - }; - deleteMany: { - args: Prisma.UserDeleteManyArgs; - result: BatchPayload; - }; - updateMany: { - args: Prisma.UserUpdateManyArgs; - result: BatchPayload; - }; - updateManyAndReturn: { - args: Prisma.UserUpdateManyAndReturnArgs; - result: runtime.Types.Utils.PayloadToResult[]; - }; - upsert: { - args: Prisma.UserUpsertArgs; - result: runtime.Types.Utils.PayloadToResult; - }; - aggregate: { - args: Prisma.UserAggregateArgs; - result: runtime.Types.Utils.Optional; - }; - groupBy: { - args: Prisma.UserGroupByArgs; - result: runtime.Types.Utils.Optional[]; - }; - count: { - args: Prisma.UserCountArgs; - result: - | runtime.Types.Utils.Optional - | number; - }; - }; - }; - }; -} & { - other: { - payload: any; - operations: { - $executeRaw: { - args: [query: TemplateStringsArray | Sql, ...values: any[]]; - result: any; - }; - $executeRawUnsafe: { - args: [query: string, ...values: any[]]; - result: any; - }; - $queryRaw: { - args: [query: TemplateStringsArray | Sql, ...values: any[]]; - result: any; - }; - $queryRawUnsafe: { - args: [query: string, ...values: any[]]; - result: any; - }; - }; - }; -}; - -/** - * Enums - */ - -export const TransactionIsolationLevel = runtime.makeStrictEnum({ - ReadUncommitted: 'ReadUncommitted', - ReadCommitted: 'ReadCommitted', - RepeatableRead: 'RepeatableRead', - Serializable: 'Serializable', -} as const); - -export type TransactionIsolationLevel = - (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]; - -export const UserScalarFieldEnum = { - id: 'id', - name: 'name', - email: 'email', - passwordHash: 'passwordHash', - isActivated: 'isActivated', - activationToken: 'activationToken', - resetPasswordToken: 'resetPasswordToken', - resetTokenExpires: 'resetTokenExpires', - pendingEmail: 'pendingEmail', - emailChangeToken: 'emailChangeToken', - createdAt: 'createdAt', - updatedAt: 'updatedAt', -} as const; - -export type UserScalarFieldEnum = - (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]; - -export const SortOrder = { - asc: 'asc', - desc: 'desc', -} as const; - -export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]; - -export const QueryMode = { - default: 'default', - insensitive: 'insensitive', -} as const; - -export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]; - -export const NullsOrder = { - first: 'first', - last: 'last', -} as const; - -export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]; - -/** - * Field references - */ - -/** - * Reference to a field of type 'Int' - */ -export type IntFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'Int' ->; - -/** - * Reference to a field of type 'Int[]' - */ -export type ListIntFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'Int[]' ->; - -/** - * Reference to a field of type 'String' - */ -export type StringFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'String' ->; - -/** - * Reference to a field of type 'String[]' - */ -export type ListStringFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'String[]' ->; - -/** - * Reference to a field of type 'Boolean' - */ -export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'Boolean' ->; - -/** - * Reference to a field of type 'DateTime' - */ -export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'DateTime' ->; - -/** - * Reference to a field of type 'DateTime[]' - */ -export type ListDateTimeFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'DateTime[]' ->; - -/** - * Reference to a field of type 'Float' - */ -export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'Float' ->; - -/** - * Reference to a field of type 'Float[]' - */ -export type ListFloatFieldRefInput<$PrismaModel> = FieldRefInputType< - $PrismaModel, - 'Float[]' ->; - -/** - * Batch Payload for updateMany & deleteMany & createMany - */ -export type BatchPayload = { - count: number; -}; - -export const defineExtension = runtime.Extensions - .defineExtension as unknown as runtime.Types.Extensions.ExtendsHook< - 'define', - TypeMapCb, - runtime.Types.Extensions.DefaultArgs ->; -export type DefaultPrismaClient = PrismaClient; -export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'; -export type PrismaClientOptions = ( - | { - /** - * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-pg`. - */ - adapter: runtime.SqlDriverAdapterFactory; - accelerateUrl?: never; - } - | { - /** - * Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database. - */ - accelerateUrl: string; - adapter?: never; - } -) & { - /** - * @default "colorless" - */ - errorFormat?: ErrorFormat; - /** - * @example - * ``` - * // Shorthand for `emit: 'stdout'` - * log: ['query', 'info', 'warn', 'error'] - * - * // Emit as events only - * log: [ - * { emit: 'event', level: 'query' }, - * { emit: 'event', level: 'info' }, - * { emit: 'event', level: 'warn' } - * { emit: 'event', level: 'error' } - * ] - * - * / Emit as events and log to stdout - * og: [ - * { emit: 'stdout', level: 'query' }, - * { emit: 'stdout', level: 'info' }, - * { emit: 'stdout', level: 'warn' } - * { emit: 'stdout', level: 'error' } - * - * ``` - * Read more in our [docs](https://pris.ly/d/logging). - */ - log?: (LogLevel | LogDefinition)[]; - /** - * The default values for transactionOptions - * maxWait ?= 2000 - * timeout ?= 5000 - */ - transactionOptions?: { - maxWait?: number; - timeout?: number; - isolationLevel?: TransactionIsolationLevel; - }; - /** - * Global configuration for omitting model fields by default. - * - * @example - * ``` - * const prisma = new PrismaClient({ - * omit: { - * user: { - * password: true - * } - * } - * }) - * ``` - */ - omit?: GlobalOmitConfig; - /** - * SQL commenter plugins that add metadata to SQL queries as comments. - * Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/ - * - * @example - * ``` - * const prisma = new PrismaClient({ - * adapter, - * comments: [ - * traceContext(), - * queryInsights(), - * ], - * }) - * ``` - */ - comments?: runtime.SqlCommenterPlugin[]; - /** - * Optional maximum size for the query plan cache. If not provided, a default size will be used. - * A value of `0` can be used to disable the cache entirely. A higher cache size can improve - * performance for applications that execute a large number of unique queries, while a smaller - * cache size can reduce memory usage. - * - * @example - * ``` - * const prisma = new PrismaClient({ - * adapter, - * queryPlanCacheMaxSize: 100, - * }) - * ``` - */ - queryPlanCacheMaxSize?: number; -}; -export type GlobalOmitConfig = { - user?: Prisma.UserOmit; -}; - -/* Types for Logging */ -export type LogLevel = 'info' | 'query' | 'warn' | 'error'; -export type LogDefinition = { - level: LogLevel; - emit: 'stdout' | 'event'; -}; - -export type CheckIsLogLevel = T extends LogLevel ? T : never; - -export type GetLogType = CheckIsLogLevel< - T extends LogDefinition ? T['level'] : T ->; - -export type GetEvents = - T extends Array ? GetLogType : never; - -export type QueryEvent = { - timestamp: Date; - query: string; - params: string; - duration: number; - target: string; -}; - -export type LogEvent = { - timestamp: Date; - message: string; - target: string; -}; -/* End Types for Logging */ - -export type PrismaAction = - | 'findUnique' - | 'findUniqueOrThrow' - | 'findMany' - | 'findFirst' - | 'findFirstOrThrow' - | 'create' - | 'createMany' - | 'createManyAndReturn' - | 'update' - | 'updateMany' - | 'updateManyAndReturn' - | 'upsert' - | 'delete' - | 'deleteMany' - | 'executeRaw' - | 'queryRaw' - | 'aggregate' - | 'count' - | 'runCommandRaw' - | 'findRaw' - | 'groupBy'; - -/** - * `PrismaClient` proxy available in interactive transactions. - */ -export type TransactionClient = Omit< - DefaultPrismaClient, - runtime.ITXClientDenyList ->; diff --git a/src/generated/prisma/internal/prismaNamespaceBrowser.ts b/src/generated/prisma/internal/prismaNamespaceBrowser.ts deleted file mode 100644 index dca88972..00000000 --- a/src/generated/prisma/internal/prismaNamespaceBrowser.ts +++ /dev/null @@ -1,113 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * WARNING: This is an internal file that is subject to change! - * - * 🛑 Under no circumstances should you import this file directly! 🛑 - * - * All exports from this file are wrapped under a `Prisma` namespace object in the browser.ts file. - * While this enables partial backward compatibility, it is not part of the stable public API. - * - * If you are looking for your Models, Enums, and Input Types, please import them from the respective - * model files in the `model` directory! - */ - -import * as runtime from '@prisma/client/runtime/index-browser'; - -export type * from '../models.js'; -export type * from './prismaNamespace.js'; - -export const Decimal = runtime.Decimal; - -export const NullTypes = { - DbNull: runtime.NullTypes.DbNull as new ( - secret: never, - ) => typeof runtime.DbNull, - JsonNull: runtime.NullTypes.JsonNull as new ( - secret: never, - ) => typeof runtime.JsonNull, - AnyNull: runtime.NullTypes.AnyNull as new ( - secret: never, - ) => typeof runtime.AnyNull, -}; -/** - * Helper for filtering JSON entries that have `null` on the database (empty on the db) - * - * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field - */ -export const DbNull = runtime.DbNull; - -/** - * Helper for filtering JSON entries that have JSON `null` values (not empty on the db) - * - * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field - */ -export const JsonNull = runtime.JsonNull; - -/** - * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull` - * - * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field - */ -export const AnyNull = runtime.AnyNull; - -export const ModelName = { - User: 'User', -} as const; - -export type ModelName = (typeof ModelName)[keyof typeof ModelName]; - -/* - * Enums - */ - -export const TransactionIsolationLevel = runtime.makeStrictEnum({ - ReadUncommitted: 'ReadUncommitted', - ReadCommitted: 'ReadCommitted', - RepeatableRead: 'RepeatableRead', - Serializable: 'Serializable', -} as const); - -export type TransactionIsolationLevel = - (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]; - -export const UserScalarFieldEnum = { - id: 'id', - name: 'name', - email: 'email', - passwordHash: 'passwordHash', - isActivated: 'isActivated', - activationToken: 'activationToken', - resetPasswordToken: 'resetPasswordToken', - resetTokenExpires: 'resetTokenExpires', - pendingEmail: 'pendingEmail', - emailChangeToken: 'emailChangeToken', - createdAt: 'createdAt', - updatedAt: 'updatedAt', -} as const; - -export type UserScalarFieldEnum = - (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]; - -export const SortOrder = { - asc: 'asc', - desc: 'desc', -} as const; - -export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]; - -export const QueryMode = { - default: 'default', - insensitive: 'insensitive', -} as const; - -export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]; - -export const NullsOrder = { - first: 'first', - last: 'last', -} as const; - -export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]; diff --git a/src/generated/prisma/models.ts b/src/generated/prisma/models.ts deleted file mode 100644 index 93c7681b..00000000 --- a/src/generated/prisma/models.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * This is a barrel export file for all models and their related types. - * - * 🟢 You can import this file directly. - */ -export type * from './models/User.js'; -export type * from './commonInputTypes.js'; diff --git a/src/generated/prisma/models/User.ts b/src/generated/prisma/models/User.ts deleted file mode 100644 index 6d34df6c..00000000 --- a/src/generated/prisma/models/User.ts +++ /dev/null @@ -1,1775 +0,0 @@ -/* !!! This is code generated by Prisma. Do not edit directly. !!! */ -/* eslint-disable */ -// biome-ignore-all lint: generated file -// @ts-nocheck -/* - * This file exports the `User` model and its related types. - * - * 🟢 You can import this file directly. - */ -import type * as runtime from '@prisma/client/runtime/client'; -import type * as $Enums from '../enums.js'; -import type * as Prisma from '../internal/prismaNamespace.js'; - -/** - * Model User - * - */ -export type UserModel = - runtime.Types.Result.DefaultSelection; - -export type AggregateUser = { - _count: UserCountAggregateOutputType | null; - _avg: UserAvgAggregateOutputType | null; - _sum: UserSumAggregateOutputType | null; - _min: UserMinAggregateOutputType | null; - _max: UserMaxAggregateOutputType | null; -}; - -export type UserAvgAggregateOutputType = { - id: number | null; -}; - -export type UserSumAggregateOutputType = { - id: number | null; -}; - -export type UserMinAggregateOutputType = { - id: number | null; - name: string | null; - email: string | null; - passwordHash: string | null; - isActivated: boolean | null; - activationToken: string | null; - resetPasswordToken: string | null; - resetTokenExpires: Date | null; - pendingEmail: string | null; - emailChangeToken: string | null; - createdAt: Date | null; - updatedAt: Date | null; -}; - -export type UserMaxAggregateOutputType = { - id: number | null; - name: string | null; - email: string | null; - passwordHash: string | null; - isActivated: boolean | null; - activationToken: string | null; - resetPasswordToken: string | null; - resetTokenExpires: Date | null; - pendingEmail: string | null; - emailChangeToken: string | null; - createdAt: Date | null; - updatedAt: Date | null; -}; - -export type UserCountAggregateOutputType = { - id: number; - name: number; - email: number; - passwordHash: number; - isActivated: number; - activationToken: number; - resetPasswordToken: number; - resetTokenExpires: number; - pendingEmail: number; - emailChangeToken: number; - createdAt: number; - updatedAt: number; - _all: number; -}; - -export type UserAvgAggregateInputType = { - id?: true; -}; - -export type UserSumAggregateInputType = { - id?: true; -}; - -export type UserMinAggregateInputType = { - id?: true; - name?: true; - email?: true; - passwordHash?: true; - isActivated?: true; - activationToken?: true; - resetPasswordToken?: true; - resetTokenExpires?: true; - pendingEmail?: true; - emailChangeToken?: true; - createdAt?: true; - updatedAt?: true; -}; - -export type UserMaxAggregateInputType = { - id?: true; - name?: true; - email?: true; - passwordHash?: true; - isActivated?: true; - activationToken?: true; - resetPasswordToken?: true; - resetTokenExpires?: true; - pendingEmail?: true; - emailChangeToken?: true; - createdAt?: true; - updatedAt?: true; -}; - -export type UserCountAggregateInputType = { - id?: true; - name?: true; - email?: true; - passwordHash?: true; - isActivated?: true; - activationToken?: true; - resetPasswordToken?: true; - resetTokenExpires?: true; - pendingEmail?: true; - emailChangeToken?: true; - createdAt?: true; - updatedAt?: true; - _all?: true; -}; - -export type UserAggregateArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Filter which User to aggregate. - */ - where?: Prisma.UserWhereInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} - * - * Determine the order of Users to fetch. - */ - orderBy?: - | Prisma.UserOrderByWithRelationInput - | Prisma.UserOrderByWithRelationInput[]; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} - * - * Sets the start position - */ - cursor?: Prisma.UserWhereUniqueInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Take `±n` Users from the position of the cursor. - */ - take?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Skip the first `n` Users. - */ - skip?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} - * - * Count returned Users - **/ - _count?: true | UserCountAggregateInputType; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} - * - * Select which fields to average - **/ - _avg?: UserAvgAggregateInputType; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} - * - * Select which fields to sum - **/ - _sum?: UserSumAggregateInputType; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} - * - * Select which fields to find the minimum value - **/ - _min?: UserMinAggregateInputType; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} - * - * Select which fields to find the maximum value - **/ - _max?: UserMaxAggregateInputType; -}; - -export type GetUserAggregateType = { - [P in keyof T & keyof AggregateUser]: P extends '_count' | 'count' - ? T[P] extends true - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; -}; - -export type UserGroupByArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - where?: Prisma.UserWhereInput; - orderBy?: - | Prisma.UserOrderByWithAggregationInput - | Prisma.UserOrderByWithAggregationInput[]; - by: Prisma.UserScalarFieldEnum[] | Prisma.UserScalarFieldEnum; - having?: Prisma.UserScalarWhereWithAggregatesInput; - take?: number; - skip?: number; - _count?: UserCountAggregateInputType | true; - _avg?: UserAvgAggregateInputType; - _sum?: UserSumAggregateInputType; - _min?: UserMinAggregateInputType; - _max?: UserMaxAggregateInputType; -}; - -export type UserGroupByOutputType = { - id: number; - name: string; - email: string; - passwordHash: string; - isActivated: boolean; - activationToken: string | null; - resetPasswordToken: string | null; - resetTokenExpires: Date | null; - pendingEmail: string | null; - emailChangeToken: string | null; - createdAt: Date; - updatedAt: Date; - _count: UserCountAggregateOutputType | null; - _avg: UserAvgAggregateOutputType | null; - _sum: UserSumAggregateOutputType | null; - _min: UserMinAggregateOutputType | null; - _max: UserMaxAggregateOutputType | null; -}; - -export type GetUserGroupByPayload = - Prisma.PrismaPromise< - Array< - Prisma.PickEnumerable & { - [P in keyof T & keyof UserGroupByOutputType]: P extends '_count' - ? T[P] extends boolean - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; - } - > - >; - -export type UserWhereInput = { - AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; - OR?: Prisma.UserWhereInput[]; - NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; - id?: Prisma.IntFilter<'User'> | number; - name?: Prisma.StringFilter<'User'> | string; - email?: Prisma.StringFilter<'User'> | string; - passwordHash?: Prisma.StringFilter<'User'> | string; - isActivated?: Prisma.BoolFilter<'User'> | boolean; - activationToken?: Prisma.StringNullableFilter<'User'> | string | null; - resetPasswordToken?: Prisma.StringNullableFilter<'User'> | string | null; - resetTokenExpires?: - | Prisma.DateTimeNullableFilter<'User'> - | Date - | string - | null; - pendingEmail?: Prisma.StringNullableFilter<'User'> | string | null; - emailChangeToken?: Prisma.StringNullableFilter<'User'> | string | null; - createdAt?: Prisma.DateTimeFilter<'User'> | Date | string; - updatedAt?: Prisma.DateTimeFilter<'User'> | Date | string; -}; - -export type UserOrderByWithRelationInput = { - id?: Prisma.SortOrder; - name?: Prisma.SortOrder; - email?: Prisma.SortOrder; - passwordHash?: Prisma.SortOrder; - isActivated?: Prisma.SortOrder; - activationToken?: Prisma.SortOrderInput | Prisma.SortOrder; - resetPasswordToken?: Prisma.SortOrderInput | Prisma.SortOrder; - resetTokenExpires?: Prisma.SortOrderInput | Prisma.SortOrder; - pendingEmail?: Prisma.SortOrderInput | Prisma.SortOrder; - emailChangeToken?: Prisma.SortOrderInput | Prisma.SortOrder; - createdAt?: Prisma.SortOrder; - updatedAt?: Prisma.SortOrder; -}; - -export type UserWhereUniqueInput = Prisma.AtLeast< - { - id?: number; - email?: string; - activationToken?: string; - resetPasswordToken?: string; - emailChangeToken?: string; - AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; - OR?: Prisma.UserWhereInput[]; - NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[]; - name?: Prisma.StringFilter<'User'> | string; - passwordHash?: Prisma.StringFilter<'User'> | string; - isActivated?: Prisma.BoolFilter<'User'> | boolean; - resetTokenExpires?: - | Prisma.DateTimeNullableFilter<'User'> - | Date - | string - | null; - pendingEmail?: Prisma.StringNullableFilter<'User'> | string | null; - createdAt?: Prisma.DateTimeFilter<'User'> | Date | string; - updatedAt?: Prisma.DateTimeFilter<'User'> | Date | string; - }, - 'id' | 'email' | 'activationToken' | 'resetPasswordToken' | 'emailChangeToken' ->; - -export type UserOrderByWithAggregationInput = { - id?: Prisma.SortOrder; - name?: Prisma.SortOrder; - email?: Prisma.SortOrder; - passwordHash?: Prisma.SortOrder; - isActivated?: Prisma.SortOrder; - activationToken?: Prisma.SortOrderInput | Prisma.SortOrder; - resetPasswordToken?: Prisma.SortOrderInput | Prisma.SortOrder; - resetTokenExpires?: Prisma.SortOrderInput | Prisma.SortOrder; - pendingEmail?: Prisma.SortOrderInput | Prisma.SortOrder; - emailChangeToken?: Prisma.SortOrderInput | Prisma.SortOrder; - createdAt?: Prisma.SortOrder; - updatedAt?: Prisma.SortOrder; - _count?: Prisma.UserCountOrderByAggregateInput; - _avg?: Prisma.UserAvgOrderByAggregateInput; - _max?: Prisma.UserMaxOrderByAggregateInput; - _min?: Prisma.UserMinOrderByAggregateInput; - _sum?: Prisma.UserSumOrderByAggregateInput; -}; - -export type UserScalarWhereWithAggregatesInput = { - AND?: - | Prisma.UserScalarWhereWithAggregatesInput - | Prisma.UserScalarWhereWithAggregatesInput[]; - OR?: Prisma.UserScalarWhereWithAggregatesInput[]; - NOT?: - | Prisma.UserScalarWhereWithAggregatesInput - | Prisma.UserScalarWhereWithAggregatesInput[]; - id?: Prisma.IntWithAggregatesFilter<'User'> | number; - name?: Prisma.StringWithAggregatesFilter<'User'> | string; - email?: Prisma.StringWithAggregatesFilter<'User'> | string; - passwordHash?: Prisma.StringWithAggregatesFilter<'User'> | string; - isActivated?: Prisma.BoolWithAggregatesFilter<'User'> | boolean; - activationToken?: - | Prisma.StringNullableWithAggregatesFilter<'User'> - | string - | null; - resetPasswordToken?: - | Prisma.StringNullableWithAggregatesFilter<'User'> - | string - | null; - resetTokenExpires?: - | Prisma.DateTimeNullableWithAggregatesFilter<'User'> - | Date - | string - | null; - pendingEmail?: - | Prisma.StringNullableWithAggregatesFilter<'User'> - | string - | null; - emailChangeToken?: - | Prisma.StringNullableWithAggregatesFilter<'User'> - | string - | null; - createdAt?: Prisma.DateTimeWithAggregatesFilter<'User'> | Date | string; - updatedAt?: Prisma.DateTimeWithAggregatesFilter<'User'> | Date | string; -}; - -export type UserCreateInput = { - name: string; - email: string; - passwordHash: string; - isActivated?: boolean; - activationToken?: string | null; - resetPasswordToken?: string | null; - resetTokenExpires?: Date | string | null; - pendingEmail?: string | null; - emailChangeToken?: string | null; - createdAt?: Date | string; - updatedAt?: Date | string; -}; - -export type UserUncheckedCreateInput = { - id?: number; - name: string; - email: string; - passwordHash: string; - isActivated?: boolean; - activationToken?: string | null; - resetPasswordToken?: string | null; - resetTokenExpires?: Date | string | null; - pendingEmail?: string | null; - emailChangeToken?: string | null; - createdAt?: Date | string; - updatedAt?: Date | string; -}; - -export type UserUpdateInput = { - name?: Prisma.StringFieldUpdateOperationsInput | string; - email?: Prisma.StringFieldUpdateOperationsInput | string; - passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; - isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; - activationToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetPasswordToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetTokenExpires?: - | Prisma.NullableDateTimeFieldUpdateOperationsInput - | Date - | string - | null; - pendingEmail?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - emailChangeToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; - updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; -}; - -export type UserUncheckedUpdateInput = { - id?: Prisma.IntFieldUpdateOperationsInput | number; - name?: Prisma.StringFieldUpdateOperationsInput | string; - email?: Prisma.StringFieldUpdateOperationsInput | string; - passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; - isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; - activationToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetPasswordToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetTokenExpires?: - | Prisma.NullableDateTimeFieldUpdateOperationsInput - | Date - | string - | null; - pendingEmail?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - emailChangeToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; - updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; -}; - -export type UserCreateManyInput = { - id?: number; - name: string; - email: string; - passwordHash: string; - isActivated?: boolean; - activationToken?: string | null; - resetPasswordToken?: string | null; - resetTokenExpires?: Date | string | null; - pendingEmail?: string | null; - emailChangeToken?: string | null; - createdAt?: Date | string; - updatedAt?: Date | string; -}; - -export type UserUpdateManyMutationInput = { - name?: Prisma.StringFieldUpdateOperationsInput | string; - email?: Prisma.StringFieldUpdateOperationsInput | string; - passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; - isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; - activationToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetPasswordToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetTokenExpires?: - | Prisma.NullableDateTimeFieldUpdateOperationsInput - | Date - | string - | null; - pendingEmail?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - emailChangeToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; - updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; -}; - -export type UserUncheckedUpdateManyInput = { - id?: Prisma.IntFieldUpdateOperationsInput | number; - name?: Prisma.StringFieldUpdateOperationsInput | string; - email?: Prisma.StringFieldUpdateOperationsInput | string; - passwordHash?: Prisma.StringFieldUpdateOperationsInput | string; - isActivated?: Prisma.BoolFieldUpdateOperationsInput | boolean; - activationToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetPasswordToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - resetTokenExpires?: - | Prisma.NullableDateTimeFieldUpdateOperationsInput - | Date - | string - | null; - pendingEmail?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - emailChangeToken?: - | Prisma.NullableStringFieldUpdateOperationsInput - | string - | null; - createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; - updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string; -}; - -export type UserCountOrderByAggregateInput = { - id?: Prisma.SortOrder; - name?: Prisma.SortOrder; - email?: Prisma.SortOrder; - passwordHash?: Prisma.SortOrder; - isActivated?: Prisma.SortOrder; - activationToken?: Prisma.SortOrder; - resetPasswordToken?: Prisma.SortOrder; - resetTokenExpires?: Prisma.SortOrder; - pendingEmail?: Prisma.SortOrder; - emailChangeToken?: Prisma.SortOrder; - createdAt?: Prisma.SortOrder; - updatedAt?: Prisma.SortOrder; -}; - -export type UserAvgOrderByAggregateInput = { - id?: Prisma.SortOrder; -}; - -export type UserMaxOrderByAggregateInput = { - id?: Prisma.SortOrder; - name?: Prisma.SortOrder; - email?: Prisma.SortOrder; - passwordHash?: Prisma.SortOrder; - isActivated?: Prisma.SortOrder; - activationToken?: Prisma.SortOrder; - resetPasswordToken?: Prisma.SortOrder; - resetTokenExpires?: Prisma.SortOrder; - pendingEmail?: Prisma.SortOrder; - emailChangeToken?: Prisma.SortOrder; - createdAt?: Prisma.SortOrder; - updatedAt?: Prisma.SortOrder; -}; - -export type UserMinOrderByAggregateInput = { - id?: Prisma.SortOrder; - name?: Prisma.SortOrder; - email?: Prisma.SortOrder; - passwordHash?: Prisma.SortOrder; - isActivated?: Prisma.SortOrder; - activationToken?: Prisma.SortOrder; - resetPasswordToken?: Prisma.SortOrder; - resetTokenExpires?: Prisma.SortOrder; - pendingEmail?: Prisma.SortOrder; - emailChangeToken?: Prisma.SortOrder; - createdAt?: Prisma.SortOrder; - updatedAt?: Prisma.SortOrder; -}; - -export type UserSumOrderByAggregateInput = { - id?: Prisma.SortOrder; -}; - -export type StringFieldUpdateOperationsInput = { - set?: string; -}; - -export type BoolFieldUpdateOperationsInput = { - set?: boolean; -}; - -export type NullableStringFieldUpdateOperationsInput = { - set?: string | null; -}; - -export type NullableDateTimeFieldUpdateOperationsInput = { - set?: Date | string | null; -}; - -export type DateTimeFieldUpdateOperationsInput = { - set?: Date | string; -}; - -export type IntFieldUpdateOperationsInput = { - set?: number; - increment?: number; - decrement?: number; - multiply?: number; - divide?: number; -}; - -export type UserSelect< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = runtime.Types.Extensions.GetSelect< - { - id?: boolean; - name?: boolean; - email?: boolean; - passwordHash?: boolean; - isActivated?: boolean; - activationToken?: boolean; - resetPasswordToken?: boolean; - resetTokenExpires?: boolean; - pendingEmail?: boolean; - emailChangeToken?: boolean; - createdAt?: boolean; - updatedAt?: boolean; - }, - ExtArgs['result']['user'] ->; - -export type UserSelectCreateManyAndReturn< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = runtime.Types.Extensions.GetSelect< - { - id?: boolean; - name?: boolean; - email?: boolean; - passwordHash?: boolean; - isActivated?: boolean; - activationToken?: boolean; - resetPasswordToken?: boolean; - resetTokenExpires?: boolean; - pendingEmail?: boolean; - emailChangeToken?: boolean; - createdAt?: boolean; - updatedAt?: boolean; - }, - ExtArgs['result']['user'] ->; - -export type UserSelectUpdateManyAndReturn< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = runtime.Types.Extensions.GetSelect< - { - id?: boolean; - name?: boolean; - email?: boolean; - passwordHash?: boolean; - isActivated?: boolean; - activationToken?: boolean; - resetPasswordToken?: boolean; - resetTokenExpires?: boolean; - pendingEmail?: boolean; - emailChangeToken?: boolean; - createdAt?: boolean; - updatedAt?: boolean; - }, - ExtArgs['result']['user'] ->; - -export type UserSelectScalar = { - id?: boolean; - name?: boolean; - email?: boolean; - passwordHash?: boolean; - isActivated?: boolean; - activationToken?: boolean; - resetPasswordToken?: boolean; - resetTokenExpires?: boolean; - pendingEmail?: boolean; - emailChangeToken?: boolean; - createdAt?: boolean; - updatedAt?: boolean; -}; - -export type UserOmit< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = runtime.Types.Extensions.GetOmit< - | 'id' - | 'name' - | 'email' - | 'passwordHash' - | 'isActivated' - | 'activationToken' - | 'resetPasswordToken' - | 'resetTokenExpires' - | 'pendingEmail' - | 'emailChangeToken' - | 'createdAt' - | 'updatedAt', - ExtArgs['result']['user'] ->; - -export type $UserPayload< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - name: 'User'; - objects: {}; - scalars: runtime.Types.Extensions.GetPayloadResult< - { - id: number; - name: string; - email: string; - passwordHash: string; - isActivated: boolean; - activationToken: string | null; - resetPasswordToken: string | null; - resetTokenExpires: Date | null; - pendingEmail: string | null; - emailChangeToken: string | null; - createdAt: Date; - updatedAt: Date; - }, - ExtArgs['result']['user'] - >; - composites: {}; -}; - -export type UserGetPayload< - S extends boolean | null | undefined | UserDefaultArgs, -> = runtime.Types.Result.GetResult; - -export type UserCountArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = Omit & { - select?: UserCountAggregateInputType | true; -}; - -export interface UserDelegate< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, - GlobalOmitOptions = {}, -> { - [K: symbol]: { - types: Prisma.TypeMap['model']['User']; - meta: { name: 'User' }; - }; - /** - * Find zero or one User that matches the filter. - * @param {UserFindUniqueArgs} args - Arguments to find a User - * @example - * // Get one User - * const user = await prisma.user.findUnique({ - * where: { - * // ... provide filter here - * } - * }) - */ - findUnique( - args: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'findUnique', - GlobalOmitOptions - > | null, - null, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Find one User that matches the filter or throw an error with `error.code='P2025'` - * if no matches were found. - * @param {UserFindUniqueOrThrowArgs} args - Arguments to find a User - * @example - * // Get one User - * const user = await prisma.user.findUniqueOrThrow({ - * where: { - * // ... provide filter here - * } - * }) - */ - findUniqueOrThrow( - args: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'findUniqueOrThrow', - GlobalOmitOptions - >, - never, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Find the first User that matches the filter. - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * @param {UserFindFirstArgs} args - Arguments to find a User - * @example - * // Get one User - * const user = await prisma.user.findFirst({ - * where: { - * // ... provide filter here - * } - * }) - */ - findFirst( - args?: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'findFirst', - GlobalOmitOptions - > | null, - null, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Find the first User that matches the filter or - * throw `PrismaKnownClientError` with `P2025` code if no matches were found. - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * @param {UserFindFirstOrThrowArgs} args - Arguments to find a User - * @example - * // Get one User - * const user = await prisma.user.findFirstOrThrow({ - * where: { - * // ... provide filter here - * } - * }) - */ - findFirstOrThrow( - args?: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'findFirstOrThrow', - GlobalOmitOptions - >, - never, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Find zero or more Users that matches the filter. - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * @param {UserFindManyArgs} args - Arguments to filter and select certain fields only. - * @example - * // Get all Users - * const users = await prisma.user.findMany() - * - * // Get first 10 Users - * const users = await prisma.user.findMany({ take: 10 }) - * - * // Only select the `id` - * const userWithIdOnly = await prisma.user.findMany({ select: { id: true } }) - * - */ - findMany( - args?: Prisma.SelectSubset>, - ): Prisma.PrismaPromise< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'findMany', - GlobalOmitOptions - > - >; - - /** - * Create a User. - * @param {UserCreateArgs} args - Arguments to create a User. - * @example - * // Create one User - * const User = await prisma.user.create({ - * data: { - * // ... data to create a User - * } - * }) - * - */ - create( - args: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'create', - GlobalOmitOptions - >, - never, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Create many Users. - * @param {UserCreateManyArgs} args - Arguments to create many Users. - * @example - * // Create many Users - * const user = await prisma.user.createMany({ - * data: [ - * // ... provide data here - * ] - * }) - * - */ - createMany( - args?: Prisma.SelectSubset>, - ): Prisma.PrismaPromise; - - /** - * Create many Users and returns the data saved in the database. - * @param {UserCreateManyAndReturnArgs} args - Arguments to create many Users. - * @example - * // Create many Users - * const user = await prisma.user.createManyAndReturn({ - * data: [ - * // ... provide data here - * ] - * }) - * - * // Create many Users and only return the `id` - * const userWithIdOnly = await prisma.user.createManyAndReturn({ - * select: { id: true }, - * data: [ - * // ... provide data here - * ] - * }) - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * - */ - createManyAndReturn( - args?: Prisma.SelectSubset>, - ): Prisma.PrismaPromise< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'createManyAndReturn', - GlobalOmitOptions - > - >; - - /** - * Delete a User. - * @param {UserDeleteArgs} args - Arguments to delete one User. - * @example - * // Delete one User - * const User = await prisma.user.delete({ - * where: { - * // ... filter to delete one User - * } - * }) - * - */ - delete( - args: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'delete', - GlobalOmitOptions - >, - never, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Update one User. - * @param {UserUpdateArgs} args - Arguments to update one User. - * @example - * // Update one User - * const user = await prisma.user.update({ - * where: { - * // ... provide filter here - * }, - * data: { - * // ... provide data here - * } - * }) - * - */ - update( - args: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'update', - GlobalOmitOptions - >, - never, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Delete zero or more Users. - * @param {UserDeleteManyArgs} args - Arguments to filter Users to delete. - * @example - * // Delete a few Users - * const { count } = await prisma.user.deleteMany({ - * where: { - * // ... provide filter here - * } - * }) - * - */ - deleteMany( - args?: Prisma.SelectSubset>, - ): Prisma.PrismaPromise; - - /** - * Update zero or more Users. - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * @param {UserUpdateManyArgs} args - Arguments to update one or more rows. - * @example - * // Update many Users - * const user = await prisma.user.updateMany({ - * where: { - * // ... provide filter here - * }, - * data: { - * // ... provide data here - * } - * }) - * - */ - updateMany( - args: Prisma.SelectSubset>, - ): Prisma.PrismaPromise; - - /** - * Update zero or more Users and returns the data updated in the database. - * @param {UserUpdateManyAndReturnArgs} args - Arguments to update many Users. - * @example - * // Update many Users - * const user = await prisma.user.updateManyAndReturn({ - * where: { - * // ... provide filter here - * }, - * data: [ - * // ... provide data here - * ] - * }) - * - * // Update zero or more Users and only return the `id` - * const userWithIdOnly = await prisma.user.updateManyAndReturn({ - * select: { id: true }, - * where: { - * // ... provide filter here - * }, - * data: [ - * // ... provide data here - * ] - * }) - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * - */ - updateManyAndReturn( - args: Prisma.SelectSubset>, - ): Prisma.PrismaPromise< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'updateManyAndReturn', - GlobalOmitOptions - > - >; - - /** - * Create or update one User. - * @param {UserUpsertArgs} args - Arguments to update or create a User. - * @example - * // Update or create a User - * const user = await prisma.user.upsert({ - * create: { - * // ... data to create a User - * }, - * update: { - * // ... in case it already exists, update - * }, - * where: { - * // ... the filter for the User we want to update - * } - * }) - */ - upsert( - args: Prisma.SelectSubset>, - ): Prisma.Prisma__UserClient< - runtime.Types.Result.GetResult< - Prisma.$UserPayload, - T, - 'upsert', - GlobalOmitOptions - >, - never, - ExtArgs, - GlobalOmitOptions - >; - - /** - * Count the number of Users. - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * @param {UserCountArgs} args - Arguments to filter Users to count. - * @example - * // Count the number of Users - * const count = await prisma.user.count({ - * where: { - * // ... the filter for the Users we want to count - * } - * }) - **/ - count( - args?: Prisma.Subset, - ): Prisma.PrismaPromise< - T extends runtime.Types.Utils.Record<'select', any> - ? T['select'] extends true - ? number - : Prisma.GetScalarType - : number - >; - - /** - * Allows you to perform aggregations operations on a User. - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * @param {UserAggregateArgs} args - Select which aggregations you would like to apply and on what fields. - * @example - * // Ordered by age ascending - * // Where email contains prisma.io - * // Limited to the 10 users - * const aggregations = await prisma.user.aggregate({ - * _avg: { - * age: true, - * }, - * where: { - * email: { - * contains: "prisma.io", - * }, - * }, - * orderBy: { - * age: "asc", - * }, - * take: 10, - * }) - **/ - aggregate( - args: Prisma.Subset, - ): Prisma.PrismaPromise>; - - /** - * Group by User. - * Note, that providing `undefined` is treated as the value not being there. - * Read more here: https://pris.ly/d/null-undefined - * @param {UserGroupByArgs} args - Group by arguments. - * @example - * // Group by city, order by createdAt, get count - * const result = await prisma.user.groupBy({ - * by: ['city', 'createdAt'], - * orderBy: { - * createdAt: true - * }, - * _count: { - * _all: true - * }, - * }) - * - **/ - groupBy< - T extends UserGroupByArgs, - HasSelectOrTake extends Prisma.Or< - Prisma.Extends<'skip', Prisma.Keys>, - Prisma.Extends<'take', Prisma.Keys> - >, - OrderByArg extends Prisma.True extends HasSelectOrTake - ? { orderBy: UserGroupByArgs['orderBy'] } - : { orderBy?: UserGroupByArgs['orderBy'] }, - OrderFields extends Prisma.ExcludeUnderscoreKeys< - Prisma.Keys> - >, - ByFields extends Prisma.MaybeTupleToUnion, - ByValid extends Prisma.Has, - HavingFields extends Prisma.GetHavingFields, - HavingValid extends Prisma.Has, - ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, - InputErrors extends ByEmpty extends Prisma.True - ? `Error: "by" must not be empty.` - : HavingValid extends Prisma.False - ? { - [P in HavingFields]: P extends ByFields - ? never - : P extends string - ? `Error: Field "${P}" used in "having" needs to be provided in "by".` - : [ - Error, - 'Field ', - P, - ` in "having" needs to be provided in "by"`, - ]; - }[HavingFields] - : 'take' extends Prisma.Keys - ? 'orderBy' extends Prisma.Keys - ? ByValid extends Prisma.True - ? {} - : { - [P in OrderFields]: P extends ByFields - ? never - : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`; - }[OrderFields] - : 'Error: If you provide "take", you also need to provide "orderBy"' - : 'skip' extends Prisma.Keys - ? 'orderBy' extends Prisma.Keys - ? ByValid extends Prisma.True - ? {} - : { - [P in OrderFields]: P extends ByFields - ? never - : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`; - }[OrderFields] - : 'Error: If you provide "skip", you also need to provide "orderBy"' - : ByValid extends Prisma.True - ? {} - : { - [P in OrderFields]: P extends ByFields - ? never - : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`; - }[OrderFields], - >( - args: Prisma.SubsetIntersection & - InputErrors, - ): {} extends InputErrors - ? GetUserGroupByPayload - : Prisma.PrismaPromise; - /** - * Fields of the User model - */ - readonly fields: UserFieldRefs; -} - -/** - * The delegate class that acts as a "Promise-like" for User. - * Why is this prefixed with `Prisma__`? - * Because we want to prevent naming conflicts as mentioned in - * https://github.com/prisma/prisma-client-js/issues/707 - */ -export interface Prisma__UserClient< - T, - Null = never, - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, - GlobalOmitOptions = {}, -> extends Prisma.PrismaPromise { - readonly [Symbol.toStringTag]: 'PrismaPromise'; - /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then( - onfulfilled?: - | ((value: T) => TResult1 | PromiseLike) - | undefined - | null, - onrejected?: - | ((reason: any) => TResult2 | PromiseLike) - | undefined - | null, - ): runtime.Types.Utils.JsPromise; - /** - * Attaches a callback for only the rejection of the Promise. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of the callback. - */ - catch( - onrejected?: - | ((reason: any) => TResult | PromiseLike) - | undefined - | null, - ): runtime.Types.Utils.JsPromise; - /** - * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The - * resolved value cannot be modified from the callback. - * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). - * @returns A Promise for the completion of the callback. - */ - finally( - onfinally?: (() => void) | undefined | null, - ): runtime.Types.Utils.JsPromise; -} - -/** - * Fields of the User model - */ -export interface UserFieldRefs { - readonly id: Prisma.FieldRef<'User', 'Int'>; - readonly name: Prisma.FieldRef<'User', 'String'>; - readonly email: Prisma.FieldRef<'User', 'String'>; - readonly passwordHash: Prisma.FieldRef<'User', 'String'>; - readonly isActivated: Prisma.FieldRef<'User', 'Boolean'>; - readonly activationToken: Prisma.FieldRef<'User', 'String'>; - readonly resetPasswordToken: Prisma.FieldRef<'User', 'String'>; - readonly resetTokenExpires: Prisma.FieldRef<'User', 'DateTime'>; - readonly pendingEmail: Prisma.FieldRef<'User', 'String'>; - readonly emailChangeToken: Prisma.FieldRef<'User', 'String'>; - readonly createdAt: Prisma.FieldRef<'User', 'DateTime'>; - readonly updatedAt: Prisma.FieldRef<'User', 'DateTime'>; -} - -// Custom InputTypes -/** - * User findUnique - */ -export type UserFindUniqueArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * Filter, which User to fetch. - */ - where: Prisma.UserWhereUniqueInput; -}; - -/** - * User findUniqueOrThrow - */ -export type UserFindUniqueOrThrowArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * Filter, which User to fetch. - */ - where: Prisma.UserWhereUniqueInput; -}; - -/** - * User findFirst - */ -export type UserFindFirstArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * Filter, which User to fetch. - */ - where?: Prisma.UserWhereInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} - * - * Determine the order of Users to fetch. - */ - orderBy?: - | Prisma.UserOrderByWithRelationInput - | Prisma.UserOrderByWithRelationInput[]; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} - * - * Sets the position for searching for Users. - */ - cursor?: Prisma.UserWhereUniqueInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Take `±n` Users from the position of the cursor. - */ - take?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Skip the first `n` Users. - */ - skip?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} - * - * Filter by unique combinations of Users. - */ - distinct?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[]; -}; - -/** - * User findFirstOrThrow - */ -export type UserFindFirstOrThrowArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * Filter, which User to fetch. - */ - where?: Prisma.UserWhereInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} - * - * Determine the order of Users to fetch. - */ - orderBy?: - | Prisma.UserOrderByWithRelationInput - | Prisma.UserOrderByWithRelationInput[]; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} - * - * Sets the position for searching for Users. - */ - cursor?: Prisma.UserWhereUniqueInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Take `±n` Users from the position of the cursor. - */ - take?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Skip the first `n` Users. - */ - skip?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} - * - * Filter by unique combinations of Users. - */ - distinct?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[]; -}; - -/** - * User findMany - */ -export type UserFindManyArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * Filter, which Users to fetch. - */ - where?: Prisma.UserWhereInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} - * - * Determine the order of Users to fetch. - */ - orderBy?: - | Prisma.UserOrderByWithRelationInput - | Prisma.UserOrderByWithRelationInput[]; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} - * - * Sets the position for listing Users. - */ - cursor?: Prisma.UserWhereUniqueInput; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Take `±n` Users from the position of the cursor. - */ - take?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} - * - * Skip the first `n` Users. - */ - skip?: number; - /** - * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} - * - * Filter by unique combinations of Users. - */ - distinct?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[]; -}; - -/** - * User create - */ -export type UserCreateArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * The data needed to create a User. - */ - data: Prisma.XOR; -}; - -/** - * User createMany - */ -export type UserCreateManyArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * The data used to create many Users. - */ - data: Prisma.UserCreateManyInput | Prisma.UserCreateManyInput[]; - skipDuplicates?: boolean; -}; - -/** - * User createManyAndReturn - */ -export type UserCreateManyAndReturnArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelectCreateManyAndReturn | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * The data used to create many Users. - */ - data: Prisma.UserCreateManyInput | Prisma.UserCreateManyInput[]; - skipDuplicates?: boolean; -}; - -/** - * User update - */ -export type UserUpdateArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * The data needed to update a User. - */ - data: Prisma.XOR; - /** - * Choose, which User to update. - */ - where: Prisma.UserWhereUniqueInput; -}; - -/** - * User updateMany - */ -export type UserUpdateManyArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * The data used to update Users. - */ - data: Prisma.XOR< - Prisma.UserUpdateManyMutationInput, - Prisma.UserUncheckedUpdateManyInput - >; - /** - * Filter which Users to update - */ - where?: Prisma.UserWhereInput; - /** - * Limit how many Users to update. - */ - limit?: number; -}; - -/** - * User updateManyAndReturn - */ -export type UserUpdateManyAndReturnArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelectUpdateManyAndReturn | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * The data used to update Users. - */ - data: Prisma.XOR< - Prisma.UserUpdateManyMutationInput, - Prisma.UserUncheckedUpdateManyInput - >; - /** - * Filter which Users to update - */ - where?: Prisma.UserWhereInput; - /** - * Limit how many Users to update. - */ - limit?: number; -}; - -/** - * User upsert - */ -export type UserUpsertArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * The filter to search for the User to update in case it exists. - */ - where: Prisma.UserWhereUniqueInput; - /** - * In case the User found by the `where` argument doesn't exist, create a new User with this data. - */ - create: Prisma.XOR; - /** - * In case the User was found with the provided `where` argument, update it with this data. - */ - update: Prisma.XOR; -}; - -/** - * User delete - */ -export type UserDeleteArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; - /** - * Filter which User to delete. - */ - where: Prisma.UserWhereUniqueInput; -}; - -/** - * User deleteMany - */ -export type UserDeleteManyArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Filter which Users to delete - */ - where?: Prisma.UserWhereInput; - /** - * Limit how many Users to delete. - */ - limit?: number; -}; - -/** - * User without action - */ -export type UserDefaultArgs< - ExtArgs extends - runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, -> = { - /** - * Select specific fields to fetch from the User - */ - select?: Prisma.UserSelect | null; - /** - * Omit specific fields from the User - */ - omit?: Prisma.UserOmit | null; -}; From 55b0b121fba6d16f5964e474630a94d49d89d7a8 Mon Sep 17 00:00:00 2001 From: Culpam Date: Sat, 16 May 2026 19:13:58 +0300 Subject: [PATCH 4/7] Restore package lock and remove old eslint config --- .eslintrc.js | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index f44c7a1d..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - extends: '@mate-academy/eslint-config', - env: { - jest: true - }, - rules: { - 'no-proto': 0 - }, - plugins: ['jest'] -}; From 067d5aad83fa5a87c178504c0942a85d06c6eb79 Mon Sep 17 00:00:00 2001 From: Culpam Date: Sat, 16 May 2026 19:14:56 +0300 Subject: [PATCH 5/7] Restore package lock --- package-lock.json | 3184 +++------------------------------------------ 1 file changed, 167 insertions(+), 3017 deletions(-) diff --git a/package-lock.json b/package-lock.json index 504ae5cd..288d83dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,37 +9,14 @@ "version": "1.0.0", "hasInstallScript": true, "license": "GPL-3.0", - "dependencies": { - "@prisma/adapter-pg": "^7.8.0", - "@prisma/client": "^7.8.0", - "bcrypt": "^6.0.0", - "cors": "^2.8.6", - "dotenv": "^17.4.2", - "express": "^5.2.1", - "jsonwebtoken": "^9.0.3", - "nodemailer": "^8.0.7", - "pg": "^8.20.0" - }, "devDependencies": { "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^2.1.3", - "@types/bcrypt": "^6.0.0", - "@types/cors": "^2.8.19", - "@types/express": "^5.0.6", - "@types/jsonwebtoken": "^9.0.10", - "@types/node": "^25.6.2", - "@types/nodemailer": "^8.0.0", - "@types/pg": "^8.20.0", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", + "@mate-academy/scripts": "^1.8.6", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", "jest": "^29.7.0", - "prettier": "3.5.3", - "prisma": "^7.8.0", - "tsx": "^4.21.0", - "typescript": "^6.0.3" + "prettier": "^3.3.2" } }, "node_modules/@ampproject/remapping": { @@ -558,478 +535,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@electric-sql/pglite": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.4.1.tgz", - "integrity": "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/@electric-sql/pglite-socket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.1.1.tgz", - "integrity": "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "pglite-server": "dist/scripts/server.js" - }, - "peerDependencies": { - "@electric-sql/pglite": "0.4.1" - } - }, - "node_modules/@electric-sql/pglite-tools": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.3.1.tgz", - "integrity": "sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==", - "devOptional": true, - "license": "Apache-2.0", - "peerDependencies": { - "@electric-sql/pglite": "0.4.1" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1125,19 +630,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@hono/node-server": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", - "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1957,13 +1449,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@mate-academy/eslint-config": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@mate-academy/eslint-config/-/eslint-config-0.0.29.tgz", @@ -1982,11 +1467,10 @@ } }, "node_modules/@mate-academy/scripts": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-2.1.3.tgz", - "integrity": "sha512-a07wHTj/1QUK2Aac5zHad+sGw4rIvcNl5lJmJpAD7OxeSbnCdyI6RXUHwXhjF5MaVo9YHrJ0xVahyERS2IIyBQ==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.8.6.tgz", + "integrity": "sha512-b4om/whj4G9emyi84ORE3FRZzCRwRIesr8tJHXa8EvJdOaAPDpzcJ8A0sFfMsWH9NUOVmOwkBtOXDu5eZZ00Ig==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/rest": "^17.11.2", "@types/get-port": "^4.2.0", @@ -2003,16 +1487,6 @@ "mate-scripts": "bin/mateScripts.js" } }, - "node_modules/@mate-academy/scripts/node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -2403,407 +1877,26 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@prisma/adapter-pg": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.8.0.tgz", - "integrity": "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg==", - "license": "Apache-2.0", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, "dependencies": { - "@prisma/driver-adapter-utils": "7.8.0", - "@types/pg": "^8.16.0", - "pg": "^8.16.3", - "postgres-array": "3.0.4" + "type-detect": "4.0.8" } }, - "node_modules/@prisma/client": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz", - "integrity": "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==", - "license": "Apache-2.0", - "dependencies": { - "@prisma/client-runtime-utils": "7.8.0" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24.0" - }, - "peerDependencies": { - "prisma": "*", - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "prisma": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@prisma/client-runtime-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.8.0.tgz", - "integrity": "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==", - "license": "Apache-2.0" - }, - "node_modules/@prisma/config": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.8.0.tgz", - "integrity": "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "c12": "3.3.4", - "deepmerge-ts": "7.1.5", - "effect": "3.20.0", - "empathic": "2.0.0" - } - }, - "node_modules/@prisma/debug": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.8.0.tgz", - "integrity": "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==", - "license": "Apache-2.0" - }, - "node_modules/@prisma/dev": { - "version": "0.24.3", - "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.24.3.tgz", - "integrity": "sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "@electric-sql/pglite": "0.4.1", - "@electric-sql/pglite-socket": "0.1.1", - "@electric-sql/pglite-tools": "0.3.1", - "@hono/node-server": "1.19.11", - "@prisma/get-platform": "7.2.0", - "@prisma/query-plan-executor": "7.2.0", - "@prisma/streams-local": "0.1.2", - "foreground-child": "3.3.1", - "get-port-please": "3.2.0", - "hono": "^4.12.8", - "http-status-codes": "2.3.0", - "pathe": "2.0.3", - "proper-lockfile": "4.1.2", - "remeda": "2.33.4", - "std-env": "3.10.0", - "valibot": "1.2.0", - "zeptomatch": "2.1.0" - } - }, - "node_modules/@prisma/driver-adapter-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.8.0.tgz", - "integrity": "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==", - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "7.8.0" - } - }, - "node_modules/@prisma/engines": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.8.0.tgz", - "integrity": "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==", - "devOptional": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "7.8.0", - "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", - "@prisma/fetch-engine": "7.8.0", - "@prisma/get-platform": "7.8.0" - } - }, - "node_modules/@prisma/engines-version": { - "version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a.tgz", - "integrity": "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", - "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "7.8.0" - } - }, - "node_modules/@prisma/fetch-engine": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.8.0.tgz", - "integrity": "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "7.8.0", - "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", - "@prisma/get-platform": "7.8.0" - } - }, - "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", - "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "7.8.0" - } - }, - "node_modules/@prisma/get-platform": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.2.0.tgz", - "integrity": "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "7.2.0" - } - }, - "node_modules/@prisma/get-platform/node_modules/@prisma/debug": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.2.0.tgz", - "integrity": "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/@prisma/query-plan-executor": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/query-plan-executor/-/query-plan-executor-7.2.0.tgz", - "integrity": "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/@prisma/streams-local": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@prisma/streams-local/-/streams-local-0.1.2.tgz", - "integrity": "sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "ajv": "^8.12.0", - "better-result": "^2.7.0", - "env-paths": "^3.0.0", - "proper-lockfile": "^4.1.2" - }, - "engines": { - "bun": ">=1.3.6", - "node": ">=22.0.0" - } - }, - "node_modules/@prisma/streams-local/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@prisma/streams-local/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@prisma/studio-core": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.27.3.tgz", - "integrity": "sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@radix-ui/react-toggle": "1.1.10", - "chart.js": "4.5.1" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24.0", - "pnpm": "8" - }, - "peerDependencies": { - "@types/react": "^18.0.0 || ^19.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "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 - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" } @@ -2834,13 +1927,6 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2882,72 +1968,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/bcrypt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-6.0.0.tgz", - "integrity": "sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cors": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, "node_modules/@types/get-port": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/get-port/-/get-port-4.2.0.tgz", @@ -2967,13 +1987,6 @@ "@types/node": "*" } }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -3004,98 +2017,13 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*", - "@types/node": "*" - } - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { - "version": "25.8.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz", - "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", - "license": "MIT", - "dependencies": { - "undici-types": ">=7.24.0 <7.24.7" - } - }, - "node_modules/@types/nodemailer": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-8.0.0.tgz", - "integrity": "sha512-fyf8jWULsCo0d0BuoQ75i6IeoHs47qcqxWc7yUdUcV0pOZGjUTTOvwdG1PRXUDqN/8A64yQdQdnA2pZgcdi+cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/pg": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", - "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "node_modules/@types/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "devOptional": true, - "license": "MIT", - "peer": true, - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "version": "20.14.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", + "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", "dev": true, - "license": "MIT", "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" + "undici-types": "~5.26.4" } }, "node_modules/@types/stack-utils": { @@ -3119,78 +2047,14 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", + "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3200,40 +2064,11 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", + "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -3243,14 +2078,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", + "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3272,23 +2106,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3298,11 +2130,10 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3311,16 +2142,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", + "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@typescript-eslint/scope-manager": "7.17.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/typescript-estree": "7.17.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3334,13 +2164,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", + "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/types": "7.17.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3356,7 +2185,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3370,19 +2198,6 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -3516,7 +2331,6 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -3623,16 +2437,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-ssl-profiles": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", - "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -3816,57 +2620,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/bcrypt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", - "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^8.3.0", - "node-gyp-build": "^4.8.4" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/before-after-hook": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", - "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", - "dev": true, - "peer": true - }, - "node_modules/better-result": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/better-result/-/better-result-2.9.2.tgz", - "integrity": "sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "dev": true, + "peer": true }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -3931,56 +2690,12 @@ "node-int64": "^0.4.0" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/c12": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.4.tgz", - "integrity": "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "chokidar": "^5.0.0", - "confbox": "^0.2.4", - "defu": "^6.1.6", - "dotenv": "^17.3.1", - "exsolve": "^1.0.8", - "giget": "^3.2.0", - "jiti": "^2.6.1", - "ohash": "^2.0.11", - "pathe": "^2.0.3", - "perfect-debounce": "^2.1.0", - "pkg-types": "^2.3.0", - "rc9": "^3.0.1" - }, - "peerDependencies": { - "magicast": "*" - }, - "peerDependenciesMeta": { - "magicast": { - "optional": true - } - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -4000,35 +2715,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -4090,35 +2776,6 @@ "node": ">=10" } }, - "node_modules/chart.js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", - "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=8" - } - }, - "node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4200,76 +2857,12 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/confbox": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", - "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -4380,11 +2973,10 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "devOptional": true, - "license": "MIT", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4394,14 +2986,6 @@ "node": ">= 8" } }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "devOptional": true, - "license": "MIT", - "peer": true - }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -4454,12 +3038,12 @@ } }, "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, "dependencies": { - "ms": "^2.1.3" + "ms": "2.1.2" }, "engines": { "node": ">=6.0" @@ -4499,16 +3083,6 @@ "node": ">=0.10.0" } }, - "node_modules/deepmerge-ts": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", - "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", - "devOptional": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -4543,45 +3117,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defu": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", - "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "devOptional": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "devOptional": true, - "license": "MIT" - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -4614,7 +3155,6 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -4635,55 +3175,12 @@ } }, "node_modules/dotenv": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", - "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/effect": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/effect/-/effect-3.20.0.tgz", - "integrity": "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.0.0", - "fast-check": "^3.23.1" + "node": ">=10" } }, "node_modules/electron-to-chromium": { @@ -4710,25 +3207,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/empathic": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", - "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4738,19 +3216,6 @@ "once": "^1.4.0" } }, - "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4821,10 +3286,13 @@ } }, "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { "node": ">= 0.4" } @@ -4833,15 +3301,16 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -4889,48 +3358,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" - } - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -4940,12 +3367,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -5553,15 +3974,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5610,84 +4022,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/exsolve": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", - "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/fast-check": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", - "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", - "devOptional": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT", - "dependencies": { - "pure-rand": "^6.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "devOptional": true + "dev": true }, "node_modules/fast-diff": { "version": "1.3.0", @@ -5696,17 +4035,16 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "micromatch": "^4.0.4" }, "engines": { "node": ">=8.6.0" @@ -5717,7 +4055,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -5737,23 +4074,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -5796,27 +4116,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5862,54 +4161,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "devOptional": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -5949,6 +4200,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5980,16 +4232,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-property": "^1.0.2" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -6009,21 +4251,16 @@ } }, "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -6045,32 +4282,12 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-port-please": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", - "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-stream": { @@ -6102,16 +4319,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/giget": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/giget/-/giget-3.2.0.tgz", - "integrity": "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==", - "devOptional": true, - "license": "MIT", - "bin": { - "giget": "dist/cli.mjs" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6175,7 +4382,6 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -6192,12 +4398,12 @@ } }, "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6207,14 +4413,7 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "devOptional": true - }, - "node_modules/grammex": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.12.tgz", - "integrity": "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==", - "devOptional": true, - "license": "MIT" + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -6222,13 +4421,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/graphmatch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/graphmatch/-/graphmatch-1.1.1.tgz", - "integrity": "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==", - "devOptional": true, - "license": "MIT" - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -6272,10 +4464,10 @@ } }, "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6302,6 +4494,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -6309,49 +4502,12 @@ "node": ">= 0.4" } }, - "node_modules/hono": { - "version": "4.12.19", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.19.tgz", - "integrity": "sha512-xa3eYXYXx68XTT4hZ7dRzsXBhaq85ToSrlUJNoR0gwz/1Ap/CNwX47wfvV7pc/xWhjKVVkLT7zBJy8chhNguqQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=16.9.0" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/http-status-codes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", - "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", - "devOptional": true, - "license": "MIT" - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -6361,22 +4517,6 @@ "node": ">=10.17.0" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -6444,7 +4584,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/internal-slot": { "version": "1.0.7", @@ -6460,15 +4601,6 @@ "node": ">= 0.4" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -6684,19 +4816,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "devOptional": true, - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -6819,7 +4938,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "devOptional": true + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -8476,16 +6595,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jiti": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", - "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", - "devOptional": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8564,67 +6673,12 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", - "license": "MIT", - "dependencies": { - "jws": "^4.0.1", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -8692,61 +6746,12 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "devOptional": true, - "license": "Apache-2.0" - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8756,22 +6761,6 @@ "yallist": "^3.0.2" } }, - "node_modules/lru.min": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", - "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", - "devOptional": true, - "license": "MIT", - "engines": { - "bun": ">=1.0.0", - "deno": ">=1.30.0", - "node": ">=8.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wellwelwel" - } - }, "node_modules/macos-release": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", @@ -8820,36 +6809,6 @@ "tmpl": "1.0.5" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8861,17 +6820,15 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -8880,31 +6837,6 @@ "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -8936,44 +6868,10 @@ } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mysql2": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz", - "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "aws-ssl-profiles": "^1.1.1", - "denque": "^2.1.0", - "generate-function": "^2.3.1", - "iconv-lite": "^0.7.0", - "long": "^5.2.1", - "lru.min": "^1.0.0", - "named-placeholders": "^1.1.3", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/named-placeholders": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", - "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "lru.min": "^1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -8981,15 +6879,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -9027,15 +6916,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/node-addon-api": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.7.0.tgz", - "integrity": "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA==", - "license": "MIT", - "engines": { - "node": "^18 || ^20 || >= 21" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -9056,17 +6936,6 @@ } } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -9079,15 +6948,6 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, - "node_modules/nodemailer": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.7.tgz", - "integrity": "sha512-pkjE4mkBzQjdJT4/UmlKl3pX0rC9fZmjh7c6C9o7lv66Ac6w9WCnzPzhbPNxwZAzlF4mdq4CSWB5+FbK6FWCow==", - "license": "MIT-0", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -9109,20 +6969,11 @@ "node": ">=8" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -9206,29 +7057,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -9372,15 +7205,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9403,7 +7227,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -9434,123 +7258,10 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/perfect-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", - "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/pg": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", - "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", - "license": "MIT", - "dependencies": { - "pg-connection-string": "^2.12.0", - "pg-pool": "^3.13.0", - "pg-protocol": "^1.13.0", - "pg-types": "2.2.0", - "pgpass": "1.0.5" - }, - "engines": { - "node": ">= 16.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.3.0" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", - "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", - "license": "MIT", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz", - "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==", - "license": "MIT" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "license": "ISC", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz", - "integrity": "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==", - "license": "MIT", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz", - "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==", - "license": "MIT" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "license": "MIT", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pg-types/node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "license": "MIT", - "dependencies": { - "split2": "^4.1.0" - } - }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -9641,79 +7352,14 @@ "engines": { "node": ">=8" } - }, - "node_modules/pkg-types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", - "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.2.4", - "exsolve": "^1.0.8", - "pathe": "^2.0.3" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postgres": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", - "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", - "devOptional": true, - "license": "Unlicense", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/porsager" - } - }, - "node_modules/postgres-array": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz", - "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", - "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/prelude-ls": { @@ -9726,11 +7372,10 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9779,40 +7424,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/prisma": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.8.0.tgz", - "integrity": "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==", - "devOptional": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/config": "7.8.0", - "@prisma/dev": "0.24.3", - "@prisma/engines": "7.8.0", - "@prisma/studio-core": "0.27.3", - "mysql2": "3.15.3", - "postgres": "3.4.7" - }, - "bin": { - "prisma": "build/index.js" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24.0" - }, - "peerDependencies": { - "better-sqlite3": ">=9.0.0", - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "better-sqlite3": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -9826,31 +7437,6 @@ "node": ">= 6" } }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -9874,7 +7460,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "devOptional": true, + "dev": true, "funding": [ { "type": "individual", @@ -9886,21 +7472,6 @@ } ] }, - "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -9921,86 +7492,12 @@ } ] }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/rc9": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.1.tgz", - "integrity": "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "defu": "^6.1.6", - "destr": "^2.0.5" - } - }, - "node_modules/react": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", - "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", - "devOptional": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", - "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", - "devOptional": true, - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.6" - } - }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, - "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -10031,16 +7528,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/remeda": { - "version": "2.33.4", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.33.4.tgz", - "integrity": "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==", - "devOptional": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/remeda" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10050,16 +7537,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -10116,16 +7593,6 @@ "node": ">=10" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -10152,32 +7619,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/router/node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -10219,26 +7660,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", @@ -10256,20 +7677,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "devOptional": true, - "license": "MIT", - "peer": true - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -10279,57 +7686,6 @@ "semver": "bin/semver.js" } }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", - "devOptional": true - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -10362,17 +7718,11 @@ "node": ">= 0.4" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "devOptional": true, + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10384,75 +7734,21 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, "dependencies": { - "call-bound": "^1.0.2", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, "engines": { "node": ">= 0.4" @@ -10465,7 +7761,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "devOptional": true + "dev": true }, "node_modules/sinon": { "version": "9.2.4", @@ -10559,31 +7855,12 @@ "source-map": "^0.6.0" } }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "license": "ISC", - "engines": { - "node": ">= 10.x" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/sqlstring": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -10605,22 +7882,6 @@ "node": ">=8" } }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "devOptional": true, - "license": "MIT" - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -10835,15 +8096,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -10910,25 +8162,6 @@ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/tsx": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.0.tgz", - "integrity": "sha512-8ccZMPD69s1AbKXx0C5ddTNZfNjwV04iIKgjZmKfKxMynEtSYcK0Lh7iQFh53fI5Yu4pb9usgAiqyPmEONaALg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.28.0" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -10962,37 +8195,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", - "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", - "license": "MIT", - "dependencies": { - "content-type": "^2.0.0", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/type-is/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", @@ -11067,11 +8269,11 @@ } }, "node_modules/typescript": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", - "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", - "devOptional": true, - "license": "Apache-2.0", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11096,10 +8298,10 @@ } }, "node_modules/undici-types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", - "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", - "license": "MIT" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/universal-user-agent": { "version": "7.0.2", @@ -11117,15 +8319,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", @@ -11179,30 +8372,6 @@ "node": ">=10.12.0" } }, - "node_modules/valibot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", - "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "typescript": ">=5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -11232,7 +8401,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "devOptional": true, + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -11473,7 +8642,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -11488,15 +8658,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -11550,17 +8711,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zeptomatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.1.0.tgz", - "integrity": "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "grammex": "^3.1.11", - "graphmatch": "^1.1.0" - } } } } From 33c59b31646cafd65d59338ef17ad2f3f7ad2477 Mon Sep 17 00:00:00 2001 From: Culpam Date: Sat, 16 May 2026 19:24:44 +0300 Subject: [PATCH 6/7] implement backend part --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b0a7b276..9cef865c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ node_modules .DS_Store .env -src/generated/ +src/generated From 11f7952dd9276d10409e31a1e5b16db1dcbdcd92 Mon Sep 17 00:00:00 2001 From: Culpam Date: Sat, 16 May 2026 19:42:07 +0300 Subject: [PATCH 7/7] Add redirect responses --- src/index.ts | 11 +- src/middlewares/auth.middleware.ts | 8 +- src/middlewares/error.middleware.ts | 7 +- src/modules/auth/auth.controller.ts | 3 +- src/modules/pages/pages.controller.ts | 264 ++++++++++++++++++++++ src/modules/pages/pages.routes.ts | 64 ++++++ src/types/{exspress.d.ts => express.d.ts} | 2 +- src/utils/mailer.ts | 4 +- 8 files changed, 347 insertions(+), 16 deletions(-) create mode 100644 src/modules/pages/pages.controller.ts create mode 100644 src/modules/pages/pages.routes.ts rename src/types/{exspress.d.ts => express.d.ts} (95%) diff --git a/src/index.ts b/src/index.ts index 81e17be5..8038896e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,8 @@ import { errorMiddleware } from './middlewares/error.middleware.js'; import { AppError } from './errors/AppError.js'; import { authRoutes } from './modules/auth/auth.routes.js'; import { profileRoutes } from './modules/profile/profile.routes.js'; +import cookieParser from 'cookie-parser'; +import { pagesRoutes } from './modules/pages/pages.routes.js'; dotenv.config(); @@ -15,9 +17,14 @@ const PORT = process.env.PORT ?? 3000; app.use(cors()); app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +app.use(cookieParser()); + +app.use(pagesRoutes); + // -app.use('/auth', authRoutes); -app.use('/profile', profileRoutes); +app.use('/api/auth', authRoutes); +app.use('/api/profile', profileRoutes); // app.use((_req, _res, next) => { diff --git a/src/middlewares/auth.middleware.ts b/src/middlewares/auth.middleware.ts index 4020512f..1113bf2c 100644 --- a/src/middlewares/auth.middleware.ts +++ b/src/middlewares/auth.middleware.ts @@ -4,11 +4,13 @@ import { validateAccessToken } from '../utils/jwt.js'; export const authMiddleware: RequestHandler = (req, _res, next) => { const authHeader = req.headers.authorization; + const [type, headerToken] = authHeader?.split(' ') || []; - const [type, token] = authHeader?.split(' ') || []; + const token = + type === 'Bearer' && headerToken ? headerToken : req.cookies?.accessToken; - if (type !== 'Bearer' || !token) { - throw new AppError(401, 'Invalid authorization header'); + if (!token) { + throw new AppError(401, 'Unauthorized'); } const userData = validateAccessToken(token); diff --git a/src/middlewares/error.middleware.ts b/src/middlewares/error.middleware.ts index 2628b61a..fec22ae7 100644 --- a/src/middlewares/error.middleware.ts +++ b/src/middlewares/error.middleware.ts @@ -1,12 +1,7 @@ import type { ErrorRequestHandler } from 'express'; import { AppError } from '../errors/AppError.js'; -export const errorMiddleware: ErrorRequestHandler = ( - error, - _req, - res, - _next, -) => { +export const errorMiddleware: ErrorRequestHandler = (error, _req, res) => { if (error instanceof AppError) { return res.status(error.statusCode).json({ error: { diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts index 874b71ec..08daddb9 100644 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -40,8 +40,7 @@ const forgotPassword: RequestHandler = async (req, res) => { await authService.forgotPassword(req.body); res.json({ - message: - 'If an account with that email exists, a password reset link has been sent', + message: 'If an account exists, a password reset link has been sent', }); }; diff --git a/src/modules/pages/pages.controller.ts b/src/modules/pages/pages.controller.ts new file mode 100644 index 00000000..a4646f0a --- /dev/null +++ b/src/modules/pages/pages.controller.ts @@ -0,0 +1,264 @@ +import type { RequestHandler } from 'express'; +import { authService } from '../auth/auth.service.js'; +import { profileService } from '../profile/profile.service.js'; +import { AppError } from '../../errors/AppError.js'; +import { generateAccessToken } from '../../utils/jwt.js'; + +type TokenParams = { + token: string; +}; + +const cookieOptions = { + httpOnly: true, + sameSite: 'lax' as const, +}; + +const layout = (title: string, body: string) => ` + + + + + ${title} + + +

${title}

+ ${body} + + +`; + +const showRegister: RequestHandler = (_req, res) => { + res.send( + layout( + 'Register', + ` +
+ + + + +
+

Password must be at least 8 characters and contain uppercase, lowercase, digit and special character.

+
Login + `, + ), + ); +}; + +const register: RequestHandler = async (req, res) => { + await authService.register(req.body); + + res.redirect('/email-sent'); +}; + +const showLogin: RequestHandler = (_req, res) => { + res.send( + layout( + 'Login', + ` +
+ + + +
+ Forgot password? + `, + ), + ); +}; + +const login: RequestHandler = async (req, res) => { + const { accessToken } = await authService.login(req.body); + + res.cookie('accessToken', accessToken, cookieOptions); + res.redirect('/profile'); +}; + +const activate: RequestHandler = async (req, res) => { + const user = await authService.activate(req.params.token); + const accessToken = generateAccessToken(user); + + res.cookie('accessToken', accessToken, cookieOptions); + res.redirect('/profile'); +}; + +const logout: RequestHandler = (_req, res) => { + res.clearCookie('accessToken'); + res.redirect('/login'); +}; + +const showForgotPassword: RequestHandler = (_req, res) => { + res.send( + layout( + 'Forgot password', + ` +
+ + +
+ `, + ), + ); +}; + +const forgotPassword: RequestHandler = async (req, res) => { + await authService.forgotPassword(req.body); + + res.redirect('/email-sent'); +}; + +const showEmailSent: RequestHandler = (_req, res) => { + res.send( + layout( + 'Email sent', + ` +

If this email exists, instructions were sent.

+ Back to login + `, + ), + ); +}; + +const showResetPassword: RequestHandler = (req, res) => { + const { token } = req.params; + + res.send( + layout( + 'Reset password', + ` +
+ + + +
+ `, + ), + ); +}; + +const resetPassword: RequestHandler = async (req, res) => { + await authService.resetPassword(req.params.token, req.body); + + res.redirect('/reset-password-success'); +}; + +const showResetPasswordSuccess: RequestHandler = (_req, res) => { + res.send( + layout( + 'Password reset successful', + ` +

Your password was reset successfully.

+ Go to login + `, + ), + ); +}; + +const showProfile: RequestHandler = async (req, res) => { + const currentUser = req.user; + + if (!currentUser) { + throw new AppError(401, 'Unauthorized'); + } + + const user = await profileService.getProfile(currentUser.id); + + res.send( + layout( + 'Profile', + ` +

Name: ${user.name}

+

Email: ${user.email}

+ +
+ +
+ +

Change name

+
+ + +
+ +

Change password

+
+ + + + +
+ +

Change email

+
+ + + +
+ `, + ), + ); +}; + +const updateName: RequestHandler = async (req, res) => { + const currentUser = req.user; + + if (!currentUser) { + throw new AppError(401, 'Unauthorized'); + } + + await profileService.updateName(currentUser.id, req.body.name); + + res.redirect('/profile'); +}; + +const changePassword: RequestHandler = async (req, res) => { + const currentUser = req.user; + + if (!currentUser) { + throw new AppError(401, 'Unauthorized'); + } + + await profileService.changePassword(currentUser.id, req.body); + + res.redirect('/profile'); +}; + +const changeEmail: RequestHandler = async (req, res) => { + const currentUser = req.user; + + if (!currentUser) { + throw new AppError(401, 'Unauthorized'); + } + + await profileService.changeEmail(currentUser.id, req.body); + + res.redirect('/email-sent'); +}; + +const confirmEmailChange: RequestHandler = async (req, res) => { + const user = await profileService.confirmEmailChange(req.params.token); + const accessToken = generateAccessToken(user); + + res.cookie('accessToken', accessToken, cookieOptions); + res.redirect('/profile'); +}; + +export const pagesController = { + showRegister, + register, + showLogin, + login, + activate, + logout, + showForgotPassword, + forgotPassword, + showEmailSent, + showResetPassword, + resetPassword, + showResetPasswordSuccess, + showProfile, + updateName, + changePassword, + changeEmail, + confirmEmailChange, +}; diff --git a/src/modules/pages/pages.routes.ts b/src/modules/pages/pages.routes.ts new file mode 100644 index 00000000..adc759e2 --- /dev/null +++ b/src/modules/pages/pages.routes.ts @@ -0,0 +1,64 @@ +import { Router } from 'express'; +import { pagesController } from './pages.controller.js'; +import { asyncHandler } from '../../middlewares/asyncHandler.js'; +import { authMiddleware } from '../../middlewares/auth.middleware.js'; + +export const pagesRoutes = Router(); + +pagesRoutes.get('/register', pagesController.showRegister); +pagesRoutes.post('/register', asyncHandler(pagesController.register)); + +pagesRoutes.get('/login', pagesController.showLogin); +pagesRoutes.post('/login', asyncHandler(pagesController.login)); + +pagesRoutes.get('/activate/:token', asyncHandler(pagesController.activate)); + +pagesRoutes.post('/logout', authMiddleware, pagesController.logout); + +pagesRoutes.get('/forgot-password', pagesController.showForgotPassword); +pagesRoutes.post( + '/forgot-password', + asyncHandler(pagesController.forgotPassword), +); + +pagesRoutes.get('/email-sent', pagesController.showEmailSent); + +pagesRoutes.get('/reset-password/:token', pagesController.showResetPassword); +pagesRoutes.post( + '/reset-password/:token', + asyncHandler(pagesController.resetPassword), +); + +pagesRoutes.get( + '/reset-password-success', + pagesController.showResetPasswordSuccess, +); + +pagesRoutes.get( + '/profile', + authMiddleware, + asyncHandler(pagesController.showProfile), +); + +pagesRoutes.post( + '/profile/name', + authMiddleware, + asyncHandler(pagesController.updateName), +); + +pagesRoutes.post( + '/profile/password', + authMiddleware, + asyncHandler(pagesController.changePassword), +); + +pagesRoutes.post( + '/profile/email', + authMiddleware, + asyncHandler(pagesController.changeEmail), +); + +pagesRoutes.get( + '/profile/email/confirm/:token', + asyncHandler(pagesController.confirmEmailChange), +); diff --git a/src/types/exspress.d.ts b/src/types/express.d.ts similarity index 95% rename from src/types/exspress.d.ts rename to src/types/express.d.ts index f26302db..ae8387ce 100644 --- a/src/types/exspress.d.ts +++ b/src/types/express.d.ts @@ -1,4 +1,4 @@ -import type { NormalizedUser } from '../modules/users/users.service.js'; +import type { NormalizedUser } from '../modules/users/users.service.ts'; declare global { namespace Express { diff --git a/src/utils/mailer.ts b/src/utils/mailer.ts index 4fee5c99..7214edbb 100644 --- a/src/utils/mailer.ts +++ b/src/utils/mailer.ts @@ -43,7 +43,7 @@ const send = (email: string, subject: string, html: string) => { }; const sendActivationLink = (email: string, activationToken: string) => { - const link = `${API_URL}/auth/activate/${activationToken}`; + const link = `${API_URL}/activate/${activationToken}`; const html = `

Account activation

@@ -55,7 +55,7 @@ const sendActivationLink = (email: string, activationToken: string) => { }; const sendPasswordResetLink = (email: string, resetToken: string) => { - const link = `${API_URL}/auth/reset-password/${resetToken}`; + const link = `${API_URL}/reset-password/${resetToken}`; const html = `

Password reset