diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73e90983..c0a77c89 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 5a59a24e..66024314 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -19,7 +19,7 @@ jobs: IMAGE_NAME: us-east4-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/api-v3/${{ secrets.GCP_PRODUCTION_SERVICE_NAME }}:${{ github.sha }} steps: - name: Checkout - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v6.0.1 - id: 'auth' name: Authenticate to Google Cloud diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 62c9da18..513e6aba 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -19,7 +19,7 @@ jobs: IMAGE_NAME: us-east4-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/api-v3/${{ secrets.GCP_STAGING_SERVICE_NAME }}:${{ github.sha }} steps: - name: Checkout - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v6.0.1 - id: 'auth' name: Authenticate to Google Cloud diff --git a/.gitignore b/.gitignore index f724f8b9..9e42b999 100644 --- a/.gitignore +++ b/.gitignore @@ -53,4 +53,8 @@ cloud-sql-proxy .yarn/* # Cert -certs/* \ No newline at end of file +certs/* + +# SDK Artifacts +sdk/node_modules/ +sdk/dist/ \ No newline at end of file diff --git a/db/migrations/20251204204114_add_registration_questions.ts b/db/migrations/20251204204114_add_registration_questions.ts new file mode 100644 index 00000000..6b2331a2 --- /dev/null +++ b/db/migrations/20251204204114_add_registration_questions.ts @@ -0,0 +1,24 @@ +import type { Knex } from "knex"; + + +export async function up(knex: Knex): Promise { + await knex.schema.alterTable("registrations", (table) => { + table.string("excitement").nullable(); + table.string("zip_code").nullable(); + table.integer("travel_cost").nullable(); + table.string("travel_method").nullable(); + table.string("travel_additional").nullable(); + }); +} + + +export async function down(knex: Knex): Promise { + await knex.schema.alterTable("registrations", (table) => { + table.dropColumn("excitement"); + table.dropColumn("zip_code"); + table.dropColumn("travel_cost"); + table.dropColumn("travel_method"); + table.dropColumn("travel_additional"); + }); +} + diff --git a/package.json b/package.json index d065a59c..22d16085 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "fast-xml-parser": "^5.2.3", "firebase": "^12.0.0", "firebase-admin": "^13.0.2", - "googleapis": "^164.0.0", + "googleapis": "^167.0.0", "handlebars": "^4.7.8", "jsonwebtoken": "^9.0.2", "jwt-decode": "^4.0.0", @@ -79,7 +79,7 @@ "@types/luxon": "^3.4.2", "@types/mock-knex": "^0.4.8", "@types/multer": "^2.0.0", - "@types/node": "^22.10.5", + "@types/node": "^24.0.0", "@types/passport-jwt": "^4.0.1", "@types/sharp": "^0.32.0", "@types/supertest": "^6.0.2", @@ -94,7 +94,7 @@ "rimraf": "^6.0.1", "source-map-support": "^0.5.21", "supertest": "^7.0.0", - "ts-jest": "29.4.5", + "ts-jest": "29.4.6", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", diff --git a/sdk/.npmignore b/sdk/.npmignore new file mode 100644 index 00000000..155a3060 --- /dev/null +++ b/sdk/.npmignore @@ -0,0 +1,15 @@ +# Source files (only publish dist/) +**/*.ts +**/*.tsx +!**/*.d.ts + +# Config files +tsconfig.json +tsup.config.ts + +# Development files +node_modules/ +*.log +.DS_Store + +# Only publish the dist folder and package files diff --git a/sdk/README.md b/sdk/README.md new file mode 100644 index 00000000..5cdcdd21 --- /dev/null +++ b/sdk/README.md @@ -0,0 +1,200 @@ +# @hackpsu/react-sdk + +Shared React hooks, providers, and API clients for HackPSU projects. This package provides a consistent way to interact with the HackPSU API, manage authentication with Firebase, and share common UI patterns across all HackPSU web applications. + +## Installation + +```bash +npm install @hackpsu/react-sdk +``` + +## Required Environment Variables + +All projects using this SDK need these environment variables in your `.env.local` or `.env` file: + +```env +# Firebase Configuration +NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key +NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain +NEXT_PUBLIC_FIREBASE_DATABASE_URL=your_database_url +NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id +NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket +NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id +NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id + +# API Configuration +NEXT_PUBLIC_BASE_URL_V3=https://api.hackpsu.org/v3 +NEXT_PUBLIC_AUTH_SERVICE_URL=https://auth.hackpsu.org +``` + +## Usage + +### 1. Setup Providers + +Wrap your application with the `LayoutProvider` to get Firebase authentication, React Query, and auth guards: + +```tsx +// app/layout.tsx or pages/_app.tsx +import { LayoutProvider } from '@hackpsu/react-sdk/context'; + +export default function RootLayout({ children }) { + return ( + + + {children} + + + ); +} +``` + +### 2. Use Authentication + +Access Firebase auth state using the `useFirebase` hook: + +```tsx +import { useFirebase } from '@hackpsu/react-sdk/context'; + +export default function ProfilePage() { + const { user, isLoading, logout } = useFirebase(); + + if (isLoading) return
Loading...
; + if (!user) return
Not authenticated
; + + return ( +
+

Welcome, {user.email}

+ +
+ ); +} +``` + +### 3. Use API Hooks + +The SDK provides React Query hooks for all API endpoints: + +```tsx +import { useAllRegistrations, useCreateRegistration } from '@hackpsu/react-sdk/api/registration'; + +export default function RegistrationsPage() { + const { data: registrations, isLoading } = useAllRegistrations(); + const createMutation = useCreateRegistration(); + + const handleCreate = async () => { + await createMutation.mutateAsync({ + // registration data + }); + }; + + if (isLoading) return
Loading...
; + + return ( +
+ {registrations?.map(reg => ( +
{reg.name}
+ ))} + +
+ ); +} +``` + +### 4. Custom Auth Guard + +You can also use the `AuthGuard` component directly with custom role requirements: + +```tsx +import { AuthGuard, Role } from '@hackpsu/react-sdk/context'; + +export default function AdminPage() { + return ( + +
Admin content - only visible to executives
+
+ ); +} +``` + +## Available Modules + +### Context + +- `FirebaseProvider` - Firebase authentication context +- `useFirebase` - Hook to access Firebase auth state +- `LayoutProvider` - Complete layout setup with Firebase, React Query, and auth +- `AuthGuard` - Component to protect routes with role-based access +- `Role` - Enum for role levels + +### Config + +- `auth` - Initialized Firebase auth instance +- `getEnvironment` - Function to get environment configuration + +### API Modules + +Each API module exports: +- Entity types (TypeScript interfaces) +- Provider functions (raw API calls) +- React Query hooks (useQuery/useMutation) + +Available modules: +- `api/analytics` +- `api/event` +- `api/extra-credit` +- `api/finance` +- `api/flag` +- `api/hackathon` +- `api/judging` +- `api/location` +- `api/organizer` +- `api/photos` +- `api/registration` +- `api/reservation` +- `api/scan` +- `api/sponsor` +- `api/team` +- `api/user` +- `api/wallet` + +## Examples + +### Import specific modules + +```tsx +// Import from specific subpaths +import { useFirebase } from '@hackpsu/react-sdk/context'; +import { auth } from '@hackpsu/react-sdk/config'; +import { useAllEvents } from '@hackpsu/react-sdk/api/event'; +``` + +### Import everything (not recommended for production) + +```tsx +// Import everything at once (larger bundle size) +import { useFirebase, useAllEvents, auth } from '@hackpsu/react-sdk'; +``` + +## Development + +To build the package: + +```bash +cd lib +npm install +npm run build +``` + +## Publishing + +This package is published to npm under the `@hackpsu` organization: + +```bash +cd lib +npm version patch # or minor, or major +npm publish +``` + +## License + +MIT diff --git a/sdk/api/analytics/entity.ts b/sdk/api/analytics/entity.ts new file mode 100644 index 00000000..530b8853 --- /dev/null +++ b/sdk/api/analytics/entity.ts @@ -0,0 +1,46 @@ +export interface CountsResponse { + count: number; +} + +export interface RegistrationCounts extends CountsResponse { + id: string; + name: string; +} + +export interface GenderCounts extends CountsResponse { + gender: string; +} + +export interface RaceCounts extends CountsResponse { + race: string; +} + +export interface AcademicYearCounts extends CountsResponse { + academicYear: string; +} + +export interface CodingExpCounts extends CountsResponse { + codingExperience: string; +} + +export interface AnalyticsSummaryResponse { + registrations: RegistrationCounts[]; + gender: GenderCounts[]; + race: RaceCounts[]; + academicYear: AcademicYearCounts[]; + codingExp: CodingExpCounts[]; +} + +export interface AnalyticsScansResponse { + id: string; + firstName: string; + lastName: string; + count: number; +} + +export interface AnalyticsEventsResponse { + type: string; + id: string; + name: string; + count: number; +} diff --git a/sdk/api/analytics/hook.ts b/sdk/api/analytics/hook.ts new file mode 100644 index 00000000..d95b4b02 --- /dev/null +++ b/sdk/api/analytics/hook.ts @@ -0,0 +1,38 @@ +import { useQuery } from "@tanstack/react-query"; +import { + getAnalyticsSummary, + getEventsAnalytics, + getOrganizerScans, +} from "./provider"; +import { + AnalyticsSummaryResponse, + AnalyticsEventsResponse, + AnalyticsScansResponse, +} from "./entity"; + +export const analyticsQueryKeys = { + summary: ["analytics", "summary"] as const, + events: ["analytics", "events"] as const, + scans: ["analytics", "scans"] as const, +}; + +export function useAnalyticsSummary() { + return useQuery({ + queryKey: analyticsQueryKeys.summary, + queryFn: getAnalyticsSummary, + }); +} + +export function useEventsAnalytics() { + return useQuery({ + queryKey: analyticsQueryKeys.events, + queryFn: getEventsAnalytics, + }); +} + +export function useOrganizerScans() { + return useQuery({ + queryKey: analyticsQueryKeys.scans, + queryFn: getOrganizerScans, + }); +} diff --git a/sdk/api/analytics/index.ts b/sdk/api/analytics/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/analytics/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/analytics/provider.ts b/sdk/api/analytics/provider.ts new file mode 100644 index 00000000..3b07eb97 --- /dev/null +++ b/sdk/api/analytics/provider.ts @@ -0,0 +1,24 @@ +import { apiFetch } from "../apiClient"; +import { + AnalyticsSummaryResponse, + AnalyticsEventsResponse, + AnalyticsScansResponse, +} from "./entity"; + +export async function getAnalyticsSummary(): Promise { + return apiFetch("/analytics/summary", { + method: "GET", + }); +} + +export async function getEventsAnalytics(): Promise { + return apiFetch("/analytics/events", { + method: "GET", + }); +} + +export async function getOrganizerScans(): Promise { + return apiFetch("/analytics/scans", { + method: "GET", + }); +} diff --git a/sdk/api/apiClient.ts b/sdk/api/apiClient.ts new file mode 100644 index 00000000..0531876a --- /dev/null +++ b/sdk/api/apiClient.ts @@ -0,0 +1,80 @@ +// apiClient.ts +import { auth, getEnvironment } from "../config"; +import { getIdToken, onIdTokenChanged } from "@firebase/auth"; + +const config = getEnvironment(); + +/** + * A wrapper around fetch() that: + * - Fetches an auth token from Firebase, if logged in + * - Adds `Authorization: Bearer ` to each request if available + * - Automatically sets content-type = application/json if we pass a body + * - Basic 401 handling + */ +export async function apiFetch( + url: string, + options: RequestInit & { noAuth?: boolean } = {} +): Promise { + const { noAuth, ...fetchOptions } = options; + + // Optionally attach headers + const headers = new Headers(fetchOptions.headers || {}); + if (!noAuth) { + // Attempt to get token from Firebase user + const user = auth.currentUser; + if (user) { + const token = await getIdToken(user); + if (token) { + headers.set("Authorization", `Bearer ${token}`); + } + } + } + + // If sending JSON body, set content type + if ( + fetchOptions.body && + typeof fetchOptions.body === "string" && + !headers.has("Content-Type") + ) { + headers.set("Content-Type", "application/json"); + } + + const finalUrl = `${config.baseURL}${url}`; + const response = await fetch(finalUrl, { + ...fetchOptions, + headers, + }); + + if (response.status === 401) { + throw new Error("Unauthorized"); + } + + if (!response.ok) { + const errorBody = await response.text(); + throw new Error(`Request failed (${response.status}): ${errorBody}`); + } + + // No content + if (response.status === 204) { + return {} as T; + } + + // Auto-detect response type by content-type + const contentType = response.headers.get("Content-Type") || ""; + if (!contentType.includes("application/json")) { + // Treat non-JSON as binary (Blob) + return (await response.blob()) as unknown as T; + } + + // Default to JSON + return (await response.json()) as T; +} + +// Listen for token changes in Firebase and do something if needed +onIdTokenChanged(auth, async (user) => { + // e.g., you might want to force a refetch or store a new token in state + if (user) { + const token = await getIdToken(user); + console.log("New Firebase ID token:", token); + } +}); diff --git a/sdk/api/apple/entity.ts b/sdk/api/apple/entity.ts new file mode 100644 index 00000000..f5ebfaaf --- /dev/null +++ b/sdk/api/apple/entity.ts @@ -0,0 +1,12 @@ +// Apple Auth API Types + +export interface AppleAuthRefreshRequest { + code: string; +} + +export interface AppleAuthRevokeRequest { + refresh_token: string; +} + +export type AppleAuthRefreshResponse = string; +export type AppleAuthRevokeResponse = boolean; diff --git a/sdk/api/apple/hook.ts b/sdk/api/apple/hook.ts new file mode 100644 index 00000000..782c52f1 --- /dev/null +++ b/sdk/api/apple/hook.ts @@ -0,0 +1,19 @@ +import { useMutation } from "@tanstack/react-query"; +import { refreshAppleToken, revokeAppleToken } from "./provider"; + +export const appleQueryKeys = { + refresh: ["apple", "refresh"] as const, + revoke: ["apple", "revoke"] as const, +}; + +export function useRefreshAppleToken() { + return useMutation({ + mutationFn: (code: string) => refreshAppleToken(code), + }); +} + +export function useRevokeAppleToken() { + return useMutation({ + mutationFn: (refreshToken: string) => revokeAppleToken(refreshToken), + }); +} diff --git a/sdk/api/apple/index.ts b/sdk/api/apple/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/apple/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/apple/provider.ts b/sdk/api/apple/provider.ts new file mode 100644 index 00000000..00e80ab6 --- /dev/null +++ b/sdk/api/apple/provider.ts @@ -0,0 +1,27 @@ +import { apiFetch } from "../apiClient"; +import { + AppleAuthRefreshResponse, + AppleAuthRevokeResponse, +} from "./entity"; + +export async function refreshAppleToken( + code: string +): Promise { + return apiFetch( + `/apple/auth/refresh?code=${encodeURIComponent(code)}`, + { + method: "POST", + } + ); +} + +export async function revokeAppleToken( + refreshToken: string +): Promise { + return apiFetch( + `/apple/auth/revoke?refresh_token=${encodeURIComponent(refreshToken)}`, + { + method: "POST", + } + ); +} diff --git a/sdk/api/drive/entity.ts b/sdk/api/drive/entity.ts new file mode 100644 index 00000000..2c4c4596 --- /dev/null +++ b/sdk/api/drive/entity.ts @@ -0,0 +1,41 @@ +export interface DrivePermission { + id: string; + emailAddress?: string; + role: "owner" | "writer" | "commenter" | "reader"; + type: string; +} + +export interface DriveFolderInfo { + id: string; + name: string; + permissions: DrivePermission[]; +} + +export interface DriveSubfolder { + id: string; + name: string; + permissions: DrivePermission[]; +} + +export interface DriveCreateFolderRequest { + name: string; + parentId?: string; +} + +export interface DriveShareFolderRequest { + emailAddress: string; + role: "owner" | "writer" | "commenter" | "reader"; + sendNotificationEmail?: boolean; +} + +export interface DriveCreateFolderStructureRequest { + folderStructure: string[]; + parentId?: string; +} + +export interface DriveShareMultipleRequest { + shares: Array<{ + emailAddress: string; + role: "owner" | "writer" | "commenter" | "reader"; + }>; +} diff --git a/sdk/api/drive/hook.ts b/sdk/api/drive/hook.ts new file mode 100644 index 00000000..903887f3 --- /dev/null +++ b/sdk/api/drive/hook.ts @@ -0,0 +1,115 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getFolderPermissions, + getFolderInfo, + listSubfolders, + createFolder, + shareFolder, + createFolderStructure, + shareFolderWithMultiple, +} from "./provider"; +import { + DrivePermission, + DriveFolderInfo, + DriveSubfolder, + DriveCreateFolderRequest, + DriveShareFolderRequest, + DriveCreateFolderStructureRequest, + DriveShareMultipleRequest, +} from "./entity"; + +export const driveQueryKeys = { + folderPermissions: (folderId: string) => + ["drive", "folder", folderId, "permissions"] as const, + folderInfo: (folderId: string) => + ["drive", "folder", folderId, "info"] as const, + subfolders: (folderId: string) => + ["drive", "folder", folderId, "subfolders"] as const, +}; + +export function useFolderPermissions(folderId: string) { + return useQuery({ + queryKey: driveQueryKeys.folderPermissions(folderId), + queryFn: () => getFolderPermissions(folderId), + enabled: Boolean(folderId), + }); +} + +export function useFolderInfo(folderId: string) { + return useQuery({ + queryKey: driveQueryKeys.folderInfo(folderId), + queryFn: () => getFolderInfo(folderId), + enabled: Boolean(folderId), + }); +} + +export function useSubfolders(folderId: string) { + return useQuery({ + queryKey: driveQueryKeys.subfolders(folderId), + queryFn: () => listSubfolders(folderId), + enabled: Boolean(folderId), + }); +} + +export function useCreateFolder() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: DriveCreateFolderRequest) => createFolder(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["drive", "folder"] }); + }, + }); +} + +export function useShareFolder() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + folderId, + data, + }: { + folderId: string; + data: DriveShareFolderRequest; + }) => shareFolder(folderId, data), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: driveQueryKeys.folderPermissions(variables.folderId), + }); + queryClient.invalidateQueries({ + queryKey: driveQueryKeys.folderInfo(variables.folderId), + }); + }, + }); +} + +export function useCreateFolderStructure() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: DriveCreateFolderStructureRequest) => + createFolderStructure(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["drive", "folder"] }); + }, + }); +} + +export function useShareFolderWithMultiple() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + folderId, + data, + }: { + folderId: string; + data: DriveShareMultipleRequest; + }) => shareFolderWithMultiple(folderId, data), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: driveQueryKeys.folderPermissions(variables.folderId), + }); + queryClient.invalidateQueries({ + queryKey: driveQueryKeys.folderInfo(variables.folderId), + }); + }, + }); +} diff --git a/sdk/api/drive/index.ts b/sdk/api/drive/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/drive/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/drive/provider.ts b/sdk/api/drive/provider.ts new file mode 100644 index 00000000..c3374766 --- /dev/null +++ b/sdk/api/drive/provider.ts @@ -0,0 +1,73 @@ +import { apiFetch } from "../apiClient"; +import { + DrivePermission, + DriveFolderInfo, + DriveSubfolder, + DriveCreateFolderRequest, + DriveShareFolderRequest, + DriveCreateFolderStructureRequest, + DriveShareMultipleRequest, +} from "./entity"; + +export async function getFolderPermissions( + folderId: string +): Promise { + return apiFetch( + `/drive/folder/${folderId}/permissions`, + { method: "GET" } + ); +} + +export async function getFolderInfo( + folderId: string +): Promise { + return apiFetch(`/drive/folder/${folderId}/info`, { + method: "GET", + }); +} + +export async function listSubfolders( + folderId: string +): Promise { + return apiFetch(`/drive/folder/${folderId}/subfolders`, { + method: "GET", + }); +} + +export async function createFolder( + data: DriveCreateFolderRequest +): Promise { + return apiFetch("/drive/folder/create", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function shareFolder( + folderId: string, + data: DriveShareFolderRequest +): Promise { + return apiFetch(`/drive/folder/${folderId}/share`, { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function createFolderStructure( + data: DriveCreateFolderStructureRequest +): Promise { + return apiFetch("/drive/folder/create-structure", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function shareFolderWithMultiple( + folderId: string, + data: DriveShareMultipleRequest +): Promise { + return apiFetch(`/drive/folder/${folderId}/share-multiple`, { + method: "POST", + body: JSON.stringify(data), + }); +} diff --git a/sdk/api/event/entity.ts b/sdk/api/event/entity.ts new file mode 100644 index 00000000..e52fd564 --- /dev/null +++ b/sdk/api/event/entity.ts @@ -0,0 +1,36 @@ +export enum EventType { + activity = "activity", + food = "food", + workshop = "workshop", + checkIn = "checkIn", +} + +export interface EventEntity { + id: string; + name: string; + type: EventType; + description?: string; + locationId?: number; + icon?: string; + startTime: number; + endTime: number; + wsPresenterNames?: string; + wsRelevantSkills?: string; + wsSkillLevel?: string; + wsUrls?: string[]; + hackathonId?: string; +} + +export interface EventEntityResponse extends EventEntity { + wsUrls: string[]; + location: { + id: number; + name: string; + capacity: number; + }; +} + +export interface CreateScanEntity { + hackathonId: string; + organizerId: string; +} diff --git a/sdk/api/event/hook.ts b/sdk/api/event/hook.ts new file mode 100644 index 00000000..0e6ade50 --- /dev/null +++ b/sdk/api/event/hook.ts @@ -0,0 +1,107 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllEvents, + getEvent, + createEvent, + updateEvent, + replaceEvent, + deleteEvent, + subscribeToEvent, + unsubscribeFromEvent, + checkInEvent, +} from "./provider"; +import { EventEntityResponse, CreateScanEntity } from "./entity"; + +export const eventQueryKeys = { + all: (hackathonId?: string) => ["events", hackathonId] as const, + detail: (id: string) => ["event", id] as const, +}; + +export function useAllEvents(hackathonId?: string) { + return useQuery({ + queryKey: eventQueryKeys.all(hackathonId), + queryFn: () => getAllEvents(hackathonId), + }); +} + +export function useEvent(id: string) { + return useQuery({ + queryKey: eventQueryKeys.detail(id), + queryFn: () => getEvent(id), + enabled: Boolean(id), + }); +} + +export function useCreateEvent() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: FormData) => createEvent(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: eventQueryKeys.all() }); + }, + }); +} + +export function useUpdateEvent() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: string; data: FormData }) => + updateEvent(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: eventQueryKeys.all() }); + queryClient.invalidateQueries({ + queryKey: eventQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useReplaceEvent() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: string; data: FormData }) => + replaceEvent(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: eventQueryKeys.all() }); + queryClient.invalidateQueries({ + queryKey: eventQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useDeleteEvent() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => deleteEvent(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: eventQueryKeys.all() }); + }, + }); +} + +export function useSubscribeToEvent() { + return useMutation({ + mutationFn: (id: string) => subscribeToEvent(id), + }); +} + +export function useUnsubscribeFromEvent() { + return useMutation({ + mutationFn: (id: string) => unsubscribeFromEvent(id), + }); +} + +export function useCheckInEvent() { + return useMutation({ + mutationFn: ({ + id, + userId, + data, + }: { + id: string; + userId: string; + data: CreateScanEntity; + }) => checkInEvent(id, userId, data), + }); +} diff --git a/sdk/api/event/index.ts b/sdk/api/event/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/event/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/event/provider.ts b/sdk/api/event/provider.ts new file mode 100644 index 00000000..6b95fe77 --- /dev/null +++ b/sdk/api/event/provider.ts @@ -0,0 +1,69 @@ +import { apiFetch } from "../apiClient"; +import { EventEntityResponse, CreateScanEntity } from "./entity"; + +export async function getAllEvents( + hackathonId?: string +): Promise { + const url = hackathonId ? `/events?hackathonId=${hackathonId}` : "/events"; + return apiFetch(url, { method: "GET" }); +} + +export async function getEvent(id: string): Promise { + return apiFetch(`/events/${id}`, { method: "GET" }); +} + +export async function createEvent( + data: FormData +): Promise { + return apiFetch("/events", { + method: "POST", + body: data, + }); +} + +export async function updateEvent( + id: string, + data: FormData +): Promise { + return apiFetch(`/events/${id}`, { + method: "PATCH", + body: data, + }); +} + +export async function replaceEvent( + id: string, + data: FormData +): Promise { + return apiFetch(`/events/${id}`, { + method: "PUT", + body: data, + }); +} + +export async function deleteEvent(id: string): Promise { + return apiFetch(`/events/${id}`, { method: "DELETE" }); +} + +export async function subscribeToEvent(id: string): Promise { + return apiFetch(`/events/${id}/notifications/subscribe`, { + method: "POST", + }); +} + +export async function unsubscribeFromEvent(id: string): Promise { + return apiFetch(`/events/${id}/notifications/unsubscribe`, { + method: "POST", + }); +} + +export async function checkInEvent( + id: string, + userId: string, + data: CreateScanEntity +): Promise { + return apiFetch(`/events/${id}/check-in/user/${userId}`, { + method: "POST", + body: JSON.stringify(data), + }); +} diff --git a/sdk/api/extra-credit/entity.ts b/sdk/api/extra-credit/entity.ts new file mode 100644 index 00000000..a6192aca --- /dev/null +++ b/sdk/api/extra-credit/entity.ts @@ -0,0 +1,22 @@ +export interface ExtraCreditClassEntity { + id: number; + name: string; + hackathonId?: string; +} + +export interface ECClassAssignedUser { + id: string; + firstName: string; + lastName: string; +} + +export interface ECClassResponse extends ExtraCreditClassEntity { + users: ECClassAssignedUser[]; +} + +export interface ECClassCreateEntity { + name: string; + hackathonId?: string; +} + +export type ECClassPatchEntity = Partial; diff --git a/sdk/api/extra-credit/hook.ts b/sdk/api/extra-credit/hook.ts new file mode 100644 index 00000000..b00e552b --- /dev/null +++ b/sdk/api/extra-credit/hook.ts @@ -0,0 +1,101 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllExtraCreditClasses, + getExtraCreditClass, + createExtraCreditClass, + updateExtraCreditClass, + replaceExtraCreditClass, + deleteExtraCreditClass, + getAllExtraCreditAssignments, +} from "./provider"; +import { + ExtraCreditClassEntity, + ECClassResponse, + ECClassCreateEntity, + ECClassPatchEntity, +} from "./entity"; + +export const extraCreditQueryKeys = { + allClasses: ["extra-credit", "classes"] as const, + classDetail: (id: number) => ["extra-credit", "class", id] as const, + allAssignments: ["extra-credit", "assignments"] as const, +}; + +export function useAllExtraCreditClasses() { + return useQuery({ + queryKey: extraCreditQueryKeys.allClasses, + queryFn: getAllExtraCreditClasses, + }); +} + +export function useExtraCreditClass(id: number) { + return useQuery({ + queryKey: extraCreditQueryKeys.classDetail(id), + queryFn: () => getExtraCreditClass(id), + enabled: Boolean(id), + }); +} + +export function useCreateExtraCreditClass() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (newData: ECClassCreateEntity) => + createExtraCreditClass(newData), + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: extraCreditQueryKeys.allClasses, + }); + }, + }); +} + +export function useUpdateExtraCreditClass() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: number; data: ECClassPatchEntity }) => + updateExtraCreditClass(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ + queryKey: extraCreditQueryKeys.allClasses, + }); + queryClient.invalidateQueries({ + queryKey: extraCreditQueryKeys.classDetail(updated.id), + }); + }, + }); +} + +export function useReplaceExtraCreditClass() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: number; data: ECClassCreateEntity }) => + replaceExtraCreditClass(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ + queryKey: extraCreditQueryKeys.allClasses, + }); + queryClient.invalidateQueries({ + queryKey: extraCreditQueryKeys.classDetail(updated.id), + }); + }, + }); +} + +export function useDeleteExtraCreditClass() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: number) => deleteExtraCreditClass(id), + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: extraCreditQueryKeys.allClasses, + }); + }, + }); +} + +export function useAllExtraCreditAssignments() { + return useQuery({ + queryKey: extraCreditQueryKeys.allAssignments, + queryFn: getAllExtraCreditAssignments, + }); +} diff --git a/sdk/api/extra-credit/index.ts b/sdk/api/extra-credit/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/extra-credit/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/extra-credit/provider.ts b/sdk/api/extra-credit/provider.ts new file mode 100644 index 00000000..ad3f0c86 --- /dev/null +++ b/sdk/api/extra-credit/provider.ts @@ -0,0 +1,64 @@ +import { apiFetch } from "../apiClient"; +import { + ECClassResponse, + ExtraCreditClassEntity, + ECClassCreateEntity, + ECClassPatchEntity, +} from "./entity"; + +export async function getAllExtraCreditClasses(): Promise< + ExtraCreditClassEntity[] +> { + return apiFetch("/extra-credit/classes", { + method: "GET", + }); +} + +export async function getExtraCreditClass( + id: number +): Promise { + return apiFetch(`/extra-credit/classes/${id}`, { + method: "GET", + }); +} + +export async function createExtraCreditClass( + data: ECClassCreateEntity +): Promise { + return apiFetch("/extra-credit/classes", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function updateExtraCreditClass( + id: number, + data: ECClassPatchEntity +): Promise { + return apiFetch(`/extra-credit/classes/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function replaceExtraCreditClass( + id: number, + data: ECClassCreateEntity +): Promise { + return apiFetch(`/extra-credit/classes/${id}`, { + method: "PUT", + body: JSON.stringify(data), + }); +} + +export async function deleteExtraCreditClass(id: number): Promise { + return apiFetch(`/extra-credit/classes/${id}`, { method: "DELETE" }); +} + +export async function getAllExtraCreditAssignments(): Promise< + ECClassResponse[] +> { + return apiFetch("/extra-credit/assignments", { + method: "GET", + }); +} diff --git a/sdk/api/finance/entity.ts b/sdk/api/finance/entity.ts new file mode 100644 index 00000000..ac0afdc5 --- /dev/null +++ b/sdk/api/finance/entity.ts @@ -0,0 +1,132 @@ +export enum Status { + PENDING = "PENDING", + APPROVED = "APPROVED", + REJECTED = "REJECTED", + DEPOSIT = "DEPOSIT", +} + +export enum SubmitterType { + USER = "USER", + ORGANIZER = "ORGANIZER", +} + +export enum Category { + TelephoneRental = "Telephone Rental", + Postage = "Postage", + OfficeSupplies = "Office Supplies", + Copies = "Copies", + EquipmentRental = "Equipment Rental", + EquipmentPurchase = "Equipment Purchase", + EquipmentMaintenance = "Equipment Maintenance", + ProfessionalServices = "Professional Services", + InsurancePremiums = "Insurance Premiums", + Advertising = "Advertising", + DuesMembership = "Dues/Membership", + AwardsGifts = "Awards/Gifts", + Photography = "Photography", + ClothingUniform = "Clothing/Uniform", + RegistrationTournamentFee = "Registration/Tournament Fee", + Instructor = "Instructor", + RefereesJudges = "Referees/Judges", + Fine = "Fine", + WebHosting = "Web Hosting", + BooksSubscription = "Books/Subscription", + Printing = "Printing", + Fundraising = "Fundraising", + Donation = "Donation", + CdAndDvd = "CD and DVD", + Rush = "Rush", + Social = "Social", + FacilityRentalSocial = "Facility Rental - Social", + Food = "Food", + MaterialsSupplies = "Materials & Supplies", + Meeting = "Meeting", + EquipmentMaintenanceRepairs = "Equipment Maintenance/Repairs", + Prizes = "Prizes", + Security = "Security", + EmtService = "EMT Service", + Catering = "Catering", + Meal = "Meal", + Banquet = "Banquet", + Retreat = "Retreat", + FestivalFairExpense = "Festival/Fair Expense", + SpecialFunction = "Special Function", + CollegianAd = "Collegian Ad", + Banner = "Banner", + HonorariaSpeaker = "Honoraria - Speaker", + HonorariaDj = "Honoraria - DJ", + HonorariaPerformingArtist = "Honoraria - Performing Artist", + SpeakerArtistTransportation = "Speaker/Artist - Transportation", + SpeakerArtistLodging = "Speaker/Artist - Lodging", + SpeakerArtistMeal = "Speaker/Artist - Meal", + SpeakerArtistParking = "Speaker/Artist - Parking", + ProgramFacilityRental = "Program - Facility Rental", + ProgramEquipmentRental = "Program - Equipment Rental", + ProgramPurchase = "Program - Purchase", + ProgramSoundSystemRental = "Program - Sound System Rental", + ProgramMovieRental = "Program - Movie Rental", + ProgramProjectionist = "Program - Projectionist", + ProgramProfessionalServices = "Program - Professional Services", + ProgramPublicity = "Program - Publicity", + ProgramCopiesFlyersPosters = "Program - Copies/Flyers/Posters", + ProgramMediaPrintBroadcast = "Program - Media Print/Broadcast", + ProgramCostume = "Program - Costume", + ProgramSetConstruction = "Program - Set Construction", + ProgramProps = "Program - Props", + ProgramCopyrightLicensing = "Program - Copyright/Licensing", + GeneralOperations50 = "General Operations ($50)", + TravelTransportation = "Travel - Transportation", + TravelLodging = "Travel - Lodging", + TravelRegistration = "Travel - Registration", + TravelMeal = "Travel - Meal", + TravelConference = "Travel - Conference", + Refund = "Refund", +} + +export interface FinanceEntity { + id: string; + amount: number; + status: Status; + submitterType: SubmitterType; + submitterId: string; + receiptUrl?: string; + hackathonId: string; + description: string; + category: Category; + createdAt: number; + updatedBy?: string; + street: string; + city: string; + state: string; + postalCode: string; +} + +export interface FinanceCreateEntity { + amount: number; + submitterType: SubmitterType; + submitterId: string; + description: string; + category: Category; + street: string; + city: string; + state: string; + postalCode: string; +} + +// For updating status only +export type FinanceStatusPatchEntity = Partial>; + +// For editing reimbursement (everything but status & receipt) +export type FinancePatchEntity = Partial< + Omit< + FinanceEntity, + | "hackathonId" + | "id" + | "createdAt" + | "updatedBy" + | "submitterId" + | "submitterType" + | "receiptUrl" + | "status" + > +>; diff --git a/sdk/api/finance/hook.ts b/sdk/api/finance/hook.ts new file mode 100644 index 00000000..10c9b2d1 --- /dev/null +++ b/sdk/api/finance/hook.ts @@ -0,0 +1,71 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllFinances, + getFinance, + createFinance, + updateFinanceStatus, + updateFinance, +} from "./provider"; +import { + FinanceEntity, + FinancePatchEntity, + FinanceStatusPatchEntity, +} from "./entity"; + +export const financeQueryKeys = { + all: ["finances"] as const, + detail: (id: string) => ["finance", id] as const, +}; + +export function useAllFinances() { + return useQuery({ + queryKey: financeQueryKeys.all, + queryFn: getAllFinances, + }); +} + +export function useFinance(id: string) { + return useQuery({ + queryKey: financeQueryKeys.detail(id), + queryFn: () => getFinance(id), + enabled: Boolean(id), + }); +} + +export function useCreateFinance() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: FormData) => createFinance(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: financeQueryKeys.all }); + }, + }); +} + +export function useUpdateFinanceStatus() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: string; data: FinanceStatusPatchEntity }) => + updateFinanceStatus(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: financeQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: financeQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useUpdateFinance() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: string; data: FinancePatchEntity }) => + updateFinance(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: financeQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: financeQueryKeys.detail(updated.id), + }); + }, + }); +} diff --git a/sdk/api/finance/index.ts b/sdk/api/finance/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/finance/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/finance/provider.ts b/sdk/api/finance/provider.ts new file mode 100644 index 00000000..2ae66197 --- /dev/null +++ b/sdk/api/finance/provider.ts @@ -0,0 +1,41 @@ +import { apiFetch } from "../apiClient"; +import { + FinanceEntity, + FinancePatchEntity, + FinanceStatusPatchEntity, +} from "./entity"; + +export async function getAllFinances(): Promise { + return apiFetch("/finances", { method: "GET" }); +} + +export async function getFinance(id: string): Promise { + return apiFetch(`/finances/${id}`, { method: "GET" }); +} + +export async function createFinance(data: FormData): Promise { + return apiFetch("/finances", { + method: "POST", + body: data, + }); +} + +export async function updateFinanceStatus( + id: string, + data: FinanceStatusPatchEntity +): Promise { + return apiFetch(`/finances/${id}/status`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function updateFinance( + id: string, + data: FinancePatchEntity +): Promise { + return apiFetch(`/finances/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} diff --git a/sdk/api/flag/entity.ts b/sdk/api/flag/entity.ts new file mode 100644 index 00000000..f2208a35 --- /dev/null +++ b/sdk/api/flag/entity.ts @@ -0,0 +1,17 @@ +export interface FlagEntity { + name: string; + isEnabled: boolean; +} + +export interface ActivateFlagBody { + name: string; + isEnabled: boolean; + broadcast?: boolean; +} + +export interface PatchFlagsBody { + flags: { + name: string; + isEnabled: boolean; + }[]; +} diff --git a/sdk/api/flag/hook.ts b/sdk/api/flag/hook.ts new file mode 100644 index 00000000..a3341d1e --- /dev/null +++ b/sdk/api/flag/hook.ts @@ -0,0 +1,49 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllFlags, + getFlagState, + activateFlag, + patchFlags, +} from "./provider"; +import { FlagEntity, ActivateFlagBody, PatchFlagsBody } from "./entity"; + +export const flagQueryKeys = { + all: ["flags"] as const, + detail: (id: string) => ["flag", id] as const, +}; + +export function useAllFlags() { + return useQuery({ + queryKey: flagQueryKeys.all, + queryFn: getAllFlags, + refetchInterval: 1000 * 5, // 5 seconds + }); +} + +export function useFlagState(id: string) { + return useQuery({ + queryKey: flagQueryKeys.detail(id), + queryFn: () => getFlagState(id), + enabled: Boolean(id), + }); +} + +export function useActivateFlag() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: ActivateFlagBody) => activateFlag(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: flagQueryKeys.all }); + }, + }); +} + +export function usePatchFlags() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: PatchFlagsBody) => patchFlags(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: flagQueryKeys.all }); + }, + }); +} diff --git a/sdk/api/flag/index.ts b/sdk/api/flag/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/flag/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/flag/provider.ts b/sdk/api/flag/provider.ts new file mode 100644 index 00000000..5c87e39a --- /dev/null +++ b/sdk/api/flag/provider.ts @@ -0,0 +1,24 @@ +import { apiFetch } from "../apiClient"; +import { FlagEntity, ActivateFlagBody, PatchFlagsBody } from "./entity"; + +export async function getAllFlags(): Promise { + return apiFetch("/flags", { method: "GET" }); +} + +export async function getFlagState(id: string): Promise { + return apiFetch(`/flags/state/${id}`, { method: "GET" }); +} + +export async function activateFlag(data: ActivateFlagBody): Promise { + return apiFetch("/flags/toggle", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function patchFlags(data: PatchFlagsBody): Promise { + return apiFetch("/flags", { + method: "PATCH", + body: JSON.stringify(data), + }); +} diff --git a/sdk/api/hackathon/entity.ts b/sdk/api/hackathon/entity.ts new file mode 100644 index 00000000..3459abae --- /dev/null +++ b/sdk/api/hackathon/entity.ts @@ -0,0 +1,46 @@ +export interface HackathonEntity { + id: string; + name: string; + startTime: number; + endTime: number; + active: boolean; +} + +export interface HackathonCreateEntity { + name: string; + startTime: number; + endTime: number; +} + +export type HackathonUpdateEntity = Partial; + +export interface HackathonCheckInResponse { + checkInId: string; +} + +export interface ConditionalHackathonResponse extends HackathonEntity { + checkInId?: string; +} + +export interface HackathonResponse extends HackathonEntity { + checkInId: string; +} + +export interface StaticEventLocationEntity { + id: number; + name: string; +} + +export interface StaticEventEntity { + id: string; + name: string; + type: string; + startTime: number; + endTime: number; + location: StaticEventLocationEntity; +} + +export interface StaticActiveHackathonEntity extends HackathonEntity { + events: StaticEventEntity[]; + sponsors: { id: string; name: string }[]; +} diff --git a/sdk/api/hackathon/hook.ts b/sdk/api/hackathon/hook.ts new file mode 100644 index 00000000..c49d7071 --- /dev/null +++ b/sdk/api/hackathon/hook.ts @@ -0,0 +1,110 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllHackathons, + getHackathon, + createHackathon, + updateHackathon, + replaceHackathon, + deleteHackathon, + markActiveHackathon, + getActiveHackathonForStatic, +} from "./provider"; +import { + HackathonEntity, + HackathonCreateEntity, + HackathonUpdateEntity, + HackathonResponse, + StaticActiveHackathonEntity, +} from "./entity"; + +export const hackathonQueryKeys = { + all: ["hackathons"] as const, + detail: (id: string) => ["hackathon", id] as const, + activeStatic: ["hackathon", "active", "static"] as const, +}; + +export function useAllHackathons(active?: boolean) { + return useQuery({ + queryKey: + active !== undefined + ? [...hackathonQueryKeys.all, active] + : hackathonQueryKeys.all, + queryFn: () => getAllHackathons(active), + }); +} + +export function useHackathon(id: string) { + return useQuery({ + queryKey: hackathonQueryKeys.detail(id), + queryFn: () => getHackathon(id), + enabled: Boolean(id), + }); +} + +export function useCreateHackathon() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: HackathonCreateEntity) => createHackathon(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: hackathonQueryKeys.all }); + }, + }); +} + +export function useUpdateHackathon() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: string; data: HackathonUpdateEntity }) => + updateHackathon(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: hackathonQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: hackathonQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useReplaceHackathon() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: string; data: HackathonCreateEntity }) => + replaceHackathon(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: hackathonQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: hackathonQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useDeleteHackathon() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => deleteHackathon(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: hackathonQueryKeys.all }); + }, + }); +} + +export function useMarkActiveHackathon() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => markActiveHackathon(id), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: hackathonQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: hackathonQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useActiveHackathonForStatic() { + return useQuery({ + queryKey: hackathonQueryKeys.activeStatic, + queryFn: getActiveHackathonForStatic, + }); +} diff --git a/sdk/api/hackathon/index.ts b/sdk/api/hackathon/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/hackathon/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/hackathon/provider.ts b/sdk/api/hackathon/provider.ts new file mode 100644 index 00000000..c21fc716 --- /dev/null +++ b/sdk/api/hackathon/provider.ts @@ -0,0 +1,66 @@ +import { apiFetch } from "../apiClient"; +import { + HackathonEntity, + HackathonCreateEntity, + HackathonUpdateEntity, + HackathonResponse, + StaticActiveHackathonEntity, +} from "./entity"; + +export async function getAllHackathons( + active?: boolean +): Promise { + const query = active !== undefined ? `?active=${active}` : ""; + return apiFetch(`/hackathons${query}`, { method: "GET" }); +} + +export async function getHackathon(id: string): Promise { + return apiFetch(`/hackathons/${id}`, { method: "GET" }); +} + +export async function createHackathon( + data: HackathonCreateEntity +): Promise { + return apiFetch("/hackathons", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function updateHackathon( + id: string, + data: HackathonUpdateEntity +): Promise { + return apiFetch(`/hackathons/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function replaceHackathon( + id: string, + data: HackathonCreateEntity +): Promise { + return apiFetch(`/hackathons/${id}`, { + method: "PUT", + body: JSON.stringify(data), + }); +} + +export async function deleteHackathon(id: string): Promise { + return apiFetch(`/hackathons/${id}`, { method: "DELETE" }); +} + +export async function markActiveHackathon( + id: string +): Promise { + return apiFetch(`/hackathons/${id}/active`, { + method: "PATCH", + }); +} + +export async function getActiveHackathonForStatic(): Promise { + return apiFetch("/hackathons/active/static", { + method: "GET", + }); +} diff --git a/sdk/api/inventory/entity.ts b/sdk/api/inventory/entity.ts new file mode 100644 index 00000000..71822937 --- /dev/null +++ b/sdk/api/inventory/entity.ts @@ -0,0 +1,60 @@ +export interface InventoryCategoryEntity { + id: number; + name: string; + description?: string; +} + +export interface InventoryItemEntity { + id: string; + categoryId: number; + name?: string; + assetTag?: string; + serialNumber?: string; + status: "active" | "checked_out" | "lost" | "disposed" | "archived"; + holderLocationId?: number; + holderOrganizerId?: string; + notes?: string; + createdAt: number; + updatedAt: number; +} + +export interface InventoryMovementEntity { + id: string; + itemId: string; + fromLocationId?: number; + fromOrganizerId?: string; + toLocationId?: number; + toOrganizerId?: string; + reason: + | "checkout" + | "return" + | "transfer" + | "lost" + | "disposed" + | "repair" + | "other"; + notes?: string; + movedByOrganizerId: string; + createdAt: number; +} + +// DTOs + +export type CreateCategoryDto = Omit; + +export type CreateItemDto = Omit< + InventoryItemEntity, + "id" | "createdAt" | "updatedAt" | "status" +> & { + status?: InventoryItemEntity["status"]; +}; + +export type UpdateItemDto = Omit< + CreateItemDto, + "categoryId" | "holderLocationId" | "holderOrganizerId" +>; + +export type CreateMovementDto = Omit< + InventoryMovementEntity, + "id" | "createdAt" | "movedByOrganizerId" +>; diff --git a/sdk/api/inventory/hook.ts b/sdk/api/inventory/hook.ts new file mode 100644 index 00000000..154b482b --- /dev/null +++ b/sdk/api/inventory/hook.ts @@ -0,0 +1,128 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { + createCategory, + createItem, + createMovement, + deleteCategory, + deleteItem, + deleteMovement, + getCategories, + getItems, + getMovements, + updateItem, +} from "./provider"; +import { + CreateCategoryDto, + CreateItemDto, + CreateMovementDto, + InventoryCategoryEntity, + InventoryItemEntity, + InventoryMovementEntity, + UpdateItemDto, +} from "./entity"; + +export const inventoryQueryKeys = { + categories: ["inventory-categories"] as const, + items: ["inventory-items"] as const, + movements: ["inventory-movements"] as const, +}; + +// Categories +export function useInventoryCategories() { + return useQuery({ + queryKey: inventoryQueryKeys.categories, + queryFn: getCategories, + }); +} + +export function useCreateInventoryCategory() { + const client = useQueryClient(); + return useMutation({ + mutationFn: createCategory, + onSuccess: () => { + client.invalidateQueries({ queryKey: inventoryQueryKeys.categories }); + }, + }); +} + +export function useDeleteInventoryCategory() { + const client = useQueryClient(); + return useMutation({ + mutationFn: deleteCategory, + onSuccess: () => { + client.invalidateQueries({ queryKey: inventoryQueryKeys.categories }); + }, + }); +} + +// Items +export function useInventoryItems() { + return useQuery({ + queryKey: inventoryQueryKeys.items, + queryFn: getItems, + }); +} + +export function useCreateInventoryItem() { + const client = useQueryClient(); + return useMutation({ + mutationFn: createItem, + onSuccess: () => { + client.invalidateQueries({ queryKey: inventoryQueryKeys.items }); + }, + }); +} + +export function useUpdateInventoryItem() { + const client = useQueryClient(); + return useMutation< + InventoryItemEntity, + Error, + { id: string; data: UpdateItemDto } + >({ + mutationFn: ({ id, data }) => updateItem(id, data), + onSuccess: () => { + client.invalidateQueries({ queryKey: inventoryQueryKeys.items }); + }, + }); +} + +export function useDeleteInventoryItem() { + const client = useQueryClient(); + return useMutation({ + mutationFn: deleteItem, + onSuccess: () => { + client.invalidateQueries({ queryKey: inventoryQueryKeys.items }); + }, + }); +} + +// Movements +export function useInventoryMovements() { + return useQuery({ + queryKey: inventoryQueryKeys.movements, + queryFn: getMovements, + }); +} + +export function useCreateInventoryMovement() { + const client = useQueryClient(); + return useMutation({ + mutationFn: createMovement, + onSuccess: () => { + client.invalidateQueries({ queryKey: inventoryQueryKeys.movements }); + // Creating a movement also updates items (e.g. location, status) + client.invalidateQueries({ queryKey: inventoryQueryKeys.items }); + }, + }); +} + +export function useDeleteInventoryMovement() { + const client = useQueryClient(); + return useMutation({ + mutationFn: deleteMovement, + onSuccess: () => { + client.invalidateQueries({ queryKey: inventoryQueryKeys.movements }); + }, + }); +} diff --git a/sdk/api/inventory/index.ts b/sdk/api/inventory/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/inventory/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/inventory/provider.ts b/sdk/api/inventory/provider.ts new file mode 100644 index 00000000..7d80c279 --- /dev/null +++ b/sdk/api/inventory/provider.ts @@ -0,0 +1,78 @@ +import { apiFetch } from "../apiClient"; +import { + CreateCategoryDto, + CreateItemDto, + CreateMovementDto, + InventoryCategoryEntity, + InventoryItemEntity, + InventoryMovementEntity, + UpdateItemDto, +} from "./entity"; + +// Categories +export async function getCategories(): Promise { + return await apiFetch("inventory/categories"); +} + +export async function createCategory( + data: CreateCategoryDto, +): Promise { + return await apiFetch("inventory/categories", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function deleteCategory(id: number): Promise { + return await apiFetch(`inventory/categories/${id}`, { + method: "DELETE", + }); +} + +// Items +export async function getItems(): Promise { + return await apiFetch("inventory/items"); +} + +export async function createItem(data: CreateItemDto): Promise { + return await apiFetch("inventory/items", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function updateItem( + id: string, + data: UpdateItemDto, +): Promise { + return await apiFetch(`inventory/items/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function deleteItem(id: string): Promise { + return await apiFetch(`inventory/items/${id}`, { + method: "DELETE", + }); +} + +// Movements +export async function getMovements(): Promise { + return await apiFetch("inventory/movements"); +} + +export async function createMovement( + data: CreateMovementDto, +): Promise { + return await apiFetch("inventory/movements", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function deleteMovement(id: string): Promise { + return await apiFetch(`inventory/movements/${id}`, { + method: "DELETE", + }); +} diff --git a/sdk/api/judging/entity.ts b/sdk/api/judging/entity.ts new file mode 100644 index 00000000..014a7ed8 --- /dev/null +++ b/sdk/api/judging/entity.ts @@ -0,0 +1,67 @@ +import { OrganizerEntity } from "../organizer"; + +// A Score returned from the API +export interface ScoreEntity { + id: number; + hackathonId: string; + creativity?: number; + technical?: number; + implementation?: number; + clarity?: number; + growth?: number; + challenge1?: number; + challenge2?: number; + challenge3?: number; + total?: number; + submitted?: boolean; + judge: Omit; + project: ProjectEntity; +} + +// A Project as returned from the API +export interface ProjectEntity { + id: number; + name: string; + hackathonId: string; + categories?: string; +} + +// For creating a new score (no id) +export interface ScoreCreateEntity extends Omit {} + +// For updating a score (all fields optional except id) +export interface ScoreUpdateEntity + extends Partial> {} + +// The judge info used in a breakdown +export interface ScoreBreakdownJudgeEntity { + id: string; + firstName: string; + lastName: string; +} + +// A score breakdown (score info with simplified judge details) +export interface ScoreBreakdownEntity extends Omit { + judge: ScoreBreakdownJudgeEntity; +} + +// A project breakdown aggregates averages and includes all score breakdowns +export interface ProjectBreakdownEntity extends ProjectEntity { + average: number; + creativity: number; + implementation: number; + clarity: number; + growth: number; + technical: number; + challenge1: number; + challenge2: number; + challenge3: number; + scores: ScoreBreakdownEntity[]; +} + +// For assigning judges to projects +export interface JudgingAssignmentEntity { + users: string[]; + projects: number[]; + projectsPerUser: number; +} diff --git a/sdk/api/judging/hook.ts b/sdk/api/judging/hook.ts new file mode 100644 index 00000000..a63828e5 --- /dev/null +++ b/sdk/api/judging/hook.ts @@ -0,0 +1,197 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllScores, + getScore, + createScore, + updateScore, + replaceScore, + deleteScore, + getAllProjects, + getProject, + createProject, + updateProject, + replaceProject, + deleteProject, + getProjectBreakdown, + assignJudging, + assignAdditionalJudging, + uploadProjectsCsv, + getProjectsByTeam, +} from "./provider"; +import { + ScoreEntity, + ScoreCreateEntity, + ScoreUpdateEntity, + ProjectEntity, + ProjectBreakdownEntity, + JudgingAssignmentEntity, +} from "./entity"; + +export const judgingQueryKeys = { + allScores: ["judging", "scores"] as const, + scoreDetail: (id: number) => ["judging", "score", id] as const, + allProjects: ["judging", "projects"] as const, + projectDetail: (id: number) => ["judging", "project", id] as const, + projectBreakdown: ["judging", "breakdown"] as const, +}; + +export function useAllScores() { + return useQuery({ + queryKey: judgingQueryKeys.allScores, + queryFn: getAllScores, + }); +} + +export function useScore(id: number) { + return useQuery({ + queryKey: judgingQueryKeys.scoreDetail(id), + queryFn: () => getScore(id), + enabled: Boolean(id), + }); +} + +export function useCreateScore() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: ScoreCreateEntity) => createScore(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allScores }); + }, + }); +} + +export function useUpdateScore() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: number; data: ScoreUpdateEntity }) => + updateScore(id, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allScores }); + }, + }); +} + +export function useReplaceScore() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: number; data: ScoreUpdateEntity }) => + replaceScore(id, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allScores }); + }, + }); +} + +export function useDeleteScore() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: number) => deleteScore(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allScores }); + }, + }); +} + +export function useAllProjects() { + return useQuery({ + queryKey: judgingQueryKeys.allProjects, + queryFn: getAllProjects, + }); +} + +export function useProject(id: number) { + return useQuery({ + queryKey: judgingQueryKeys.projectDetail(id), + queryFn: () => getProject(id), + enabled: Boolean(id), + }); +} + +export function useCreateProject() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: Omit) => createProject(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allProjects }); + }, + }); +} + +export function useUpdateProject() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: number; data: Partial }) => + updateProject(id, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allProjects }); + }, + }); +} + +export function useReplaceProject() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + id, + data, + }: { + id: number; + data: Omit; + }) => replaceProject(id, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allProjects }); + }, + }); +} + +export function useProjectsByTeam(teamId: string) { + return useQuery({ + queryKey: [...judgingQueryKeys.allProjects, "team", teamId], + queryFn: () => getProjectsByTeam(teamId), + enabled: Boolean(teamId), + }); +} + +export function useDeleteProject() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: number) => deleteProject(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allProjects }); + }, + }); +} + +export function useProjectBreakdown() { + return useQuery({ + queryKey: judgingQueryKeys.projectBreakdown, + queryFn: getProjectBreakdown, + }); +} + +export function useAssignJudging() { + return useMutation({ + mutationFn: (data: JudgingAssignmentEntity) => assignJudging(data), + }); +} + +export function useAssignAdditonalJudging() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (judgeId: string) => assignAdditionalJudging(judgeId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allScores }); + }, + }); +} + +export function useUploadProjectsCsv() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (file: File) => uploadProjectsCsv(file), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: judgingQueryKeys.allProjects }); + }, + }); +} diff --git a/sdk/api/judging/index.ts b/sdk/api/judging/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/judging/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/judging/provider.ts b/sdk/api/judging/provider.ts new file mode 100644 index 00000000..23780921 --- /dev/null +++ b/sdk/api/judging/provider.ts @@ -0,0 +1,169 @@ +import { apiFetch } from "../apiClient"; +import { + ScoreEntity, + ScoreCreateEntity, + ScoreUpdateEntity, + ProjectEntity, + ProjectBreakdownEntity, + JudgingAssignmentEntity, +} from "./entity"; + +// Scores Endpoints +export const getAllScores = async (): Promise => { + const data = await apiFetch("/judging/scores", { + method: "GET", + }); + return data; +}; + +export const getScore = async (id: number): Promise => { + const data = await apiFetch(`/judging/scores/${id}`, { + method: "GET", + }); + return data; +}; + +export const createScore = async ( + score: ScoreCreateEntity +): Promise => { + const data = await apiFetch("/judging/scores", { + method: "POST", + body: JSON.stringify(score), + }); + return data; +}; + +export const updateScore = async ( + id: number, + score: ScoreUpdateEntity +): Promise => { + const data = await apiFetch(`/judging/scores/${id}`, { + method: "PATCH", + body: JSON.stringify(score), + }); + return data; +}; + +export const replaceScore = async ( + id: number, + score: ScoreUpdateEntity +): Promise => { + const data = await apiFetch(`/judging/scores/${id}`, { + method: "PUT", + body: JSON.stringify(score), + }); + return data; +}; + +export const deleteScore = async (id: number): Promise => { + await apiFetch(`/judging/scores/${id}`, { + method: "DELETE", + }); +}; + +// Projects Endpoints +export const getAllProjects = async (): Promise => { + const data = await apiFetch("/judging/projects", { + method: "GET", + }); + return data; +}; + +export const getProject = async (id: number): Promise => { + const data = await apiFetch(`/judging/projects/${id}`, { + method: "GET", + }); + return data; +}; + +export const createProject = async ( + project: Omit +): Promise => { + const data = await apiFetch("/judging/projects", { + method: "POST", + body: JSON.stringify(project), + }); + return data; +}; + +export const updateProject = async ( + id: number, + project: Partial +): Promise => { + const data = await apiFetch(`/judging/projects/${id}`, { + method: "PATCH", + body: JSON.stringify(project), + }); + return data; +}; + +export const replaceProject = async ( + id: number, + project: Omit +): Promise => { + const data = await apiFetch(`/judging/projects/${id}`, { + method: "PUT", + body: JSON.stringify(project), + }); + return data; +}; + +export const getProjectsByTeam = async ( + teamId: string +): Promise => { + const data = await apiFetch( + `/judging/projects/team/${teamId}`, + { + method: "GET", + } + ); + return data; +}; + +export const deleteProject = async (id: number): Promise => { + await apiFetch(`/judging/projects/${id}`, { + method: "DELETE", + }); +}; + +// Breakdown Endpoint +export const getProjectBreakdown = async (): Promise< + ProjectBreakdownEntity[] +> => { + const data = await apiFetch("/judging/breakdown", { + method: "GET", + }); + return data; +}; + +// Judging Assignment Endpoint +export const assignJudging = async ( + data: JudgingAssignmentEntity +): Promise => { + await apiFetch("/judging/assign", { + method: "POST", + body: JSON.stringify(data), + }); +}; + +// Judging additional endpoints +export const assignAdditionalJudging = async ( + judgeId: string +): Promise => { + await apiFetch(`/judging/assign/${judgeId}`, { + method: "POST", + }); +}; + +export const uploadProjectsCsv = async ( + file: File +): Promise => { + const formData = new FormData(); + formData.append("file", file); + + const data = await apiFetch("/judging/projects/upload-csv", { + method: "POST", + body: formData, + }); + return data; +}; diff --git a/sdk/api/location/entity.ts b/sdk/api/location/entity.ts new file mode 100644 index 00000000..8625a67e --- /dev/null +++ b/sdk/api/location/entity.ts @@ -0,0 +1,9 @@ +export interface LocationEntity { + id: number; + name: string; + capacity: number; +} + +export interface LocationCreateEntity extends Omit {} + +export interface LocationUpdateEntity extends Partial {} diff --git a/sdk/api/location/hook.ts b/sdk/api/location/hook.ts new file mode 100644 index 00000000..04d2221f --- /dev/null +++ b/sdk/api/location/hook.ts @@ -0,0 +1,76 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllLocations, + getLocation, + createLocation, + updateLocation, + replaceLocation, + deleteLocation, +} from "./provider"; +import { + LocationEntity, + LocationCreateEntity, + LocationUpdateEntity, +} from "./entity"; + +export const locationQueryKeys = { + all: ["locations"] as const, + detail: (id: number) => ["locations", id] as const, +}; + +export function useAllLocations() { + return useQuery({ + queryKey: locationQueryKeys.all, + queryFn: getAllLocations, + }); +} + +export function useLocation(id: number) { + return useQuery({ + queryKey: locationQueryKeys.detail(id), + queryFn: () => getLocation(id), + enabled: Boolean(id), + }); +} + +export function useCreateLocation() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: LocationCreateEntity) => createLocation(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: locationQueryKeys.all }); + }, + }); +} + +export function useUpdateLocation() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: number; data: LocationUpdateEntity }) => + updateLocation(id, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: locationQueryKeys.all }); + }, + }); +} + +export function useReplaceLocation() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: number; data: LocationCreateEntity }) => + replaceLocation(id, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: locationQueryKeys.all }); + }, + }); +} + +export function useDeleteLocation() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: number) => deleteLocation(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: locationQueryKeys.all }); + }, + }); +} diff --git a/sdk/api/location/index.ts b/sdk/api/location/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/location/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/location/provider.ts b/sdk/api/location/provider.ts new file mode 100644 index 00000000..9657af6e --- /dev/null +++ b/sdk/api/location/provider.ts @@ -0,0 +1,47 @@ +import { apiFetch } from "../apiClient"; +import { + LocationEntity, + LocationCreateEntity, + LocationUpdateEntity, +} from "./entity"; + +export async function getAllLocations(): Promise { + return apiFetch("/locations", { method: "GET" }); +} + +export async function getLocation(id: number): Promise { + return apiFetch(`/locations/${id}`, { method: "GET" }); +} + +export async function createLocation( + data: LocationCreateEntity +): Promise { + return apiFetch("/locations", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function updateLocation( + id: number, + data: LocationUpdateEntity +): Promise { + return apiFetch(`/locations/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function replaceLocation( + id: number, + data: LocationCreateEntity +): Promise { + return apiFetch(`/locations/${id}`, { + method: "PUT", + body: JSON.stringify(data), + }); +} + +export async function deleteLocation(id: number): Promise { + return apiFetch(`/locations/${id}`, { method: "DELETE" }); +} diff --git a/sdk/api/mail/entity.ts b/sdk/api/mail/entity.ts new file mode 100644 index 00000000..e9e4299d --- /dev/null +++ b/sdk/api/mail/entity.ts @@ -0,0 +1,37 @@ +export interface SendMailRequest { + to: string[]; + template: string; + subject: string; + data: Record; + from?: string; +} + +export interface SendBatchReceiver { + email: string; + data: Record; +} + +export interface SendBatchMailRequest { + to: SendBatchReceiver[]; + template: string; + subject: string; + from?: string; +} + +export interface UploadTemplateRequest { + name: string; + previewText?: string; +} + +export interface TemplateMetadata { + name: string; + context: string[]; +} + +export interface PreviewMailRequest { + data: Record; +} + +export interface PreviewMailResponse { + html: string; +} diff --git a/sdk/api/mail/hook.ts b/sdk/api/mail/hook.ts new file mode 100644 index 00000000..43fbf52b --- /dev/null +++ b/sdk/api/mail/hook.ts @@ -0,0 +1,60 @@ +import { useQuery, useMutation } from "@tanstack/react-query"; +import { + sendMail, + sendBatchMail, + uploadTemplate, + getTemplateMetadata, + getTemplatePreview, +} from "./provider"; +import { + SendMailRequest, + SendBatchMailRequest, + UploadTemplateRequest, + TemplateMetadata, + PreviewMailRequest, + PreviewMailResponse, +} from "./entity"; + +export const mailQueryKeys = { + templateMetadata: (templateId: string) => + ["mail", "template", templateId, "metadata"] as const, +}; + +export function useSendMail() { + return useMutation({ + mutationFn: (data: SendMailRequest) => sendMail(data), + }); +} + +export function useSendBatchMail() { + return useMutation({ + mutationFn: (data: SendBatchMailRequest) => sendBatchMail(data), + }); +} + +export function useUploadTemplate() { + return useMutation({ + mutationFn: ({ data, file }: { data: UploadTemplateRequest; file: File }) => + uploadTemplate(data, file), + }); +} + +export function useTemplateMetadata(templateId: string) { + return useQuery({ + queryKey: mailQueryKeys.templateMetadata(templateId), + queryFn: () => getTemplateMetadata(templateId), + enabled: Boolean(templateId), + }); +} + +export function useTemplatePreview() { + return useMutation({ + mutationFn: ({ + templateId, + data, + }: { + templateId: string; + data: PreviewMailRequest; + }) => getTemplatePreview(templateId, data), + }); +} diff --git a/sdk/api/mail/index.ts b/sdk/api/mail/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/mail/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/mail/provider.ts b/sdk/api/mail/provider.ts new file mode 100644 index 00000000..29d301cd --- /dev/null +++ b/sdk/api/mail/provider.ts @@ -0,0 +1,62 @@ +import { apiFetch } from "../apiClient"; +import { + SendMailRequest, + SendBatchMailRequest, + UploadTemplateRequest, + TemplateMetadata, + PreviewMailRequest, + PreviewMailResponse, +} from "./entity"; + +export async function sendMail(data: SendMailRequest): Promise { + return apiFetch("/mail/send", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function sendBatchMail(data: SendBatchMailRequest): Promise { + return apiFetch("/mail/send/batch", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function uploadTemplate( + data: UploadTemplateRequest, + file: File +): Promise { + const formData = new FormData(); + formData.append("name", data.name); + if (data.previewText) { + formData.append("previewText", data.previewText); + } + formData.append("template", file); + + return apiFetch("/mail/template", { + method: "POST", + body: formData, + }); +} + +export async function getTemplateMetadata( + templateId: string +): Promise { + return apiFetch( + `/mail/template/${templateId}/metadata`, + { method: "GET" } + ); +} + +export async function getTemplatePreview( + templateId: string, + data: PreviewMailRequest +): Promise { + return apiFetch( + `/mail/template/${templateId}/preview`, + { + method: "POST", + body: JSON.stringify(data), + } + ); +} diff --git a/sdk/api/organizer-application/entity.ts b/sdk/api/organizer-application/entity.ts new file mode 100644 index 00000000..c1087964 --- /dev/null +++ b/sdk/api/organizer-application/entity.ts @@ -0,0 +1,61 @@ +export enum YearStanding { + FRESHMAN = "Freshman", + SOPHOMORE = "Sophomore", + JUNIOR = "Junior", + SENIOR = "Senior", + OTHER = "Other", +} + +export enum OrganizerTeam { + COMMUNICATIONS = "Communications", + DESIGN = "Design", + EDUCATION = "Education", + ENTERTAINMENT = "Entertainment", + FINANCE = "Finance", + LOGISTICS = "Logistics", + MARKETING = "Marketing", + SPONSORSHIP = "Sponsorship", + TECHNOLOGY = "Technology", +} + +export enum ApplicationStatus { + PENDING = "pending", + ACCEPTED = "accepted", + REJECTED = "rejected", +} + +export interface OrganizerApplicationEntity { + id: number; + name: string; + email: string; + yearStanding: YearStanding; + major: string; + firstChoiceTeam: OrganizerTeam; + secondChoiceTeam: OrganizerTeam; + resumeUrl: string; + whyHackpsu: string; + newIdea: string; + whatExcitesYou: string; + firstChoiceStatus?: ApplicationStatus; + secondChoiceStatus?: ApplicationStatus; + assignedTeam?: OrganizerTeam; + createdAt?: string; + updatedAt?: string; +} + +// DTOs + +export type OrganizerApplicationCreateEntity = Omit< + OrganizerApplicationEntity, + | "id" + | "resumeUrl" + | "firstChoiceStatus" + | "secondChoiceStatus" + | "assignedTeam" + | "createdAt" + | "updatedAt" +>; + +export interface ApplicationActionDto { + team: OrganizerTeam; +} diff --git a/sdk/api/organizer-application/hook.ts b/sdk/api/organizer-application/hook.ts new file mode 100644 index 00000000..8e3958a8 --- /dev/null +++ b/sdk/api/organizer-application/hook.ts @@ -0,0 +1,107 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { + acceptOrganizerApplication, + createOrganizerApplication, + getAllOrganizerApplications, + getOrganizerApplication, + getOrganizerApplicationsByTeam, + rejectOrganizerApplication, +} from "./provider"; +import { + ApplicationActionDto, + OrganizerApplicationCreateEntity, + OrganizerApplicationEntity, + OrganizerTeam, +} from "./entity"; + +export const organizerApplicationQueryKeys = { + all: ["organizer-applications"] as const, + byTeam: (team: OrganizerTeam) => + ["organizer-applications", "team", team] as const, + detail: (id: number) => ["organizer-applications", id] as const, +}; + +export function useCreateOrganizerApplication() { + const client = useQueryClient(); + return useMutation< + OrganizerApplicationEntity, + Error, + { data: OrganizerApplicationCreateEntity; resume: File } + >({ + mutationFn: ({ data, resume }) => createOrganizerApplication(data, resume), + onSuccess: () => { + client.invalidateQueries({ queryKey: organizerApplicationQueryKeys.all }); + }, + }); +} + +export function useAllOrganizerApplications() { + return useQuery({ + queryKey: organizerApplicationQueryKeys.all, + queryFn: getAllOrganizerApplications, + }); +} + +export function useOrganizerApplicationsByTeam(team: OrganizerTeam) { + return useQuery<{ + firstChoiceApplications: OrganizerApplicationEntity[]; + secondChoiceApplications: OrganizerApplicationEntity[]; + }>({ + queryKey: organizerApplicationQueryKeys.byTeam(team), + queryFn: () => getOrganizerApplicationsByTeam(team), + enabled: !!team, + }); +} + +export function useOrganizerApplication(id: number) { + return useQuery({ + queryKey: organizerApplicationQueryKeys.detail(id), + queryFn: () => getOrganizerApplication(id), + enabled: !!id, + }); +} + +export function useAcceptOrganizerApplication() { + const client = useQueryClient(); + return useMutation< + OrganizerApplicationEntity, + Error, + { id: number; data: ApplicationActionDto } + >({ + mutationFn: ({ id, data }) => acceptOrganizerApplication(id, data), + onSuccess: (updated) => { + client.invalidateQueries({ queryKey: organizerApplicationQueryKeys.all }); + client.invalidateQueries({ + queryKey: organizerApplicationQueryKeys.detail(updated.id), + }); + // Invalidate team queries as well since status changed + Object.values(OrganizerTeam).forEach((team) => { + client.invalidateQueries({ + queryKey: organizerApplicationQueryKeys.byTeam(team), + }); + }); + }, + }); +} + +export function useRejectOrganizerApplication() { + const client = useQueryClient(); + return useMutation< + OrganizerApplicationEntity, + Error, + { id: number; data: ApplicationActionDto } + >({ + mutationFn: ({ id, data }) => rejectOrganizerApplication(id, data), + onSuccess: (updated) => { + client.invalidateQueries({ queryKey: organizerApplicationQueryKeys.all }); + client.invalidateQueries({ + queryKey: organizerApplicationQueryKeys.detail(updated.id), + }); + Object.values(OrganizerTeam).forEach((team) => { + client.invalidateQueries({ + queryKey: organizerApplicationQueryKeys.byTeam(team), + }); + }); + }, + }); +} diff --git a/sdk/api/organizer-application/index.ts b/sdk/api/organizer-application/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/organizer-application/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/organizer-application/provider.ts b/sdk/api/organizer-application/provider.ts new file mode 100644 index 00000000..3ac103a9 --- /dev/null +++ b/sdk/api/organizer-application/provider.ts @@ -0,0 +1,73 @@ +import { apiFetch } from "../apiClient"; +import { + ApplicationActionDto, + OrganizerApplicationCreateEntity, + OrganizerApplicationEntity, + OrganizerTeam, +} from "./entity"; + +export async function createOrganizerApplication( + data: OrganizerApplicationCreateEntity, + resume: File, +): Promise { + const formData = new FormData(); + formData.append("resume", resume); + Object.entries(data).forEach(([key, value]) => { + formData.append(key, value as string); + }); + + return await apiFetch("organizer-applications", { + method: "POST", + body: formData, + }); +} + +export async function getAllOrganizerApplications(): Promise< + OrganizerApplicationEntity[] +> { + return await apiFetch("organizer-applications"); +} + +export async function getOrganizerApplicationsByTeam(team: OrganizerTeam): Promise<{ + firstChoiceApplications: OrganizerApplicationEntity[]; + secondChoiceApplications: OrganizerApplicationEntity[]; +}> { + return await apiFetch<{ + firstChoiceApplications: OrganizerApplicationEntity[]; + secondChoiceApplications: OrganizerApplicationEntity[]; + }>(`organizer-applications/by-team/${team}`); +} + +export async function getOrganizerApplication( + id: number, +): Promise { + return await apiFetch( + `organizer-applications/${id}`, + ); +} + +export async function acceptOrganizerApplication( + id: number, + data: ApplicationActionDto, +): Promise { + return await apiFetch( + `organizer-applications/${id}/accept`, + { + method: "PATCH", + body: JSON.stringify(data), + }, + ); +} + +export async function rejectOrganizerApplication( + id: number, + data: ApplicationActionDto, +): Promise { + return await apiFetch( + `organizer-applications/${id}/reject`, + { + method: "PATCH", + body: JSON.stringify(data), + }, + ); +} diff --git a/sdk/api/organizer/entity.ts b/sdk/api/organizer/entity.ts new file mode 100644 index 00000000..14d45e96 --- /dev/null +++ b/sdk/api/organizer/entity.ts @@ -0,0 +1,48 @@ +export enum Role { + NONE, + VOLUNTEER, + TEAM, + EXEC, + TECH, + FINANCE, +} + +export interface OrganizerEntity { + id: string; + email: string; + firstName: string; + lastName: string; + privilege: Role; + team?: string; + judgingLocation?: string; + award?: string; + isActive: boolean; +} + +export interface OrganizerProjectScore { + id: number; + name: string; + hackathonId: string; + categories: string; + teamId: string; + githubLink?: string; + devpostLink?: string; + score: { + creativity: number; + technical: number; + implementation: number; + clarity: number; + growth: number; + challenge1: number; + challenge2: number; + challenge3: number; + hackathonId: string; + judgeId: string; + projectId: number; + submitted: boolean; + }; +} + +export interface OrganizerProjectReassign { + excludeProjects?: number[]; +} diff --git a/sdk/api/organizer/hook.ts b/sdk/api/organizer/hook.ts new file mode 100644 index 00000000..b0d84ebe --- /dev/null +++ b/sdk/api/organizer/hook.ts @@ -0,0 +1,173 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllOrganizers, + getOrganizer, + createOrganizer, + updateOrganizer, + replaceOrganizer, + deleteOrganizer, + resendAllVerificationEmails, + getOrganizerScans, + getOrganizerJudgingProjects, + updateOrganizerProjectScore, + deleteOrganizerProjectAndReassign, +} from "./provider"; +import { + OrganizerEntity, + OrganizerProjectScore, + OrganizerProjectReassign, +} from "./entity"; + +export const organizerQueryKeys = { + all: ["organizers"] as const, + detail: (id: string) => ["organizer", id] as const, + scans: (id: string) => ["organizer", id, "scans"] as const, + judgingProjects: (id: string) => + ["organizer", id, "judging", "projects"] as const, +}; + +export function useAllOrganizers() { + return useQuery({ + queryKey: organizerQueryKeys.all, + queryFn: getAllOrganizers, + }); +} + +export function useOrganizer(id: string) { + return useQuery({ + queryKey: organizerQueryKeys.detail(id), + queryFn: () => getOrganizer(id), + enabled: Boolean(id), + }); +} + +export function useCreateOrganizer() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (newData: Omit) => + createOrganizer(newData), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: organizerQueryKeys.all }); + }, + }); +} + +export function useUpdateOrganizer() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + id, + data, + }: { + id: string; + data: Partial>; + }) => updateOrganizer(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: organizerQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: organizerQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useReplaceOrganizer() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + id, + data, + }: { + id: string; + data: Omit; + }) => replaceOrganizer(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: organizerQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: organizerQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useDeleteOrganizer() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => deleteOrganizer(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: organizerQueryKeys.all }); + }, + }); +} + +export function useResendAllVerificationEmails() { + return useMutation({ + mutationFn: resendAllVerificationEmails, + }); +} + +export function useOrganizerScans(id: string) { + return useQuery({ + queryKey: organizerQueryKeys.scans(id), + queryFn: () => getOrganizerScans(id), + enabled: Boolean(id), + }); +} + +export function useOrganizerJudgingProjects(id: string) { + return useQuery({ + queryKey: organizerQueryKeys.judgingProjects(id), + queryFn: () => getOrganizerJudgingProjects(id), + enabled: Boolean(id), + }); +} + +export function useUpdateOrganizerProjectScore() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + id, + projectId, + data, + }: { + id: string; + projectId: number; + data: { + creativity?: number; + technical?: number; + implementation?: number; + clarity?: number; + growth?: number; + challenge1?: number; + challenge2?: number; + challenge3?: number; + submitted?: boolean; + }; + }) => updateOrganizerProjectScore(id, projectId, data), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: organizerQueryKeys.judgingProjects(variables.id), + }); + }, + }); +} + +export function useDeleteOrganizerProjectAndReassign() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + id, + projectId, + data, + }: { + id: string; + projectId: number; + data: OrganizerProjectReassign; + }) => deleteOrganizerProjectAndReassign(id, projectId, data), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: organizerQueryKeys.judgingProjects(variables.id), + }); + }, + }); +} diff --git a/sdk/api/organizer/index.ts b/sdk/api/organizer/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/organizer/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/organizer/provider.ts b/sdk/api/organizer/provider.ts new file mode 100644 index 00000000..e4dbb28e --- /dev/null +++ b/sdk/api/organizer/provider.ts @@ -0,0 +1,100 @@ +import { apiFetch } from "../apiClient"; +import { + OrganizerEntity, + OrganizerProjectScore, + OrganizerProjectReassign, +} from "./entity"; + +export async function getAllOrganizers(): Promise { + return apiFetch("/organizers", { method: "GET" }); +} + +export async function getOrganizer(id: string): Promise { + return apiFetch(`/organizers/${id}`, { method: "GET" }); +} + +export async function createOrganizer( + data: Omit +): Promise { + return apiFetch("/organizers", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function updateOrganizer( + id: string, + data: Partial> +): Promise { + return apiFetch(`/organizers/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function replaceOrganizer( + id: string, + data: Omit +): Promise { + return apiFetch(`/organizers/${id}`, { + method: "PUT", + body: JSON.stringify(data), + }); +} + +export async function deleteOrganizer(id: string): Promise { + return apiFetch(`/organizers/${id}`, { method: "DELETE" }); +} + +export async function resendAllVerificationEmails(): Promise<{ + message: string; +}> { + return apiFetch<{ message: string }>("/organizers/resend-verification", { + method: "POST", + }); +} + +export async function getOrganizerScans(id: string): Promise { + return apiFetch(`/organizers/${id}/scans`, { method: "GET" }); +} + +export async function getOrganizerJudgingProjects( + id: string +): Promise { + return apiFetch( + `/organizers/${id}/judging/projects`, + { method: "GET" } + ); +} + +export async function updateOrganizerProjectScore( + id: string, + projectId: number, + data: { + creativity?: number; + technical?: number; + implementation?: number; + clarity?: number; + growth?: number; + challenge1?: number; + challenge2?: number; + challenge3?: number; + submitted?: boolean; + } +): Promise { + return apiFetch(`/organizers/${id}/judging/projects/${projectId}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function deleteOrganizerProjectAndReassign( + id: string, + projectId: number, + data: OrganizerProjectReassign +): Promise { + return apiFetch(`/organizers/${id}/judging/projects/${projectId}`, { + method: "DELETE", + body: JSON.stringify(data), + }); +} diff --git a/sdk/api/photos/entity.ts b/sdk/api/photos/entity.ts new file mode 100644 index 00000000..fcdffb86 --- /dev/null +++ b/sdk/api/photos/entity.ts @@ -0,0 +1,25 @@ +export interface PhotoEntity { + name: string; + url: string; + createdAt: string; + uploadedBy?: string; + approvalStatus?: string; + derivatives?: Record; +} + +export interface PhotoUploadResponse { + photoId: string; + photoUrl: string; + derivatives: Record; +} + +export interface PaginatedPhotosResponse { + photos: PhotoEntity[]; + pagination: { + currentPage: number; + totalPages: number; + totalItems: number; + hasNext: boolean; + hasPrevious: boolean; + }; +} diff --git a/sdk/api/photos/hook.ts b/sdk/api/photos/hook.ts new file mode 100644 index 00000000..921d012e --- /dev/null +++ b/sdk/api/photos/hook.ts @@ -0,0 +1,99 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { + approvePhoto, + deletePhoto, + getAllPendingPhotos, + getAllPhotos, + getPaginatedPhotos, + rejectPhoto, + uploadPhoto, +} from "./provider"; +import { + PaginatedPhotosResponse, + PhotoEntity, + PhotoUploadResponse, +} from "./entity"; + +export const photoQueryKeys = { + all: ["photos"] as const, + paginated: (page: number, limit: number, status?: string) => + ["photos", "paginated", page, limit, status] as const, + pending: ["photos", "pending"] as const, +}; + +export function useUploadPhoto() { + const client = useQueryClient(); + return useMutation< + PhotoUploadResponse, + Error, + { file: File; fileType?: string } + >({ + mutationFn: ({ file, fileType }) => uploadPhoto(file, fileType), + onSuccess: () => { + client.invalidateQueries({ queryKey: photoQueryKeys.all }); + client.invalidateQueries({ queryKey: ["photos", "paginated"] }); + client.invalidateQueries({ queryKey: photoQueryKeys.pending }); + }, + }); +} + +export function useAllPhotos() { + return useQuery({ + queryKey: photoQueryKeys.all, + queryFn: getAllPhotos, + }); +} + +export function usePaginatedPhotos( + page: number = 1, + limit: number = 10, + status?: string, +) { + return useQuery({ + queryKey: photoQueryKeys.paginated(page, limit, status), + queryFn: () => getPaginatedPhotos(page, limit, status), + }); +} + +export function usePendingPhotos() { + return useQuery({ + queryKey: photoQueryKeys.pending, + queryFn: getAllPendingPhotos, + }); +} + +export function useApprovePhoto() { + const client = useQueryClient(); + return useMutation<{ message: string }, Error, string>({ + mutationFn: approvePhoto, + onSuccess: () => { + client.invalidateQueries({ queryKey: photoQueryKeys.all }); + client.invalidateQueries({ queryKey: ["photos", "paginated"] }); + client.invalidateQueries({ queryKey: photoQueryKeys.pending }); + }, + }); +} + +export function useRejectPhoto() { + const client = useQueryClient(); + return useMutation<{ message: string }, Error, string>({ + mutationFn: rejectPhoto, + onSuccess: () => { + client.invalidateQueries({ queryKey: photoQueryKeys.all }); + client.invalidateQueries({ queryKey: ["photos", "paginated"] }); + client.invalidateQueries({ queryKey: photoQueryKeys.pending }); + }, + }); +} + +export function useDeletePhoto() { + const client = useQueryClient(); + return useMutation({ + mutationFn: ({ photoId, originalName }) => deletePhoto(photoId, originalName), + onSuccess: () => { + client.invalidateQueries({ queryKey: photoQueryKeys.all }); + client.invalidateQueries({ queryKey: ["photos", "paginated"] }); + client.invalidateQueries({ queryKey: photoQueryKeys.pending }); + }, + }); +} diff --git a/sdk/api/photos/index.ts b/sdk/api/photos/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/photos/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/photos/provider.ts b/sdk/api/photos/provider.ts new file mode 100644 index 00000000..e3c87a92 --- /dev/null +++ b/sdk/api/photos/provider.ts @@ -0,0 +1,69 @@ +import { apiFetch } from "../apiClient"; +import { + PaginatedPhotosResponse, + PhotoEntity, + PhotoUploadResponse, +} from "./entity"; + +export async function uploadPhoto( + file: File, + fileType?: string, +): Promise { + const formData = new FormData(); + formData.append("photo", file); + if (fileType) { + formData.append("fileType", fileType); + } + + return await apiFetch("photos/upload", { + method: "POST", + body: formData, + }); +} + +export async function getAllPhotos(): Promise { + return await apiFetch("photos"); +} + +export async function getPaginatedPhotos( + page: number = 1, + limit: number = 10, + status?: string, +): Promise { + const params = new URLSearchParams({ + page: page.toString(), + limit: limit.toString(), + }); + if (status) { + params.append("status", status); + } + return await apiFetch( + `photos/paginated?${params.toString()}`, + ); +} + +export async function getAllPendingPhotos(): Promise { + return await apiFetch("photos/pending"); +} + +export async function approvePhoto(filename: string): Promise<{ message: string }> { + return await apiFetch<{ message: string }>(`photos/${filename}/approve`, { + method: "PATCH", + }); +} + +export async function rejectPhoto(filename: string): Promise<{ message: string }> { + return await apiFetch<{ message: string }>(`photos/${filename}/reject`, { + method: "PATCH", + }); +} + +export async function deletePhoto( + photoId: string, + originalName: string, +): Promise { + const params = new URLSearchParams({ originalName }); + return await apiFetch(`photos/${photoId}?${params.toString()}`, { + method: "DELETE", + }); +} diff --git a/sdk/api/registration/entity.ts b/sdk/api/registration/entity.ts new file mode 100644 index 00000000..b755642f --- /dev/null +++ b/sdk/api/registration/entity.ts @@ -0,0 +1,27 @@ +export interface RegistrationEntity { + id: number; + userId: string; + age: number; + shareAddressSponsors?: boolean; + travelReimbursement?: boolean; + shareAddressMlh?: boolean; + educationalInstitutionType: string; + academicYear: string; + codingExperience?: string; + expectations?: string; + driving?: boolean; + hackathonId: string; + firstHackathon?: boolean; + mlhCoc: boolean; + mlhDcp: boolean; + project?: string; + referral?: string; + shareEmailMlh?: boolean; + time: number; + veteran: string; + excitement?: string; + zip_code?: string; + travel_cost?: string; + travel_method?: string; + travel_additional?: string; +} diff --git a/sdk/api/registration/hook.ts b/sdk/api/registration/hook.ts new file mode 100644 index 00000000..b5866757 --- /dev/null +++ b/sdk/api/registration/hook.ts @@ -0,0 +1,15 @@ +import { useQuery } from "@tanstack/react-query"; +import { getAllRegistrations } from "./provider"; +import { RegistrationEntity } from "./entity"; + +export const registrationQueryKeys = { + all: (all?: boolean) => + all !== undefined ? ["registrations", all] : (["registrations"] as const), +}; + +export function useAllRegistrations(all?: boolean) { + return useQuery({ + queryKey: registrationQueryKeys.all(all), + queryFn: () => getAllRegistrations(all), + }); +} diff --git a/sdk/api/registration/index.ts b/sdk/api/registration/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/registration/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/registration/provider.ts b/sdk/api/registration/provider.ts new file mode 100644 index 00000000..8562553f --- /dev/null +++ b/sdk/api/registration/provider.ts @@ -0,0 +1,11 @@ +import { apiFetch } from "../apiClient"; +import { RegistrationEntity } from "./entity"; + +export async function getAllRegistrations( + all?: boolean +): Promise { + const queryParam = all ? "?all=true" : ""; + return apiFetch(`/registrations${queryParam}`, { + method: "GET", + }); +} diff --git a/sdk/api/reservation/entity.ts b/sdk/api/reservation/entity.ts new file mode 100644 index 00000000..3b960607 --- /dev/null +++ b/sdk/api/reservation/entity.ts @@ -0,0 +1,22 @@ +export enum ReservationType { + PARTICIPANT = "participant", + ADMIN = "admin", +} + +export interface ReservationEntity { + id: string; + locationId: number; + teamId: string | null; + startTime: number; + endTime: number; + hackathonId: string; + reservationType: ReservationType; +} + +export interface ReservationCreateEntity { + locationId: number; + teamId?: string; + startTime: number; + endTime: number; + hackathonId: string; +} diff --git a/sdk/api/reservation/hook.ts b/sdk/api/reservation/hook.ts new file mode 100644 index 00000000..f659043b --- /dev/null +++ b/sdk/api/reservation/hook.ts @@ -0,0 +1,38 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllReservations, + createReservation, + deleteReservation, +} from "./provider"; +import { ReservationEntity, ReservationCreateEntity } from "./entity"; + +export const reservationQueryKeys = { + all: ["reservations"] as const, +}; + +export function useReservations() { + return useQuery({ + queryKey: reservationQueryKeys.all, + queryFn: getAllReservations, + }); +} + +export function useCreateReservation() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: ReservationCreateEntity) => createReservation(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: reservationQueryKeys.all }); + }, + }); +} + +export function useCancelReservation() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => deleteReservation(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: reservationQueryKeys.all }); + }, + }); +} diff --git a/sdk/api/reservation/index.ts b/sdk/api/reservation/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/reservation/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/reservation/provider.ts b/sdk/api/reservation/provider.ts new file mode 100644 index 00000000..0c0a8b4f --- /dev/null +++ b/sdk/api/reservation/provider.ts @@ -0,0 +1,21 @@ +import { apiFetch } from "../apiClient"; +import { ReservationEntity, ReservationCreateEntity } from "./entity"; + +export async function getAllReservations(): Promise { + return apiFetch("/reservations", { + method: "GET", + }); +} + +export async function createReservation( + data: ReservationCreateEntity +): Promise { + return apiFetch("/reservations", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function deleteReservation(id: string): Promise { + return apiFetch(`/reservations/${id}`, { method: "DELETE" }); +} diff --git a/sdk/api/scan/entity.ts b/sdk/api/scan/entity.ts new file mode 100644 index 00000000..c229081f --- /dev/null +++ b/sdk/api/scan/entity.ts @@ -0,0 +1,18 @@ +import { EventEntity } from "../event/entity"; +import { OrganizerEntity } from "../organizer/entity"; + +export interface ScanEntity { + eventId: string; + userId: string; + organizerId: string; + hackathonId?: string; + timestamp?: number; +} + +export interface EventWithScans extends EventEntity { + scans: ScanEntity[]; +} + +export interface OrganizerWithScans extends OrganizerEntity { + scans: ScanEntity[]; +} diff --git a/sdk/api/scan/hook.ts b/sdk/api/scan/hook.ts new file mode 100644 index 00000000..d41a208c --- /dev/null +++ b/sdk/api/scan/hook.ts @@ -0,0 +1,72 @@ +import { useQuery } from "@tanstack/react-query"; +import { + getAllScans, + getScan, + getAllScansByEvent, + getScansForEvent, + getAllScansByOrganizer, + getScansForOrganizer, +} from "./provider"; +import { + ScanEntity, + EventWithScans, + OrganizerWithScans, +} from "./entity"; + +export const scanQueryKeys = { + all: (hackathonId?: string) => + hackathonId !== undefined + ? ["scans", hackathonId] + : (["scans"] as const), + detail: (id: string) => ["scans", id] as const, + eventAnalytics: ["scans", "events"] as const, + eventDetail: (eventId: string) => ["scans", "events", eventId] as const, + organizerAnalytics: ["scans", "organizers"] as const, + organizerDetail: (organizerId: string) => + ["scans", "organizers", organizerId] as const, +}; + +export function useAllScans(hackathonId?: string) { + return useQuery({ + queryKey: scanQueryKeys.all(hackathonId), + queryFn: () => getAllScans(hackathonId), + }); +} + +export function useScan(id: string) { + return useQuery({ + queryKey: scanQueryKeys.detail(id), + queryFn: () => getScan(id), + enabled: Boolean(id), + }); +} + +export function useAllScansByEvent() { + return useQuery({ + queryKey: scanQueryKeys.eventAnalytics, + queryFn: getAllScansByEvent, + }); +} + +export function useScansForEvent(eventId: string) { + return useQuery({ + queryKey: scanQueryKeys.eventDetail(eventId), + queryFn: () => getScansForEvent(eventId), + enabled: Boolean(eventId), + }); +} + +export function useAllScansByOrganizer() { + return useQuery({ + queryKey: scanQueryKeys.organizerAnalytics, + queryFn: getAllScansByOrganizer, + }); +} + +export function useScansForOrganizer(organizerId: string) { + return useQuery({ + queryKey: scanQueryKeys.organizerDetail(organizerId), + queryFn: () => getScansForOrganizer(organizerId), + enabled: Boolean(organizerId), + }); +} diff --git a/sdk/api/scan/index.ts b/sdk/api/scan/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/scan/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/scan/provider.ts b/sdk/api/scan/provider.ts new file mode 100644 index 00000000..23d1cf23 --- /dev/null +++ b/sdk/api/scan/provider.ts @@ -0,0 +1,41 @@ +import { apiFetch } from "../apiClient"; +import { + ScanEntity, + EventWithScans, + OrganizerWithScans, +} from "./entity"; + +export async function getAllScans(hackathonId?: string): Promise { + const queryParam = hackathonId ? `?hackathonId=${hackathonId}` : ""; + return apiFetch(`/scans${queryParam}`, { method: "GET" }); +} + +export async function getScan(id: string): Promise { + return apiFetch(`/scans/${id}`, { method: "GET" }); +} + +export async function getAllScansByEvent(): Promise { + return apiFetch(`/scans/analytics/events`, { + method: "GET", + }); +} + +export async function getScansForEvent(eventId: string): Promise { + return apiFetch(`/scans/analytics/events/${eventId}`, { + method: "GET", + }); +} + +export async function getAllScansByOrganizer(): Promise { + return apiFetch(`/scans/analytics/organizers`, { + method: "GET", + }); +} + +export async function getScansForOrganizer( + organizerId: string +): Promise { + return apiFetch(`/scans/analytics/organizers/${organizerId}`, { + method: "GET", + }); +} diff --git a/sdk/api/sponsor/entity.ts b/sdk/api/sponsor/entity.ts new file mode 100644 index 00000000..e06cf326 --- /dev/null +++ b/sdk/api/sponsor/entity.ts @@ -0,0 +1,25 @@ +export interface SponsorEntity { + id: number; + name: string; + level: string; + link?: string; + darkLogo?: string; + lightLogo?: string; + order: number; + hackathonId?: string; +} + +export type SponsorCreateEntity = Omit< + SponsorEntity, + "id" | "darkLogo" | "lightLogo" +>; + +export type SponsorPatchEntity = Partial; + +export type SponsorPatchBatchEntity = Pick & + Partial< + Omit< + SponsorEntity, + "id" | "name" | "lightLogo" | "darkLogo" | "hackathonId" + > + >; diff --git a/sdk/api/sponsor/hook.ts b/sdk/api/sponsor/hook.ts new file mode 100644 index 00000000..918c4025 --- /dev/null +++ b/sdk/api/sponsor/hook.ts @@ -0,0 +1,112 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { + batchUpdateSponsors, + createSponsor, + deleteSponsor, + getAllSponsors, + getSponsor, + replaceSponsor, + updateSponsor, +} from "./provider"; +import { + SponsorCreateEntity, + SponsorEntity, + SponsorPatchBatchEntity, + SponsorPatchEntity, +} from "./entity"; + +export const sponsorQueryKeys = { + all: ["sponsors"] as const, + detail: (id: number) => ["sponsor", id] as const, +}; + +export function useAllSponsors(hackathonId?: string) { + return useQuery({ + queryKey: sponsorQueryKeys.all, + queryFn: () => getAllSponsors(hackathonId), + }); +} + +export function useSponsor(id: number) { + return useQuery({ + queryKey: sponsorQueryKeys.detail(id), + queryFn: () => getSponsor(id), + enabled: Boolean(id), + }); +} + +export function useCreateSponsor() { + const queryClient = useQueryClient(); + return useMutation< + SponsorEntity, + Error, + { data: SponsorCreateEntity; files?: { darkLogo?: File; lightLogo?: File } } + >({ + mutationFn: ({ data, files }) => createSponsor(data, files), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: sponsorQueryKeys.all }); + }, + }); +} + +export function useUpdateSponsor() { + const queryClient = useQueryClient(); + return useMutation< + SponsorEntity, + Error, + { + id: number; + data: SponsorPatchEntity; + files?: { darkLogo?: File; lightLogo?: File }; + } + >({ + mutationFn: ({ id, data, files }) => updateSponsor(id, data, files), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: sponsorQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: sponsorQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useReplaceSponsor() { + const queryClient = useQueryClient(); + return useMutation< + SponsorEntity, + Error, + { + id: number; + data: SponsorCreateEntity; + files?: { darkLogo?: File; lightLogo?: File }; + } + >({ + mutationFn: ({ id, data, files }) => replaceSponsor(id, data, files), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: sponsorQueryKeys.all }); + queryClient.invalidateQueries({ + queryKey: sponsorQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useDeleteSponsor() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: number) => deleteSponsor(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: sponsorQueryKeys.all }); + }, + }); +} + +export function useBatchUpdateSponsors() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: SponsorPatchBatchEntity[]) => batchUpdateSponsors(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: sponsorQueryKeys.all }); + }, + }); +} diff --git a/sdk/api/sponsor/index.ts b/sdk/api/sponsor/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/sponsor/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/sponsor/provider.ts b/sdk/api/sponsor/provider.ts new file mode 100644 index 00000000..eafad61a --- /dev/null +++ b/sdk/api/sponsor/provider.ts @@ -0,0 +1,93 @@ +import { apiFetch } from "../apiClient"; +import { + SponsorCreateEntity, + SponsorEntity, + SponsorPatchBatchEntity, + SponsorPatchEntity, +} from "./entity"; + +export async function getAllSponsors( + hackathonId?: string, +): Promise { + const queryParam = hackathonId ? `?hackathonId=${hackathonId}` : ""; + return apiFetch(`/sponsors${queryParam}`, { method: "GET" }); +} + +export async function getSponsor(id: number): Promise { + return apiFetch(`/sponsors/${id}`, { method: "GET" }); +} + +export async function createSponsor( + data: SponsorCreateEntity, + files?: { darkLogo?: File; lightLogo?: File }, +): Promise { + const formData = new FormData(); + if (files?.darkLogo) formData.append("darkLogo", files.darkLogo); + if (files?.lightLogo) formData.append("lightLogo", files.lightLogo); + + Object.entries(data).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, value as string); + } + }); + + return apiFetch("/sponsors", { + method: "POST", + body: formData, + }); +} + +export async function updateSponsor( + id: number, + data: SponsorPatchEntity, + files?: { darkLogo?: File; lightLogo?: File }, +): Promise { + const formData = new FormData(); + if (files?.darkLogo) formData.append("darkLogo", files.darkLogo); + if (files?.lightLogo) formData.append("lightLogo", files.lightLogo); + + Object.entries(data).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, value as string); + } + }); + + return apiFetch(`/sponsors/${id}`, { + method: "PATCH", + body: formData, + }); +} + +export async function replaceSponsor( + id: number, + data: SponsorCreateEntity, + files?: { darkLogo?: File; lightLogo?: File }, +): Promise { + const formData = new FormData(); + if (files?.darkLogo) formData.append("darkLogo", files.darkLogo); + if (files?.lightLogo) formData.append("lightLogo", files.lightLogo); + + Object.entries(data).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, value as string); + } + }); + + return apiFetch(`/sponsors/${id}`, { + method: "PUT", + body: formData, + }); +} + +export async function deleteSponsor(id: number): Promise { + return apiFetch(`/sponsors/${id}`, { method: "DELETE" }); +} + +export async function batchUpdateSponsors( + data: SponsorPatchBatchEntity[], +): Promise { + return apiFetch("/sponsors/batch/update", { + method: "PATCH", + body: JSON.stringify(data), + }); +} diff --git a/sdk/api/team/entity.ts b/sdk/api/team/entity.ts new file mode 100644 index 00000000..54296bcb --- /dev/null +++ b/sdk/api/team/entity.ts @@ -0,0 +1,33 @@ +export interface TeamEntity { + id: string; + name: string; + hackathonId: string; + isActive: boolean; + member1: string | null; + member2: string | null; + member3: string | null; + member4: string | null; + member5: string | null; +} + +export interface TeamCreateEntity { + name: string; + member1?: string; + member2?: string; + member3?: string; + member4?: string; + member5?: string; +} + +export interface TeamUpdateEntity { + name?: string; + member1?: string | null; + member2?: string | null; + member3?: string | null; + member4?: string | null; + member5?: string | null; +} + +export interface AddUserByEmailEntity { + email: string; +} diff --git a/sdk/api/team/hook.ts b/sdk/api/team/hook.ts new file mode 100644 index 00000000..8f1de5b7 --- /dev/null +++ b/sdk/api/team/hook.ts @@ -0,0 +1,92 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllTeams, + getTeam, + createTeam, + updateTeam, + addUserByEmail, + deleteTeam, +} from "./provider"; +import { + TeamEntity, + TeamCreateEntity, + TeamUpdateEntity, + AddUserByEmailEntity, +} from "./entity"; + +export const teamQueryKeys = { + all: (active?: boolean) => + active !== undefined + ? (["teams", { active }] as const) + : (["teams"] as const), + detail: (id: string) => ["teams", id] as const, +}; + +export function useAllTeams(active?: boolean) { + return useQuery({ + queryKey: teamQueryKeys.all(active), + queryFn: () => getAllTeams(active), + }); +} + +export function useTeam(id: string) { + return useQuery({ + queryKey: teamQueryKeys.detail(id), + queryFn: () => getTeam(id), + enabled: Boolean(id), + }); +} + +export function useCreateTeam() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (data: TeamCreateEntity) => createTeam(data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: teamQueryKeys.all() }); + }, + }); +} + +export function useUpdateTeam() { + const queryClient = useQueryClient(); + return useMutation< + TeamEntity, + Error, + { id: string; data: TeamUpdateEntity } + >({ + mutationFn: ({ id, data }) => updateTeam(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: teamQueryKeys.all() }); + queryClient.invalidateQueries({ + queryKey: teamQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useAddUserByEmail() { + const queryClient = useQueryClient(); + return useMutation< + TeamEntity, + Error, + { id: string; data: AddUserByEmailEntity } + >({ + mutationFn: ({ id, data }) => addUserByEmail(id, data), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: teamQueryKeys.all() }); + queryClient.invalidateQueries({ + queryKey: teamQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useDeleteTeam() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => deleteTeam(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: teamQueryKeys.all() }); + }, + }); +} diff --git a/sdk/api/team/index.ts b/sdk/api/team/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/team/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/team/provider.ts b/sdk/api/team/provider.ts new file mode 100644 index 00000000..5facd018 --- /dev/null +++ b/sdk/api/team/provider.ts @@ -0,0 +1,50 @@ +import { apiFetch } from "../apiClient"; +import { + TeamEntity, + TeamCreateEntity, + TeamUpdateEntity, + AddUserByEmailEntity, +} from "./entity"; + +export async function getAllTeams(active?: boolean): Promise { + const params = + active !== undefined ? `?active=${active ? "true" : "false"}` : ""; + return apiFetch(`/teams${params}`, { method: "GET" }); +} + +export async function getTeam(id: string): Promise { + return apiFetch(`/teams/${id}`, { method: "GET" }); +} + +export async function createTeam( + data: TeamCreateEntity +): Promise { + return apiFetch("/teams", { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function updateTeam( + id: string, + data: TeamUpdateEntity +): Promise { + return apiFetch(`/teams/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +export async function addUserByEmail( + id: string, + data: AddUserByEmailEntity +): Promise { + return apiFetch(`/teams/${id}/add-user`, { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function deleteTeam(id: string): Promise { + return apiFetch(`/teams/${id}`, { method: "DELETE" }); +} diff --git a/sdk/api/user/entity.ts b/sdk/api/user/entity.ts new file mode 100644 index 00000000..984b47b5 --- /dev/null +++ b/sdk/api/user/entity.ts @@ -0,0 +1,49 @@ +export interface UserEntity { + id: string; + firstName: string; + lastName: string; + gender: string; + shirtSize: string; + dietaryRestriction?: string; + allergies?: string; + university: string; + email: string; + major: string; + phone: string; + country: string; + race?: string; + resume?: string; +} + +export interface UserProfileResponse extends UserEntity { + registration: any | null; +} + +export interface UserRegisterRequest { + age: number; + shareAddressSponsors?: boolean; + travelReimbursement?: boolean; + shareAddressMlh?: boolean; + educationalInstitutionType: string; + academicYear: string; + codingExperience?: string; + expectations?: string; + driving?: boolean; + firstHackathon?: boolean; + mlhCoc: boolean; + mlhDcp: boolean; + project?: string; + referral?: string; + shareEmailMlh?: boolean; + time: number; + veteran: string; + excitement?: string; + zip_code?: string; + travel_cost?: string; + travel_method?: string; + travel_additional?: string; +} + +export interface UserCheckInRequest { + hackathonId: string; +} diff --git a/sdk/api/user/hook.ts b/sdk/api/user/hook.ts new file mode 100644 index 00000000..cba6d581 --- /dev/null +++ b/sdk/api/user/hook.ts @@ -0,0 +1,214 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { + getAllUsers, + getUser, + getMyInfo, + createUser, + updateUser, + replaceUser, + deleteUser, + getUserResume, + getAllResumes, + registerUser, + checkInUser, + getUserExtraCreditClasses, + assignExtraCreditClass, + unassignExtraCreditClass, + exportUsersData, +} from "./provider"; +import { + UserEntity, + UserProfileResponse, + UserRegisterRequest, + UserCheckInRequest, +} from "./entity"; + +export const userQueryKeys = { + all: (active?: boolean) => + active !== undefined ? ["users", active] : (["users"] as const), + detail: (id: string) => ["user", id] as const, + myInfo: ["user", "me"] as const, + resume: (id: string) => ["user", id, "resume"] as const, + allResumes: ["users", "resumes"] as const, + extraCreditClasses: (id: string) => + ["user", id, "extra-credit", "classes"] as const, + exportData: ["users", "export"] as const, +}; + +export function useAllUsers(active?: boolean) { + return useQuery({ + queryKey: userQueryKeys.all(active), + queryFn: () => getAllUsers(active), + }); +} + +export function useUser(id: string) { + return useQuery({ + queryKey: userQueryKeys.detail(id), + queryFn: () => getUser(id), + enabled: Boolean(id), + }); +} + +export function useMyInfo() { + return useQuery({ + queryKey: userQueryKeys.myInfo, + queryFn: getMyInfo, + }); +} + +export function useCreateUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + data, + resume, + }: { + data: Omit; + resume?: File; + }) => createUser(data, resume), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: userQueryKeys.all() }); + }, + }); +} + +export function useUpdateUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + id, + data, + resume, + }: { + id: string; + data: Partial>; + resume?: File; + }) => updateUser(id, data, resume), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: userQueryKeys.all() }); + queryClient.invalidateQueries({ + queryKey: userQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useReplaceUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + id, + data, + resume, + }: { + id: string; + data: Omit; + resume?: File; + }) => replaceUser(id, data, resume), + onSuccess: (updated) => { + queryClient.invalidateQueries({ queryKey: userQueryKeys.all() }); + queryClient.invalidateQueries({ + queryKey: userQueryKeys.detail(updated.id), + }); + }, + }); +} + +export function useDeleteUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => deleteUser(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: userQueryKeys.all() }); + }, + }); +} + +export function useUserResume(id: string) { + return useQuery({ + queryKey: userQueryKeys.resume(id), + queryFn: () => getUserResume(id), + enabled: Boolean(id), + }); +} + +export function useAllResumes() { + return useQuery({ + queryKey: userQueryKeys.allResumes, + queryFn: getAllResumes, + enabled: false, // Don't fetch on page load + }); +} + +export function useRegisterUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, data }: { id: string; data: UserRegisterRequest }) => + registerUser(id, data), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: userQueryKeys.detail(variables.id), + }); + queryClient.invalidateQueries({ + queryKey: userQueryKeys.myInfo, + }); + }, + }); +} + +export function useCheckInUser() { + return useMutation({ + mutationFn: ({ + userId, + eventId, + data, + }: { + userId: string; + eventId: string; + data: UserCheckInRequest; + }) => checkInUser(userId, eventId, data), + }); +} + +export function useUserExtraCreditClasses(userId: string) { + return useQuery({ + queryKey: userQueryKeys.extraCreditClasses(userId), + queryFn: () => getUserExtraCreditClasses(userId), + enabled: Boolean(userId), + }); +} + +export function useAssignExtraCreditClass() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ userId, classId }: { userId: string; classId: number }) => + assignExtraCreditClass(userId, classId), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: userQueryKeys.extraCreditClasses(variables.userId), + }); + }, + }); +} + +export function useUnassignExtraCreditClass() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ userId, classId }: { userId: string; classId: number }) => + unassignExtraCreditClass(userId, classId), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: userQueryKeys.extraCreditClasses(variables.userId), + }); + }, + }); +} + +export function useExportUsersData() { + return useQuery({ + queryKey: userQueryKeys.exportData, + queryFn: exportUsersData, + enabled: false, // Don't fetch on page load + }); +} diff --git a/sdk/api/user/index.ts b/sdk/api/user/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/user/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/user/provider.ts b/sdk/api/user/provider.ts new file mode 100644 index 00000000..06053f6f --- /dev/null +++ b/sdk/api/user/provider.ts @@ -0,0 +1,149 @@ +import { apiFetch } from "../apiClient"; +import { + UserEntity, + UserProfileResponse, + UserRegisterRequest, + UserCheckInRequest, +} from "./entity"; + +export async function getAllUsers(active?: boolean): Promise { + const queryParam = active !== undefined ? `?active=${active}` : ""; + return apiFetch(`/users${queryParam}`, { method: "GET" }); +} + +export async function getUser(id: string): Promise { + return apiFetch(`/users/${id}`, { method: "GET" }); +} + +export async function getMyInfo(): Promise { + return apiFetch("/users/info/me", { method: "GET" }); +} + +export async function createUser( + data: Omit, + resume?: File +): Promise { + const formData = new FormData(); + Object.entries(data).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, String(value)); + } + }); + if (resume) { + formData.append("resume", resume); + } + + return apiFetch("/users", { + method: "POST", + body: formData, + }); +} + +export async function updateUser( + id: string, + data: Partial>, + resume?: File +): Promise { + const formData = new FormData(); + Object.entries(data).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, String(value)); + } + }); + if (resume) { + formData.append("resume", resume); + } + + return apiFetch(`/users/${id}`, { + method: "PATCH", + body: formData, + }); +} + +export async function replaceUser( + id: string, + data: Omit, + resume?: File +): Promise { + const formData = new FormData(); + Object.entries(data).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, String(value)); + } + }); + if (resume) { + formData.append("resume", resume); + } + + return apiFetch(`/users/${id}`, { + method: "PUT", + body: formData, + }); +} + +export async function deleteUser(id: string): Promise { + return apiFetch(`/users/${id}`, { method: "DELETE" }); +} + +export async function getUserResume(id: string): Promise { + return apiFetch(`/users/${id}/resumes`, { + method: "GET", + }); +} + +export async function getAllResumes(): Promise { + return apiFetch("/users/resumes", { + method: "GET", + }); +} + +export async function registerUser( + id: string, + data: UserRegisterRequest +): Promise { + return apiFetch(`/users/${id}/register`, { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function checkInUser( + userId: string, + eventId: string, + data: UserCheckInRequest +): Promise { + return apiFetch(`/users/${userId}/check-in/event/${eventId}`, { + method: "POST", + body: JSON.stringify(data), + }); +} + +export async function getUserExtraCreditClasses(userId: string): Promise { + return apiFetch(`/users/${userId}/extra-credit/classes`, { + method: "GET", + }); +} + +export async function assignExtraCreditClass( + userId: string, + classId: number +): Promise { + return apiFetch(`/users/${userId}/extra-credit/assign/${classId}`, { + method: "POST", + }); +} + +export async function unassignExtraCreditClass( + userId: string, + classId: number +): Promise { + return apiFetch(`/users/${userId}/extra-credit/unassign/${classId}`, { + method: "POST", + }); +} + +export async function exportUsersData(): Promise { + return apiFetch("/users/export/data", { + method: "GET", + }); +} diff --git a/sdk/api/wallet/entity.ts b/sdk/api/wallet/entity.ts new file mode 100644 index 00000000..3591d6c4 --- /dev/null +++ b/sdk/api/wallet/entity.ts @@ -0,0 +1,3 @@ +export interface WalletLinkResponse { + walletLink: string; +} diff --git a/sdk/api/wallet/hook.ts b/sdk/api/wallet/hook.ts new file mode 100644 index 00000000..60669b1c --- /dev/null +++ b/sdk/api/wallet/hook.ts @@ -0,0 +1,9 @@ +import { useMutation } from "@tanstack/react-query"; +import { createWalletPass } from "./provider"; +import { WalletLinkResponse } from "./entity"; + +export function useCreateWalletPass() { + return useMutation({ + mutationFn: (userId: string) => createWalletPass(userId), + }); +} diff --git a/sdk/api/wallet/index.ts b/sdk/api/wallet/index.ts new file mode 100644 index 00000000..61f2c36f --- /dev/null +++ b/sdk/api/wallet/index.ts @@ -0,0 +1,3 @@ +export * from "./entity"; +export * from "./provider"; +export * from "./hook"; diff --git a/sdk/api/wallet/provider.ts b/sdk/api/wallet/provider.ts new file mode 100644 index 00000000..ff824128 --- /dev/null +++ b/sdk/api/wallet/provider.ts @@ -0,0 +1,10 @@ +import { apiFetch } from "../apiClient"; +import { WalletLinkResponse } from "./entity"; + +export async function createWalletPass( + userId: string +): Promise { + return apiFetch(`/wallet/${userId}/pass`, { + method: "POST", + }); +} diff --git a/sdk/config/environment.ts b/sdk/config/environment.ts new file mode 100644 index 00000000..bafdc97b --- /dev/null +++ b/sdk/config/environment.ts @@ -0,0 +1,12 @@ +export function getEnvironment() { + return { + apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, + authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, + databaseUrl: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL, + projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, + storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET, + messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID, + appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID, + baseURL: process.env.NEXT_PUBLIC_BASE_URL_V3, + }; +} diff --git a/sdk/config/firebase.ts b/sdk/config/firebase.ts new file mode 100644 index 00000000..675944b8 --- /dev/null +++ b/sdk/config/firebase.ts @@ -0,0 +1,10 @@ +import { getEnvironment } from "./environment"; +import { initializeApp } from "firebase/app"; +import { getAuth } from "firebase/auth"; + +const config = getEnvironment(); + +const app = initializeApp(config); +const auth = getAuth(app); + +export { auth }; diff --git a/sdk/config/index.ts b/sdk/config/index.ts new file mode 100644 index 00000000..07027eff --- /dev/null +++ b/sdk/config/index.ts @@ -0,0 +1,2 @@ +export * from "./environment"; +export * from "./firebase"; diff --git a/sdk/context/AuthGuard.tsx b/sdk/context/AuthGuard.tsx new file mode 100644 index 00000000..cdd79f4b --- /dev/null +++ b/sdk/context/AuthGuard.tsx @@ -0,0 +1,331 @@ +"use client"; + +import { useEffect, useState, useRef, type ReactNode } from "react"; +import { useFirebase } from "./FirebaseProvider"; +import { jwtDecode } from "jwt-decode"; + +// Internal role definitions (used for permission checking only) +enum Role { + NONE = 0, + VOLUNTEER = 1, + TEAM = 2, + EXEC = 3, + TECH = 4, + FINANCE = 5, +} + +interface SimpleAuthGuardConfig { + authServerUrl?: string; + redirectMode?: "immediate" | "manual"; + showLoadingScreen?: boolean; + loadingTimeout?: number; + minimumRole?: Role; +} + +interface SimpleAuthGuardProps { + children: ReactNode; + config?: SimpleAuthGuardConfig; +} + +const defaultConfig: Required = { + authServerUrl: "https://auth.hackpsu.org", + redirectMode: "immediate", + showLoadingScreen: true, + loadingTimeout: 8000, + minimumRole: Role.NONE, +}; + +// Simple loading component +function SimpleLoading() { + return ( +
+
+
+

Verifying authentication...

+
+
+ ); +} + +// Extract role from Firebase token or custom claims +function getRole(token: string | undefined): number { + if (!token) { + console.log("No token provided for role extraction"); + return Role.NONE; + } + + try { + // Decode the JWT token + const decoded: any = jwtDecode(token); + console.log("Decoded token claims:", decoded); + + // Check for role in custom claims + const productionRole = decoded.claims.production; + const stagingRole = decoded.claims.staging; + const role = productionRole ?? stagingRole ?? Role.NONE; + + console.log("Role extraction:", { + productionRole, + stagingRole, + finalRole: role, + roleNames: { + [Role.NONE]: "NONE", + [Role.VOLUNTEER]: "VOLUNTEER", + [Role.TEAM]: "TEAM", + [Role.EXEC]: "EXEC", + [Role.TECH]: "TECH", + [Role.FINANCE]: "FINANCE", + }[role as Role], + }); + + return role; + } catch (error) { + console.error("Error decoding token:", error); + return Role.NONE; + } +} + +export function AuthGuard({ children, config = {} }: SimpleAuthGuardProps) { + const finalConfig = { ...defaultConfig, ...config }; + const { user, isLoading, token, verifySession } = useFirebase(); + const [authState, setAuthState] = useState< + "checking" | "authenticated" | "unauthenticated" | "unauthorized" + >("checking"); + const [hasRedirected, setHasRedirected] = useState(false); + const [retryCount, setRetryCount] = useState(0); + const mountedRef = useRef(true); + + // Handle redirect to auth server + const redirectToAuth = () => { + if (hasRedirected) { + console.log("Redirect already attempted, preventing loop"); + return; + } + + console.log("Redirecting to auth server"); + setHasRedirected(true); + + const currentUrl = window.location.href; + const authUrl = new URL(`${finalConfig.authServerUrl}/login`); + authUrl.searchParams.set("returnTo", currentUrl); + + if (finalConfig.redirectMode === "immediate") { + window.location.href = authUrl.toString(); + } + }; + + // Check user authorization with detailed logging + const checkAuthorization = (user: any, token?: string): boolean => { + if (!user) { + console.log("Authorization failed: No user"); + return false; + } + + console.log("Authorization check:", { + userEmail: user.email, + hasToken: !!token, + minimumRole: finalConfig.minimumRole, + minimumRoleName: { + [Role.NONE]: "NONE", + [Role.VOLUNTEER]: "VOLUNTEER", + [Role.TEAM]: "TEAM", + [Role.EXEC]: "EXEC", + [Role.TECH]: "TECH", + [Role.FINANCE]: "FINANCE", + }[finalConfig.minimumRole], + }); + + // If minimum role is NONE, any authenticated user is authorized + if (finalConfig.minimumRole === Role.NONE) { + console.log("Authorization passed: Minimum role is NONE"); + return true; + } + + // Check role if minimum role is specified and token is available + if (token) { + const userRole = getRole(token); + const authorized = userRole >= finalConfig.minimumRole; + + console.log("Role-based authorization:", { + userRole, + minimumRole: finalConfig.minimumRole, + authorized, + comparison: `${userRole} >= ${finalConfig.minimumRole} = ${authorized}`, + }); + + return authorized; + } else { + console.log( + "Authorization failed: Token required for role check but not available" + ); + return false; + } + }; + + // Retry session verification + const retryVerification = async () => { + if (retryCount >= 3) { + console.log("Max retries reached, redirecting to auth"); + redirectToAuth(); + return; + } + + console.log(`Retrying session verification (attempt ${retryCount + 1})`); + setRetryCount((prev) => prev + 1); + + try { + await verifySession(); + } catch (error) { + console.error("Session verification failed:", error); + } + }; + + useEffect(() => { + mountedRef.current = true; + return () => { + mountedRef.current = false; + }; + }, []); + + useEffect(() => { + let timeoutId: NodeJS.Timeout | null = null; + + console.log("Auth state check:", { + isLoading, + user: !!user, + userEmail: user?.email, + token: !!token, + authState, + minimumRole: finalConfig.minimumRole, + }); + + if (isLoading && finalConfig.loadingTimeout) { + timeoutId = setTimeout(() => { + if (mountedRef.current && isLoading) { + console.log("Loading timeout reached, attempting retry"); + retryVerification(); + } + }, finalConfig.loadingTimeout); + } + + if (!isLoading) { + if (timeoutId) { + clearTimeout(timeoutId); + } + + if (user) { + const authorized = checkAuthorization(user, token); + console.log("User found, authorized:", authorized); + setAuthState(authorized ? "authenticated" : "unauthorized"); + } else { + console.log("No user found"); + setAuthState("unauthenticated"); + + setTimeout(() => { + if (mountedRef.current && !user && !hasRedirected) { + redirectToAuth(); + } + }, 1000); + } + } + + return () => { + if (timeoutId) { + clearTimeout(timeoutId); + } + }; + }, [isLoading, user, token, retryCount]); + + // Show loading + if (authState === "checking" && finalConfig.showLoadingScreen) { + return ; + } + + // Show unauthorized (insufficient role) with detailed error info + if (authState === "unauthorized") { + const userRole = token ? getRole(token) : Role.NONE; + const roleNames = { + [Role.NONE]: "None", + [Role.VOLUNTEER]: "Volunteer", + [Role.TEAM]: "Team Member", + [Role.EXEC]: "Executive", + [Role.TECH]: "Tech Team", + [Role.FINANCE]: "Finance", + }; + + return ( +
+
+

Access Denied

+
+

+ You don't have sufficient permissions to access this + application. +

+
+

+ Your role:{" "} + + {roleNames[userRole as Role]} + +

+

+ Required role:{" "} + + {roleNames[finalConfig.minimumRole]} + +

+

+ Signed in as: {user?.email} +

+
+
+ +
+
+ ); + } + + // Show unauthenticated (manual redirect mode) + if ( + authState === "unauthenticated" && + finalConfig.redirectMode === "manual" + ) { + return ( +
+
+

Sign In Required

+

Please sign in to continue.

+ +
+
+ ); + } + + // Render authenticated content + if (authState === "authenticated") { + return <>{children}; + } + + // Default loading state + return ; +} + +// Export Role enum for use in configs +export { Role }; diff --git a/sdk/context/FirebaseProvider.tsx b/sdk/context/FirebaseProvider.tsx new file mode 100644 index 00000000..c8681e58 --- /dev/null +++ b/sdk/context/FirebaseProvider.tsx @@ -0,0 +1,207 @@ +"use client"; + +import type React from "react"; +import { + createContext, + useContext, + useEffect, + useState, + useCallback, + useMemo, + type FC, +} from "react"; +import { type Auth, type User, signOut } from "firebase/auth"; +import { auth } from "../config/firebase"; +import posthog from "posthog-js"; + +// Helper function to get auth service URL from environment +function getAuthServiceURL(): string { + // Use environment variable if set, otherwise default to production + return process.env.NEXT_PUBLIC_AUTH_SERVICE_URL || "https://auth.hackpsu.org"; +} + +type FirebaseContextType = { + auth: Auth; + isLoading: boolean; + isAuthenticated: boolean; + user?: User; + token?: string; + error?: string; + verifySession(): Promise; + logout(): Promise; +}; + +const FirebaseContext = createContext(null); + +type Props = { children: React.ReactNode }; + +export const FirebaseProvider: FC = ({ children }) => { + const [user, setUser] = useState(null); + const [token, setToken] = useState(undefined); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(undefined); + const [hasInitialized, setHasInitialized] = useState(false); + const [isLoggingOut, setIsLoggingOut] = useState(false); + + // Verify session with the auth server (environment-aware) + const verifySession = useCallback(async () => { + // Don't verify session if we're in the middle of logging out + if (isLoggingOut) { + console.log("Skipping session verification - logout in progress"); + return; + } + + const authServiceURL = getAuthServiceURL(); + console.log("Verifying session with:", authServiceURL); + + try { + const response = await fetch(`${authServiceURL}/api/sessionUser`, { + method: "GET", + credentials: "include", + headers: { + "Content-Type": "application/json", + }, + }); + + console.log("Session verification response:", response.status); + + if (response.status === 401) { + // No session or session invalid - redirect to login + console.log("No valid session, redirecting to login"); + const currentUrl = encodeURIComponent(window.location.href); + window.location.href = `${authServiceURL}/login?returnTo=${currentUrl}`; + return; + } + + if (!response.ok) { + throw new Error(`Session verification failed: ${response.status}`); + } + + const data = await response.json(); + console.log("Session data received:", !!data.customToken); + + if (data.customToken) { + const { signInWithCustomToken } = await import("firebase/auth"); + const userCredential = await signInWithCustomToken( + auth, + data.customToken + ); + + console.log("Firebase sign-in successful:", userCredential.user.email); + setUser(userCredential.user); + setToken(data.customToken); + setError(undefined); + + // Identify user in PostHog + posthog.identify(userCredential.user.uid, { + email: userCredential.user.email || undefined, + }); + } else { + throw new Error("No custom token received"); + } + } catch (err) { + console.error("Session verification failed:", err); + setUser(null); + setToken(undefined); + setError( + err instanceof Error ? err.message : "Session verification failed" + ); + throw err; + } + }, [isLoggingOut]); + + // Check for existing session on mount + useEffect(() => { + if (hasInitialized || isLoggingOut) return; + + const checkSession = async () => { + console.log("Initial session check..."); + setIsLoading(true); + try { + const timeoutPromise = new Promise((_, reject) => + setTimeout(() => reject(new Error("Session check timeout")), 5000) + ); + + await Promise.race([verifySession(), timeoutPromise]); + console.log("Initial session check successful"); + } catch (err) { + console.log("No valid session found or timeout occurred:", err); + // Don't redirect here on initial load - let the user stay on the page + // Only redirect when explicitly calling verifySession + } finally { + setIsLoading(false); + setHasInitialized(true); + } + }; + + checkSession(); + }, [verifySession, hasInitialized, isLoggingOut]); + + // Enhanced logout function (environment-aware) + const logout = useCallback(async () => { + console.log("Starting logout process..."); + setIsLoggingOut(true); + setError(undefined); + setIsLoading(true); + + const authServiceURL = getAuthServiceURL(); + + try { + // Clear PostHog identity + posthog.reset(); + + // Clear the session on the auth server first + console.log("Clearing auth server session..."); + await fetch(`${authServiceURL}/api/sessionLogout`, { + method: "POST", + credentials: "include", + headers: { + "Content-Type": "application/json", + }, + }); + + // Sign out from Firebase + console.log("Signing out from Firebase..."); + await signOut(auth); + + // Clear local state + setUser(null); + setToken(undefined); + + console.log("Logout successful"); + } catch (e: any) { + console.error("Logout failed:", e); + setError(e.message); + throw e; + } finally { + setIsLoading(false); + setIsLoggingOut(false); + } + }, []); + + const value = useMemo( + () => ({ + auth, + isLoading, + isAuthenticated: !!user && !isLoggingOut, + user: user || undefined, + token, + error, + verifySession, + logout, + }), + [isLoading, user, token, error, verifySession, logout, isLoggingOut] + ); + + return ( + + {children} + + ); +}; + +export const useFirebase = () => { + const ctx = useContext(FirebaseContext); + if (!ctx) throw new Error("useFirebase must be used within FirebaseProvider"); + return ctx; +}; diff --git a/sdk/context/LayoutProvider.tsx b/sdk/context/LayoutProvider.tsx new file mode 100644 index 00000000..18a23679 --- /dev/null +++ b/sdk/context/LayoutProvider.tsx @@ -0,0 +1,39 @@ +"use client"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { FirebaseProvider } from "./FirebaseProvider"; +import { auth } from "../config"; +import { Box } from "@mui/material"; +import { AuthGuard, Role } from "./AuthGuard"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + refetchOnWindowFocus: false, + staleTime: 30000, // Consider data fresh for 30 seconds + }, + }, +}); + +export default function LayoutProvider({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + + + + {children} + + + + + ); +} diff --git a/sdk/context/index.ts b/sdk/context/index.ts new file mode 100644 index 00000000..01366733 --- /dev/null +++ b/sdk/context/index.ts @@ -0,0 +1,3 @@ +"use client"; +export { FirebaseProvider, useFirebase } from "./FirebaseProvider"; +export { default as LayoutProvider } from "./LayoutProvider"; diff --git a/sdk/index.ts b/sdk/index.ts new file mode 100644 index 00000000..db444432 --- /dev/null +++ b/sdk/index.ts @@ -0,0 +1,26 @@ +/** + * @hackpsu/react-sdk + * Shared React hooks, providers, and API clients for HackPSU projects + * + * @example + * // Import providers and context + * import { LayoutProvider, useFirebase } from '@hackpsu/react-sdk'; + * + * // Import specific API modules + * import { useAllRegistrations } from '@hackpsu/react-sdk/api/registration'; + * import { useAllEvents } from '@hackpsu/react-sdk/api/event'; + */ + +// Config exports +export * from './config'; + +// Context exports (Providers and hooks) +export * from './context'; + +// Note: API modules are NOT exported from the main entry point to avoid naming conflicts +// (e.g., many modules export getAllX, getX, etc.) +// +// Instead, import API modules directly: +// import { useAllRegistrations } from '@hackpsu/react-sdk/api/registration'; +// import { useAllEvents } from '@hackpsu/react-sdk/api/event'; +// ... and so on diff --git a/sdk/package-lock.json b/sdk/package-lock.json new file mode 100644 index 00000000..1801049e --- /dev/null +++ b/sdk/package-lock.json @@ -0,0 +1,3936 @@ +{ + "name": "@hackpsu/react-sdk", + "version": "0.2.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@hackpsu/react-sdk", + "version": "0.2.1", + "license": "MIT", + "dependencies": { + "@mui/material": "^6.0.0", + "@tanstack/react-query": "^5.0.0", + "firebase": "^12.0.0", + "jwt-decode": "^4.0.0", + "posthog-js": "^1.0.0" + }, + "devDependencies": { + "@types/react": "^18.0.0", + "tsup": "^8.0.0", + "typescript": "^5.0.0" + }, + "peerDependencies": { + "next": "^14.0.0 || ^15.0.0", + "react": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.1.tgz", + "integrity": "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.1.tgz", + "integrity": "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.1.tgz", + "integrity": "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.1.tgz", + "integrity": "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.1.tgz", + "integrity": "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.1.tgz", + "integrity": "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.1.tgz", + "integrity": "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.1.tgz", + "integrity": "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.1.tgz", + "integrity": "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.1.tgz", + "integrity": "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.1.tgz", + "integrity": "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.1.tgz", + "integrity": "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.1.tgz", + "integrity": "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.1.tgz", + "integrity": "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.1.tgz", + "integrity": "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.1.tgz", + "integrity": "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.1.tgz", + "integrity": "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.1.tgz", + "integrity": "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.1.tgz", + "integrity": "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.1.tgz", + "integrity": "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.1.tgz", + "integrity": "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.1.tgz", + "integrity": "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.1.tgz", + "integrity": "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.1.tgz", + "integrity": "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.1.tgz", + "integrity": "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.1.tgz", + "integrity": "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@firebase/ai": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.6.0.tgz", + "integrity": "sha512-NGyE7NQDFznOv683Xk4+WoUv39iipa9lEfrwvvPz33ChzVbCCiB69FJQTK2BI/11pRtzYGbHo1/xMz7gxWWhJw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/analytics": { + "version": "0.10.19", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.19.tgz", + "integrity": "sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/analytics-compat": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.25.tgz", + "integrity": "sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/analytics": "0.10.19", + "@firebase/analytics-types": "0.8.3", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/analytics-types": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz", + "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.6.tgz", + "integrity": "sha512-4uyt8BOrBsSq6i4yiOV/gG6BnnrvTeyymlNcaN/dKvyU1GoolxAafvIvaNP1RCGPlNab3OuE4MKUQuv2lH+PLQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-check": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz", + "integrity": "sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/app-check-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz", + "integrity": "sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check": "0.11.0", + "@firebase/app-check-types": "0.5.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", + "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-check-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz", + "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-compat": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.6.tgz", + "integrity": "sha512-YYGARbutghQY4zZUWMYia0ib0Y/rb52y72/N0z3vglRHL7ii/AaK9SA7S/dzScVOlCdnbHXz+sc5Dq+r8fwFAg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@firebase/app": "0.14.6", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", + "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/@firebase/auth-compat": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.1.tgz", + "integrity": "sha512-I0o2ZiZMnMTOQfqT22ur+zcGDVSAfdNZBHo26/Tfi8EllfR1BO7aTVo2rt/ts8o/FWsK8pOALLeVBGhZt8w/vg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth": "1.11.1", + "@firebase/auth-types": "0.13.0", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/auth": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.1.tgz", + "integrity": "sha512-Mea0G/BwC1D0voSG+60Ylu3KZchXAFilXQ/hJXWCw3gebAu+RDINZA0dJMNeym7HFxBaBaByX8jSa7ys5+F2VA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", + "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/auth-types": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz", + "integrity": "sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/data-connect": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.12.tgz", + "integrity": "sha512-baPddcoNLj/+vYo+HSJidJUdr5W4OkhT109c5qhR8T1dJoZcyJpkv/dFpYlw/VJ3dV66vI8GHQFrmAZw/xUS4g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/database": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", + "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", + "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/database": "1.1.0", + "@firebase/database-types": "1.0.16", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", + "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-types": "0.9.3", + "@firebase/util": "1.13.0" + } + }, + "node_modules/@firebase/firestore": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.2.tgz", + "integrity": "sha512-iuA5+nVr/IV/Thm0Luoqf2mERUvK9g791FZpUJV1ZGXO6RL2/i/WFJUj5ZTVXy5pRjpWYO+ZzPcReNrlilmztA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "@firebase/webchannel-wrapper": "1.0.5", + "@grpc/grpc-js": "~1.9.0", + "@grpc/proto-loader": "^0.7.8", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/firestore-compat": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.2.tgz", + "integrity": "sha512-cy7ov6SpFBx+PHwFdOOjbI7kH00uNKmIFurAn560WiPCZXy9EMnil1SOG7VF4hHZKdenC+AHtL4r3fNpirpm0w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/firestore": "4.9.2", + "@firebase/firestore-types": "3.0.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/firestore-types": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz", + "integrity": "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/functions": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.13.1.tgz", + "integrity": "sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.1.tgz", + "integrity": "sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/functions": "0.13.1", + "@firebase/functions-types": "0.6.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/functions-types": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz", + "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/installations": { + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz", + "integrity": "sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/installations-compat": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz", + "integrity": "sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/installations-types": "0.5.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/installations-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz", + "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging": { + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz", + "integrity": "sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging-compat": { + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz", + "integrity": "sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/messaging": "0.12.23", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz", + "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/performance": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.9.tgz", + "integrity": "sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0", + "web-vitals": "^4.2.4" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/performance-compat": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.22.tgz", + "integrity": "sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/performance": "0.7.9", + "@firebase/performance-types": "0.2.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/performance-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz", + "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/remote-config": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.7.0.tgz", + "integrity": "sha512-dX95X6WlW7QlgNd7aaGdjAIZUiQkgWgNS+aKNu4Wv92H1T8Ue/NDUjZHd9xb8fHxLXIHNZeco9/qbZzr500MjQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/remote-config-compat": { + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.20.tgz", + "integrity": "sha512-P/ULS9vU35EL9maG7xp66uljkZgcPMQOxLj3Zx2F289baTKSInE6+YIkgHEi1TwHoddC/AFePXPpshPlEFkbgg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/remote-config": "0.7.0", + "@firebase/remote-config-types": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/remote-config-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.5.0.tgz", + "integrity": "sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/storage": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz", + "integrity": "sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/storage-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz", + "integrity": "sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/storage": "0.14.0", + "@firebase/storage-types": "0.8.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/storage-types": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz", + "integrity": "sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/webchannel-wrapper": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.5.tgz", + "integrity": "sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==", + "license": "Apache-2.0" + }, + "node_modules/@grpc/grpc-js": { + "version": "1.9.15", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", + "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.5.0.tgz", + "integrity": "sha512-LGb8t8i6M2ZtS3Drn3GbTI1DVhDY6FJ9crEey2lZ0aN2EMZo8IZBZj9wRf4vqbZHaWjsYgtbOnJw5V8UWbmK2Q==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/material": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.5.0.tgz", + "integrity": "sha512-yjvtXoFcrPLGtgKRxFaH6OQPtcLPhkloC0BML6rBG5UeldR0nPULR/2E2BfXdo5JNV7j7lOzrrLX2Qf/iSidow==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.5.0", + "@mui/system": "^6.5.0", + "@mui/types": "~7.2.24", + "@mui/utils": "^6.4.9", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.0.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^6.5.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.9.tgz", + "integrity": "sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/utils": "^6.4.9", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.5.0.tgz", + "integrity": "sha512-8woC2zAqF4qUDSPIBZ8v3sakj+WgweolpyM/FXf8jAx6FMls+IE4Y8VDZc+zS805J7PRz31vz73n2SovKGaYgw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.5.0.tgz", + "integrity": "sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.4.9", + "@mui/styled-engine": "^6.5.0", + "@mui/types": "~7.2.24", + "@mui/utils": "^6.4.9", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.24", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", + "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.9.tgz", + "integrity": "sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/types": "~7.2.24", + "@types/prop-types": "^15.7.14", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@next/env": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.7.tgz", + "integrity": "sha512-4h6Y2NyEkIEN7Z8YxkA27pq6zTkS09bUSYC0xjd0NpwFxjnIKeZEeH591o5WECSmjpUhLn3H2QLJcDye3Uzcvg==", + "license": "MIT" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.7.tgz", + "integrity": "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.7.tgz", + "integrity": "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.7.tgz", + "integrity": "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.7.tgz", + "integrity": "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.7.tgz", + "integrity": "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.7.tgz", + "integrity": "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.7.tgz", + "integrity": "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.7.tgz", + "integrity": "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@posthog/core": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.7.0.tgz", + "integrity": "sha512-d6ZV4grpzeH/6/LP8quMVpSjY1puRkrqfwcPvGRKUAX7tb7YHyp/zMiTDuJmOFbpUxAMBXH5nDwcPiyCY2WGzA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.6" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", + "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", + "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", + "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", + "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", + "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", + "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", + "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", + "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", + "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", + "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", + "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", + "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", + "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", + "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", + "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", + "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", + "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", + "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", + "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", + "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", + "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.90.12", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.12.tgz", + "integrity": "sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.90.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.12.tgz", + "integrity": "sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.90.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001759", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", + "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "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==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.1.tgz", + "integrity": "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.1", + "@esbuild/android-arm": "0.27.1", + "@esbuild/android-arm64": "0.27.1", + "@esbuild/android-x64": "0.27.1", + "@esbuild/darwin-arm64": "0.27.1", + "@esbuild/darwin-x64": "0.27.1", + "@esbuild/freebsd-arm64": "0.27.1", + "@esbuild/freebsd-x64": "0.27.1", + "@esbuild/linux-arm": "0.27.1", + "@esbuild/linux-arm64": "0.27.1", + "@esbuild/linux-ia32": "0.27.1", + "@esbuild/linux-loong64": "0.27.1", + "@esbuild/linux-mips64el": "0.27.1", + "@esbuild/linux-ppc64": "0.27.1", + "@esbuild/linux-riscv64": "0.27.1", + "@esbuild/linux-s390x": "0.27.1", + "@esbuild/linux-x64": "0.27.1", + "@esbuild/netbsd-arm64": "0.27.1", + "@esbuild/netbsd-x64": "0.27.1", + "@esbuild/openbsd-arm64": "0.27.1", + "@esbuild/openbsd-x64": "0.27.1", + "@esbuild/openharmony-arm64": "0.27.1", + "@esbuild/sunos-x64": "0.27.1", + "@esbuild/win32-arm64": "0.27.1", + "@esbuild/win32-ia32": "0.27.1", + "@esbuild/win32-x64": "0.27.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==", + "license": "MIT" + }, + "node_modules/firebase": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.6.0.tgz", + "integrity": "sha512-8ZD1Gcv916Qp8/nsFH2+QMIrfX/76ti6cJwxQUENLXXnKlOX/IJZaU2Y3bdYf5r1mbownrQKfnWtrt+MVgdwLA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/ai": "2.6.0", + "@firebase/analytics": "0.10.19", + "@firebase/analytics-compat": "0.2.25", + "@firebase/app": "0.14.6", + "@firebase/app-check": "0.11.0", + "@firebase/app-check-compat": "0.4.0", + "@firebase/app-compat": "0.5.6", + "@firebase/app-types": "0.9.3", + "@firebase/auth": "1.11.1", + "@firebase/auth-compat": "0.6.1", + "@firebase/data-connect": "0.3.12", + "@firebase/database": "1.1.0", + "@firebase/database-compat": "2.1.0", + "@firebase/firestore": "4.9.2", + "@firebase/firestore-compat": "0.4.2", + "@firebase/functions": "0.13.1", + "@firebase/functions-compat": "0.4.1", + "@firebase/installations": "0.6.19", + "@firebase/installations-compat": "0.2.19", + "@firebase/messaging": "0.12.23", + "@firebase/messaging-compat": "0.2.23", + "@firebase/performance": "0.7.9", + "@firebase/performance-compat": "0.2.22", + "@firebase/remote-config": "0.7.0", + "@firebase/remote-config-compat": "0.2.20", + "@firebase/storage": "0.14.0", + "@firebase/storage-compat": "0.4.0", + "@firebase/util": "1.13.0" + } + }, + "node_modules/firebase/node_modules/@firebase/auth": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.1.tgz", + "integrity": "sha512-Mea0G/BwC1D0voSG+60Ylu3KZchXAFilXQ/hJXWCw3gebAu+RDINZA0dJMNeym7HFxBaBaByX8jSa7ys5+F2VA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "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==", + "license": "Apache-2.0" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next": { + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.7.tgz", + "integrity": "sha512-+t2/0jIJ48kUpGKkdlhgkv+zPTEOoXyr60qXe68eB/pl3CMJaLeIGjzp5D6Oqt25hCBiBTt8wEeeAzfJvUKnPQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@next/env": "15.5.7", + "@swc/helpers": "0.5.15", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.5.7", + "@next/swc-darwin-x64": "15.5.7", + "@next/swc-linux-arm64-gnu": "15.5.7", + "@next/swc-linux-arm64-musl": "15.5.7", + "@next/swc-linux-x64-gnu": "15.5.7", + "@next/swc-linux-x64-musl": "15.5.7", + "@next/swc-win32-arm64-msvc": "15.5.7", + "@next/swc-win32-x64-msvc": "15.5.7", + "sharp": "^0.34.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "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/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/posthog-js": { + "version": "1.301.0", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.301.0.tgz", + "integrity": "sha512-HXAXPvE0us6kIPinE/DT3MfuMZNSe0tSRNplXkzGHA03izNFImqh663axROt9+8aaCH1aUCMPDHXrKxvNfVobw==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@posthog/core": "1.7.0", + "core-js": "^3.38.1", + "fflate": "^0.4.8", + "preact": "^10.19.3", + "web-vitals": "^4.2.4" + } + }, + "node_modules/preact": { + "version": "10.28.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.0.tgz", + "integrity": "sha512-rytDAoiXr3+t6OIP3WGlDd0ouCUG1iCWzkcY3++Nreuoi17y6T5i/zRhe6uYfoVcxq6YU+sBtJouuRDsq8vvqA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/react": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", + "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", + "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.1" + } + }, + "node_modules/react-is": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz", + "integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==", + "license": "MIT" + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", + "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.3", + "@rollup/rollup-android-arm64": "4.53.3", + "@rollup/rollup-darwin-arm64": "4.53.3", + "@rollup/rollup-darwin-x64": "4.53.3", + "@rollup/rollup-freebsd-arm64": "4.53.3", + "@rollup/rollup-freebsd-x64": "4.53.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", + "@rollup/rollup-linux-arm-musleabihf": "4.53.3", + "@rollup/rollup-linux-arm64-gnu": "4.53.3", + "@rollup/rollup-linux-arm64-musl": "4.53.3", + "@rollup/rollup-linux-loong64-gnu": "4.53.3", + "@rollup/rollup-linux-ppc64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-musl": "4.53.3", + "@rollup/rollup-linux-s390x-gnu": "4.53.3", + "@rollup/rollup-linux-x64-gnu": "4.53.3", + "@rollup/rollup-linux-x64-musl": "4.53.3", + "@rollup/rollup-openharmony-arm64": "4.53.3", + "@rollup/rollup-win32-arm64-msvc": "4.53.3", + "@rollup/rollup-win32-ia32-msvc": "4.53.3", + "@rollup/rollup-win32-x64-gnu": "4.53.3", + "@rollup/rollup-win32-x64-msvc": "4.53.3", + "fsevents": "~2.3.2" + } + }, + "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/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==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsup": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", + "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.27.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "^0.7.6", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/web-vitals": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", + "integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==", + "license": "Apache-2.0" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/sdk/package.json b/sdk/package.json new file mode 100644 index 00000000..cc94fdc3 --- /dev/null +++ b/sdk/package.json @@ -0,0 +1,69 @@ +{ + "name": "@hackpsu/react-sdk", + "version": "0.2.1", + "description": "Shared React hooks, providers, and API clients for HackPSU projects", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./config": { + "types": "./dist/config/index.d.ts", + "import": "./dist/config/index.mjs", + "require": "./dist/config/index.js" + }, + "./context": { + "types": "./dist/context/index.d.ts", + "import": "./dist/context/index.mjs", + "require": "./dist/context/index.js" + }, + "./api/*": { + "types": "./dist/api/*/index.d.ts", + "import": "./dist/api/*/index.mjs", + "require": "./dist/api/*/index.js" + } + }, + "files": [ + "dist" + ], + "scripts": { + "build": "NODE_OPTIONS='--max-old-space-size=8192' tsup", + "prepublishOnly": "npm run build" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "next": "^14.0.0 || ^15.0.0" + }, + "dependencies": { + "@tanstack/react-query": "^5.0.0", + "@mui/material": "^6.0.0", + "firebase": "^12.0.0", + "jwt-decode": "^4.0.0", + "posthog-js": "^1.0.0" + }, + "devDependencies": { + "@types/react": "^18.0.0", + "tsup": "^8.0.0", + "typescript": "^5.0.0" + }, + "keywords": [ + "hackpsu", + "react", + "hooks", + "firebase", + "api-client" + ], + "repository": { + "type": "git", + "url": "https://github.com/Hack-PSU/apiv3.git", + "directory": "lib" + }, + "publishConfig": { + "access": "public" + }, + "license": "MIT" +} diff --git a/sdk/tsconfig.json b/sdk/tsconfig.json new file mode 100644 index 00000000..c9c71ee2 --- /dev/null +++ b/sdk/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "jsx": "react-jsx", + "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": false + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "dist"] +} diff --git a/sdk/tsup.config.ts b/sdk/tsup.config.ts new file mode 100644 index 00000000..c247d089 --- /dev/null +++ b/sdk/tsup.config.ts @@ -0,0 +1,42 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + // Main entry + index: 'index.ts', + // Config + 'config/index': 'config/index.ts', + // Context + 'context/index': 'context/index.ts', + // API modules + 'api/analytics/index': 'api/analytics/index.ts', + 'api/apple/index': 'api/apple/index.ts', + 'api/drive/index': 'api/drive/index.ts', + 'api/event/index': 'api/event/index.ts', + 'api/extra-credit/index': 'api/extra-credit/index.ts', + 'api/finance/index': 'api/finance/index.ts', + 'api/flag/index': 'api/flag/index.ts', + 'api/hackathon/index': 'api/hackathon/index.ts', + 'api/inventory/index': 'api/inventory/index.ts', + 'api/judging/index': 'api/judging/index.ts', + 'api/location/index': 'api/location/index.ts', + 'api/mail/index': 'api/mail/index.ts', + 'api/organizer/index': 'api/organizer/index.ts', + 'api/organizer-application/index': 'api/organizer-application/index.ts', + 'api/photos/index': 'api/photos/index.ts', + 'api/registration/index': 'api/registration/index.ts', + 'api/reservation/index': 'api/reservation/index.ts', + 'api/scan/index': 'api/scan/index.ts', + 'api/sponsor/index': 'api/sponsor/index.ts', + 'api/team/index': 'api/team/index.ts', + 'api/user/index': 'api/user/index.ts', + 'api/wallet/index': 'api/wallet/index.ts', + }, + format: ['cjs', 'esm'], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + external: ['react', 'react-dom', 'next'], + treeshake: true, +}); diff --git a/src/entities/registration.entity.ts b/src/entities/registration.entity.ts index a22f70c5..e6ed865d 100644 --- a/src/entities/registration.entity.ts +++ b/src/entities/registration.entity.ts @@ -153,6 +153,36 @@ export class Registration extends Entity { @Column({ type: "integer" }) time: number; + @ApiProperty({ type: "string", required: false, nullable: true }) + @IsOptional() + @IsString() + @Column({ type: "string", required: false, nullable: true }) + excitement?: string; + + @ApiProperty({ type: "string", required: false, nullable: true }) + @IsOptional() + @IsString() + @Column({ type: "string", required: false, nullable: true }) + zip_code?: string; + + @ApiProperty({ type: "string", required: false, nullable: true }) + @IsOptional() + @IsString() + @Column({ type: "string", required: false, nullable: true }) + travel_cost?: string; + + @ApiProperty({ type: "string", required: false, nullable: true }) + @IsOptional() + @IsString() + @Column({ type: "string", required: false, nullable: true }) + travel_method?: string; + + @ApiProperty({ type: "string", required: false, nullable: true }) + @IsOptional() + @IsString() + @Column({ type: "string", required: false, nullable: true }) + travel_additional?: string; + private parseBoolean(name: string, field?: number) { return field !== undefined ? { [name]: field === 1 } : {}; } @@ -196,4 +226,9 @@ export class RegistrationEntity extends PickType(Registration, [ "shareEmailMlh", "time", "veteran", + "excitement", + "zip_code", + "travel_cost", + "travel_method", + "travel_additional", ] as const) {} diff --git a/tsconfig.build.json b/tsconfig.build.json index 64f86c6b..57960b86 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] + "exclude": ["node_modules", "test", "dist", "**/*spec.ts", "sdk"] } diff --git a/yarn.lock b/yarn.lock index a55771e7..12c18b73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,10 +10,10 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@angular-devkit/core@19.2.15": - version "19.2.15" - resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.15.tgz" - integrity sha512-pU2RZYX6vhd7uLSdLwPnuBcr0mXJSjp3EgOXKsrlQFQZevc+Qs+2JdXgIElnOT/aDqtRtriDmLlSbtdE8n3ZbA== +"@angular-devkit/core@19.2.17": + version "19.2.17" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.2.17.tgz#014107a94240dd3ecf38edfcf23113ad55b9752b" + integrity sha512-Ah008x2RJkd0F+NLKqIpA34/vUGwjlprRCkvddjDopAWRzYn6xCkz1Tqwuhn0nR1Dy47wTLKYD999TYl5ONOAQ== dependencies: ajv "8.17.1" ajv-formats "3.0.1" @@ -22,10 +22,10 @@ rxjs "7.8.1" source-map "0.7.4" -"@angular-devkit/core@19.2.17": - version "19.2.17" - resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.17.tgz" - integrity sha512-Ah008x2RJkd0F+NLKqIpA34/vUGwjlprRCkvddjDopAWRzYn6xCkz1Tqwuhn0nR1Dy47wTLKYD999TYl5ONOAQ== +"@angular-devkit/core@19.2.19": + version "19.2.19" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.2.19.tgz#371b917a0a3f0f14c07a6b99813ba05d5ffe4aea" + integrity sha512-JbLL+4IMLMBgjLZlnPG4lYDfz4zGrJ/s6Aoon321NJKuw1Kb1k5KpFu9dUY0BqLIe8xPQ2UJBpI+xXdK5MXMHQ== dependencies: ajv "8.17.1" ajv-formats "3.0.1" @@ -34,35 +34,35 @@ rxjs "7.8.1" source-map "0.7.4" -"@angular-devkit/schematics-cli@19.2.15": - version "19.2.15" - resolved "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-19.2.15.tgz" - integrity sha512-1ESFmFGMpGQmalDB3t2EtmWDGv6gOFYBMxmHO2f1KI/UDl8UmZnCGL4mD3EWo8Hv0YIsZ9wOH9Q7ZHNYjeSpzg== +"@angular-devkit/schematics-cli@19.2.19": + version "19.2.19" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-19.2.19.tgz#c6d2a36c90ab1d476d5276a07bb67dee37da519a" + integrity sha512-7q9UY6HK6sccL9F3cqGRUwKhM7b/XfD2YcVaZ2WD7VMaRlRm85v6mRjSrfKIAwxcQU0UK27kMc79NIIqaHjzxA== dependencies: - "@angular-devkit/core" "19.2.15" - "@angular-devkit/schematics" "19.2.15" + "@angular-devkit/core" "19.2.19" + "@angular-devkit/schematics" "19.2.19" "@inquirer/prompts" "7.3.2" ansi-colors "4.1.3" symbol-observable "4.0.0" yargs-parser "21.1.1" -"@angular-devkit/schematics@19.2.15": - version "19.2.15" - resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.15.tgz" - integrity sha512-kNOJ+3vekJJCQKWihNmxBkarJzNW09kP5a9E1SRNiQVNOUEeSwcRR0qYotM65nx821gNzjjhJXnAZ8OazWldrg== +"@angular-devkit/schematics@19.2.17": + version "19.2.17" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.2.17.tgz#253c0c6f4d5400c3bf038d73ed114af5516b72ef" + integrity sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg== dependencies: - "@angular-devkit/core" "19.2.15" + "@angular-devkit/core" "19.2.17" jsonc-parser "3.3.1" magic-string "0.30.17" ora "5.4.1" rxjs "7.8.1" -"@angular-devkit/schematics@19.2.17": - version "19.2.17" - resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.17.tgz" - integrity sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg== +"@angular-devkit/schematics@19.2.19": + version "19.2.19" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.2.19.tgz#fc9b41372c2f080721673b357d7d8a5fd33d5941" + integrity sha512-J4Jarr0SohdrHcb40gTL4wGPCQ952IMWF1G/MSAQfBAPvA9ZKApYhpxcY7PmehVePve+ujpus1dGsJ7dPxz8Kg== dependencies: - "@angular-devkit/core" "19.2.17" + "@angular-devkit/core" "19.2.19" jsonc-parser "3.3.1" magic-string "0.30.17" ora "5.4.1" @@ -158,9 +158,9 @@ integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== "@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" @@ -303,7 +303,7 @@ "@babel/runtime@^7.28.4": version "7.28.4" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== "@babel/template@^7.27.2": @@ -348,7 +348,7 @@ "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@cspotcode/source-map-support@^0.8.0": @@ -366,13 +366,20 @@ "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" -"@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.5.0": +"@emnapi/runtime@^1.4.3": version "1.6.0" resolved "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.6.0.tgz" integrity sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA== dependencies: tslib "^2.4.0" +"@emnapi/runtime@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.7.0.tgz#d7ef3832df8564fe5903bf0567aedbd19538ecbe" + integrity sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q== + dependencies: + tslib "^2.4.0" + "@emnapi/wasi-threads@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" @@ -416,9 +423,9 @@ "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3.2.0", "@eslint/eslintrc@^3.3.1": - version "3.3.1" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz" - integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -426,7 +433,7 @@ globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^4.1.0" + js-yaml "^4.1.1" minimatch "^3.1.2" strip-json-comments "^3.1.1" @@ -450,13 +457,13 @@ "@fastify/busboy@^3.0.0": version "3.2.0" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.2.0.tgz#13ed8212f3b9ba697611529d15347f8528058cea" integrity sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA== -"@firebase/ai@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@firebase/ai/-/ai-2.5.0.tgz#ef1bba9b23828753b494d773fd885dc77f022dba" - integrity sha512-OXv/jZLRjV9jTejWA4KOvW8gM1hNsLvQSCPwKhi2CEfe0Nap3rM6z+Ial0PGqXga0WgzhpypEvJOFvaAUFX3kg== +"@firebase/ai@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@firebase/ai/-/ai-2.6.0.tgz#490345e80c45447f67261fed1bdb034a019af9d8" + integrity sha512-NGyE7NQDFznOv683Xk4+WoUv39iipa9lEfrwvvPz33ChzVbCCiB69FJQTK2BI/11pRtzYGbHo1/xMz7gxWWhJw== dependencies: "@firebase/app-check-interop-types" "0.3.3" "@firebase/component" "0.7.0" @@ -523,12 +530,12 @@ "@firebase/util" "1.13.0" tslib "^2.1.0" -"@firebase/app-compat@0.5.5": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.5.5.tgz#ff3cab5fef0db1bc9d8b19e8e6aedc8e27661441" - integrity sha512-lVG/nRnXaot0rQSZazmTNqy83ti9O3+kdwoaE0d5wahRIWNoDirbIMcGVjDDgdmf4IE6FYreWOMh0L3DV1475w== +"@firebase/app-compat@0.5.6": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.5.6.tgz#a94d67fce839f2bf23c9b2d8f2f4099a68e94c27" + integrity sha512-YYGARbutghQY4zZUWMYia0ib0Y/rb52y72/N0z3vglRHL7ii/AaK9SA7S/dzScVOlCdnbHXz+sc5Dq+r8fwFAg== dependencies: - "@firebase/app" "0.14.5" + "@firebase/app" "0.14.6" "@firebase/component" "0.7.0" "@firebase/logger" "0.5.0" "@firebase/util" "1.13.0" @@ -539,10 +546,10 @@ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.9.3.tgz#8408219eae9b1fb74f86c24e7150a148460414ad" integrity sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw== -"@firebase/app@0.14.5": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.14.5.tgz#cfd2c37432628d835d2c68aedbf9bc946e5ccebe" - integrity sha512-zyNY77xJOGwcuB+xCxF8z8lSiHvD4ox7BCsqLEHEvgqQoRjxFZ0fkROR6NV5QyXmCqRLodMM8J5d2EStOocWIw== +"@firebase/app@0.14.6": + version "0.14.6" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.14.6.tgz#bf3333bfb104240320d54beab4c2fc1f10bae9e0" + integrity sha512-4uyt8BOrBsSq6i4yiOV/gG6BnnrvTeyymlNcaN/dKvyU1GoolxAafvIvaNP1RCGPlNab3OuE4MKUQuv2lH+PLQ== dependencies: "@firebase/component" "0.7.0" "@firebase/logger" "0.5.0" @@ -589,10 +596,10 @@ "@firebase/util" "1.13.0" tslib "^2.1.0" -"@firebase/data-connect@0.3.11": - version "0.3.11" - resolved "https://registry.yarnpkg.com/@firebase/data-connect/-/data-connect-0.3.11.tgz#60a7a9649e4aedd005546032466ef9abc0a544c1" - integrity sha512-G258eLzAD6im9Bsw+Qm1Z+P4x0PGNQ45yeUuuqe5M9B1rn0RJvvsQCRHXgE52Z+n9+WX1OJd/crcuunvOGc7Vw== +"@firebase/data-connect@0.3.12": + version "0.3.12" + resolved "https://registry.yarnpkg.com/@firebase/data-connect/-/data-connect-0.3.12.tgz#611e684fb6940855f37da5f3126bd9449f070ece" + integrity sha512-baPddcoNLj/+vYo+HSJidJUdr5W4OkhT109c5qhR8T1dJoZcyJpkv/dFpYlw/VJ3dV66vI8GHQFrmAZw/xUS4g== dependencies: "@firebase/auth-interop-types" "0.2.4" "@firebase/component" "0.7.0" @@ -614,7 +621,7 @@ "@firebase/database-types@1.0.16", "@firebase/database-types@^1.0.6": version "1.0.16" - resolved "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-1.0.16.tgz#262f54b8dbebbc46259757b3ba384224fb2ede48" integrity sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw== dependencies: "@firebase/app-types" "0.9.3" @@ -845,9 +852,9 @@ integrity sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw== "@google-cloud/firestore@^7.11.0": - version "7.11.3" - resolved "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.3.tgz" - integrity sha512-qsM3/WHpawF07SRVvEJJVRwhYzM7o9qtuksyuqnrMig6fxIrwWnsezECWsG/D5TyYru51Fv5c/RTqNDQ2yU+4w== + version "7.11.6" + resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-7.11.6.tgz#0a2b26e215aa4f903267f82370450753b84db16a" + integrity sha512-EW/O8ktzwLfyWBOsNuhRoMi8lrC3clHM5LVFhGvO1HCsLozCOOXRAlHrYBoE6HL42Sc8yYMuCb2XqcnJ4OOEpw== dependencies: "@opentelemetry/api" "^1.3.0" fast-deep-equal "^3.1.1" @@ -857,7 +864,7 @@ "@google-cloud/paginator@^5.0.0": version "5.0.2" - resolved "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-5.0.2.tgz#86ad773266ce9f3b82955a8f75e22cd012ccc889" integrity sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg== dependencies: arrify "^2.0.0" @@ -865,18 +872,18 @@ "@google-cloud/projectify@^4.0.0": version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be" integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA== "@google-cloud/promisify@<4.1.0": version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1" integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g== "@google-cloud/storage@^7.14.0": - version "7.17.0" - resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.17.0.tgz" - integrity sha512-5m9GoZqKh52a1UqkxDBu/+WVFDALNtHg5up5gNmNbXQWBcV813tzJKsyDtKjOPrlR1em1TxtD7NSPCrObH7koQ== + version "7.17.3" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-7.17.3.tgz#56006864e47514e7c1cfd12575ee98591f669afe" + integrity sha512-gOnCAbFgAYKRozywLsxagdevTF7Gm+2Ncz5u5CQAuOv/2VCa0rdGJWvJFDOftPx1tc+q8TXiC2pEJfFKu+yeMQ== dependencies: "@google-cloud/paginator" "^5.0.0" "@google-cloud/projectify" "^4.0.0" @@ -895,11 +902,11 @@ uuid "^8.0.0" "@grpc/grpc-js@^1.10.9": - version "1.13.4" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz" - integrity sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg== + version "1.14.0" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.14.0.tgz#a3c47e7816ca2b4d5490cba9e06a3cf324e675ad" + integrity sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg== dependencies: - "@grpc/proto-loader" "^0.7.13" + "@grpc/proto-loader" "^0.8.0" "@js-sdsl/ordered-map" "^4.4.2" "@grpc/grpc-js@~1.9.0": @@ -920,6 +927,16 @@ protobufjs "^7.2.5" yargs "^17.7.2" +"@grpc/proto-loader@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.8.0.tgz#b6c324dd909c458a0e4aa9bfd3d69cf78a4b9bd8" + integrity sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.5.3" + yargs "^17.7.2" + "@hapi/hoek@^9.0.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" @@ -957,223 +974,264 @@ "@img/colour@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@img/colour/-/colour-1.0.0.tgz#d2fabb223455a793bf3bf9c70de3d28526aa8311" integrity sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw== -"@img/sharp-darwin-arm64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz" - integrity sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA== +"@img/sharp-darwin-arm64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz#6e0732dcade126b6670af7aa17060b926835ea86" + integrity sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w== optionalDependencies: - "@img/sharp-libvips-darwin-arm64" "1.2.3" + "@img/sharp-libvips-darwin-arm64" "1.2.4" -"@img/sharp-darwin-x64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz" - integrity sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg== +"@img/sharp-darwin-x64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz#19bc1dd6eba6d5a96283498b9c9f401180ee9c7b" + integrity sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw== optionalDependencies: - "@img/sharp-libvips-darwin-x64" "1.2.3" + "@img/sharp-libvips-darwin-x64" "1.2.4" -"@img/sharp-libvips-darwin-arm64@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz" - integrity sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw== +"@img/sharp-libvips-darwin-arm64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz#2894c0cb87d42276c3889942e8e2db517a492c43" + integrity sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g== -"@img/sharp-libvips-darwin-x64@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz" - integrity sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA== +"@img/sharp-libvips-darwin-x64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz#e63681f4539a94af9cd17246ed8881734386f8cc" + integrity sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg== -"@img/sharp-libvips-linux-arm64@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz" - integrity sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ== +"@img/sharp-libvips-linux-arm64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz#b1b288b36864b3bce545ad91fa6dadcf1a4ad318" + integrity sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw== -"@img/sharp-libvips-linux-arm@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz" - integrity sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA== +"@img/sharp-libvips-linux-arm@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz#b9260dd1ebe6f9e3bdbcbdcac9d2ac125f35852d" + integrity sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A== -"@img/sharp-libvips-linux-ppc64@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz" - integrity sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg== +"@img/sharp-libvips-linux-ppc64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz#4b83ecf2a829057222b38848c7b022e7b4d07aa7" + integrity sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA== -"@img/sharp-libvips-linux-s390x@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz" - integrity sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w== +"@img/sharp-libvips-linux-riscv64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz#880b4678009e5a2080af192332b00b0aaf8a48de" + integrity sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA== -"@img/sharp-libvips-linux-x64@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz" - integrity sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg== +"@img/sharp-libvips-linux-s390x@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz#74f343c8e10fad821b38f75ced30488939dc59ec" + integrity sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ== -"@img/sharp-libvips-linuxmusl-arm64@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz" - integrity sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw== +"@img/sharp-libvips-linux-x64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz#df4183e8bd8410f7d61b66859a35edeab0a531ce" + integrity sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw== -"@img/sharp-libvips-linuxmusl-x64@1.2.3": - version "1.2.3" - resolved "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz" - integrity sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g== +"@img/sharp-libvips-linuxmusl-arm64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz#c8d6b48211df67137541007ee8d1b7b1f8ca8e06" + integrity sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw== + +"@img/sharp-libvips-linuxmusl-x64@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz#be11c75bee5b080cbee31a153a8779448f919f75" + integrity sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg== -"@img/sharp-linux-arm64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz" - integrity sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ== +"@img/sharp-linux-arm64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz#7aa7764ef9c001f15e610546d42fce56911790cc" + integrity sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg== optionalDependencies: - "@img/sharp-libvips-linux-arm64" "1.2.3" + "@img/sharp-libvips-linux-arm64" "1.2.4" -"@img/sharp-linux-arm@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz" - integrity sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA== +"@img/sharp-linux-arm@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz#5fb0c3695dd12522d39c3ff7a6bc816461780a0d" + integrity sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw== optionalDependencies: - "@img/sharp-libvips-linux-arm" "1.2.3" + "@img/sharp-libvips-linux-arm" "1.2.4" -"@img/sharp-linux-ppc64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz" - integrity sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ== +"@img/sharp-linux-ppc64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz#9c213a81520a20caf66978f3d4c07456ff2e0813" + integrity sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA== optionalDependencies: - "@img/sharp-libvips-linux-ppc64" "1.2.3" + "@img/sharp-libvips-linux-ppc64" "1.2.4" -"@img/sharp-linux-s390x@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz" - integrity sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw== +"@img/sharp-linux-riscv64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz#cdd28182774eadbe04f62675a16aabbccb833f60" + integrity sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw== optionalDependencies: - "@img/sharp-libvips-linux-s390x" "1.2.3" + "@img/sharp-libvips-linux-riscv64" "1.2.4" -"@img/sharp-linux-x64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz" - integrity sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A== +"@img/sharp-linux-s390x@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz#93eac601b9f329bb27917e0e19098c722d630df7" + integrity sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg== optionalDependencies: - "@img/sharp-libvips-linux-x64" "1.2.3" + "@img/sharp-libvips-linux-s390x" "1.2.4" -"@img/sharp-linuxmusl-arm64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz" - integrity sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA== +"@img/sharp-linux-x64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz#55abc7cd754ffca5002b6c2b719abdfc846819a8" + integrity sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ== optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64" "1.2.3" + "@img/sharp-libvips-linux-x64" "1.2.4" -"@img/sharp-linuxmusl-x64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz" - integrity sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg== +"@img/sharp-linuxmusl-arm64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz#d6515ee971bb62f73001a4829b9d865a11b77086" + integrity sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg== optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64" "1.2.3" + "@img/sharp-libvips-linuxmusl-arm64" "1.2.4" -"@img/sharp-wasm32@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz" - integrity sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA== - dependencies: - "@emnapi/runtime" "^1.5.0" +"@img/sharp-linuxmusl-x64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz#d97978aec7c5212f999714f2f5b736457e12ee9f" + integrity sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.2.4" -"@img/sharp-win32-arm64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz" - integrity sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA== +"@img/sharp-wasm32@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz#2f15803aa626f8c59dd7c9d0bbc766f1ab52cfa0" + integrity sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw== + dependencies: + "@emnapi/runtime" "^1.7.0" -"@img/sharp-win32-ia32@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz" - integrity sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw== +"@img/sharp-win32-arm64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz#3706e9e3ac35fddfc1c87f94e849f1b75307ce0a" + integrity sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g== -"@img/sharp-win32-x64@0.34.4": - version "0.34.4" - resolved "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz" - integrity sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig== +"@img/sharp-win32-ia32@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz#0b71166599b049e032f085fb9263e02f4e4788de" + integrity sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg== -"@inquirer/checkbox@^4.1.2", "@inquirer/checkbox@^4.2.0": - version "4.2.0" - resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.0.tgz" - integrity sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA== - dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" +"@img/sharp-win32-x64@0.34.5": + version "0.34.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz#a81ffb00e69267cd0a1d626eaedb8a8430b2b2f8" + integrity sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw== -"@inquirer/confirm@^5.1.14", "@inquirer/confirm@^5.1.6": - version "5.1.14" - resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz" - integrity sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q== - dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/type" "^3.0.8" +"@inquirer/ansi@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.2.tgz#674a4c4d81ad460695cb2a1fc69d78cd187f337e" + integrity sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ== -"@inquirer/core@^10.1.15": - version "10.1.15" - resolved "https://registry.npmjs.org/@inquirer/core/-/core-10.1.15.tgz" - integrity sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA== - dependencies: - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" +"@inquirer/checkbox@^4.1.2", "@inquirer/checkbox@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.2.tgz#e1483e6519d6ffef97281a54d2a5baa0d81b3f3b" + integrity sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/confirm@^5.1.21", "@inquirer/confirm@^5.1.6": + version "5.1.21" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.21.tgz#610c4acd7797d94890a6e2dde2c98eb1e891dd12" + integrity sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/core@^10.3.2": + version "10.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.2.tgz#535979ff3ff4fe1e7cc4f83e2320504c743b7e20" + integrity sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" cli-width "^4.1.0" mute-stream "^2.0.0" signal-exit "^4.1.0" wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" + yoctocolors-cjs "^2.1.3" -"@inquirer/editor@^4.2.15", "@inquirer/editor@^4.2.7": - version "4.2.15" - resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.15.tgz" - integrity sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ== +"@inquirer/editor@^4.2.23", "@inquirer/editor@^4.2.7": + version "4.2.23" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.23.tgz#fe046a3bfdae931262de98c1052437d794322e0b" + integrity sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ== dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/type" "^3.0.8" - external-editor "^3.1.0" + "@inquirer/core" "^10.3.2" + "@inquirer/external-editor" "^1.0.3" + "@inquirer/type" "^3.0.10" -"@inquirer/expand@^4.0.17", "@inquirer/expand@^4.0.9": - version "4.0.17" - resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.17.tgz" - integrity sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw== +"@inquirer/expand@^4.0.23", "@inquirer/expand@^4.0.9": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.23.tgz#a38b5f32226d75717c370bdfed792313b92bdc05" + integrity sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew== dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/type" "^3.0.8" - yoctocolors-cjs "^2.1.2" - -"@inquirer/figures@^1.0.13": - version "1.0.13" - resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz" - integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/input@^4.1.6", "@inquirer/input@^4.2.1": - version "4.2.1" - resolved "https://registry.npmjs.org/@inquirer/input/-/input-4.2.1.tgz" - integrity sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow== +"@inquirer/external-editor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/type" "^3.0.8" + chardet "^2.1.1" + iconv-lite "^0.7.0" -"@inquirer/number@^3.0.17", "@inquirer/number@^3.0.9": - version "3.0.17" - resolved "https://registry.npmjs.org/@inquirer/number/-/number-3.0.17.tgz" - integrity sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg== - dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/type" "^3.0.8" +"@inquirer/figures@^1.0.15": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a" + integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== -"@inquirer/password@^4.0.17", "@inquirer/password@^4.0.9": - version "4.0.17" - resolved "https://registry.npmjs.org/@inquirer/password/-/password-4.0.17.tgz" - integrity sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA== - dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" +"@inquirer/input@^4.1.6", "@inquirer/input@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.3.1.tgz#778683b4c4c4d95d05d4b05c4a854964b73565b4" + integrity sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/number@^3.0.23", "@inquirer/number@^3.0.9": + version "3.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.23.tgz#3fdec2540d642093fd7526818fd8d4bdc7335094" + integrity sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/password@^4.0.23", "@inquirer/password@^4.0.9": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.23.tgz#b9f5187c8c92fd7aa9eceb9d8f2ead0d7e7b000d" + integrity sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/prompts@7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.10.1.tgz#e1436c0484cf04c22548c74e2cd239e989d5f847" + integrity sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg== + dependencies: + "@inquirer/checkbox" "^4.3.2" + "@inquirer/confirm" "^5.1.21" + "@inquirer/editor" "^4.2.23" + "@inquirer/expand" "^4.0.23" + "@inquirer/input" "^4.3.1" + "@inquirer/number" "^3.0.23" + "@inquirer/password" "^4.0.23" + "@inquirer/rawlist" "^4.1.11" + "@inquirer/search" "^3.2.2" + "@inquirer/select" "^4.4.2" "@inquirer/prompts@7.3.2": version "7.3.2" - resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.3.2.tgz#ad0879eb3bc783c19b78c420e5eeb18a09fc9b47" integrity sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ== dependencies: "@inquirer/checkbox" "^4.1.2" @@ -1187,56 +1245,40 @@ "@inquirer/search" "^3.0.9" "@inquirer/select" "^4.0.9" -"@inquirer/prompts@7.8.0": - version "7.8.0" - resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.0.tgz" - integrity sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw== - dependencies: - "@inquirer/checkbox" "^4.2.0" - "@inquirer/confirm" "^5.1.14" - "@inquirer/editor" "^4.2.15" - "@inquirer/expand" "^4.0.17" - "@inquirer/input" "^4.2.1" - "@inquirer/number" "^3.0.17" - "@inquirer/password" "^4.0.17" - "@inquirer/rawlist" "^4.1.5" - "@inquirer/search" "^3.1.0" - "@inquirer/select" "^4.3.1" - -"@inquirer/rawlist@^4.0.9", "@inquirer/rawlist@^4.1.5": - version "4.1.5" - resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.5.tgz" - integrity sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA== +"@inquirer/rawlist@^4.0.9", "@inquirer/rawlist@^4.1.11": + version "4.1.11" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.11.tgz#313c8c3ffccb7d41e990c606465726b4a898a033" + integrity sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw== dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/type" "^3.0.8" - yoctocolors-cjs "^2.1.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/search@^3.0.9", "@inquirer/search@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@inquirer/search/-/search-3.1.0.tgz" - integrity sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q== +"@inquirer/search@^3.0.9", "@inquirer/search@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.2.tgz#4cc6fd574dcd434e4399badc37c742c3fd534ac8" + integrity sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA== dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - yoctocolors-cjs "^2.1.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/select@^4.0.9", "@inquirer/select@^4.3.1": - version "4.3.1" - resolved "https://registry.npmjs.org/@inquirer/select/-/select-4.3.1.tgz" - integrity sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA== +"@inquirer/select@^4.0.9", "@inquirer/select@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.2.tgz#2ac8fca960913f18f1d1b35323ed8fcd27d89323" + integrity sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w== dependencies: - "@inquirer/core" "^10.1.15" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/type@^3.0.8": - version "3.0.8" - resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz" - integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== +"@inquirer/type@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.10.tgz#11ed564ec78432a200ea2601a212d24af8150d50" + integrity sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA== "@isaacs/balanced-match@^4.0.1": version "4.0.1" @@ -1500,7 +1542,7 @@ "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" @@ -1508,12 +1550,12 @@ "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/source-map@^0.3.3": version "0.3.11" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -1521,7 +1563,7 @@ "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.5" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@0.3.9": @@ -1534,7 +1576,7 @@ "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": version "0.3.31" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -1542,7 +1584,7 @@ "@js-sdsl/ordered-map@^4.4.2": version "4.4.2" - resolved "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== "@lukeed/csprng@^1.0.0": @@ -1550,10 +1592,10 @@ resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe" integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== -"@microsoft/tsdoc@0.15.1": - version "0.15.1" - resolved "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz" - integrity sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw== +"@microsoft/tsdoc@0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz#2249090633e04063176863a050c8f0808d2b6d2b" + integrity sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA== "@napi-rs/wasm-runtime@^0.2.11": version "0.2.12" @@ -1570,39 +1612,38 @@ integrity sha512-68pFJgu+/AZbWkGu65Z3r55bTsCPlgyKaV4BSG8yUAD72q1PPuyVRgUwFv6BxdnibTUHlyxm06FmYWNC+bjN7A== "@nestjs/cli@^11.0.2": - version "11.0.10" - resolved "https://registry.npmjs.org/@nestjs/cli/-/cli-11.0.10.tgz" - integrity sha512-4waDT0yGWANg0pKz4E47+nUrqIJv/UqrZ5wLPkCqc7oMGRMWKAaw1NDZ9rKsaqhqvxb2LfI5+uXOWr4yi94DOQ== - dependencies: - "@angular-devkit/core" "19.2.15" - "@angular-devkit/schematics" "19.2.15" - "@angular-devkit/schematics-cli" "19.2.15" - "@inquirer/prompts" "7.8.0" + version "11.0.14" + resolved "https://registry.yarnpkg.com/@nestjs/cli/-/cli-11.0.14.tgz#c1b7fd195813cacaa4f90d398d618ae4d71fc2ab" + integrity sha512-YwP03zb5VETTwelXU+AIzMVbEZKk/uxJL+z9pw0mdG9ogAtqZ6/mpmIM4nEq/NU8D0a7CBRLcMYUmWW/55pfqw== + dependencies: + "@angular-devkit/core" "19.2.19" + "@angular-devkit/schematics" "19.2.19" + "@angular-devkit/schematics-cli" "19.2.19" + "@inquirer/prompts" "7.10.1" "@nestjs/schematics" "^11.0.1" - ansis "4.1.0" + ansis "4.2.0" chokidar "4.0.3" cli-table3 "0.6.5" commander "4.1.1" fork-ts-checker-webpack-plugin "9.1.0" - glob "11.0.3" + glob "13.0.0" node-emoji "1.11.0" ora "5.4.1" - tree-kill "1.2.2" tsconfig-paths "4.2.0" tsconfig-paths-webpack-plugin "4.2.0" - typescript "5.8.3" - webpack "5.100.2" + typescript "5.9.3" + webpack "5.103.0" webpack-node-externals "3.0.0" "@nestjs/common@^11.0.0": - version "11.1.6" - resolved "https://registry.npmjs.org/@nestjs/common/-/common-11.1.6.tgz" - integrity sha512-krKwLLcFmeuKDqngG2N/RuZHCs2ycsKcxWIDgcm7i1lf3sQ0iG03ci+DsP/r3FcT/eJDFsIHnKtNta2LIi7PzQ== + version "11.1.9" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-11.1.9.tgz#8b8a29931040b6c65943337b3ca9cdf42dc31282" + integrity sha512-zDntUTReRbAThIfSp3dQZ9kKqI+LjgLp5YZN5c1bgNRDuoeLySAoZg46Bg1a+uV8TMgIRziHocglKGNzr6l+bQ== dependencies: uid "2.0.2" - file-type "21.0.0" + file-type "21.1.0" iterare "1.2.1" - load-esm "1.0.2" + load-esm "1.0.3" tslib "2.8.1" "@nestjs/config@^4.0.0": @@ -1615,20 +1656,20 @@ lodash "4.17.21" "@nestjs/core@^11.0.0": - version "11.1.6" - resolved "https://registry.npmjs.org/@nestjs/core/-/core-11.1.6.tgz" - integrity sha512-siWX7UDgErisW18VTeJA+x+/tpNZrJewjTBsRPF3JVxuWRuAB1kRoiJcxHgln8Lb5UY9NdvklITR84DUEXD0Cg== + version "11.1.9" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-11.1.9.tgz#7a77ded789709e194c4f118e3d9bf5182136b076" + integrity sha512-a00B0BM4X+9z+t3UxJqIZlemIwCQdYoPKrMcM+ky4z3pkqqG1eTWexjs+YXpGObnLnjtMPVKWlcZHp3adDYvUw== dependencies: uid "2.0.2" "@nuxt/opencollective" "0.4.1" fast-safe-stringify "2.1.1" iterare "1.2.1" - path-to-regexp "8.2.0" + path-to-regexp "8.3.0" tslib "2.8.1" "@nestjs/mapped-types@2.1.0": version "2.1.0" - resolved "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-2.1.0.tgz#b9b536b7c3571567aa1d0223db8baa1a51505a19" integrity sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw== "@nestjs/passport@^11.0.0": @@ -1637,9 +1678,9 @@ integrity sha512-ulQX6mbjlws92PIM15Naes4F4p2JoxGnIJuUsdXQPT+Oo2sqQmENEZXM7eYuimocfHnKlcfZOuyzbA33LwUlOQ== "@nestjs/platform-express@^11.0.0": - version "11.1.8" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.8.tgz#9e97c20d23df70ad8826125424a69c9103b68653" - integrity sha512-rL6pZH9BW7BnL5X2eWbJMtt86uloAKjFgyY5+L2UkizgfEp7rgAs0+Z1z0BcW2Pgu5+q8O7RKPNyHJ/9ZNz/ZQ== + version "11.1.9" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.9.tgz#f3a8c0e0aba6f90584812c9ec1e2025563187b50" + integrity sha512-GVd3+0lO0mJq2m1kl9hDDnVrX3Nd4oH3oDfklz0pZEVEVS0KVSp63ufHq2Lu9cyPdSBuelJr9iPm2QQ1yX+Kmw== dependencies: cors "2.8.5" express "5.1.0" @@ -1648,9 +1689,9 @@ tslib "2.8.1" "@nestjs/platform-socket.io@^11.0.0": - version "11.1.8" - resolved "https://registry.yarnpkg.com/@nestjs/platform-socket.io/-/platform-socket.io-11.1.8.tgz#aa5632a5040f2ee9056537b651d29bc73c8be718" - integrity sha512-nMUvwcdztso8BjN9czRl4sm0Ewc5xrCcgLvy+QPt6VAnTdu06KcZqtA6Cl3MKxViSQsQ8NBN5foKvZehNt/tug== + version "11.1.9" + resolved "https://registry.yarnpkg.com/@nestjs/platform-socket.io/-/platform-socket.io-11.1.9.tgz#7fe91df53362f795fa03ad161264bd0449570ab4" + integrity sha512-OaAW+voXo5BXbFKd9Ot3SL05tEucRMhZRdw5wdWZf/RpIl9hB6G6OHr8DDxNbUGvuQWzNnZHCDHx3EQJzjcIyA== dependencies: socket.io "4.8.1" tslib "2.8.1" @@ -1674,28 +1715,28 @@ pluralize "8.0.0" "@nestjs/swagger@^11.0.0": - version "11.2.1" - resolved "https://registry.npmjs.org/@nestjs/swagger/-/swagger-11.2.1.tgz" - integrity sha512-1MS7xf0pzc1mofG53xrrtrurnziafPUHkqzRm4YUVPA/egeiMaSerQBD/feiAeQ2BnX0WiLsTX4HQFO0icvOjQ== + version "11.2.3" + resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-11.2.3.tgz#979fbc87fedee0b71d9af181cafe9dbe3e4bd976" + integrity sha512-a0xFfjeqk69uHIUpP8u0ryn4cKuHdra2Ug96L858i0N200Hxho+n3j+TlQXyOF4EstLSGjTfxI1Xb2E1lUxeNg== dependencies: - "@microsoft/tsdoc" "0.15.1" + "@microsoft/tsdoc" "0.16.0" "@nestjs/mapped-types" "2.1.0" - js-yaml "4.1.0" + js-yaml "4.1.1" lodash "4.17.21" path-to-regexp "8.3.0" - swagger-ui-dist "5.29.4" + swagger-ui-dist "5.30.2" "@nestjs/testing@^11.0.0": - version "11.1.8" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-11.1.8.tgz#b41855084e53cdea0fae5669fa0fb4792e49c687" - integrity sha512-E6K+0UTKztcPxJzLnQa7S34lFjZbrj3Z1r7c5y5WDrL1m5HD1H4AeyBhicHgdaFmxjLAva2bq0sYKy/S7cdeYA== + version "11.1.9" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-11.1.9.tgz#f94fbd1042936a9f1f577a32dba76dbc4fa4ec94" + integrity sha512-UFxerBDdb0RUNxQNj25pvkvNE7/vxKhXYWBt3QuwBFnYISzRIzhVlyIqLfoV5YI3zV0m0Nn4QAn1KM0zzwfEng== dependencies: tslib "2.8.1" "@nestjs/websockets@^11.0.0": - version "11.1.8" - resolved "https://registry.yarnpkg.com/@nestjs/websockets/-/websockets-11.1.8.tgz#1587d0ece1d461b42c59804e55dc0dc917566e74" - integrity sha512-RXo2336p/vyAwJ0qPInglzNSQ//qz+JTLr2LE1vlbmN5WcyB7zV6+gY06YgNdsr3oy/cXRh7fnC3Ph/VAu1EVg== + version "11.1.9" + resolved "https://registry.yarnpkg.com/@nestjs/websockets/-/websockets-11.1.9.tgz#dcb27d8e6bae06a5b37ee604e19bf3eaf4a6d11f" + integrity sha512-kkkdeTVcc3X7ZzvVqUVpOAJoh49kTRUjWNUXo5jmG+27OvZoHfs/vuSiqxidrrbIgydSqN15HUsf1wZwQUrxCQ== dependencies: iterare "1.2.1" object-hash "3.0.0" @@ -1706,27 +1747,6 @@ resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@nuxt/opencollective@0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.4.1.tgz#57bc41d2b03b2fba20b935c15950ac0f4bd2cea2" @@ -1736,12 +1756,12 @@ "@one-ini/wasm@0.1.1": version "0.1.1" - resolved "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz" + resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323" integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== "@opentelemetry/api@^1.3.0": version "1.9.0" - resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== "@paralleldrive/cuid2@^2.2.2": @@ -1767,7 +1787,7 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pkgr/core@^0.2.9": @@ -1830,7 +1850,7 @@ "@scarf/scarf@=1.4.0": version "1.4.0" - resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.4.0.tgz#3bbb984085dbd6d982494538b523be1ce6562972" integrity sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ== "@sendgrid/client@^8.1.5": @@ -1897,12 +1917,12 @@ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== -"@tokenizer/inflate@^0.2.7": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@tokenizer/inflate/-/inflate-0.2.7.tgz#32dd9dfc9abe457c89b3d9b760fc0690c85a103b" - integrity sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg== +"@tokenizer/inflate@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@tokenizer/inflate/-/inflate-0.3.1.tgz#f0b9162741e8e4c5fa0c56764a049355ad29e1f4" + integrity sha512-4oeoZEBQdLdt5WmP/hx1KZ6D3/Oid/0cUb2nk4F0pTDAWy+KCH3/EnAkZF/bvckWo8I33EqBm01lIPgmgc8rCA== dependencies: - debug "^4.4.0" + debug "^4.4.1" fflate "^0.8.2" token-types "^6.0.0" @@ -1913,7 +1933,7 @@ "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tsconfig/node10@^1.0.7": @@ -1986,7 +2006,7 @@ "@types/caseless@*": version "0.12.5" - resolved "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== "@types/connect@*": @@ -2010,7 +2030,7 @@ "@types/eslint-scope@^3.7.7": version "3.7.7" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" @@ -2018,7 +2038,7 @@ "@types/eslint@*": version "9.6.1" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" @@ -2026,13 +2046,13 @@ "@types/estree@*", "@types/estree@^1.0.6", "@types/estree@^1.0.8": version "1.0.8" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@^4.17.33": - version "4.19.6" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz" - integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== + version "4.19.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz#f1d306dcc03b1aafbfb6b4fe684cce8a31cffc10" + integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2050,23 +2070,23 @@ "@types/send" "*" "@types/express@*", "@types/express@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.5.tgz#3ba069177caa34ab96585ca23b3984d752300cdc" - integrity sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ== + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" + integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" - "@types/serve-static" "^1" + "@types/serve-static" "^2" "@types/express@^4.17.20": - version "4.17.23" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz" - integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" - "@types/serve-static" "*" + "@types/serve-static" "^1" "@types/http-errors@*": version "2.0.5" @@ -2102,7 +2122,7 @@ "@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/jsonwebtoken@*", "@types/jsonwebtoken@^9.0.4", "@types/jsonwebtoken@^9.0.7": @@ -2114,23 +2134,23 @@ "@types/node" "*" "@types/lodash@^4.17.14": - version "4.17.20" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz" - integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.21.tgz#b806831543d696b14f8112db600ea9d3a1df6ea4" + integrity sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ== "@types/long@^4.0.0": version "4.0.2" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== "@types/luxon@^3.4.2", "@types/luxon@~3.7.0": version "3.7.1" - resolved "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.7.1.tgz#ef51b960ff86801e4e2de80c68813a96e529d531" integrity sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg== "@types/methods@^1.1.4": version "1.1.4" - resolved "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/@types/methods/-/methods-1.1.4.tgz#d3b7ac30ac47c91054ea951ce9eed07b1051e547" integrity sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ== "@types/mime@^1": @@ -2140,14 +2160,14 @@ "@types/mock-knex@^0.4.8": version "0.4.8" - resolved "https://registry.npmjs.org/@types/mock-knex/-/mock-knex-0.4.8.tgz" + resolved "https://registry.yarnpkg.com/@types/mock-knex/-/mock-knex-0.4.8.tgz#eddaaa7d772d388ff7444d6217c574eb17f8856f" integrity sha512-xRoaH9GmsgP5JBdMadzJSg/63HCifgJZsWmCJ5Z1rA36Fg3Y7Yb03dMzMIk5sHnBWcPkWqY/zyDO4nStI+Frbg== dependencies: "@types/node" "*" "@types/ms@*": version "2.1.0" - resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/multer@^2.0.0": @@ -2157,31 +2177,17 @@ dependencies: "@types/express" "*" -"@types/node@*": - version "24.9.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.1.tgz#b7360b3c789089e57e192695a855aa4f6981a53c" - integrity sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg== +"@types/node@*", "@types/node@>=10.0.0", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^24.0.0": + version "24.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.1.tgz#91e92182c93db8bd6224fca031e2370cef9a8f01" + integrity sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ== dependencies: undici-types "~7.16.0" -"@types/node@>=10.0.0": - version "24.2.0" - resolved "https://registry.npmjs.org/@types/node/-/node-24.2.0.tgz" - integrity sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw== - dependencies: - undici-types "~7.10.0" - -"@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "24.9.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.2.tgz#90ded2422dbfcafcf72080f28975adc21366148d" - integrity sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA== - dependencies: - undici-types "~7.16.0" - -"@types/node@^22.10.5", "@types/node@^22.8.7": - version "22.19.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.19.0.tgz#849606ef3920850583a4e7ee0930987c35ad80be" - integrity sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA== +"@types/node@^22.8.7": + version "22.19.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.19.1.tgz#1188f1ddc9f46b4cc3aec76749050b4e1f459b7b" + integrity sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ== dependencies: undici-types "~6.21.0" @@ -2220,7 +2226,7 @@ "@types/request@^2.48.8": version "2.48.13" - resolved "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.13.tgz#abdf4256524e801ea8fdda54320f083edb5a6b80" integrity sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg== dependencies: "@types/caseless" "*" @@ -2243,7 +2249,7 @@ "@types/mime" "^1" "@types/node" "*" -"@types/serve-static@*", "@types/serve-static@^1": +"@types/serve-static@^1": version "1.15.10" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== @@ -2252,6 +2258,14 @@ "@types/node" "*" "@types/send" "<1" +"@types/serve-static@^2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" + integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/sharp@^0.32.0": version "0.32.0" resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.32.0.tgz#fc3ac6df6b456319bae807c3d24efdc6631cdd6f" @@ -2284,13 +2298,13 @@ "@types/tough-cookie@*": version "4.0.5" - resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== -"@types/validator@^13.11.8": - version "13.15.2" - resolved "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz" - integrity sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q== +"@types/validator@^13.15.3": + version "13.15.10" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.10.tgz#742b77ec34d58554b94a76a14cef30d59e3c16b9" + integrity sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA== "@types/yargs-parser@*": version "21.0.3" @@ -2305,101 +2319,100 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^8.19.1": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.3.tgz#6f7aeaf9f5c611425db9b8f983e8d3fe5deece3c" - integrity sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw== + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz#c772d1dbdd97cfddf85f5a161a97783233643631" + integrity sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.46.3" - "@typescript-eslint/type-utils" "8.46.3" - "@typescript-eslint/utils" "8.46.3" - "@typescript-eslint/visitor-keys" "8.46.3" + "@typescript-eslint/scope-manager" "8.48.1" + "@typescript-eslint/type-utils" "8.48.1" + "@typescript-eslint/utils" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" "@typescript-eslint/parser@^8.19.1": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.46.3.tgz#3badfb62d2e2dc733d02a038073e3f65f2cb833d" - integrity sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg== - dependencies: - "@typescript-eslint/scope-manager" "8.46.3" - "@typescript-eslint/types" "8.46.3" - "@typescript-eslint/typescript-estree" "8.46.3" - "@typescript-eslint/visitor-keys" "8.46.3" + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.48.1.tgz#4e3c66d9ec20683ec142417fafeadab61c479c3f" + integrity sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA== + dependencies: + "@typescript-eslint/scope-manager" "8.48.1" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/typescript-estree" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" debug "^4.3.4" -"@typescript-eslint/project-service@8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.46.3.tgz#4555c685407ea829081218fa033d7b032607aaef" - integrity sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ== +"@typescript-eslint/project-service@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.48.1.tgz#cfe1741613b9112d85ae766de9e09b27a7d3f2f1" + integrity sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.46.3" - "@typescript-eslint/types" "^8.46.3" + "@typescript-eslint/tsconfig-utils" "^8.48.1" + "@typescript-eslint/types" "^8.48.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.46.3.tgz#2e330f566e135ccac13477b98dd88d8f176e4dff" - integrity sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg== +"@typescript-eslint/scope-manager@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz#8bc70643e7cca57864b1ff95dd350fc27756bec0" + integrity sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w== dependencies: - "@typescript-eslint/types" "8.46.3" - "@typescript-eslint/visitor-keys" "8.46.3" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" -"@typescript-eslint/tsconfig-utils@8.46.3", "@typescript-eslint/tsconfig-utils@^8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz#cad33398c762c97fe56a8defda00c16505abefa3" - integrity sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA== +"@typescript-eslint/tsconfig-utils@8.48.1", "@typescript-eslint/tsconfig-utils@^8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz#68139ce2d258f984e2b33a95389158f1212af646" + integrity sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw== -"@typescript-eslint/type-utils@8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.3.tgz#71188df833d7697ecff256cd1d3889a20552d78c" - integrity sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw== +"@typescript-eslint/type-utils@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz#955bd3ddd648450f0a627925ff12ade63fb7516d" + integrity sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg== dependencies: - "@typescript-eslint/types" "8.46.3" - "@typescript-eslint/typescript-estree" "8.46.3" - "@typescript-eslint/utils" "8.46.3" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/typescript-estree" "8.48.1" + "@typescript-eslint/utils" "8.48.1" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.46.3", "@typescript-eslint/types@^8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.3.tgz#da05ea40e91359b4275dbb3a489f2f7907a02245" - integrity sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA== +"@typescript-eslint/types@8.48.1", "@typescript-eslint/types@^8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.48.1.tgz#a9ff808f5f798f28767d5c0b015a88fa7ce46bd7" + integrity sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q== -"@typescript-eslint/typescript-estree@8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz#c12406afba707f9779ce0c0151a08c33b3a96d41" - integrity sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA== +"@typescript-eslint/typescript-estree@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz#0d0e31fc47c5796c6463ab50cde19e1718d465b1" + integrity sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg== dependencies: - "@typescript-eslint/project-service" "8.46.3" - "@typescript-eslint/tsconfig-utils" "8.46.3" - "@typescript-eslint/types" "8.46.3" - "@typescript-eslint/visitor-keys" "8.46.3" + "@typescript-eslint/project-service" "8.48.1" + "@typescript-eslint/tsconfig-utils" "8.48.1" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" + tinyglobby "^0.2.15" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.46.3.tgz#b6c7994b7c1ee2fe338ab32f7b3d4424856a73ce" - integrity sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g== +"@typescript-eslint/utils@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.48.1.tgz#6cf7b99e0943b33a983ef687b9a86b65578b5c32" + integrity sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.46.3" - "@typescript-eslint/types" "8.46.3" - "@typescript-eslint/typescript-estree" "8.46.3" + "@typescript-eslint/scope-manager" "8.48.1" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/typescript-estree" "8.48.1" -"@typescript-eslint/visitor-keys@8.46.3": - version "8.46.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.3.tgz#6811b15053501981059c58e1c01b39242bd5c0f6" - integrity sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg== +"@typescript-eslint/visitor-keys@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz#247d4fe6dcc044f45b7f1c15110bf95e5d73b334" + integrity sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q== dependencies: - "@typescript-eslint/types" "8.46.3" + "@typescript-eslint/types" "8.48.1" eslint-visitor-keys "^4.2.1" "@ungap/structured-clone@^1.3.0": @@ -2506,7 +2519,7 @@ "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: "@webassemblyjs/helper-numbers" "1.13.2" @@ -2514,22 +2527,22 @@ "@webassemblyjs/floating-point-hex-parser@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== "@webassemblyjs/helper-api-error@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== "@webassemblyjs/helper-buffer@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== "@webassemblyjs/helper-numbers@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.13.2" @@ -2538,12 +2551,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== "@webassemblyjs/helper-wasm-section@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2553,26 +2566,26 @@ "@webassemblyjs/ieee754@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== "@webassemblyjs/wasm-edit@^1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2586,7 +2599,7 @@ "@webassemblyjs/wasm-gen@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2597,7 +2610,7 @@ "@webassemblyjs/wasm-opt@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2607,7 +2620,7 @@ "@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2619,7 +2632,7 @@ "@webassemblyjs/wast-printer@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2627,22 +2640,22 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== abbrev@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" @@ -2665,7 +2678,7 @@ accepts@~1.3.4: acorn-import-phases@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-jsx@^5.3.2: @@ -2687,38 +2700,38 @@ acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1: agent-base@6: version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agent-base@^7.1.2: version "7.1.4" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== ajv-formats@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== dependencies: ajv "^8.0.0" ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" @@ -2750,7 +2763,7 @@ ansi-colors@4.1.3, ansi-colors@^4.1.1: ansi-escapes@^4.3.2: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" @@ -2782,10 +2795,10 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== -ansis@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz" - integrity sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w== +ansis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ansis/-/ansis-4.2.0.tgz#2e6e61c46b11726ac67f78785385618b9e658780" + integrity sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig== anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" @@ -2845,12 +2858,12 @@ argparse@^2.0.1: array-timsort@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== arrify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== asap@^2.0.0: @@ -2860,7 +2873,7 @@ asap@^2.0.0: async-retry@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: retry "0.13.1" @@ -2961,7 +2974,7 @@ bare-events@^2.2.0: base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64id@2.0.0, base64id@~2.0.0: @@ -2969,10 +2982,10 @@ base64id@2.0.0, base64id@~2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== -baseline-browser-mapping@^2.8.9: - version "2.8.13" - resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.13.tgz" - integrity sha512-7s16KR8io8nIBWQyCYhmFhd+ebIzb9VKTzki+wOJXHTxTnV6+mFGH3+Jwn1zoKaY9/H9T/0BcKCZnzXljPnpSQ== +baseline-browser-mapping@^2.8.25: + version "2.8.31" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz#16c0f1814638257932e0486dbfdbb3348d0a5710" + integrity sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw== bignumber.js@9.0.0: version "9.0.0" @@ -2986,12 +2999,12 @@ bignumber.js@^9.0.0: binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -3020,7 +3033,7 @@ body-parser@^2.2.0: boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^1.1.7: @@ -3046,15 +3059,15 @@ braces@^3.0.3, braces@~3.0.2: fill-range "^7.1.1" browserslist@^4.24.0, browserslist@^4.26.3: - version "4.26.3" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz" - integrity sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w== + version "4.28.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929" + integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== dependencies: - baseline-browser-mapping "^2.8.9" - caniuse-lite "^1.0.30001746" - electron-to-chromium "^1.5.227" - node-releases "^2.0.21" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.8.25" + caniuse-lite "^1.0.30001754" + electron-to-chromium "^1.5.249" + node-releases "^2.0.27" + update-browserslist-db "^1.1.4" bs-logger@^0.2.6: version "0.2.6" @@ -3087,7 +3100,7 @@ buffer-from@^1.0.0: buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -3136,7 +3149,7 @@ callsites@^3.0.0, callsites@^3.1.0: camel-case@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== dependencies: no-case "^2.2.0" @@ -3152,14 +3165,14 @@ camelcase@^6.3.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001746: - version "1.0.30001751" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz" - integrity sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw== +caniuse-lite@^1.0.30001754: + version "1.0.30001757" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz#a46ff91449c69522a462996c6aac4ef95d7ccc5e" + integrity sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ== chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -3170,14 +3183,14 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== cheerio-select@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== dependencies: boolbase "^1.0.0" @@ -3189,7 +3202,7 @@ cheerio-select@^2.1.0: cheerio@1.0.0-rc.12: version "1.0.0-rc.12" - resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== dependencies: cheerio-select "^2.1.0" @@ -3202,14 +3215,14 @@ cheerio@1.0.0-rc.12: chokidar@4.0.3, chokidar@^4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: readdirp "^4.0.1" chokidar@^3.0.0: version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -3224,7 +3237,7 @@ chokidar@^3.0.0: chrome-trace-event@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^4.2.0: @@ -3243,36 +3256,36 @@ class-transformer@^0.5.1: integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== class-validator@^0.14.1: - version "0.14.2" - resolved "https://registry.npmjs.org/class-validator/-/class-validator-0.14.2.tgz" - integrity sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw== + version "0.14.3" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.3.tgz#834a4caafa8359aed73d7708badb4cf271be50fe" + integrity sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA== dependencies: - "@types/validator" "^13.11.8" + "@types/validator" "^13.15.3" libphonenumber-js "^1.11.1" - validator "^13.9.0" + validator "^13.15.20" clean-css@^4.2.1: version "4.2.4" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== dependencies: source-map "~0.6.0" cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.5.0: version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-table3@0.6.5: version "0.6.5" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== dependencies: string-width "^4.2.0" @@ -3281,7 +3294,7 @@ cli-table3@0.6.5: cli-width@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== cliui@^8.0.1: @@ -3295,7 +3308,7 @@ cliui@^8.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== co@^4.6.0: @@ -3334,12 +3347,12 @@ combined-stream@^1.0.8: commander@4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@^10.0.0: version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.19.0, commander@^2.20.0: @@ -3349,12 +3362,12 @@ commander@^2.19.0, commander@^2.20.0: commander@^6.1.0: version "6.2.1" - resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== comment-json@4.4.1: version "4.4.1" - resolved "https://registry.npmjs.org/comment-json/-/comment-json-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.4.1.tgz#0757e3ba31a9e56f3f6e00bdaae114384ac8bcf3" integrity sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg== dependencies: array-timsort "^1.0.3" @@ -3394,7 +3407,7 @@ concat-stream@^2.0.0: config-chain@^1.1.13: version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" @@ -3452,7 +3465,7 @@ cors@2.8.5, cors@~2.8.5: cosmiconfig@^8.2.0: version "8.3.6" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: import-fresh "^3.3.0" @@ -3497,7 +3510,7 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6: css-select@^5.1.0: version "5.2.2" - resolved "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== dependencies: boolbase "^1.0.0" @@ -3508,7 +3521,7 @@ css-select@^5.1.0: css-what@^6.1.0: version "6.2.2" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== csvtojson@^2.0.10: @@ -3528,10 +3541,10 @@ db-errors@^0.2.3: resolved "https://registry.npmjs.org/db-errors/-/db-errors-0.2.3.tgz" integrity sha512-OOgqgDuCavHXjYSJoV2yGhv6SeG8nk42aoCSoyXLZUH7VwFG27rxbavU1z+VrZbZjphw5UkDQwUlD21MwZpUng== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.5, debug@^4.3.7, debug@^4.4.0: - version "4.4.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== +debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -3542,16 +3555,16 @@ debug@4.3.4: dependencies: ms "2.1.2" -debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== +debug@^4.1.0, debug@^4.1.1, debug@^4.3.7: + version "4.4.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.7" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" @@ -3568,12 +3581,12 @@ deep-is@^0.1.3: deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== defaults@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" @@ -3588,9 +3601,9 @@ depd@2.0.0, depd@^2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -detect-libc@^2.1.0: +detect-libc@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== detect-newline@^3.1.0: @@ -3600,7 +3613,7 @@ detect-newline@^3.1.0: detect-node@2.1.0, detect-node@^2.0.4: version "2.1.0" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== dezalgo@^1.0.4: @@ -3623,7 +3636,7 @@ do-not-zip@^1.0.0: dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -3632,7 +3645,7 @@ dom-serializer@^1.0.1: dom-serializer@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: domelementtype "^2.3.0" @@ -3641,33 +3654,33 @@ dom-serializer@^2.0.0: domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" domhandler@^4.2.0: version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" domutils@^2.4.2: version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -3676,7 +3689,7 @@ domutils@^2.4.2: domutils@^3.0.1, domutils@^3.1.0: version "3.2.2" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== dependencies: dom-serializer "^2.0.0" @@ -3711,7 +3724,7 @@ dunder-proto@^1.0.1: duplexify@^4.0.0, duplexify@^4.1.3: version "4.1.3" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== dependencies: end-of-stream "^1.4.1" @@ -3733,7 +3746,7 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: editorconfig@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-1.0.4.tgz#040c9a8e9a6c5288388b87c2db07028aa89f53a3" integrity sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q== dependencies: "@one-ini/wasm" "0.1.1" @@ -3746,10 +3759,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.227: - version "1.5.237" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.237.tgz" - integrity sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg== +electron-to-chromium@^1.5.249: + version "1.5.262" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz#c31eed591c6628908451c9ca0f0758ed514aa003" + integrity sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ== emittery@^0.13.1: version "0.13.1" @@ -3773,7 +3786,7 @@ encodeurl@^2.0.0: end-of-stream@^1.4.1: version "1.4.5" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== dependencies: once "^1.4.0" @@ -3798,41 +3811,33 @@ engine.io@~6.6.0: engine.io-parser "~5.2.1" ws "~8.17.1" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.3: +enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.3, enhanced-resolve@^5.7.0: version "5.18.3" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -enhanced-resolve@^5.17.2, enhanced-resolve@^5.7.0: - version "5.18.2" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz" - integrity sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - entities@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" @@ -3848,7 +3853,7 @@ es-errors@^1.3.0: es-module-lexer@^1.2.1: version "1.7.0" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: @@ -3875,7 +3880,7 @@ escalade@^3.1.1, escalade@^3.2.0: escape-goat@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-3.0.0.tgz#e8b5fb658553fe8a3c4959c316c6ebb8c842b19c" integrity sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw== escape-html@^1.0.3: @@ -3908,7 +3913,7 @@ eslint-plugin-prettier@^5.2.1: eslint-scope@5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -3988,7 +3993,7 @@ espree@^10.0.1, espree@^10.4.0: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.5.0: @@ -4007,7 +4012,7 @@ esrecurse@^4.3.0: estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: @@ -4027,7 +4032,7 @@ etag@^1.8.1: event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== events@^3.2.0, events@^3.3.0: @@ -4105,18 +4110,9 @@ extend@^3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - farmhash-modern@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/farmhash-modern/-/farmhash-modern-1.1.0.tgz#c36b34ad196290d57b0b482dc89e637d0b59835f" integrity sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: @@ -4134,17 +4130,6 @@ fast-fifo@^1.2.0, fast-fifo@^1.3.2: resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - 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" - fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4162,30 +4147,23 @@ fast-safe-stringify@2.1.1, fast-safe-stringify@^2.1.1: fast-uri@^3.0.1: version "3.1.0" - resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== fast-xml-parser@^4.4.1: version "4.5.3" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb" integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig== dependencies: strnum "^1.1.1" fast-xml-parser@^5.2.3: - version "5.3.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.3.1.tgz#94055e8f53e471064e3e47ca4c441d1b46229c4b" - integrity sha512-jbNkWiv2Ec1A7wuuxk0br0d0aTMUtQ4IkL+l/i1r9PRf6pLXjDgsBsWwO+UyczmQlnehi4Tbc8/KIvxGQe+I/A== + version "5.3.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.3.2.tgz#78a51945fbf7312e1ff6726cb173f515b4ea11d8" + integrity sha512-n8v8b6p4Z1sMgqRmqLJm3awW4NX7NkaKPfb3uJIBTSH7Pdvufi3PQ3/lJLQrvxcMYl7JI2jnDO90siPEpD8JBA== dependencies: strnum "^2.1.0" -fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" - faye-websocket@0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" @@ -4200,6 +4178,11 @@ fb-watchman@^2.0.2: dependencies: bser "2.1.1" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" @@ -4220,13 +4203,13 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" -file-type@21.0.0: - version "21.0.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-21.0.0.tgz#b6c5990064bc4b704f8e5c9b6010c59064d268bc" - integrity sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg== +file-type@21.1.0: + version "21.1.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-21.1.0.tgz#fb659aca041d3313bf2ae5336eeb008a2e0aa229" + integrity sha512-boU4EHmP3JXkwDo4uhyBhTt5pPstxB6eEXKJBu2yu2l7aAMMm7QQYQEzssJmKReZYrFdFOJS8koVo6bXIBGDqA== dependencies: - "@tokenizer/inflate" "^0.2.7" - strtok3 "^10.2.2" + "@tokenizer/inflate" "^0.3.1" + strtok3 "^10.3.1" token-types "^6.0.0" uint8array-extras "^1.4.0" @@ -4266,9 +4249,9 @@ find-up@^5.0.0: path-exists "^4.0.0" firebase-admin@^13.0.2: - version "13.5.0" - resolved "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.5.0.tgz" - integrity sha512-QZOpv1DJRJpH8NcWiL1xXE10tw3L/bdPFlgjcWrqU3ufyOJDYfxB1MMtxiVTwxK16NlybQbEM6ciSich2uWEIQ== + version "13.6.0" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-13.6.0.tgz#4953c5f6a474525a811d60c8d89c24165ec5c5e7" + integrity sha512-GdPA/t0+Cq8p1JnjFRBmxRxAGvF/kl2yfdhALl38PrRp325YxyQ5aNaHui0XmaKcKiGRFIJ/EgBNWFoDP0onjw== dependencies: "@fastify/busboy" "^3.0.0" "@firebase/database-compat" "^2.0.0" @@ -4286,21 +4269,21 @@ firebase-admin@^13.0.2: "@google-cloud/storage" "^7.14.0" firebase@^12.0.0: - version "12.5.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-12.5.0.tgz#a0268f8303778c4a1766a8590e412c8b290dcfaa" - integrity sha512-Ak8JcpH7FL6kiv0STwkv5+3CYEROO9iFWSx7OCZVvc4kIIABAIyAGs1mPGaHRxGUIApFZdMCXA7baq17uS6Mow== + version "12.6.0" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-12.6.0.tgz#a14cb4bc349246b12fb14f8daf093194177d063e" + integrity sha512-8ZD1Gcv916Qp8/nsFH2+QMIrfX/76ti6cJwxQUENLXXnKlOX/IJZaU2Y3bdYf5r1mbownrQKfnWtrt+MVgdwLA== dependencies: - "@firebase/ai" "2.5.0" + "@firebase/ai" "2.6.0" "@firebase/analytics" "0.10.19" "@firebase/analytics-compat" "0.2.25" - "@firebase/app" "0.14.5" + "@firebase/app" "0.14.6" "@firebase/app-check" "0.11.0" "@firebase/app-check-compat" "0.4.0" - "@firebase/app-compat" "0.5.5" + "@firebase/app-compat" "0.5.6" "@firebase/app-types" "0.9.3" "@firebase/auth" "1.11.1" "@firebase/auth-compat" "0.6.1" - "@firebase/data-connect" "0.3.11" + "@firebase/data-connect" "0.3.12" "@firebase/database" "1.1.0" "@firebase/database-compat" "2.1.0" "@firebase/firestore" "4.9.2" @@ -4337,9 +4320,9 @@ follow-redirects@^1.15.6: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== -foreground-child@^3.1.0, foreground-child@^3.3.1: +foreground-child@^3.1.0: version "3.3.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: cross-spawn "^7.0.6" @@ -4347,7 +4330,7 @@ foreground-child@^3.1.0, foreground-child@^3.3.1: fork-ts-checker-webpack-plugin@9.1.0: version "9.1.0" - resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.1.0.tgz" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.1.0.tgz#433481c1c228c56af111172fcad7df79318c915a" integrity sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q== dependencies: "@babel/code-frame" "^7.16.7" @@ -4365,7 +4348,7 @@ fork-ts-checker-webpack-plugin@9.1.0: form-data@^2.5.5: version "2.5.5" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.5.tgz#a5f6364ad7e4e67e95b4a07e2d8c6f711c74f624" integrity sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A== dependencies: asynckit "^0.4.0" @@ -4414,7 +4397,7 @@ fresh@^2.0.0: fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -4423,7 +4406,7 @@ fs-extra@^10.0.0: fs-monkey@^1.0.4: version "1.1.0" - resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.1.0.tgz#632aa15a20e71828ed56b24303363fb1414e5997" integrity sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw== fs.realpath@^1.0.0: @@ -4443,12 +4426,12 @@ function-bind@^1.1.2: functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== gaxios@^6.0.0, gaxios@^6.0.2, gaxios@^6.1.1: version "6.7.1" - resolved "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.7.1.tgz#ebd9f7093ede3ba502685e73390248bb5b7f71fb" integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ== dependencies: extend "^3.0.2" @@ -4468,7 +4451,7 @@ gaxios@^7.0.0, gaxios@^7.0.0-rc.4: gcp-metadata@^6.1.0: version "6.1.1" - resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.1.tgz#f65aa69f546bc56e116061d137d3f5f90bdec494" integrity sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A== dependencies: gaxios "^6.1.1" @@ -4533,13 +4516,6 @@ getopts@2.3.0: resolved "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz" integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" @@ -4547,24 +4523,28 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@11.0.3, glob@^11.0.3: - version "11.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz" - integrity sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA== +glob@13.0.0, glob@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.0.tgz#9d9233a4a274fc28ef7adce5508b7ef6237a1be3" + integrity sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA== dependencies: - foreground-child "^3.3.1" - jackspeak "^4.1.1" - minimatch "^10.0.3" + minimatch "^10.1.1" minipass "^7.1.2" - package-json-from-dist "^1.0.0" path-scurry "^2.0.0" -glob@^10.0.0, glob@^10.3.10, glob@^10.4.2: +glob@^10.0.0: version "10.4.5" resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -4576,6 +4556,18 @@ glob@^10.0.0, glob@^10.3.10, glob@^10.4.2: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" +glob@^10.3.10, glob@^10.4.2: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + glob@^7.1.4: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" @@ -4613,7 +4605,7 @@ google-auth-library@^10.1.0, google-auth-library@^10.2.0: google-auth-library@^9.14.2, google-auth-library@^9.3.0, google-auth-library@^9.6.3: version "9.15.1" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.1.tgz#0c5d84ed1890b2375f1cd74f03ac7b806b392928" integrity sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng== dependencies: base64-js "^1.3.0" @@ -4625,7 +4617,7 @@ google-auth-library@^9.14.2, google-auth-library@^9.3.0, google-auth-library@^9. google-gax@^4.3.3: version "4.6.1" - resolved "https://registry.npmjs.org/google-gax/-/google-gax-4.6.1.tgz" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-4.6.1.tgz#57f8e3d893d4c708a71167cdcf47eb3afab95929" integrity sha512-V6eky/xz2mcKfAd1Ioxyd6nmA61gao3n01C+YeuIwu3vzM9EDR6wcVzMSIbLMDXWeoi9SHYctXuKYC5uJUT3eQ== dependencies: "@grpc/grpc-js" "^1.10.9" @@ -4643,7 +4635,7 @@ google-gax@^4.3.3: google-logging-utils@^0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz" + resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-0.0.2.tgz#5fd837e06fa334da450433b9e3e1870c1594466a" integrity sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ== google-logging-utils@^1.0.0: @@ -4662,10 +4654,10 @@ googleapis-common@^8.0.0: qs "^6.7.0" url-template "^2.0.8" -googleapis@^164.0.0: - version "164.1.0" - resolved "https://registry.npmjs.org/googleapis/-/googleapis-164.1.0.tgz" - integrity sha512-dIN768H8so9qGucFtjYPBZJ+OCEgDi/xYyvYQHniPL1ZCYvrRDBTmtbjVjKCPG1CuOhG4CKHZDXiFe6QZ2qBeQ== +googleapis@^167.0.0: + version "167.0.0" + resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-167.0.0.tgz#8214bbbba358fdd31941de2f33d7d8bc1d9abc10" + integrity sha512-8Xqeki6K9u9jh6rGRA/OywRMXg8yXuv4ZLwSSuMBB3Ze1pErbR/iv00UmVtcrP2LcSW2Fqi+LUJ7WgFMDoxd7Q== dependencies: google-auth-library "^10.2.0" googleapis-common "^8.0.0" @@ -4677,7 +4669,7 @@ gopd@^1.2.0: graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: @@ -4687,7 +4679,7 @@ graphemer@^1.4.0: gtoken@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.1.0.tgz#d61b4ebd10132222817f7222b1e6064bd463fc26" integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== dependencies: gaxios "^6.0.0" @@ -4739,12 +4731,12 @@ hasown@^2.0.2: he@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== html-entities@^2.5.2: version "2.6.0" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== html-escaper@^2.0.0: @@ -4754,7 +4746,7 @@ html-escaper@^2.0.0: html-minifier@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56" integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== dependencies: camel-case "^3.0.0" @@ -4767,7 +4759,7 @@ html-minifier@^4.0.0: htmlparser2@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== dependencies: domelementtype "^2.0.1" @@ -4787,7 +4779,7 @@ htmlparser2@^8.0.0, htmlparser2@^8.0.1: htmlparser2@^9.1.0: version "9.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== dependencies: domelementtype "^2.3.0" @@ -4813,7 +4805,7 @@ http-parser-js@>=0.5.1: http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -4822,7 +4814,7 @@ http-proxy-agent@^5.0.0: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -4841,23 +4833,16 @@ human-signals@^2.1.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.7.0: +iconv-lite@0.7.0, iconv-lite@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.0.tgz#c50cd80e6746ca8115eb98743afa81aa0e147a3e" integrity sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -4918,7 +4903,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: ini@^1.3.4: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== interpret@^2.2.0: @@ -4933,12 +4918,12 @@ ipaddr.js@1.9.1: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" @@ -4974,7 +4959,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-number@^7.0.0: @@ -4999,7 +4984,7 @@ is-stream@^2.0.0, is-stream@^2.0.1: is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isarray@~1.0.0: @@ -5061,20 +5046,13 @@ iterare@1.2.1: jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jackspeak@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.1.tgz#96876030f450502047fc7e8c7fcf8ce8124e43ae" - integrity sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - jest-changed-files@30.2.0: version "30.2.0" resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz" @@ -5423,7 +5401,7 @@ jest-worker@30.2.0: jest-worker@^27.4.5: version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -5453,12 +5431,12 @@ joi@17.4.2: jose@^4.15.4: version "4.15.9" - resolved "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.9.tgz#9b68eda29e9a0614c042fa29387196c7dd800100" integrity sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA== js-beautify@^1.6.14: version "1.15.4" - resolved "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.15.4.tgz#f579f977ed4c930cef73af8f98f3f0a608acd51e" integrity sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA== dependencies: config-chain "^1.1.13" @@ -5469,18 +5447,18 @@ js-beautify@^1.6.14: js-cookie@^3.0.5: version "3.0.5" - resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@4.1.1, js-yaml@^4.1.0, js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" @@ -5511,7 +5489,7 @@ json-buffer@3.0.1: json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: @@ -5521,7 +5499,7 @@ json-schema-traverse@^0.4.1: json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: @@ -5536,24 +5514,24 @@ json5@^2.2.2, json5@^2.2.3: jsonc-parser@3.3.1: version "3.3.1" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" jsonwebtoken@^9.0.0, jsonwebtoken@^9.0.2: - version "9.0.2" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + version "9.0.3" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" + integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== dependencies: - jws "^3.2.2" + jws "^4.0.1" lodash.includes "^4.3.0" lodash.isboolean "^3.0.3" lodash.isinteger "^4.0.4" @@ -5566,7 +5544,7 @@ jsonwebtoken@^9.0.0, jsonwebtoken@^9.0.2: juice@^10.0.0: version "10.0.1" - resolved "https://registry.npmjs.org/juice/-/juice-10.0.1.tgz" + resolved "https://registry.yarnpkg.com/juice/-/juice-10.0.1.tgz#a1492091ef739e4771b9f60aad1a608b5a8ea3ba" integrity sha512-ZhJT1soxJCkOiO55/mz8yeBKTAJhRzX9WBO+16ZTqNTONnnVlUPyVBIzQ7lDRjaBdTbid+bAnyIon/GM3yp4cA== dependencies: cheerio "1.0.0-rc.12" @@ -5575,16 +5553,7 @@ juice@^10.0.0: slick "^1.12.2" web-resource-inliner "^6.0.1" -jwa@^1.4.1: - version "1.4.2" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz" - integrity sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw== - dependencies: - buffer-equal-constant-time "^1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jwa@^2.0.0: +jwa@^2.0.0, jwa@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== @@ -5595,7 +5564,7 @@ jwa@^2.0.0: jwks-rsa@^3.1.0: version "3.2.0" - resolved "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-3.2.0.tgz#132bc8bfa7b03928a273bbc93486f70226449e04" integrity sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww== dependencies: "@types/express" "^4.17.20" @@ -5605,14 +5574,6 @@ jwks-rsa@^3.1.0: limiter "^1.1.5" lru-memoizer "^2.2.0" -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - jws@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" @@ -5621,6 +5582,14 @@ jws@^4.0.0: jwa "^2.0.0" safe-buffer "^5.0.1" +jws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" + integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== + dependencies: + jwa "^2.0.1" + safe-buffer "^5.0.1" + jwt-decode@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz" @@ -5674,29 +5643,29 @@ levn@^0.4.1: type-check "~0.4.0" libphonenumber-js@^1.11.1: - version "1.12.10" - resolved "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.10.tgz" - integrity sha512-E91vHJD61jekHHR/RF/E83T/CMoaLXT7cwYA75T4gim4FZjnM6hbJjVIGg7chqlSqRsSvQ3izGmOjHy1SQzcGQ== + version "1.12.29" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.29.tgz#1de335eff8f7c8b9e7467bb510aab1e123c09ef5" + integrity sha512-P2aLrbeqHbmh8+9P35LXQfXOKc7XJ0ymUKl7tyeyQjdRNfzunXWxQXGc4yl3fUf28fqLRfPY+vIVvFXK7KEBTw== limiter@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-esm@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/load-esm/-/load-esm-1.0.2.tgz#35dbac8a1a3abdb802cf236008048fcc8a9289a6" - integrity sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw== +load-esm@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/load-esm/-/load-esm-1.0.3.tgz#2073afe3da63902c323e80d9f135c301173ac92c" + integrity sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA== -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== locate-path@^5.0.0: version "5.0.0" @@ -5719,37 +5688,37 @@ lodash.camelcase@^4.3.0: lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== lodash.includes@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== lodash.isboolean@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== lodash.isinteger@^4.0.4: version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== lodash.isnumber@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.memoize@^4.1.2: @@ -5764,17 +5733,17 @@ lodash.merge@^4.6.2: lodash.once@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== lodash@4.17.21, lodash@^4.14.2, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -5787,19 +5756,19 @@ long@^5.0.0: lower-case@^1.1.1: version "1.1.4" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== lru-cache@6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^11.0.0: @@ -5816,7 +5785,7 @@ lru-cache@^5.1.1: lru-memoizer@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.3.0.tgz#ef0fbc021bceb666794b145eefac6be49dc47f31" integrity sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug== dependencies: lodash.clonedeep "^4.5.0" @@ -5829,7 +5798,7 @@ luxon@^3.5.0, luxon@~3.7.0: magic-string@0.30.17: version "0.30.17" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" @@ -5860,7 +5829,7 @@ math-intrinsics@^1.1.0: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== media-typer@^1.1.0: @@ -5870,14 +5839,14 @@ media-typer@^1.1.0: memfs@^3.4.1: version "3.6.0" - resolved "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: fs-monkey "^1.0.4" mensch@^0.3.4: version "0.3.4" - resolved "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz" + resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd" integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g== merge-descriptors@^2.0.0: @@ -5887,14 +5856,9 @@ merge-descriptors@^2.0.0: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - methods@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" @@ -5926,9 +5890,9 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.35, mime-types@~2.1.24, mime-db "1.52.0" mime-types@^3.0.0, mime-types@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz" - integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== dependencies: mime-db "^1.54.0" @@ -5939,22 +5903,22 @@ mime@2.6.0, mime@^2.4.6: mime@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@9.0.1: version "9.0.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== dependencies: brace-expansion "^2.0.1" -minimatch@^10.0.3: +minimatch@^10.1.1: version "10.1.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== @@ -5984,54 +5948,54 @@ minimatch@^9.0.3, minimatch@^9.0.4: minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -mjml-accordion@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.16.1.tgz" - integrity sha512-WqBaDmov7uI15dDVZ5UK6ngNwVhhXawW+xlCVbjs21wmskoG4lXc1j+28trODqGELk3BcQOqjO8Ee6Ytijp4PA== +mjml-accordion@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-accordion/-/mjml-accordion-4.17.2.tgz#7b033932ce47f431ec2454f7bef940a57c1eca7b" + integrity sha512-faepE2yYKrpJxSHluQZV13D8ibqEar5SsPmT//MTnE0s0kW1KvEOaY+oXdgSGBbWWnvdvNQm4APxRz5yDCueUQ== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-body@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-body/-/mjml-body-4.16.1.tgz" - integrity sha512-A19pJ2HXqc7A5pKc8Il/d1cH5yyO2Jltwit3eUKDrZ/fBfYxVWZVPNuMooqt6QyC26i+xhhVbVsRNTwL1Aclqg== +mjml-body@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-body/-/mjml-body-4.17.2.tgz#3462400e6a34bfc6243e8449a15aca5970d5bd81" + integrity sha512-Tn6jLBHYY84JnM5iK/M6pIhaDxxQ8OP6DqBp89EJeTkmad1AgJsrF81kqeyK4r4FQb/Iz6ShitpX/ICfKSJjTA== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-button@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-button/-/mjml-button-4.16.1.tgz" - integrity sha512-z2YsSEDHU4ubPMLAJhgopq3lnftjRXURmG8A+K/QIH4Js6xHIuSNzCgVbBl13/rB1hwc2RxUP839JoLt3M1FRg== +mjml-button@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-button/-/mjml-button-4.17.2.tgz#6bb49d0fc2dd617b74c4922661248b3ebd0ae4d8" + integrity sha512-BMgHaOl4X93QAu0zEezycLIK/YbTrB1wZYGqjZeW8OxCOcC6Pqq1R3JiHofz0mmzJHohu9SC5ZFKJwyqN16Obg== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-carousel@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.16.1.tgz" - integrity sha512-Xna+lSHJGMiPxDG3kvcK3OfEDQbkgyXEz0XebN7zpLDs1Mo4IXe8qI7fFnDASckwC14gmdPwh/YcLlQ4nkzwrQ== +mjml-carousel@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-carousel/-/mjml-carousel-4.17.2.tgz#0156a1433a91c3626a1f7724d7be65b54d4e1e83" + integrity sha512-Jj2/ZqlH+pa5hAT8FrVPTzb+reY0dgo4ceYBeTDc4zzoVSO5CK/83/Sb/WQlYhiJHTbaV1pTX8l99T8/uXoULw== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-cli@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.16.1.tgz" - integrity sha512-1dTGWOKucdNImjLzDZfz1+aWjjZW4nRW5pNUMOdcIhgGpygYGj1X4/R8uhrC61CGQXusUrHyojQNVks/aBm9hQ== +mjml-cli@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-cli/-/mjml-cli-4.17.2.tgz#5cb94155650bcb272903b8d81ed5ea10990c6bac" + integrity sha512-v5/7aTbcB0em2iyZS6+ikulUQOu1nkHhMELIjN0sYfw+7y2kcM/2WKqE8mVv97Tf4qQcIYsX4Oh6rBvZ2HOfXg== dependencies: "@babel/runtime" "^7.28.4" chokidar "^3.0.0" @@ -6040,25 +6004,25 @@ mjml-cli@4.16.1: js-beautify "^1.6.14" lodash "^4.17.21" minimatch "^9.0.3" - mjml-core "4.16.1" - mjml-migrate "4.16.1" - mjml-parser-xml "4.16.1" - mjml-validator "4.16.1" + mjml-core "4.17.2" + mjml-migrate "4.17.2" + mjml-parser-xml "4.17.2" + mjml-validator "4.17.2" yargs "^17.7.2" -mjml-column@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-column/-/mjml-column-4.16.1.tgz" - integrity sha512-olScfxGEC0hp3VGzJUn7/znu7g9QlU1PsVRNL7yGKIUiZM/foysYimErBq2CfkF+VkEA9ZlMMeRLGNFEW7H3qQ== +mjml-column@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-column/-/mjml-column-4.17.2.tgz#cc2c10a46fffd9b86a85ae7fe722055004208131" + integrity sha512-JYOiSwiP+/XPX/sPMj2l10X6fCBqL0HFardJ2XsgYrgYApgo+lQvuK4xHI7vEm5t3Fhu76ZPdrEOsqPQ2+liGg== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-core@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-core/-/mjml-core-4.16.1.tgz" - integrity sha512-sT7VbcUyd3m68tyZvK/cYbZIn7J3E4A+AFtAxI2bxj4Mz8QPjpz6BUGXkRJcYYxvNYVA+2rBFCFRXe5ErsVMVg== +mjml-core@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-core/-/mjml-core-4.17.2.tgz#6af5d7be03c9d69a32df27b28d667c29accd281c" + integrity sha512-4gpL4bMZ7XsNGUA5KTWtpZ7RQMeFRHTdmsfwnwzGCZ4lWnvXoK54vAWeYajN1ohxdwIImcDmUfsC935Pi3FqNg== dependencies: "@babel/runtime" "^7.28.4" cheerio "1.0.0-rc.12" @@ -6067,263 +6031,263 @@ mjml-core@4.16.1: js-beautify "^1.6.14" juice "^10.0.0" lodash "^4.17.21" - mjml-migrate "4.16.1" - mjml-parser-xml "4.16.1" - mjml-validator "4.16.1" + mjml-migrate "4.17.2" + mjml-parser-xml "4.17.2" + mjml-validator "4.17.2" -mjml-divider@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.16.1.tgz" - integrity sha512-KNqk0V3VRXU0f3yoziFUl1TboeRJakm+7B7NmGRUj13AJrEkUela2Y4/u0wPk8GMC8Qd25JTEdbVHlImfyNIQQ== +mjml-divider@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-divider/-/mjml-divider-4.17.2.tgz#3d1af50153a6d49dfe2cc32a86e1c2fedc989f5f" + integrity sha512-U88vPMN9nWO6YEz2OrNiKUchoViLxauNP77Z8eZPrhTEHfAWHWi2KBUk7or77dC4/b/laQs5/12dzKGUFoOY/A== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-group@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-group/-/mjml-group-4.16.1.tgz" - integrity sha512-pjNEpS9iTh0LGeYZXhfhI27pwFFTAiqx+5Q420P4ebLbeT5Vsmr8TrcaB/gEPNn/eLrhzH/IssvnFOh5Zlmrlg== +mjml-group@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-group/-/mjml-group-4.17.2.tgz#4df8076142d66b2779bfb0fc0248b6a1ed6628e8" + integrity sha512-DZbeToAsynCjF5iD8Uzcuep/M3+WMAjvNhIdODrGjC6KGDeDc1fRoHBWV509MJxmMNH8S3D/theNJjiS6U4BLA== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head-attributes@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.16.1.tgz" - integrity sha512-JHFpSlQLJomQwKrdptXTdAfpo3u3bSezM/4JfkCi53MBmxNozWzQ/b8lX3fnsTSf9oywkEEGZD44M2emnTWHug== +mjml-head-attributes@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head-attributes/-/mjml-head-attributes-4.17.2.tgz#b89c45978f16be70d3404e1308eb37a057b5de4f" + integrity sha512-HcKdm+5DTc84kbkx9Z3w9wTLlJwyAlTEt9HHk4LA334Xve4/psd47mLnshYasLeeYj/nPV/Qx83uGxzyIOW8mA== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head-breakpoint@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.16.1.tgz" - integrity sha512-b4C/bZCMV1k/br2Dmqfp/mhYPkcZpBQdMpAOAaI8na7HmdS4rE/seJUfeCUr7fy/7BvbmsN2iAAttP54C4bn/A== +mjml-head-breakpoint@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head-breakpoint/-/mjml-head-breakpoint-4.17.2.tgz#a3ed6b2cf5966dc5d2dea0d57537158ca0408d2b" + integrity sha512-6cqz2b9xUT4XZyl/ykmnFuwjupVn7Zlopz4clrapiPMLOvb8w2aTBK+Al+ttutHSjJde5lgpkzcs9V2QlnBmgg== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head-font@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.16.1.tgz" - integrity sha512-Bw3s5HSeWX3wVq4EJnBS8OOgw/RP4zO0pbidv7T+VqKunUEuUwCEaLZyuTyhBqJ61QiPOehBBGBDGwYyVaJGVg== +mjml-head-font@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head-font/-/mjml-head-font-4.17.2.tgz#b6f3923401551f04acbe9676576c4578ca9889ed" + integrity sha512-Jm8B2yiOMWB7u1mp3CMVvlFhYdnNijk6M/UTuMzXikZ4Uwx46upbvafZf0Ki2nDYRRCqke3lZxvuG1+9W4xDnw== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head-html-attributes@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head-html-attributes/-/mjml-head-html-attributes-4.16.1.tgz" - integrity sha512-GtT0vb6rb/dyrdPzlMQTtMjCwUyXINAHcUR+IGi1NTx8xoHWUjmWPQ/v95IhgelsuQgynuLWVPundfsPn8/PTQ== +mjml-head-html-attributes@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head-html-attributes/-/mjml-head-html-attributes-4.17.2.tgz#421f38d7b446a23d2dd71c0aec83c3e1e644ca70" + integrity sha512-7zXxCDJJXQprP691yEK8SpoF1gHOeNMFnr/iJb3d8v7Aw9Rzt/7rAjtVd9LCeYvzaeCSodAbz/pAc8yg4VDbrg== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head-preview@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.16.1.tgz" - integrity sha512-5iDM5ZO0JWgucIFJG202kGKVQQWpn1bOrySIIp2fQn1hCXQaefAPYduxu7xDRtnHeSAw623IxxKzZutOB8PMSg== +mjml-head-preview@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head-preview/-/mjml-head-preview-4.17.2.tgz#424d18e51227bb8d678b9dfbddcfe3154c844166" + integrity sha512-ihpVcwJnUcnH5f9znzNY0Mw0izQ29WA3gJIVRww5lGj25IC+RaElwzvUBsuxrx1WBhcIAjbaL4Em+5aNSIhP8Q== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head-style@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.16.1.tgz" - integrity sha512-P6NnbG3+y1Ow457jTifI9FIrpkVSxEHTkcnDXRtq3fA5UR7BZf3dkrWQvsXelm6DYCSGUY0eVuynPPOj71zetQ== +mjml-head-style@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head-style/-/mjml-head-style-4.17.2.tgz#767eba73ec860406977619ddfffe289c5a4b4a90" + integrity sha512-iSrbIUml3AdqWy/cMA9xDZj37Mu3H8XKO6S/kdaTr/BlprnLXoGz3BTHH3lJu7e6tXrhqe2vT+4Gjngh/wfW9A== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head-title@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.16.1.tgz" - integrity sha512-s7X9XkIu46xKXvjlZBGkpfsTcgVqpiQjAm0OrHRV9E5TLaICoojmNqEz5CTvvlTz7olGoskI1gzJlnhKxPmkXQ== +mjml-head-title@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head-title/-/mjml-head-title-4.17.2.tgz#cd368554fe45c0c0be714a10523ef5c422545c77" + integrity sha512-9NuyGzfkVHE8T81frxyYEPcjVoedQKPZ/W+hBMeBAV1KtlMT+/fAXlksrHq0rIiWXrewVv4Vl9iIOOAcG4ABYw== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-head@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-head/-/mjml-head-4.16.1.tgz" - integrity sha512-R/YA6wxnUZHknJ2H7TT6G6aXgNY7B3bZrAbJQ4I1rV/l0zXL9kfjz2EpkPfT0KHzS1cS2J1pK/5cn9/KHvHA2Q== +mjml-head@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-head/-/mjml-head-4.17.2.tgz#83609c4ac4de436eba96f652fe3f11c9a20b6748" + integrity sha512-VQb0G59frvSKoQYJJNDotCYcYL3RwMwHtdu+FhkK6EQ5D0JnapLLCYRD0iEuRciZR4ac+2ghg6jYcbJiAntwLA== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-hero@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.16.1.tgz" - integrity sha512-1q6hsG7l2hgdJeNjSNXVPkvvSvX5eJR5cBvIkSbIWqT297B1WIxwcT65Nvfr1FpkEALeswT4GZPSfvTuXyN8hg== +mjml-hero@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-hero/-/mjml-hero-4.17.2.tgz#3da2727ab412b074e236a13e668fea1ea89968f1" + integrity sha512-7r8uqAmqBpqBsLRgC2Am+iUFlBg2AMB3aYzhajJ4pqgaqotPUuumdYNM3j9i8DfBFhTRGeFLjQXrUJuzBmmBOw== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-image@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-image/-/mjml-image-4.16.1.tgz" - integrity sha512-snTULRoskjMNPxajSFIp4qA/EjZ56N0VXsAfDQ9ZTXZs0Mo3vy2N81JDGNVRmKkAJyPEwN77zrAHbic0Ludm1w== +mjml-image@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-image/-/mjml-image-4.17.2.tgz#b9f002096a4c42a0df3d060eeaeadd21d9a46b78" + integrity sha512-hB4viCuqQ9h69VFksOgIekf2KgurHIOmIR9NJVrjTErhCFZZ1HJXOUgPzNhyDzPWZ69/7RyT1icIXC2v6g5U3Q== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-migrate@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.16.1.tgz" - integrity sha512-4SuaFWyu1Hg948ODHz1gF5oXrhgRI1LgtWMRE+Aoz4F6SSA7kL78iJqEVvouOHCpcxQStDdiZo8/KeuQ1llEAw== +mjml-migrate@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-migrate/-/mjml-migrate-4.17.2.tgz#d84ce5e3c67f9b060b68d153167217d2690becbd" + integrity sha512-a8klJLvelnNK8JErpgcvgXFaNUpfJe8zjnuQD6Z93edAKYGArZ/DFlUk4XJAUY6mXqr7Yd45Ch3XJeyI9Crheg== dependencies: "@babel/runtime" "^7.28.4" js-beautify "^1.6.14" lodash "^4.17.21" - mjml-core "4.16.1" - mjml-parser-xml "4.16.1" + mjml-core "4.17.2" + mjml-parser-xml "4.17.2" yargs "^17.7.2" -mjml-navbar@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.16.1.tgz" - integrity sha512-lLlTOU3pVvlnmIJ/oHbyuyV8YZ99mnpRvX+1ieIInFElOchEBLoq1Mj+RRfaf2EV/q3MCHPyYUZbDITKtqdMVg== +mjml-navbar@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-navbar/-/mjml-navbar-4.17.2.tgz#bd3f5772b3b31c20d940a368cccb5b12579e0236" + integrity sha512-FiUZmpdjni6mRNkuFoVNFesTvHp7iAt7EBmfV+N3mAEkvqObV/A5bZYs1mmWPGoISE/FDVQ8O9wuPE95KWA+VA== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-parser-xml@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.16.1.tgz" - integrity sha512-QsHnPgVGgzcLX82wn1uP53X9pIUP3H6bJMad9R1v2F1A9rhaKK+wctxvXWBp4+XXJOv3SqpE5GDBEQPWNs5IgQ== +mjml-parser-xml@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-parser-xml/-/mjml-parser-xml-4.17.2.tgz#56993fa991503964f07683fec430f2fbdd91a6cb" + integrity sha512-/9pKKFeAbjwpsXLSGSxQv8/ZpblUbURc2Me5/REnIyGpwvccYYoCyTt5smVaewaWfawzNPYPlNKbqt9Sk00HLA== dependencies: "@babel/runtime" "^7.28.4" detect-node "2.1.0" htmlparser2 "^9.1.0" lodash "^4.17.21" -mjml-preset-core@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-preset-core/-/mjml-preset-core-4.16.1.tgz" - integrity sha512-D7ogih4k31xCvj2u5cATF8r6Z1yTbjMnR+rs19fZ35gXYhl0B8g4cARwXVCu0WcU4vs/3adInAZ8c54NL5ruWA== +mjml-preset-core@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-preset-core/-/mjml-preset-core-4.17.2.tgz#5099fbf92453e4bf2a656c3a5ad6706336edc0c5" + integrity sha512-5fAUKkxbDHNvarEdCCWEsWnyBJE9th6UP0tDKQKx0Lhk+yc/rDDbUTDLxZMPgYUHFihvkCeNOjuETv/NWuP3Qg== dependencies: "@babel/runtime" "^7.28.4" - mjml-accordion "4.16.1" - mjml-body "4.16.1" - mjml-button "4.16.1" - mjml-carousel "4.16.1" - mjml-column "4.16.1" - mjml-divider "4.16.1" - mjml-group "4.16.1" - mjml-head "4.16.1" - mjml-head-attributes "4.16.1" - mjml-head-breakpoint "4.16.1" - mjml-head-font "4.16.1" - mjml-head-html-attributes "4.16.1" - mjml-head-preview "4.16.1" - mjml-head-style "4.16.1" - mjml-head-title "4.16.1" - mjml-hero "4.16.1" - mjml-image "4.16.1" - mjml-navbar "4.16.1" - mjml-raw "4.16.1" - mjml-section "4.16.1" - mjml-social "4.16.1" - mjml-spacer "4.16.1" - mjml-table "4.16.1" - mjml-text "4.16.1" - mjml-wrapper "4.16.1" - -mjml-raw@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.16.1.tgz" - integrity sha512-xQrosP9iNNCrfMnYjJzlzV6fzAysRuv3xuB/JuTuIbS74odvGItxXNnYLUEvwGnslO4ij2J4Era62ExEC3ObNQ== + mjml-accordion "4.17.2" + mjml-body "4.17.2" + mjml-button "4.17.2" + mjml-carousel "4.17.2" + mjml-column "4.17.2" + mjml-divider "4.17.2" + mjml-group "4.17.2" + mjml-head "4.17.2" + mjml-head-attributes "4.17.2" + mjml-head-breakpoint "4.17.2" + mjml-head-font "4.17.2" + mjml-head-html-attributes "4.17.2" + mjml-head-preview "4.17.2" + mjml-head-style "4.17.2" + mjml-head-title "4.17.2" + mjml-hero "4.17.2" + mjml-image "4.17.2" + mjml-navbar "4.17.2" + mjml-raw "4.17.2" + mjml-section "4.17.2" + mjml-social "4.17.2" + mjml-spacer "4.17.2" + mjml-table "4.17.2" + mjml-text "4.17.2" + mjml-wrapper "4.17.2" + +mjml-raw@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-raw/-/mjml-raw-4.17.2.tgz#9e0bee04420f6ff604901795a74850b6767524d8" + integrity sha512-S7G7Ut2U6xeq3rD48FY8AZoZEz9K5HVszipos0T6JYd0VxrjTKUSD5IvFX3nT+1QcG2ZJMSuO2gZm6SztPZdUg== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-section@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-section/-/mjml-section-4.16.1.tgz" - integrity sha512-VxKc+7wEWRsAny9mT464LaaYklz20OUIRDH8XV88LK+8JSd05vcbnEI0eneye6Hly0NIwHARbOI6ssLtNPojIQ== +mjml-section@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-section/-/mjml-section-4.17.2.tgz#85442819abf10cd3b4af74667986aa8b20e637c2" + integrity sha512-PGR55DKVKDUioqCXZruol/TYT1j/zT0oLkwlQ6E2RBxErFJ33DJiNUNmAXXJ9N8gOh8iiuZJ3xwSMXZgJgJSbw== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-social@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-social/-/mjml-social-4.16.1.tgz" - integrity sha512-u7k+s7LEY5vB0huJL1aEnkwfJmLX8mln4PDNciO+71/pbi7VRuLuUWqnxHbg7HPP130vJp0tqOrpyIIbxmHlHA== +mjml-social@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-social/-/mjml-social-4.17.2.tgz#326a34bf38d4d11f2dc0ca65527095001fc60e10" + integrity sha512-4/XlvSQDH0S9AWW80HEa08HFldAFAdNjYTV1TU5UuXbhFZrSIKx1i86Yh6Zb23fP0pbeb3yMlY5R8nrONYKRDQ== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-spacer@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.16.1.tgz" - integrity sha512-HZ9S2Ap3WUf5gYEzs16D8J7wxRG82ReLXd7dM8CSXcfIiqbTUYuApakNlk2cMDOskK9Od1axy8aAirDa7hzv4Q== +mjml-spacer@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-spacer/-/mjml-spacer-4.17.2.tgz#9fdabf1e4600405447683cbfa97e5d2bf90afb15" + integrity sha512-FU5iYToqu8enC09X/mvQUPnHVCrmpSOvUr36qcuaduX+KbBgui8mACDJIvoDbiS4ikt7VOkxKy/C4GjzocKvKg== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-table@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-table/-/mjml-table-4.16.1.tgz" - integrity sha512-JCG/9JFYkx93cSNgxbPBb7KXQjJTa0roEDlKqPC6MkQ3XIy1zCS/jOdZCfhlB2Y9T/9l2AuVBheyK7f7Oftfeg== +mjml-table@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-table/-/mjml-table-4.17.2.tgz#a2140307c61e23cab41e180fb6ac253cf4af95ae" + integrity sha512-KyoCuskFRE0lk49RIoJ1zq2FOn7xG1ajJ1OQGoiMT4YZUq+w6aDHQs5OvUg5ZxdynBOHHEFhv4zsIE70s68JWg== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-text@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-text/-/mjml-text-4.16.1.tgz" - integrity sha512-BmwDXhI+HEe4klEHM9KAXzYxLoUqU97GZI3XMiNdBPSsxKve2x/PSEfRPxEyRaoIpWPsh4HnQBJANzfTgiemSQ== +mjml-text@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-text/-/mjml-text-4.17.2.tgz#f670acd9fc8255fa605f93faf3e1c5ec981ff855" + integrity sha512-K01V0iag2vV+3HOid1iCqmhKaBsMNJMB8jlZmI/3CXG6ckgglEvYjF1d1giiX2K5A4Y1ZmKwYLvsuhLXote5MA== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" + mjml-core "4.17.2" -mjml-validator@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.16.1.tgz" - integrity sha512-lCePRig7cTLCpkqBk1GAUs+BS3rbO+Nmle+rHLZo5rrHgJJOkozHAJbmaEs9p29KXx0OoUTj+JVMncpUQeCSFA== +mjml-validator@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-validator/-/mjml-validator-4.17.2.tgz#f0f3fe563b7fe32015231740dc4ce682bcaaf5cc" + integrity sha512-XItJM6DlXPOHuvzSZhCXt5zxX6it8uXdnJQc1YY20hte6vfFDuKXe8tTRj66kQOZKhouhxm7EFvFRFmVd1vZtw== dependencies: "@babel/runtime" "^7.28.4" -mjml-wrapper@4.16.1: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.16.1.tgz" - integrity sha512-OfbKR8dym5vJ4z+n1L0vFfuGfnD8Y1WKrn4rjEuvCWWSE4BeXd/rm4OHy2JKgDo3Wg7kxLkz9ghEO4kFMOKP5g== +mjml-wrapper@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml-wrapper/-/mjml-wrapper-4.17.2.tgz#50cba3d6540acedf6dbfb5280e9863bf0b7df987" + integrity sha512-b292fkFyQC+8nQHzLhM3VzSfoE/CXCjeVMfFj/wjsg0gs7qxzRnKhIDZexr7nkgOAipt2B0vNh7bZisntY34Hw== dependencies: "@babel/runtime" "^7.28.4" lodash "^4.17.21" - mjml-core "4.16.1" - mjml-section "4.16.1" + mjml-core "4.17.2" + mjml-section "4.17.2" mjml@^4.15.3: - version "4.16.1" - resolved "https://registry.npmjs.org/mjml/-/mjml-4.16.1.tgz" - integrity sha512-urrG5JD4vmYNT6kdNHwxeCuiPPR0VFonz4slYQhCBXWS8/KsYxkY2wnYA+vfOLq91aQnMvJzVcUK+ye9z7b51w== + version "4.17.2" + resolved "https://registry.yarnpkg.com/mjml/-/mjml-4.17.2.tgz#de7c2a8611f07e94af44e9ba8120d78466fb83c6" + integrity sha512-hAx9azG9lk/fQg6HuvMlc7IcgYLkXqT730psppHf8vGZ4L7j0Wr5NRq0B9Dm+aon6b+1WZrelPO9mIxnjgYiKA== dependencies: "@babel/runtime" "^7.28.4" - mjml-cli "4.16.1" - mjml-core "4.16.1" - mjml-migrate "4.16.1" - mjml-preset-core "4.16.1" - mjml-validator "4.16.1" + mjml-cli "4.17.2" + mjml-core "4.17.2" + mjml-migrate "4.17.2" + mjml-preset-core "4.17.2" + mjml-validator "4.17.2" mkdirp@^0.5.6: version "0.5.6" @@ -6366,7 +6330,7 @@ multer@2.0.2: mute-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== mysql@^2.18.1: @@ -6401,7 +6365,7 @@ natural-compare@^1.4.0: negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== negotiator@^1.0.0: @@ -6411,19 +6375,19 @@ negotiator@^1.0.0: neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== no-case@^2.2.0: version "2.3.2" - resolved "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== dependencies: lower-case "^1.1.1" node-abort-controller@^3.0.1: version "3.1.1" - resolved "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== node-domexception@^1.0.0: @@ -6433,7 +6397,7 @@ node-domexception@^1.0.0: node-emoji@1.11.0: version "1.11.0" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: lodash "^4.17.21" @@ -6459,26 +6423,31 @@ node-forge@^1.3.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-forge@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.2.tgz#d0d2659a26eef778bf84d73e7f55c08144ee7750" + integrity sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.21: - version "2.0.25" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.25.tgz" - integrity sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== nopt@^7.2.1: version "7.2.1" - resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: abbrev "^2.0.0" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.1: @@ -6490,7 +6459,7 @@ npm-run-path@^4.0.1: nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" @@ -6535,7 +6504,7 @@ once@^1.3.0, once@^1.4.0: onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" @@ -6554,7 +6523,7 @@ optionator@^0.9.3: ora@5.4.1: version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -6567,11 +6536,6 @@ ora@5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -6617,7 +6581,7 @@ pako@^1.0.10, pako@^1.0.11, pako@^1.0.6: param-case@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== dependencies: no-case "^2.2.0" @@ -6631,7 +6595,7 @@ parent-module@^1.0.0: parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -6646,7 +6610,7 @@ parse-srcset@^1.0.2: parse5-htmlparser2-tree-adapter@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b" integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== dependencies: domhandler "^5.0.3" @@ -6654,7 +6618,7 @@ parse5-htmlparser2-tree-adapter@^7.0.0: parse5@^7.0.0: version "7.3.0" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== dependencies: entities "^6.0.0" @@ -6665,13 +6629,13 @@ parseurl@^1.3.3: integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== passkit-generator@^3.3.1: - version "3.5.5" - resolved "https://registry.yarnpkg.com/passkit-generator/-/passkit-generator-3.5.5.tgz#03ca9485a4f2fa358576be184668a1f95474ce89" - integrity sha512-VXQ6/pt49+zR6R3OPKQfAS+vKR2cKEBad5knoK/yaLqthz0f25rUG4mjd2/yuiwDkbqyuoYrr0MkCN1+2afn/A== + version "3.5.6" + resolved "https://registry.yarnpkg.com/passkit-generator/-/passkit-generator-3.5.6.tgz#c581eac85dff965d6a97d804b25621616bb75a50" + integrity sha512-oxI0uf9572yK1Tkfu4ZKZZlJHSN/mOcXz/+UsVGlAM5mthcJDudm4MAemP23ezWSqhiikrmzDF5HgXHIStyAbw== dependencies: do-not-zip "^1.0.0" joi "17.4.2" - node-forge "^1.3.1" + node-forge "^1.3.2" tslib "^2.7.0" passport-jwt@^4.0.1: @@ -6718,33 +6682,28 @@ path-parse@^1.0.7: path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" - integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10" + integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA== dependencies: lru-cache "^11.0.0" minipass "^7.1.2" -path-to-regexp@8.2.0, path-to-regexp@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" - integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== - -path-to-regexp@8.3.0: +path-to-regexp@8.3.0, path-to-regexp@^8.0.0: version "8.3.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pause@0.0.1: @@ -6769,12 +6728,12 @@ pg-connection-string@2.6.2: picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: @@ -6782,7 +6741,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: +picomatch@^4.0.2, picomatch@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== @@ -6801,7 +6760,7 @@ pkg-dir@^4.2.0: pluralize@8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== postcss@^8.3.11: @@ -6826,9 +6785,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.4.2: - version "3.6.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz" - integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== + version "3.7.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.7.4.tgz#d2f8335d4b1cec47e1c8098645411b0c9dff9c0f" + integrity sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== pretty-format@30.2.0, pretty-format@^30.0.0: version "30.2.0" @@ -6851,19 +6810,19 @@ process@^0.11.10: proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== proto3-json-serializer@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz#5b705203b4d58f3880596c95fad64902617529dd" integrity sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ== dependencies: protobufjs "^7.2.5" -protobufjs@^7.2.5, protobufjs@^7.2.6, protobufjs@^7.3.2: +protobufjs@^7.2.5, protobufjs@^7.2.6, protobufjs@^7.3.2, protobufjs@^7.5.3: version "7.5.4" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.5.4.tgz#885d31fe9c4b37f25d1bb600da30b1c5b37d286a" integrity sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg== dependencies: "@protobufjs/aspromise" "^1.1.2" @@ -6914,14 +6873,9 @@ qs@^6.11.2, qs@^6.12.3, qs@^6.13.1, qs@^6.14.0, qs@^6.7.0: dependencies: side-channel "^1.1.0" -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" @@ -7001,12 +6955,12 @@ readdir-glob@^1.1.2: readdirp@^4.0.1: version "4.1.2" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -7025,7 +6979,7 @@ reflect-metadata@^0.2.2: relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== require-directory@^2.1.1: @@ -7035,7 +6989,7 @@ require-directory@^2.1.1: require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-cwd@^3.0.0: @@ -7066,7 +7020,7 @@ resolve@^1.20.0: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -7074,7 +7028,7 @@ restore-cursor@^3.1.0: retry-request@^7.0.0: version "7.0.2" - resolved "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-7.0.2.tgz#60bf48cfb424ec01b03fca6665dee91d06dd95f3" integrity sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w== dependencies: "@types/request" "^2.48.8" @@ -7083,20 +7037,15 @@ retry-request@^7.0.0: retry@0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - rimraf@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.1.0.tgz#b9168360a26e10ffaca0c8b803f47069f99ca47e" - integrity sha512-DxdlA1bdNzkZK7JiNWH+BAx1x4tEJWoTofIopFo6qWUU94jYrFZ0ubY05TqH3nWPJ1nKa1JWVFDINZ3fnrle/A== + version "6.1.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.1.2.tgz#9a0f3cea2ab853e81291127422116ecf2a86ae89" + integrity sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g== dependencies: - glob "^11.0.3" + glob "^13.0.0" package-json-from-dist "^1.0.1" router@^2.2.0: @@ -7110,16 +7059,9 @@ router@^2.2.0: parseurl "^1.3.3" path-to-regexp "^8.0.0" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - rxjs@7.8.1: version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -7138,12 +7080,12 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize-html@^2.14.0: @@ -7160,7 +7102,7 @@ sanitize-html@^2.14.0: schema-utils@^3.1.1: version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" @@ -7169,7 +7111,7 @@ schema-utils@^3.1.1: schema-utils@^4.3.0, schema-utils@^4.3.3: version "4.3.3" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== dependencies: "@types/json-schema" "^7.0.9" @@ -7177,16 +7119,6 @@ schema-utils@^4.3.0, schema-utils@^4.3.3: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -schema-utils@^4.3.2: - version "4.3.2" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz" - integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - semver@^5.3.0: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" @@ -7199,7 +7131,7 @@ semver@^6.3.1: semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.2, semver@^7.7.3: version "7.7.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== send@^1.1.0, send@^1.2.0: @@ -7221,7 +7153,7 @@ send@^1.1.0, send@^1.2.0: serialize-javascript@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -7242,36 +7174,38 @@ setprototypeof@1.2.0: integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sharp@*, sharp@^0.34.4: - version "0.34.4" - resolved "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz" - integrity sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA== + version "0.34.5" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.34.5.tgz#b6f148e4b8c61f1797bde11a9d1cfebbae2c57b0" + integrity sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg== dependencies: "@img/colour" "^1.0.0" - detect-libc "^2.1.0" - semver "^7.7.2" + detect-libc "^2.1.2" + semver "^7.7.3" optionalDependencies: - "@img/sharp-darwin-arm64" "0.34.4" - "@img/sharp-darwin-x64" "0.34.4" - "@img/sharp-libvips-darwin-arm64" "1.2.3" - "@img/sharp-libvips-darwin-x64" "1.2.3" - "@img/sharp-libvips-linux-arm" "1.2.3" - "@img/sharp-libvips-linux-arm64" "1.2.3" - "@img/sharp-libvips-linux-ppc64" "1.2.3" - "@img/sharp-libvips-linux-s390x" "1.2.3" - "@img/sharp-libvips-linux-x64" "1.2.3" - "@img/sharp-libvips-linuxmusl-arm64" "1.2.3" - "@img/sharp-libvips-linuxmusl-x64" "1.2.3" - "@img/sharp-linux-arm" "0.34.4" - "@img/sharp-linux-arm64" "0.34.4" - "@img/sharp-linux-ppc64" "0.34.4" - "@img/sharp-linux-s390x" "0.34.4" - "@img/sharp-linux-x64" "0.34.4" - "@img/sharp-linuxmusl-arm64" "0.34.4" - "@img/sharp-linuxmusl-x64" "0.34.4" - "@img/sharp-wasm32" "0.34.4" - "@img/sharp-win32-arm64" "0.34.4" - "@img/sharp-win32-ia32" "0.34.4" - "@img/sharp-win32-x64" "0.34.4" + "@img/sharp-darwin-arm64" "0.34.5" + "@img/sharp-darwin-x64" "0.34.5" + "@img/sharp-libvips-darwin-arm64" "1.2.4" + "@img/sharp-libvips-darwin-x64" "1.2.4" + "@img/sharp-libvips-linux-arm" "1.2.4" + "@img/sharp-libvips-linux-arm64" "1.2.4" + "@img/sharp-libvips-linux-ppc64" "1.2.4" + "@img/sharp-libvips-linux-riscv64" "1.2.4" + "@img/sharp-libvips-linux-s390x" "1.2.4" + "@img/sharp-libvips-linux-x64" "1.2.4" + "@img/sharp-libvips-linuxmusl-arm64" "1.2.4" + "@img/sharp-libvips-linuxmusl-x64" "1.2.4" + "@img/sharp-linux-arm" "0.34.5" + "@img/sharp-linux-arm64" "0.34.5" + "@img/sharp-linux-ppc64" "0.34.5" + "@img/sharp-linux-riscv64" "0.34.5" + "@img/sharp-linux-s390x" "0.34.5" + "@img/sharp-linux-x64" "0.34.5" + "@img/sharp-linuxmusl-arm64" "0.34.5" + "@img/sharp-linuxmusl-x64" "0.34.5" + "@img/sharp-wasm32" "0.34.5" + "@img/sharp-win32-arm64" "0.34.5" + "@img/sharp-win32-ia32" "0.34.5" + "@img/sharp-win32-x64" "0.34.5" shebang-command@^2.0.0: version "2.0.0" @@ -7327,7 +7261,7 @@ side-channel@^1.1.0: signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1, signal-exit@^4.1.0: @@ -7342,7 +7276,7 @@ slash@^3.0.0: slick@^1.12.2: version "1.12.2" - resolved "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz" + resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== socket.io-adapter@~2.5.2: @@ -7389,7 +7323,7 @@ source-map-support@0.5.13: source-map-support@^0.5.21, source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -7397,7 +7331,7 @@ source-map-support@^0.5.21, source-map-support@~0.5.20: source-map@0.7.4: version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: @@ -7429,7 +7363,7 @@ stack-utils@^2.0.6: statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== statuses@^2.0.1: @@ -7439,14 +7373,14 @@ statuses@^2.0.1: stream-events@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== dependencies: stubs "^3.0.0" stream-shift@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== streamsearch@^1.1.0: @@ -7501,7 +7435,7 @@ string-width@^5.0.1, string-width@^5.1.2: string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" @@ -7536,7 +7470,7 @@ strip-ansi@^7.0.1: strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: @@ -7556,7 +7490,7 @@ strip-json-comments@^3.1.1: strnum@^1.1.1: version "1.1.2" - resolved "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== strnum@^2.1.0: @@ -7564,7 +7498,7 @@ strnum@^2.1.0: resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.1.tgz#cf2a6e0cf903728b8b2c4b971b7e36b4e82d46ab" integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw== -strtok3@^10.2.2: +strtok3@^10.3.1: version "10.3.4" resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-10.3.4.tgz#793ebd0d59df276a085586134b73a406e60be9c1" integrity sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg== @@ -7573,7 +7507,7 @@ strtok3@^10.2.2: stubs@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== superagent@^10.2.3: @@ -7608,7 +7542,7 @@ supports-color@^7.1.0: supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -7618,16 +7552,16 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -swagger-ui-dist@5.29.4: - version "5.29.4" - resolved "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.29.4.tgz" - integrity sha512-gJFDz/gyLOCQtWwAgqs6Rk78z9ONnqTnlW11gimG9nLap8drKa3AJBKpzIQMIjl5PD2Ix+Tn+mc/tfoT2tgsng== +swagger-ui-dist@5.30.2: + version "5.30.2" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.30.2.tgz#b146c5bd92cc712340f8847b546ea64d785efeb2" + integrity sha512-HWCg1DTNE/Nmapt+0m2EPXFwNKNeKK4PwMjkwveN/zn1cV2Kxi9SURd+m0SpdcSgWEK/O64sf8bzXdtUhigtHA== dependencies: "@scarf/scarf" "=1.4.0" symbol-observable@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== synckit@^0.11.7, synckit@^0.11.8: @@ -7637,14 +7571,9 @@ synckit@^0.11.7, synckit@^0.11.8: dependencies: "@pkgr/core" "^0.2.9" -tapable@^2.1.1, tapable@^2.2.1: - version "2.2.2" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz" - integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== - -tapable@^2.2.0, tapable@^2.3.0: +tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== tar-stream@^3.0.0: @@ -7663,7 +7592,7 @@ tarn@^3.0.2: teeny-request@^9.0.0: version "9.0.0" - resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d" integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g== dependencies: http-proxy-agent "^5.0.0" @@ -7674,7 +7603,7 @@ teeny-request@^9.0.0: terser-webpack-plugin@^5.3.11: version "5.3.14" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== dependencies: "@jridgewell/trace-mapping" "^0.3.25" @@ -7684,9 +7613,9 @@ terser-webpack-plugin@^5.3.11: terser "^5.31.1" terser@^5.31.1: - version "5.44.0" - resolved "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz" - integrity sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w== + version "5.44.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.1.tgz#e391e92175c299b8c284ad6ded609e37303b0a9c" + integrity sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.15.0" @@ -7714,12 +7643,13 @@ tildify@2.0.0: resolved "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz" integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== dependencies: - os-tmpdir "~1.0.2" + fdir "^6.5.0" + picomatch "^4.0.3" tmpl@1.0.5: version "1.0.5" @@ -7749,23 +7679,18 @@ token-types@^6.0.0: tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tree-kill@1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - ts-api-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== -ts-jest@29.4.5: - version "29.4.5" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz" - integrity sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q== +ts-jest@29.4.6: + version "29.4.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.6.tgz#51cb7c133f227396818b71297ad7409bb77106e9" + integrity sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA== dependencies: bs-logger "^0.2.6" fast-json-stable-stringify "^2.1.0" @@ -7809,7 +7734,7 @@ ts-node@^10.9.2: tsconfig-paths-webpack-plugin@4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz#f7459a8ed1dd4cf66ad787aefc3d37fff3cf07fc" integrity sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA== dependencies: chalk "^4.1.0" @@ -7850,7 +7775,7 @@ type-detect@4.0.8: type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^4.41.0: @@ -7880,14 +7805,9 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@5.8.3: - version "5.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== - -typescript@^5.7.3: +typescript@5.9.3, typescript@^5.7.3: version "5.9.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== uglify-js@^3.1.4, uglify-js@^3.5.1: @@ -7912,11 +7832,6 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici-types@~7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" - integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== - undici-types@~7.16.0: version "7.16.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" @@ -7924,7 +7839,7 @@ undici-types@~7.16.0: universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0: @@ -7959,17 +7874,17 @@ unrs-resolver@^1.7.11: "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== dependencies: escalade "^3.2.0" picocolors "^1.1.1" upper-case@^1.1.1: version "1.1.3" - resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== uri-js@^4.2.2: @@ -7994,7 +7909,7 @@ url@^0.11.4: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@^1.0.1: @@ -8004,7 +7919,7 @@ utils-merge@^1.0.1: uuid@^11.0.2: version "11.1.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== uuid@^13.0.0: @@ -8014,12 +7929,12 @@ uuid@^13.0.0: uuid@^8.0.0: version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: @@ -8038,13 +7953,13 @@ v8-to-istanbul@^9.0.1: valid-data-url@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-3.0.1.tgz#826c1744e71b5632e847dd15dbd45b9fb38aa34f" integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA== -validator@^13.9.0: - version "13.15.15" - resolved "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz" - integrity sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A== +validator@^13.15.20: + version "13.15.23" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.23.tgz#59a874f84e4594588e3409ab1edbe64e96d0c62d" + integrity sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw== vary@^1, vary@^1.1.2: version "1.1.2" @@ -8058,9 +7973,9 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" -watchpack@^2.4.1, watchpack@^2.4.4: +watchpack@^2.4.4: version "2.4.4" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: glob-to-regexp "^0.4.1" @@ -8068,14 +7983,14 @@ watchpack@^2.4.1, watchpack@^2.4.4: wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" web-resource-inliner@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz#df0822f0a12028805fe80719ed52ab6526886e02" integrity sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A== dependencies: ansi-colors "^4.1.1" @@ -8097,54 +8012,23 @@ web-vitals@^4.2.4: webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-node-externals@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== webpack-sources@^3.3.3: version "3.3.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== -webpack@5.100.2: - version "5.100.2" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz" - integrity sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw== - dependencies: - "@types/eslint-scope" "^3.7.7" - "@types/estree" "^1.0.8" - "@types/json-schema" "^7.0.15" - "@webassemblyjs/ast" "^1.14.1" - "@webassemblyjs/wasm-edit" "^1.14.1" - "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.15.0" - acorn-import-phases "^1.0.3" - browserslist "^4.24.0" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.2" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.11" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^4.3.2" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.11" - watchpack "^2.4.1" - webpack-sources "^3.3.3" - -webpack@^5.97.1: - version "5.102.1" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz" - integrity sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ== +webpack@5.103.0, webpack@^5.97.1: + version "5.103.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.103.0.tgz#17a7c5a5020d5a3a37c118d002eade5ee2c6f3da" + integrity sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -8163,7 +8047,7 @@ webpack@^5.97.1: glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" schema-utils "^4.3.3" @@ -8188,7 +8072,7 @@ websocket-extensions@>=0.1.1: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -8222,7 +8106,7 @@ wordwrap@^1.0.0: wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -8282,7 +8166,7 @@ yallist@^3.0.2: yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@21.1.1, yargs-parser@^21.1.1: @@ -8313,10 +8197,10 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yoctocolors-cjs@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz" - integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== +yoctocolors-cjs@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== zip-stream@^6.0.1: version "6.0.1"