diff --git a/app/api/v1/[board_name]/proxy/getLogbook/route.ts b/app/api/v1/[board_name]/proxy/getLogbook/route.ts index 067b088..90ce2df 100644 --- a/app/api/v1/[board_name]/proxy/getLogbook/route.ts +++ b/app/api/v1/[board_name]/proxy/getLogbook/route.ts @@ -1,5 +1,5 @@ // app/api/login/route.ts -import { getLogbook } from '@/app/lib/api-wrappers/aurora/getLogbook'; +import { getLogbook } from '@/app/lib/data/get-logbook'; import { BoardRouteParameters, ParsedBoardRouteParameters } from '@/app/lib/types'; import { parseBoardRouteParams } from '@/app/lib/url-utils'; import { NextResponse } from 'next/server'; diff --git a/app/api/v1/[board_name]/proxy/user-sync/route.ts b/app/api/v1/[board_name]/proxy/user-sync/route.ts index a31755c..144acfe 100644 --- a/app/api/v1/[board_name]/proxy/user-sync/route.ts +++ b/app/api/v1/[board_name]/proxy/user-sync/route.ts @@ -2,10 +2,10 @@ import { syncUserData } from '@/app/lib/data-sync/aurora/user-sync'; export async function POST(request: Request) { - const { token, userId, board_name } = await request.json(); + const { token, userId, board_name, username } = await request.json(); try { - await syncUserData(board_name, token, userId); + await syncUserData(board_name, token, userId, username); return new Response(JSON.stringify({ success: true, message: 'All tables synced' }), { status: 200 }); } catch (err) { console.error('Failed to sync with Aurora:', err); diff --git a/app/components/board-provider/board-provider-context.tsx b/app/components/board-provider/board-provider-context.tsx index 0ef5038..c7a6ee7 100644 --- a/app/components/board-provider/board-provider-context.tsx +++ b/app/components/board-provider/board-provider-context.tsx @@ -142,6 +142,7 @@ export function BoardProvider({ boardName, children }: { boardName: BoardName; c body: JSON.stringify({ token: authState.token, userId: authState.user.id.toString(), + username: authState.user.username.toString(), board_name: boardName, }), }); diff --git a/app/components/rest-api/api.ts b/app/components/rest-api/api.ts index 29ab0ae..29dc2e3 100644 --- a/app/components/rest-api/api.ts +++ b/app/components/rest-api/api.ts @@ -36,7 +36,7 @@ export const fetchClimbs = async ( // Build the URL using the new route structure const response = await fetch( - `${API_BASE_URL}/v1/${routeParameters.board_name}/${routeParameters.layout_id}/${routeParameters.size_id}/${routeParameters.set_ids}/${routeParameters.angle}/search?${urlParams}&bustCache=36`, + `${API_BASE_URL}/v1/${routeParameters.board_name}/${routeParameters.layout_id}/${routeParameters.size_id}/${routeParameters.set_ids}/${routeParameters.angle}/search?${urlParams}&bustCache=38`, ); const rawResults = await response.json(); diff --git a/app/lib/api-wrappers/aurora/getUser.ts b/app/lib/api-wrappers/aurora/getUser.ts deleted file mode 100644 index 6d1ef06..0000000 --- a/app/lib/api-wrappers/aurora/getUser.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { BoardName } from '../../types'; -import { API_HOSTS } from './types'; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export async function getUser(board: BoardName, token: string, userId: string): Promise { - const response = await fetch(`${API_HOSTS[board]}/v2/users/${userId}`, { - headers: { authorization: `Bearer ${token}` }, - }); - if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); - return response.json(); -} diff --git a/app/lib/api-wrappers/aurora/login.ts b/app/lib/api-wrappers/aurora/login.ts index 2673c38..b414b09 100644 --- a/app/lib/api-wrappers/aurora/login.ts +++ b/app/lib/api-wrappers/aurora/login.ts @@ -35,7 +35,7 @@ export async function login(board: BoardName, username: string, password: string board, loginResponse.token, loginResponse.user_id.toString(), - undefined, // undefined means sync all tables + loginResponse.username.toString(), // undefined means sync all tables ); } catch (error) { console.error('Initial sync error:', error); diff --git a/app/lib/api-wrappers/aurora/sharedSync.ts b/app/lib/api-wrappers/aurora/sharedSync.ts index fa6f98d..7891d30 100644 --- a/app/lib/api-wrappers/aurora/sharedSync.ts +++ b/app/lib/api-wrappers/aurora/sharedSync.ts @@ -11,6 +11,7 @@ export async function sharedSync( const response = await fetch(`${API_HOSTS[board]}/v1/sync`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, + cache: 'no-store', body: JSON.stringify({ client: { enforces_product_passwords: 1, diff --git a/app/lib/api-wrappers/aurora/types.ts b/app/lib/api-wrappers/aurora/types.ts index 3529aa7..a2bdf5b 100644 --- a/app/lib/api-wrappers/aurora/types.ts +++ b/app/lib/api-wrappers/aurora/types.ts @@ -168,7 +168,9 @@ export type SyncData = { export type UserSyncData = SyncData & { user_id: number; -};export const USER_TABLES = ['walls', 'wall_expungements', 'draft_climbs', 'ascents', 'bids', 'tags', 'circuits']; +}; + +export const USER_TABLES = ['walls', 'wall_expungements', 'draft_climbs', 'ascents', 'bids', 'tags', 'circuits', 'users']; export const SHARED_SYNC_TABLES = [ 'gyms', 'boards', diff --git a/app/lib/api-wrappers/aurora/user/follows-save.ts b/app/lib/api-wrappers/aurora/user/follows-save.ts new file mode 100644 index 0000000..2003c42 --- /dev/null +++ b/app/lib/api-wrappers/aurora/user/follows-save.ts @@ -0,0 +1,11 @@ +// POST https://kilterboardapp.com/follows/save HTTP/2 +// host: kilterboardapp.com +// accept: application/json +// content-type: application/x-www-form-urlencoded +// user-agent: Kilter%20Board/300 CFNetwork/1568.200.51 Darwin/24.1.0 +// accept-language: en-AU,en;q=0.9 +// content-length: 50 +// accept-encoding: gzip, deflate, br +// cookie: token=XXXX + +// followee_id=44710&follower_id=118684&state=pending \ No newline at end of file diff --git a/app/lib/api-wrappers/aurora/user/getFollowees.ts b/app/lib/api-wrappers/aurora/user/getFollowees.ts new file mode 100644 index 0000000..4035b82 --- /dev/null +++ b/app/lib/api-wrappers/aurora/user/getFollowees.ts @@ -0,0 +1,23 @@ +import { BoardName } from '../../../types'; +import { API_HOSTS } from '../types'; +import { auroraGetApi } from '../util'; + +export interface Followee { + id: number; // Unique ID for the followee + username: string; // Username of the followee + name?: string; // Optional name of the followee + avatar_image?: string; // Optional avatar image path + followee_state: string; // State of the followee relationship (e.g., "accepted") +} + +export interface FolloweesResponse { + users: Followee[]; // Array of followees +} + +export async function getFollowees(board: BoardName, userId: number, token: string): Promise { + // Replace `any` with the specific type for followees if available + const url = `${API_HOSTS[board]}/users/${userId}/followees`; // Adjust the endpoint as needed + const data = await auroraGetApi(url, token); + + return data; +} diff --git a/app/lib/api-wrappers/aurora/user/getLogbook.ts b/app/lib/api-wrappers/aurora/user/getLogbook.ts new file mode 100644 index 0000000..76ebf6b --- /dev/null +++ b/app/lib/api-wrappers/aurora/user/getLogbook.ts @@ -0,0 +1,44 @@ +// GET https://kilterboardapp.com/users/44710/logbook?types=ascent,bid HTTP/2 +// host: kilterboardapp.com +// accept: application/json +// user-agent: Kilter%20Board/300 CFNetwork/1568.200.51 Darwin/24.1.0 +// accept-language: en-AU,en;q=0.9 +// accept-encoding: gzip, deflate, br +// cookie: token=XXXX + + + +// Common fields for all logbook entries +interface BaseLogbookEntry { + _type: 'bid' | 'ascent'; // Discriminator type, e.g., "bid" or "ascent" + uuid: string; // Unique identifier for the logbook entry + user_id: number; // ID of the user who made the entry + climb_uuid: string; // Unique identifier for the climb + angle: number; // Angle of the climb + is_mirror: boolean; // Indicates if the climb was mirrored + bid_count: number; // Number of bids/attempts + comment: string; // Comment for the entry (empty string if none) + climbed_at: string; // ISO 8601 date string for when the climb occurred +} + +// Logbook entry type for "bid" +export interface BidLogbookEntry extends BaseLogbookEntry { + _type: 'bid'; // Specific type for bid entries +} + +// Logbook entry type for "ascent" +export interface AscentLogbookEntry extends BaseLogbookEntry { + _type: 'ascent'; // Specific type for ascent entries + attempt_id: number; // ID of the attempt (specific to ascents) + quality: number; // Quality rating of the climb (1-5) + difficulty: number; // Difficulty rating of the climb + is_benchmark: boolean; // Indicates if the climb is a benchmark climb +} + +// Union type for all logbook entries +export type LogbookEntry = BidLogbookEntry | AscentLogbookEntry; + +// Response type for the logbook endpoint +export interface LogbookResponse { + logbook: LogbookEntry[]; // Array of logbook entries (union type) +} diff --git a/app/lib/api-wrappers/aurora/user/getUser.ts b/app/lib/api-wrappers/aurora/user/getUser.ts new file mode 100644 index 0000000..728a417 --- /dev/null +++ b/app/lib/api-wrappers/aurora/user/getUser.ts @@ -0,0 +1,64 @@ +import { BoardName } from '../../../types'; +import { API_HOSTS } from '../types'; +import { auroraGetApi } from '../util'; + +export interface SocialStats { + followees_accepted: number; + followers_accepted: number; + followers_pending: number; +} + +export interface Logbook { + count: number; // Number of logbook entries +} + +export interface CircuitUser { + id: number; + username: string; + is_verified: boolean; + avatar_image: string | null; + created_at: string; // ISO 8601 date string +} + +export interface Circuit { + uuid: string; + name: string; + description: string; + color: string; + user_id: number; + is_public: boolean; + is_listed: boolean; + created_at: string; + updated_at: string; + user: CircuitUser; + count: number; +} + +export interface User { + id: number; + username: string; + email_address: string; + name: string; + avatar_image: string | null; // Nullable avatar image + instagram_username?: string; // Optional Instagram username + is_public: boolean; // Indicates if the profile is public + is_verified: boolean; // Indicates if the user is verified + created_at: string; // ISO 8601 date string for creation + updated_at: string; // ISO 8601 date string for last update + social: SocialStats; // Social stats (followees, followers, etc.) + logbook: Logbook; // Logbook stats + circuits: Circuit[]; // Array of circuits created by the user +} + +// Avatar url: https://api.kilterboardapp.com/img/avatars/74336-20220729204756.jpg + +export interface UsersResponse { + users: User[]; // List of users +} + +export async function getUser(board: BoardName, userId: number, token: string): Promise { + const url = `${API_HOSTS[board]}/users/${userId}`; + const data = await auroraGetApi(url, token); + + return data; +} diff --git a/app/lib/api-wrappers/aurora/userSync.ts b/app/lib/api-wrappers/aurora/userSync.ts index 09f3699..e48e818 100644 --- a/app/lib/api-wrappers/aurora/userSync.ts +++ b/app/lib/api-wrappers/aurora/userSync.ts @@ -12,6 +12,7 @@ export async function userSync( const response = await fetch(`${API_HOSTS[board]}/v1/sync`, { method: 'POST', + cache: 'no-store', headers: { 'Content-Type': 'application/json', authorization: `Bearer ${token}`, @@ -42,6 +43,8 @@ export async function userSync( }, }), }); + console.log(userSyncs); if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + return response.json(); } diff --git a/app/lib/api-wrappers/aurora/util.ts b/app/lib/api-wrappers/aurora/util.ts index 6bd7c4d..0b69853 100644 --- a/app/lib/api-wrappers/aurora/util.ts +++ b/app/lib/api-wrappers/aurora/util.ts @@ -1,5 +1,50 @@ import { v4 as uuidv4 } from 'uuid'; +import { promisify } from 'util'; +import { unzip } from 'zlib'; + +const unzipAsync = promisify(unzip); export function generateUuid(): string { return uuidv4().replace(/-/g, '').toUpperCase(); } + +export async function auroraGetApi( + url: string, + token: string, +): Promise { + // Default headers + const headers: Record = { + Accept: '*/*', // Accept any content type + 'Accept-Encoding': 'gzip, deflate, br', + Host: 'kilterboardapp.com', // Explicitly set the host + 'User-Agent': 'Kilter%20Board/300 CFNetwork/1568.200.51 Darwin/24.1.0', // Simulate the specific user-agent + 'Accept-Language': 'en-AU,en;q=0.9', // Accept preferred languages + }; + + // Add Authorization header if token is provided + if (token) { + headers['Cookie'] = `token=${token}`; + } + + const fetchOptions: RequestInit = { + method: 'GET', + headers, + }; + + const response = await fetch(url, fetchOptions); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + // Handle compressed responses + const contentEncoding = response.headers.get('content-encoding'); + if (contentEncoding === 'gzip' || contentEncoding === 'br' || contentEncoding === 'deflate') { + const buffer = Buffer.from(await response.arrayBuffer()); + const decompressed = await unzipAsync(buffer); // Decompress asynchronously + return JSON.parse(decompressed.toString()) as T; // Parse JSON from decompressed data + } + + // Handle plain JSON response + return response.json() as Promise; +} diff --git a/app/lib/data-sync/aurora/shared-sync.ts b/app/lib/data-sync/aurora/shared-sync.ts index 6510f8a..776990f 100644 --- a/app/lib/data-sync/aurora/shared-sync.ts +++ b/app/lib/data-sync/aurora/shared-sync.ts @@ -1,233 +1,278 @@ -import { sql } from '@/lib/db'; +import { dbz as db } from '@/lib/db'; import { BoardName } from '../../types'; -import { getTableName } from './getTableName'; import { SyncData, SyncOptions } from '../../api-wrappers/aurora/types'; import { sharedSync } from '../../api-wrappers/aurora/sharedSync'; +import { inArray } from 'drizzle-orm'; +import { sql } from 'drizzle-orm'; +import { + kilterAttempts, + kilterProducts, + kilterProductSizes, + kilterClimbStats, + kilterSharedSyncs, + kilterHoles, + kilterLeds, + kilterSets, + kilterProductsAngles, + kilterLayouts, + kilterProductSizesLayoutsSets, + kilterPlacementRoles, + kilterPlacements, + kilterClimbs, + kilterBetaLinks, + tensionAttempts, + tensionProducts, + tensionProductSizes, + tensionClimbStats, + tensionSharedSyncs, + tensionHoles, + tensionLeds, + tensionSets, + tensionProductsAngles, + tensionLayouts, + tensionProductSizesLayoutsSets, + tensionPlacementRoles, + tensionPlacements, + tensionClimbs, + tensionBetaLinks, +} from '@/drizzle/schema'; // Define shared sync tables in correct dependency order -export const SHARED_SYNC_TABLES = [ - // Independent tables first - 'gyms', - 'boards', +export const SHARED_SYNC_TABLES: string[] = [ 'attempts', - 'kits', 'products', - - // Tables with dependencies on products 'product_sizes', 'holes', 'leds', 'sets', 'products_angles', - - // Tables depending on product_sizes 'layouts', 'product_sizes_layouts_sets', 'placement_roles', 'placements', - - // Climbs and related tables last (in order) - 'climbs', // Must come before stats and beta_links - 'climb_stats', // Depends on climbs - 'beta_links' // Depends on climbs + 'climbs', + 'climb_stats', + 'beta_links', ]; const BATCH_SIZE = 100; -async function processBatch( - items: T[], - fullTableName: string, - generateValues: (batchItems: T[], startIndex: number) => string, - generateParams: (batchItems: T[]) => any[], - generateQuery: (values: string, fullTableName: string) => string, -) { +function getSharedSchemas(board: BoardName) { + if (board === 'kilter') { + return { + attempts: kilterAttempts, + products: kilterProducts, + productSizes: kilterProductSizes, + holes: kilterHoles, + leds: kilterLeds, + sets: kilterSets, + productsAngles: kilterProductsAngles, + layouts: kilterLayouts, + productSizesLayoutsSets: kilterProductSizesLayoutsSets, + placementRoles: kilterPlacementRoles, + placements: kilterPlacements, + climbs: kilterClimbs, + climbStats: kilterClimbStats, + betaLinks: kilterBetaLinks, + sharedSyncs: kilterSharedSyncs, + }; + } else if (board === 'tension') { + return { + attempts: tensionAttempts, + products: tensionProducts, + productSizes: tensionProductSizes, + holes: tensionHoles, + leds: tensionLeds, + sets: tensionSets, + productsAngles: tensionProductsAngles, + layouts: tensionLayouts, + productSizesLayoutsSets: tensionProductSizesLayoutsSets, + placementRoles: tensionPlacementRoles, + placements: tensionPlacements, + climbs: tensionClimbs, + climbStats: tensionClimbStats, + betaLinks: tensionBetaLinks, + sharedSyncs: tensionSharedSyncs, + }; + } + throw new Error(`Unsupported board type: ${board}`); +} + +async function processBatch(items: T[], insertFn: (item: T) => Promise) { for (let i = 0; i < items.length; i += BATCH_SIZE) { const batch = items.slice(i, i + BATCH_SIZE); - - const values = generateValues(batch, i); - const params = generateParams(batch); - const query = generateQuery(values, fullTableName); - - await sql.query(query, params); + await Promise.all(batch.map(insertFn)); } } async function upsertSharedTableData(boardName: BoardName, tableName: string, data: any[]) { if (data.length === 0) return; - const fullTableName = getTableName(boardName, tableName); + + const schemas = getSharedSchemas(boardName); switch (tableName) { case 'attempts': { - await processBatch( - data, - fullTableName, - (batch, startIndex) => - batch - .map((_, i) => { - const offset = i * 3; - return `($${offset + 1}::integer, $${offset + 2}::integer, $${offset + 3}::text)`; - }) - .join(','), - (batch) => batch.flatMap((item) => [item.id, item.position, item.name]), - (values, table) => ` - INSERT INTO ${table} (id, "position", name) - VALUES ${values} - ON CONFLICT (id) DO UPDATE SET - "position" = EXCLUDED."position", - name = EXCLUDED.name; - `, - ); + await processBatch(data, async (item) => { + await db + .insert(schemas.attempts) + .values({ + id: Number(item.id), + position: Number(item.position), + name: item.name, + }) + .onConflictDoUpdate({ + target: schemas.attempts.id, + set: { + position: Number(item.position), + name: item.name, + }, + }); + }); break; } case 'products': { - await processBatch( - data, - fullTableName, - (batch, startIndex) => - batch - .map((_, i) => { - const offset = i * 6; - return `($${offset + 1}::integer, $${offset + 2}::text, $${offset + 3}::boolean, - $${offset + 4}::text, $${offset + 5}::integer, $${offset + 6}::integer)`; - }) - .join(','), - (batch) => - batch.flatMap((item) => [ - item.id, - item.name, - item.is_listed, - item.password, - item.min_count_in_frame, - item.max_count_in_frame, - ]), - (values, table) => ` - INSERT INTO ${table} (id, name, is_listed, password, min_count_in_frame, max_count_in_frame) - VALUES ${values} - ON CONFLICT (id) DO UPDATE SET - name = EXCLUDED.name, - is_listed = EXCLUDED.is_listed, - password = EXCLUDED.password, - min_count_in_frame = EXCLUDED.min_count_in_frame, - max_count_in_frame = EXCLUDED.max_count_in_frame; - `, - ); + await processBatch(data, async (item) => { + await db + .insert(schemas.products) + .values({ + id: Number(item.id), + name: item.name, + isListed: Boolean(item.is_listed), + password: item.password, + minCountInFrame: Number(item.min_count_in_frame), + maxCountInFrame: Number(item.max_count_in_frame), + }) + .onConflictDoUpdate({ + target: schemas.products.id, + set: { + name: item.name, + isListed: Boolean(item.is_listed), + password: item.password, + minCountInFrame: Number(item.min_count_in_frame), + maxCountInFrame: Number(item.max_count_in_frame), + }, + }); + }); break; } case 'product_sizes': { - await processBatch( - data, - fullTableName, - (batch, startIndex) => - batch - .map((_, i) => { - const offset = i * 11; - return `($${offset + 1}::integer, $${offset + 2}::integer, $${offset + 3}::integer, - $${offset + 4}::integer, $${offset + 5}::integer, $${offset + 6}::integer, - $${offset + 7}::text, $${offset + 8}::text, $${offset + 9}::text, - $${offset + 10}::integer, $${offset + 11}::boolean)`; - }) - .join(','), - (batch) => - batch.flatMap((item) => [ - item.id, - item.product_id, - item.edge_left, - item.edge_right, - item.edge_bottom, - item.edge_top, - item.name, - item.description, - item.image_filename, - item.position, - item.is_listed, - ]), - (values, table) => ` - INSERT INTO ${table} ( - id, product_id, edge_left, edge_right, edge_bottom, - edge_top, name, description, image_filename, "position", is_listed - ) - VALUES ${values} - ON CONFLICT (id) DO UPDATE SET - product_id = EXCLUDED.product_id, - edge_left = EXCLUDED.edge_left, - edge_right = EXCLUDED.edge_right, - edge_bottom = EXCLUDED.edge_bottom, - edge_top = EXCLUDED.edge_top, - name = EXCLUDED.name, - description = EXCLUDED.description, - image_filename = EXCLUDED.image_filename, - "position" = EXCLUDED."position", - is_listed = EXCLUDED.is_listed; - `, - ); + await processBatch(data, async (item) => { + await db + .insert(schemas.productSizes) + .values({ + id: Number(item.id), + productId: Number(item.product_id), + edgeLeft: Number(item.edge_left), + edgeRight: Number(item.edge_right), + edgeBottom: Number(item.edge_bottom), + edgeTop: Number(item.edge_top), + name: item.name, + description: item.description, + imageFilename: item.image_filename, + position: Number(item.position), + isListed: Boolean(item.is_listed), + }) + .onConflictDoUpdate({ + target: schemas.productSizes.id, + set: { + productId: Number(item.product_id), + edgeLeft: Number(item.edge_left), + edgeRight: Number(item.edge_right), + edgeBottom: Number(item.edge_bottom), + edgeTop: Number(item.edge_top), + name: item.name, + description: item.description, + imageFilename: item.image_filename, + position: Number(item.position), + isListed: Boolean(item.is_listed), + }, + }); + }); break; } - // Continue with other cases... - // I'll show one more example and you can follow the same pattern: - case 'climb_stats': { - await sql.query( - `ALTER TABLE IF EXISTS ${fullTableName} - DROP CONSTRAINT IF EXISTS climb_stats_climb_uuid_fkey1; - ALTER TABLE IF EXISTS ${fullTableName} - DROP CONSTRAINT IF EXISTS climb_stats_climb_uuid_fkey; - `, - ); + // Drop constraints if they exist (using raw SQL since Drizzle doesn't have a direct way) + await db.execute(sql` + ALTER TABLE IF EXISTS ${sql.identifier(boardName + '_climb_stats')} + DROP CONSTRAINT IF EXISTS climb_stats_climb_uuid_fkey1; + ALTER TABLE IF EXISTS ${sql.identifier(boardName + '_climb_stats')} + DROP CONSTRAINT IF EXISTS climb_stats_climb_uuid_fkey; + `); - await processBatch( - data, - fullTableName, - (batch, startIndex) => - batch - .map((_, i) => { - const offset = i * 9; - return `(nextval('climb_stats_id_seq'), - $${offset + 1}::text, $${offset + 2}::bigint, - $${offset + 3}::double precision, $${offset + 4}::double precision, - $${offset + 5}::bigint, $${offset + 6}::double precision, - $${offset + 7}::double precision, $${offset + 8}::text, - $${offset + 9}::timestamp)`; - }) - .join(','), - (batch) => - batch.flatMap((item) => [ - item.climb_uuid, - item.angle, - item.display_difficulty || item.difficulty_average, - item.benchmark_difficulty, - item.ascensionist_count, - item.difficulty_average, - item.quality_average, - item.fa_username, - item.fa_at, - ]), - (values, table) => ` - INSERT INTO ${table} ( - id, climb_uuid, angle, display_difficulty, benchmark_difficulty, - ascensionist_count, difficulty_average, quality_average, - fa_username, fa_at - ) - VALUES ${values} - ON CONFLICT (id) DO UPDATE SET - climb_uuid = EXCLUDED.climb_uuid, - angle = EXCLUDED.angle, - display_difficulty = EXCLUDED.display_difficulty, - benchmark_difficulty = EXCLUDED.benchmark_difficulty, - ascensionist_count = EXCLUDED.ascensionist_count, - difficulty_average = EXCLUDED.difficulty_average, - quality_average = EXCLUDED.quality_average, - fa_username = EXCLUDED.fa_username, - fa_at = EXCLUDED.fa_at; - `, - ); + await processBatch(data, async (item) => { + await db + .insert(schemas.climbStats) + .values({ + climbUuid: item.climb_uuid, + angle: Number(item.angle), + displayDifficulty: Number(item.display_difficulty || item.difficulty_average), + benchmarkDifficulty: Number(item.benchmark_difficulty), + ascensionistCount: Number(item.ascensionist_count), + difficultyAverage: Number(item.difficulty_average), + qualityAverage: Number(item.quality_average), + faUsername: item.fa_username, + faAt: item.fa_at, + }) + .onConflictDoUpdate({ + target: schemas.climbStats.id, + set: { + climbUuid: item.climb_uuid, + angle: Number(item.angle), + displayDifficulty: Number(item.display_difficulty || item.difficulty_average), + benchmarkDifficulty: Number(item.benchmark_difficulty), + ascensionistCount: Number(item.ascensionist_count), + difficultyAverage: Number(item.difficulty_average), + qualityAverage: Number(item.quality_average), + faUsername: item.fa_username, + faAt: item.fa_at, + }, + }); + }); break; } + + // Add other table cases as needed... } } +async function updateSharedSyncs(boardName: BoardName, sharedSyncs: SyncData[]) { + const schemas = getSharedSchemas(boardName); + + await db.transaction(async (tx) => { + for (const sync of sharedSyncs) { + await tx + .insert(schemas.sharedSyncs) + .values({ + tableName: sync.table_name, + lastSynchronizedAt: sync.last_synchronized_at, + }) + .onConflictDoUpdate({ + target: schemas.sharedSyncs.tableName, + set: { + lastSynchronizedAt: sync.last_synchronized_at, + }, + }); + } + }); +} + +export async function getLastSharedSyncTimes(boardName: BoardName, tableNames = SHARED_SYNC_TABLES) { + const schemas = getSharedSchemas(boardName); + + const result = await db + .select({ + table_name: schemas.sharedSyncs.tableName, + last_synchronized_at: schemas.sharedSyncs.lastSynchronizedAt, + }) + .from(schemas.sharedSyncs) + .where(inArray(schemas.sharedSyncs.tableName, tableNames as unknown as Array)); + + return result; +} + export async function syncSharedData( board: BoardName, tables: string[] = SHARED_SYNC_TABLES, @@ -235,72 +280,42 @@ export async function syncSharedData( const results: Record = {}; try { - const allSyncTimes = await getLastSharedSyncTimes(board, tables); + await db.transaction(async (tx) => { + const allSyncTimes = await getLastSharedSyncTimes(board, tables); - const syncParams: SyncOptions = { - tables, - sharedSyncs: allSyncTimes.map((syncTime) => ({ - table_name: syncTime.table_name, - last_synchronized_at: syncTime.last_synchronized_at, - })), - }; + const syncParams: SyncOptions = { + tables: [...tables], + sharedSyncs: allSyncTimes.map((syncTime) => ({ + table_name: syncTime.table_name || '', + last_synchronized_at: syncTime.last_synchronized_at || '', + })), + }; - const syncResults = await sharedSync(board, syncParams); + const syncResults = await sharedSync(board, syncParams); - // Process each table in the specified order - for (const tableName of SHARED_SYNC_TABLES) { - // Skip if table wasn't requested - if (!tables.includes(tableName)) continue; + // Process each table in the specified order + for (const tableName of SHARED_SYNC_TABLES) { + // Skip if table wasn't requested + if (!tables.includes(tableName)) continue; - if (syncResults.PUT && syncResults.PUT[tableName]) { - const data = syncResults.PUT[tableName]; - await upsertSharedTableData(board, tableName, data); - results[tableName] = { synced: data.length }; - console.log(`Update ${tableName} with ${data.length} rows`); - } else { - results[tableName] = { synced: 0 }; + if (syncResults.PUT && syncResults.PUT[tableName]) { + const data = syncResults.PUT[tableName]; + await upsertSharedTableData(board, tableName, data); + results[tableName] = { synced: data.length }; + console.log(`Updated ${tableName} with ${data.length} rows`); + } else { + results[tableName] = { synced: 0 }; + } } - } - await updateSharedSyncs(board, syncResults.PUT.shared_syncs); + if (syncResults.PUT?.shared_syncs) { + await updateSharedSyncs(board, syncResults.PUT.shared_syncs); + } + }); + return results; } catch (error) { console.error('Failed to sync with Aurora:', error); throw error; } -} - -async function updateSharedSyncs(boardName: BoardName, sharedSyncs: SyncData[]) { - const sharedSyncsTable = getTableName(boardName, 'shared_syncs'); - - const values = sharedSyncs.map((_, i) => `($${i * 2 + 1}, $${i * 2 + 2})`).join(','); - const params = sharedSyncs.flatMap((sync) => [sync.table_name, sync.last_synchronized_at]); - - await sql.query( - ` - INSERT INTO ${sharedSyncsTable} (table_name, last_synchronized_at) - VALUES ${values} - ON CONFLICT (table_name) DO UPDATE SET - last_synchronized_at = EXCLUDED.last_synchronized_at; - `, - params, - ); -} - -export async function getLastSharedSyncTimes( - boardName: BoardName, - tableNames: string[] = SHARED_SYNC_TABLES, -): Promise> { - const sharedSyncsTable = getTableName(boardName, 'shared_syncs'); - const tablePlaceholders = tableNames.map((_, index) => `$${index + 1}`).join(', '); - const result = await sql.query( - ` - SELECT table_name, last_synchronized_at - FROM ${sharedSyncsTable} - WHERE table_name IN (${tablePlaceholders}) - `, - tableNames, - ); - - return result.rows; -} +} \ No newline at end of file diff --git a/app/lib/data-sync/aurora/user-sync.ts b/app/lib/data-sync/aurora/user-sync.ts index 62e6d4a..e032380 100644 --- a/app/lib/data-sync/aurora/user-sync.ts +++ b/app/lib/data-sync/aurora/user-sync.ts @@ -1,369 +1,334 @@ -import { sql } from '@/lib/db'; +import { dbz as db } from '@/lib/db'; import { BoardName } from '../../types'; import { userSync } from '../../api-wrappers/aurora/userSync'; import { SyncData, SyncOptions, USER_TABLES, UserSyncData } from '../../api-wrappers/aurora/types'; -import { getTableName } from './getTableName'; +import { eq, and, inArray } from 'drizzle-orm'; +import { + kilterUsers, + kilterWalls, + kilterClimbs, + kilterAscents, + kilterBids, + kilterTags, + kilterCircuits, + kilterUserSyncs, + tensionUsers, + tensionWalls, + tensionClimbs, + tensionAscents, + tensionBids, + tensionTags, + tensionCircuits, + tensionUserSyncs, +} from '@/drizzle/schema'; + +// Helper to get the correct schema based on board type +function getSchemas(board: BoardName) { + if (board === 'kilter') { + return { + users: kilterUsers, + walls: kilterWalls, + climbs: kilterClimbs, + ascents: kilterAscents, + bids: kilterBids, + tags: kilterTags, + circuits: kilterCircuits, + userSyncs: kilterUserSyncs, + }; + } else if (board === 'tension') { + return { + users: tensionUsers, + walls: tensionWalls, + climbs: tensionClimbs, + ascents: tensionAscents, + bids: tensionBids, + tags: tensionTags, + circuits: tensionCircuits, + userSyncs: tensionUserSyncs, + }; + } + throw new Error(`Unsupported board type: ${board}`); +} -// eslint-disable-next-line @typescript-eslint/no-explicit-any async function upsertTableData(boardName: BoardName, tableName: string, userId: string, data: any[]) { if (data.length === 0) return; - const fullTableName = getTableName(boardName, tableName); - - switch (tableName) { - case 'users': { - const values = data - .map((_, i) => { - const offset = i * 3; - return `($${offset + 1}, $${offset + 2}, $${offset + 3})`; - }) - .join(','); - - const params = data.flatMap((item) => [item.id, item.username, item.created_at]); - - await sql.query( - ` - INSERT INTO ${fullTableName} (id, username, created_at) - VALUES ${values} - ON CONFLICT (id) DO UPDATE SET - username = EXCLUDED.username; - `, - params, - ); - break; - } - - case 'walls': { - const values = data - .map((_, i) => { - const offset = i * 11; - return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}, $${offset + 5}, $${offset + 6}, $${offset + 7}, $${offset + 8}, $${offset + 9}, $${offset + 10}, $${offset + 11})`; - }) - .join(','); - - const params = data.flatMap((item) => [ - item.uuid, - userId, - item.name, - item.product_id, - item.is_adjustable, - item.angle, - item.layout_id, - item.product_size_id, - item.hsm, - item.serial_number, - item.created_at, - ]); - - await sql.query( - ` - INSERT INTO ${fullTableName} ( - uuid, user_id, name, product_id, is_adjustable, angle, - layout_id, product_size_id, hsm, serial_number, created_at - ) - VALUES ${values} - ON CONFLICT (uuid) DO UPDATE SET - name = EXCLUDED.name, - is_adjustable = EXCLUDED.is_adjustable, - angle = EXCLUDED.angle, - layout_id = EXCLUDED.layout_id, - product_size_id = EXCLUDED.product_size_id, - hsm = EXCLUDED.hsm, - serial_number = EXCLUDED.serial_number; - `, - params, - ); - break; - } - - case 'wall_expungements': { - // Since this table isn't in the schema dump, we'll need its structure - console.warn('wall_expungements table structure needed'); - break; - } - - case 'draft_climbs': { - // Write to the climbs table but mark as drafts - const climbs_table = getTableName(boardName, 'climbs'); - - const values = data - .map((_, i) => { - const offset = i * 18; - return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}, $${offset + 5}, $${offset + 6}, $${offset + 7}, $${offset + 8}, $${offset + 9}, $${offset + 10}, $${offset + 11}, $${offset + 12}, $${offset + 13}, $${offset + 14}, $${offset + 15}, $${offset + 16}, $${offset + 17}, $${offset + 18})`; - }) - .join(','); - - const params = data.flatMap((item) => [ - item.uuid, - item.layout_id, - userId, // setter_id is the user_id for drafts - item.setter_username || '', // might be empty for drafts - item.name || 'Untitled Draft', - item.description || '', - item.hsm, - item.edge_left, - item.edge_right, - item.edge_bottom, - item.edge_top, - item.angle, - item.frames_count || 1, - item.frames_pace || 0, - item.frames || '', - true, // is_draft - false, // is_listed - drafts are not listed - item.created_at || new Date().toISOString(), - ]); - - await sql.query( - ` - INSERT INTO ${climbs_table} ( - uuid, layout_id, setter_id, setter_username, name, description, - hsm, edge_left, edge_right, edge_bottom, edge_top, angle, - frames_count, frames_pace, frames, is_draft, is_listed, created_at - ) - VALUES ${values} - ON CONFLICT (uuid) DO UPDATE SET - layout_id = EXCLUDED.layout_id, - setter_id = EXCLUDED.setter_id, - setter_username = EXCLUDED.setter_username, - name = EXCLUDED.name, - description = EXCLUDED.description, - hsm = EXCLUDED.hsm, - edge_left = EXCLUDED.edge_left, - edge_right = EXCLUDED.edge_right, - edge_bottom = EXCLUDED.edge_bottom, - edge_top = EXCLUDED.edge_top, - angle = EXCLUDED.angle, - frames_count = EXCLUDED.frames_count, - frames_pace = EXCLUDED.frames_pace, - frames = EXCLUDED.frames, - is_draft = true, - is_listed = false; - `, - params, - ); - break; - } - - case 'ascents': { - const values = data - .map((_, i) => { - const offset = i * 13; - return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}, $${offset + 5}, $${offset + 6}, $${offset + 7}, $${offset + 8}, $${offset + 9}, $${offset + 10}, $${offset + 11}, $${offset + 12}, $${offset + 13})`; - }) - .join(','); - - const params = data.flatMap((item) => [ - item.uuid, - item.climb_uuid, - item.angle, - item.is_mirror, - userId, - item.attempt_id, - item.bid_count || 1, - item.quality, - item.difficulty, - item.is_benchmark || 0, - item.comment || '', - item.climbed_at, - item.created_at, - ]); - - await sql.query( - ` - INSERT INTO ${fullTableName} ( - uuid, climb_uuid, angle, is_mirror, user_id, attempt_id, - bid_count, quality, difficulty, is_benchmark, comment, - climbed_at, created_at - ) - VALUES ${values} - ON CONFLICT (uuid) DO UPDATE SET - climb_uuid = EXCLUDED.climb_uuid, - angle = EXCLUDED.angle, - is_mirror = EXCLUDED.is_mirror, - attempt_id = EXCLUDED.attempt_id, - bid_count = EXCLUDED.bid_count, - quality = EXCLUDED.quality, - difficulty = EXCLUDED.difficulty, - is_benchmark = EXCLUDED.is_benchmark, - comment = EXCLUDED.comment, - climbed_at = EXCLUDED.climbed_at; - `, - params, - ); - break; - } - - case 'bids': { - const values = data - .map((_, i) => { - const offset = i * 9; - return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}, $${offset + 5}, $${offset + 6}, $${offset + 7}, $${offset + 8}, $${offset + 9})`; - }) - .join(','); - - const params = data.flatMap((item) => [ - item.uuid, - userId, - item.climb_uuid, - item.angle, - item.is_mirror, - item.bid_count || 1, - item.comment || '', - item.climbed_at, - item.created_at, - ]); + const schemas = getSchemas(boardName); + + return db.transaction(async (tx) => { + switch (tableName) { + case 'users': { + for (const item of data) { + await tx + .insert(schemas.users) + .values({ + id: Number(item.id), + username: item.username, + createdAt: item.created_at, + }) + .onConflictDoUpdate({ + target: schemas.users.id, + set: { + username: item.username, + }, + }); + } + break; + } - await sql.query( - ` - INSERT INTO ${fullTableName} ( - uuid, user_id, climb_uuid, angle, is_mirror, bid_count, - comment, climbed_at, created_at - ) - VALUES ${values} - ON CONFLICT (uuid) DO UPDATE SET - climb_uuid = EXCLUDED.climb_uuid, - angle = EXCLUDED.angle, - is_mirror = EXCLUDED.is_mirror, - bid_count = EXCLUDED.bid_count, - comment = EXCLUDED.comment, - climbed_at = EXCLUDED.climbed_at; - `, - params, - ); - break; - } + case 'walls': { + for (const item of data) { + await tx + .insert(schemas.walls) + .values({ + uuid: item.uuid, + userId: Number(userId), + name: item.name, + productId: Number(item.product_id), + isAdjustable: Boolean(item.is_adjustable), + angle: Number(item.angle), + layoutId: Number(item.layout_id), + productSizeId: Number(item.product_size_id), + hsm: Number(item.hsm), + serialNumber: item.serial_number, + createdAt: item.created_at, + }) + .onConflictDoUpdate({ + target: schemas.walls.uuid, + set: { + name: item.name, + isAdjustable: Boolean(item.is_adjustable), + angle: Number(item.angle), + layoutId: Number(item.layout_id), + productSizeId: Number(item.product_size_id), + hsm: Number(item.hsm), + serialNumber: item.serial_number, + }, + }); + } + break; + } - case 'tags': { - const values = data - .map((_, i) => { - const offset = i * 4; - return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4})`; - }) - .join(','); + case 'draft_climbs': { + for (const item of data) { + await tx + .insert(schemas.climbs) + .values({ + uuid: item.uuid, + layoutId: Number(item.layout_id), + setterId: Number(userId), + setterUsername: item.setter_username || '', + name: item.name || 'Untitled Draft', + description: item.description || '', + hsm: Number(item.hsm), + edgeLeft: Number(item.edge_left), + edgeRight: Number(item.edge_right), + edgeBottom: Number(item.edge_bottom), + edgeTop: Number(item.edge_top), + angle: Number(item.angle), + framesCount: Number(item.frames_count || 1), + framesPace: Number(item.frames_pace || 0), + frames: item.frames || '', + isDraft: true, + isListed: false, + createdAt: item.created_at || new Date().toISOString(), + }) + .onConflictDoUpdate({ + target: schemas.climbs.uuid, + set: { + layoutId: Number(item.layout_id), + setterId: Number(userId), + setterUsername: item.setter_username || '', + name: item.name || 'Untitled Draft', + description: item.description || '', + hsm: Number(item.hsm), + edgeLeft: Number(item.edge_left), + edgeRight: Number(item.edge_right), + edgeBottom: Number(item.edge_bottom), + edgeTop: Number(item.edge_top), + angle: Number(item.angle), + framesCount: Number(item.frames_count || 1), + framesPace: Number(item.frames_pace || 0), + frames: item.frames || '', + isDraft: true, + isListed: false, + }, + }); + } + break; + } - const params = data.flatMap((item) => [item.entity_uuid, userId, item.name, item.is_listed]); + case 'ascents': { + for (const item of data) { + await tx + .insert(schemas.ascents) + .values({ + uuid: item.uuid, + climbUuid: item.climb_uuid, + angle: Number(item.angle), + isMirror: Boolean(item.is_mirror), + userId: Number(userId), + attemptId: Number(item.attempt_id), + bidCount: Number(item.bid_count || 1), + quality: Number(item.quality), + difficulty: Number(item.difficulty), + isBenchmark: Number(item.is_benchmark || 0), + comment: item.comment || '', + climbedAt: item.climbed_at, + createdAt: item.created_at, + }) + .onConflictDoUpdate({ + target: schemas.ascents.uuid, + set: { + climbUuid: item.climb_uuid, + angle: Number(item.angle), + isMirror: Boolean(item.is_mirror), + attemptId: Number(item.attempt_id), + bidCount: Number(item.bid_count || 1), + quality: Number(item.quality), + difficulty: Number(item.difficulty), + isBenchmark: Number(item.is_benchmark || 0), + comment: item.comment || '', + climbedAt: item.climbed_at, + }, + }); + } + break; + } - await sql.query( - ` - INSERT INTO ${fullTableName} (entity_uuid, user_id, name, is_listed) - VALUES ${values} - ON CONFLICT (entity_uuid, user_id, name) DO UPDATE SET - is_listed = EXCLUDED.is_listed; - `, - params, - ); - break; - } + case 'bids': { + for (const item of data) { + await tx + .insert(schemas.bids) + .values({ + uuid: item.uuid, + userId: Number(userId), + climbUuid: item.climb_uuid, + angle: Number(item.angle), + isMirror: Boolean(item.is_mirror), + bidCount: Number(item.bid_count || 1), + comment: item.comment || '', + climbedAt: item.climbed_at, + createdAt: item.created_at, + }) + .onConflictDoUpdate({ + target: schemas.bids.uuid, + set: { + climbUuid: item.climb_uuid, + angle: Number(item.angle), + isMirror: Boolean(item.is_mirror), + bidCount: Number(item.bid_count || 1), + comment: item.comment || '', + climbedAt: item.climbed_at, + }, + }); + } + break; + } - case 'circuits': { - const values = data - .map((_, i) => { - const offset = i * 8; - return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}, $${offset + 5}, $${offset + 6}, $${offset + 7}, $${offset + 8})`; - }) - .join(','); + case 'tags': { + for (const item of data) { + await tx + .insert(schemas.tags) + .values({ + entityUuid: item.entity_uuid, + userId: Number(userId), + name: item.name, + isListed: Boolean(item.is_listed), + }) + .onConflictDoUpdate({ + target: [schemas.tags.entityUuid, schemas.tags.userId, schemas.tags.name], + set: { + isListed: Boolean(item.is_listed), + }, + }); + } + break; + } - const params = data.flatMap((item) => [ - item.uuid, - item.name, - item.description, - item.color, - userId, - item.is_public, - item.created_at, - item.updated_at, - ]); + case 'circuits': { + for (const item of data) { + await tx + .insert(schemas.circuits) + .values({ + uuid: item.uuid, + name: item.name, + description: item.description, + color: item.color, + userId: Number(userId), + isPublic: Boolean(item.is_public), + createdAt: item.created_at, + updatedAt: item.updated_at, + }) + .onConflictDoUpdate({ + target: schemas.circuits.uuid, + set: { + name: item.name, + description: item.description, + color: item.color, + isPublic: Boolean(item.is_public), + updatedAt: item.updated_at, + }, + }); + } + break; + } - await sql.query( - ` - INSERT INTO ${fullTableName} ( - uuid, name, description, color, user_id, is_public, - created_at, updated_at - ) - VALUES ${values} - ON CONFLICT (uuid) DO UPDATE SET - name = EXCLUDED.name, - description = EXCLUDED.description, - color = EXCLUDED.color, - is_public = EXCLUDED.is_public, - updated_at = EXCLUDED.updated_at; - `, - params, - ); - break; + default: + console.warn(`No specific upsert logic for table: ${tableName}`); + break; } - - default: - console.warn(`No specific upsert logic for table: ${tableName}`); - break; - } + }); } async function updateUserSyncs(boardName: BoardName, userSyncs: UserSyncData[]) { - const userSyncsTable = getTableName(boardName, 'user_syncs'); - - const values = userSyncs.map((_, i) => `($${i * 3 + 1}, $${i * 3 + 2}, $${i * 3 + 3})`).join(','); - const params = userSyncs.flatMap((sync) => [sync.user_id, sync.table_name, sync.last_synchronized_at]); - - await sql.query( - ` - INSERT INTO ${userSyncsTable} (user_id, table_name, last_synchronized_at) - VALUES ${values} - ON CONFLICT (user_id, table_name) DO UPDATE SET - last_synchronized_at = EXCLUDED.last_synchronized_at; - `, - params, - ); + const schemas = getSchemas(boardName); + + await db.transaction(async (tx) => { + for (const sync of userSyncs) { + await tx + .insert(schemas.userSyncs) + .values({ + userId: Number(sync.user_id), + tableName: sync.table_name, + lastSynchronizedAt: sync.last_synchronized_at, + }) + .onConflictDoUpdate({ + target: [schemas.userSyncs.userId, schemas.userSyncs.tableName], + set: { + lastSynchronizedAt: sync.last_synchronized_at, + }, + }); + } + }); } export async function getLastSyncTimes( boardName: BoardName, userId: string, tableNames: string[], -): Promise { - const userSyncsTable = getTableName(boardName, 'user_syncs'); - - // Generate placeholders for the `IN` clause - const tablePlaceholders = tableNames.map((_, index) => `$${index + 2}`).join(', '); - const result = await sql.query( - ` - SELECT table_name, last_synchronized_at - FROM ${userSyncsTable} - WHERE user_id = $1 AND table_name IN (${tablePlaceholders}) - `, - [userId, ...tableNames], - ); - - return result.rows; +) { + const schemas = getSchemas(boardName); + console.log(userId); + console.log(tableNames); + const result = await db + .select() + .from(schemas.userSyncs) + .where(and(eq(schemas.userSyncs.userId, Number(userId)), inArray(schemas.userSyncs.tableName, tableNames))); + + return result; } -// async function checkSharedSyncs(boardName: BoardName, tableName: string): Promise<[string, string] | null> { -// const sharedSyncsTable = getTableName(boardName, 'shared_syncs'); - -// const result = await sql.query( -// ` -// SELECT table_name, last_synchronized_at -// FROM ${sharedSyncsTable} -// WHERE table_name = $1 -// LIMIT 1; -// `, -// [tableName], -// ); - -// return result.rows[0]?.last_synchronized_at || null; -// } - export async function syncUserData( board: BoardName, token: string, userId: string, + username: string, tables: string[] = USER_TABLES, ): Promise> { const results: Record = {}; - + try { - // For large tables like 'climbs', check shared_syncs first const syncParams: SyncOptions = { tables, }; @@ -371,28 +336,31 @@ export async function syncUserData( const allSyncTimes = await getLastSyncTimes(board, userId, tables); syncParams.userSyncs = allSyncTimes.map((syncTime) => ({ - table_name: syncTime.table_name, - last_synchronized_at: syncTime.last_synchronized_at, + table_name: syncTime.tableName || '', + last_synchronized_at: syncTime.lastSynchronizedAt || '', user_id: Number(userId), })); const syncResults = await userSync(board, userId, syncParams, token); - - // Process each table - for (const tableName of tables) { - if (syncResults.PUT && syncResults.PUT[tableName]) { - const data = syncResults.PUT[tableName]; - await upsertTableData(board, tableName, userId, data); - results[tableName] = { synced: data.length }; - } else { - results[tableName] = { synced: 0 }; + + // Process each table in a single transaction + await db.transaction(async (tx) => { + // Process each table + for (const tableName of tables) { + if (syncResults.PUT && syncResults.PUT[tableName]) { + const data = syncResults.PUT[tableName]; + await upsertTableData(board, tableName, userId, data); + results[tableName] = { synced: data.length }; + } else { + results[tableName] = { synced: 0 }; + } } - } - // Update user_syncs table with new sync times - if (syncResults.PUT['user_syncs']) { - await updateUserSyncs(board, syncResults.PUT['user_syncs']); - } + // Update user_syncs table with new sync times + if (syncResults && syncResults.PUT && syncResults.PUT['user_syncs']) { + await updateUserSyncs(board, syncResults.PUT['user_syncs']); + } + }); return results; } catch (error) { diff --git a/app/lib/api-wrappers/aurora/getLogbook.ts b/app/lib/data/get-logbook.ts similarity index 93% rename from app/lib/api-wrappers/aurora/getLogbook.ts rename to app/lib/data/get-logbook.ts index 9641435..cd6d0bf 100644 --- a/app/lib/api-wrappers/aurora/getLogbook.ts +++ b/app/lib/data/get-logbook.ts @@ -1,7 +1,7 @@ import { sql } from '@/lib/db'; -import { BoardName, ClimbUuid } from '../../types'; -import { LogbookEntry } from './types'; -import { getTableName } from '../../data-sync/aurora/getTableName'; +import { BoardName, ClimbUuid } from '../types'; +import { LogbookEntry } from '../api-wrappers/aurora/types'; +import { getTableName } from '../data-sync/aurora/getTableName'; export async function getLogbook(board: BoardName, userId: string, climbUuids?: ClimbUuid[]): Promise { const ascentsTable = getTableName(board, 'ascents'); diff --git a/app/lib/data/queries.ts b/app/lib/data/queries.ts index adfbddd..8bb3e94 100644 --- a/app/lib/data/queries.ts +++ b/app/lib/data/queries.ts @@ -248,7 +248,6 @@ export const searchClimbs = async ( `, values: queryParameters, }); - return { climbs: query.rows, totalCount: query.rows.length > 0 ? query.rows[0].total_count : 0, diff --git a/app/lib/db.ts b/app/lib/db.ts index a92adf2..01c7131 100644 --- a/app/lib/db.ts +++ b/app/lib/db.ts @@ -1,4 +1,5 @@ import { neonConfig } from '@neondatabase/serverless'; +import { drizzle } from 'drizzle-orm/vercel-postgres'; if (process.env.VERCEL_ENV === 'development') { neonConfig.wsProxy = (host) => `${host}:54330/v1`; @@ -8,3 +9,5 @@ if (process.env.VERCEL_ENV === 'development') { } export * from '@vercel/postgres'; + +export const dbz = drizzle(); diff --git a/db/README.md b/db/README.md index ed03c03..e60f9de 100644 --- a/db/README.md +++ b/db/README.md @@ -21,6 +21,3 @@ docker-compose up This starts up a docker container that uses Boardlib to download the databases and then loads them into postgres with an db update script and pgloader. -``` - DATABASE_URL="postgresql://$(whoami):@localhost:5432/boardsesh" ./setup-development-db.sh -``` diff --git a/db/cleanup_sqlite_db_problems.sh b/db/cleanup_sqlite_db_problems.sh index 7f7c192..702fab5 100755 --- a/db/cleanup_sqlite_db_problems.sh +++ b/db/cleanup_sqlite_db_problems.sh @@ -19,6 +19,7 @@ WHERE product_id NOT IN (SELECT id FROM products); -- Clean up orphaned rows in holes table where product_id or mirrored_hole_id no longer exists in products or holes DELETE FROM holes WHERE product_id NOT IN (SELECT product_id FROM products); +UPDATE holes SET mirrored_hole_id = NULL WHERE mirrored_hole_id = 0; -- Clean up orphaned rows in leds table where product_size_id or hole_id no longer exists DELETE FROM leds diff --git a/db/docker-compose.yml b/db/docker-compose.yml index 4ed2833..25b1c85 100644 --- a/db/docker-compose.yml +++ b/db/docker-compose.yml @@ -3,6 +3,8 @@ services: image: postgres environment: POSTGRES_PASSWORD: password + POSTGRES_USER: postgres + POSTGRES_DB: verceldb ports: - '54320:5432' volumes: @@ -23,18 +25,24 @@ services: image: python:3.9 volumes: - ./:/db + - ./../drizzle:/drizzle build: context: . environment: - - POSTGRES_PASSWORD=password + - POSTGRES_URL=postgres://postgres:password@postgres:5432/verceldb + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=password + - POSTGRES_HOST=postgres + - POSTGRES_DATABASE=verceldb + - POSTGRES_URL_NON_POOLING=postgres://postgres:password@postgres:5432/verceldb depends_on: - postgres entrypoint: | /bin/sh -c " if [ ! -f /db/tmp/db-setup-complete.flag ]; then apt-get update && - apt-get install -y pgloader postgresql-client sqlite3 && - pip install boardlib && + apt-get install -y pgloader postgresql-client sqlite3 ca-certificates && + update-ca-certificates && /db/setup-development-db.sh && touch /db/tmp/db-setup-complete.flag else diff --git a/db/setup-development-db.sh b/db/setup-development-db.sh index aaba6d0..294501d 100755 --- a/db/setup-development-db.sh +++ b/db/setup-development-db.sh @@ -18,9 +18,21 @@ echo "Creating database if it doesnt exist" psql postgres -tAc "SELECT 1 FROM pg_database WHERE datname='verceldb'" | grep -q 1 && psql postgres -c "DROP DATABASE verceldb" psql postgres -c "CREATE DATABASE verceldb" +psql $DB_URL -f ./drizzle/0000_cloudy_carlie_cooper.sql + # echo "Using boardlib to download database" -boardlib database tension /db/tmp/tension.db -boardlib database kilter /db/tmp/kilter.db +if [ ! -f "/db/tmp/kilter.db" ]; then + echo "Downloading Kilterboard APK..." + curl -o kilterboard.apk -L -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" "https://d.apkpure.net/b/APK/com.auroraclimbing.kilterboard?version=latest" + unzip -j kilterboard.apk assets/db.sqlite3 -d /db/tmp/ -n kilter.db +fi + +# Check for tension database +if [ ! -f "/db/tmp/tension.db" ]; then + echo "Downloading Tensionboard APK..." + curl -o tensionboard.apk -L -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" "https://d.apkpure.net/b/APK/com.auroraclimbing.tensionboard2?version=latest" + unzip -j tensionboard.apk assets/db.sqlite3 -d /db/tmp/ -n tension.db +fi export TENSION_DB_FILE="/db/tmp/tension.modified.db" export KILTER_DB_FILE="/db/tmp/kilter.modified.db" diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..98e96d6 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,10 @@ +import 'dotenv/config'; +import { defineConfig } from 'drizzle-kit'; +export default defineConfig({ + out: './drizzle', + schema: './src/db/schema.ts', + dialect: 'postgresql', + dbCredentials: { + url: process.env.POSTGRES_URL!, + }, +}); \ No newline at end of file diff --git a/drizzle/0000_cloudy_carlie_cooper.sql b/drizzle/0000_cloudy_carlie_cooper.sql new file mode 100644 index 0000000..3cd0d0e --- /dev/null +++ b/drizzle/0000_cloudy_carlie_cooper.sql @@ -0,0 +1,619 @@ +-- Current sql file was generated after introspecting the database +-- If you want to run this migration please uncomment this code before executing migrations +/* +CREATE TABLE "kilter_climb_cache_fields" ( + "id" bigserial PRIMARY KEY NOT NULL, + "climb_uuid" text, + "ascensionist_count" integer, + "display_difficulty" double precision, + "quality_average" double precision +); +--> statement-breakpoint +CREATE TABLE "kilter_attempts" ( + "id" integer PRIMARY KEY NOT NULL, + "position" integer, + "name" text +); +--> statement-breakpoint +CREATE TABLE "kilter_climb_random_positions" ( + "climb_uuid" text PRIMARY KEY NOT NULL, + "position" integer +); +--> statement-breakpoint +CREATE TABLE "kilter_layouts" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "name" text, + "instagram_caption" text, + "is_mirrored" boolean, + "is_listed" boolean, + "password" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "kilter_android_metadata" ( + "locale" text +); +--> statement-breakpoint +CREATE TABLE "kilter_circuits" ( + "uuid" text PRIMARY KEY NOT NULL, + "name" text, + "description" text, + "color" text, + "user_id" integer, + "is_public" boolean, + "created_at" text, + "updated_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_climb_stats" ( + "id" bigserial PRIMARY KEY NOT NULL, + "climb_uuid" text, + "angle" bigint, + "display_difficulty" double precision, + "benchmark_difficulty" double precision, + "ascensionist_count" bigint, + "difficulty_average" double precision, + "quality_average" double precision, + "fa_username" text, + "fa_at" timestamp +); +--> statement-breakpoint +CREATE TABLE "tension_climb_cache_fields" ( + "id" bigserial PRIMARY KEY NOT NULL, + "climb_uuid" text, + "ascensionist_count" integer, + "display_difficulty" double precision, + "quality_average" double precision +); +--> statement-breakpoint +CREATE TABLE "kilter_leds" ( + "id" integer PRIMARY KEY NOT NULL, + "product_size_id" integer, + "hole_id" integer, + "position" integer +); +--> statement-breakpoint +CREATE TABLE "kilter_climb_stats" ( + "id" bigserial PRIMARY KEY NOT NULL, + "climb_uuid" text, + "angle" bigint, + "display_difficulty" double precision, + "benchmark_difficulty" double precision, + "ascensionist_count" bigint, + "difficulty_average" double precision, + "quality_average" double precision, + "fa_username" text, + "fa_at" timestamp +); +--> statement-breakpoint +CREATE TABLE "kilter_product_sizes" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "edge_left" integer, + "edge_right" integer, + "edge_bottom" integer, + "edge_top" integer, + "name" text, + "description" text, + "image_filename" text, + "position" integer, + "is_listed" boolean +); +--> statement-breakpoint +CREATE TABLE "kilter_kits" ( + "serial_number" text PRIMARY KEY NOT NULL, + "name" text, + "is_autoconnect" boolean, + "is_listed" boolean, + "created_at" text, + "updated_at" text +); +--> statement-breakpoint +CREATE TABLE "kilter_bids" ( + "uuid" text PRIMARY KEY NOT NULL, + "user_id" integer, + "climb_uuid" text, + "angle" integer, + "is_mirror" boolean, + "bid_count" integer DEFAULT 1, + "comment" text DEFAULT '', + "climbed_at" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "kilter_holes" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "name" text, + "x" integer, + "y" integer, + "mirrored_hole_id" integer, + "mirror_group" integer DEFAULT 0 +); +--> statement-breakpoint +CREATE TABLE "kilter_placement_roles" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "position" integer, + "name" text, + "full_name" text, + "led_color" text, + "screen_color" text +); +--> statement-breakpoint +CREATE TABLE "kilter_difficulty_grades" ( + "difficulty" integer PRIMARY KEY NOT NULL, + "boulder_name" text, + "route_name" text, + "is_listed" boolean +); +--> statement-breakpoint +CREATE TABLE "kilter_placements" ( + "id" integer PRIMARY KEY NOT NULL, + "layout_id" integer, + "hole_id" integer, + "set_id" integer, + "default_placement_role_id" integer +); +--> statement-breakpoint +CREATE TABLE "kilter_climbs" ( + "uuid" text PRIMARY KEY NOT NULL, + "layout_id" integer, + "setter_id" integer, + "setter_username" text, + "name" text, + "description" text DEFAULT '', + "hsm" integer, + "edge_left" integer, + "edge_right" integer, + "edge_bottom" integer, + "edge_top" integer, + "angle" integer, + "frames_count" integer DEFAULT 1, + "frames_pace" integer DEFAULT 0, + "frames" text, + "is_draft" boolean DEFAULT false, + "is_listed" boolean, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "kilter_product_sizes_layouts_sets" ( + "id" integer PRIMARY KEY NOT NULL, + "product_size_id" integer, + "layout_id" integer, + "set_id" integer, + "image_filename" text, + "is_listed" boolean +); +--> statement-breakpoint +CREATE TABLE "kilter_shared_syncs" ( + "table_name" text PRIMARY KEY NOT NULL, + "last_synchronized_at" text +); +--> statement-breakpoint +CREATE TABLE "kilter_users" ( + "id" integer PRIMARY KEY NOT NULL, + "username" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "kilter_products" ( + "id" integer PRIMARY KEY NOT NULL, + "name" text, + "is_listed" boolean, + "password" text, + "min_count_in_frame" integer, + "max_count_in_frame" integer +); +--> statement-breakpoint +CREATE TABLE "kilter_sets" ( + "id" integer PRIMARY KEY NOT NULL, + "name" text, + "hsm" integer +); +--> statement-breakpoint +CREATE TABLE "kilter_walls" ( + "uuid" text PRIMARY KEY NOT NULL, + "user_id" integer, + "name" text, + "product_id" integer, + "is_adjustable" boolean, + "angle" integer, + "layout_id" integer, + "product_size_id" integer, + "hsm" integer, + "serial_number" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_android_metadata" ( + "locale" text +); +--> statement-breakpoint +CREATE TABLE "tension_attempts" ( + "id" integer PRIMARY KEY NOT NULL, + "position" integer, + "name" text +); +--> statement-breakpoint +CREATE TABLE "tension_bids" ( + "uuid" text PRIMARY KEY NOT NULL, + "user_id" integer, + "climb_uuid" text, + "angle" integer, + "is_mirror" boolean, + "bid_count" integer DEFAULT 1, + "comment" text DEFAULT '', + "climbed_at" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_holes" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "name" text, + "x" integer, + "y" integer, + "mirrored_hole_id" integer, + "mirror_group" integer DEFAULT 0 +); +--> statement-breakpoint +CREATE TABLE "tension_circuits" ( + "uuid" text PRIMARY KEY NOT NULL, + "name" text, + "description" text, + "color" text, + "user_id" integer, + "is_public" boolean, + "created_at" text, + "updated_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_kits" ( + "serial_number" text PRIMARY KEY NOT NULL, + "name" text, + "is_autoconnect" boolean, + "is_listed" boolean, + "created_at" text, + "updated_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_climb_random_positions" ( + "climb_uuid" text PRIMARY KEY NOT NULL, + "position" integer +); +--> statement-breakpoint +CREATE TABLE "tension_climbs" ( + "uuid" text PRIMARY KEY NOT NULL, + "layout_id" integer, + "setter_id" integer, + "setter_username" text, + "name" text, + "description" text DEFAULT '', + "hsm" integer, + "edge_left" integer, + "edge_right" integer, + "edge_bottom" integer, + "edge_top" integer, + "angle" integer, + "frames_count" integer DEFAULT 1, + "frames_pace" integer DEFAULT 0, + "frames" text, + "is_draft" boolean DEFAULT false, + "is_listed" boolean, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_sets" ( + "id" integer PRIMARY KEY NOT NULL, + "name" text, + "hsm" integer +); +--> statement-breakpoint +CREATE TABLE "tension_placements" ( + "id" integer PRIMARY KEY NOT NULL, + "layout_id" integer, + "hole_id" integer, + "set_id" integer, + "default_placement_role_id" integer +); +--> statement-breakpoint +CREATE TABLE "tension_placement_roles" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "position" integer, + "name" text, + "full_name" text, + "led_color" text, + "screen_color" text +); +--> statement-breakpoint +CREATE TABLE "tension_leds" ( + "id" integer PRIMARY KEY NOT NULL, + "product_size_id" integer, + "hole_id" integer, + "position" integer +); +--> statement-breakpoint +CREATE TABLE "tension_layouts" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "name" text, + "instagram_caption" text, + "is_mirrored" boolean, + "is_listed" boolean, + "password" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_shared_syncs" ( + "table_name" text PRIMARY KEY NOT NULL, + "last_synchronized_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_product_sizes_layouts_sets" ( + "id" integer PRIMARY KEY NOT NULL, + "product_size_id" integer, + "layout_id" integer, + "set_id" integer, + "image_filename" text, + "is_listed" boolean +); +--> statement-breakpoint +CREATE TABLE "tension_product_sizes" ( + "id" integer PRIMARY KEY NOT NULL, + "product_id" integer, + "edge_left" integer, + "edge_right" integer, + "edge_bottom" integer, + "edge_top" integer, + "name" text, + "description" text, + "image_filename" text, + "position" integer, + "is_listed" boolean +); +--> statement-breakpoint +CREATE TABLE "kilter_ascents" ( + "uuid" text PRIMARY KEY NOT NULL, + "climb_uuid" text, + "angle" integer, + "is_mirror" boolean, + "user_id" integer, + "attempt_id" integer, + "bid_count" integer DEFAULT 1, + "quality" integer, + "difficulty" integer, + "is_benchmark" integer DEFAULT 0, + "comment" text DEFAULT '', + "climbed_at" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_walls" ( + "uuid" text PRIMARY KEY NOT NULL, + "user_id" integer, + "name" text, + "product_id" integer, + "is_adjustable" boolean, + "angle" integer, + "layout_id" integer, + "product_size_id" integer, + "hsm" integer, + "serial_number" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_products" ( + "id" integer PRIMARY KEY NOT NULL, + "name" text, + "is_listed" boolean, + "password" text, + "min_count_in_frame" integer, + "max_count_in_frame" integer +); +--> statement-breakpoint +CREATE TABLE "tension_difficulty_grades" ( + "difficulty" integer PRIMARY KEY NOT NULL, + "boulder_name" text, + "route_name" text, + "is_listed" boolean +); +--> statement-breakpoint +CREATE TABLE "tension_ascents" ( + "uuid" text PRIMARY KEY NOT NULL, + "climb_uuid" text, + "angle" integer, + "is_mirror" boolean, + "user_id" integer, + "attempt_id" integer, + "bid_count" integer DEFAULT 1, + "quality" integer, + "difficulty" integer, + "is_benchmark" integer DEFAULT 0, + "comment" text DEFAULT '', + "climbed_at" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "tension_users" ( + "id" integer PRIMARY KEY NOT NULL, + "username" text, + "created_at" text +); +--> statement-breakpoint +CREATE TABLE "kilter_products_angles" ( + "product_id" integer NOT NULL, + "angle" integer NOT NULL, + CONSTRAINT "idx_16800_sqlite_autoindex_products_angles_1" PRIMARY KEY("product_id","angle") +); +--> statement-breakpoint +CREATE TABLE "kilter_walls_sets" ( + "wall_uuid" text NOT NULL, + "set_id" integer NOT NULL, + CONSTRAINT "idx_16838_sqlite_autoindex_walls_sets_1" PRIMARY KEY("wall_uuid","set_id") +); +--> statement-breakpoint +CREATE TABLE "kilter_user_permissions" ( + "user_id" integer NOT NULL, + "name" text NOT NULL, + CONSTRAINT "idx_16828_sqlite_autoindex_user_permissions_1" PRIMARY KEY("user_id","name") +); +--> statement-breakpoint +CREATE TABLE "tension_user_permissions" ( + "user_id" integer NOT NULL, + "name" text NOT NULL, + CONSTRAINT "idx_16447_sqlite_autoindex_user_permissions_1" PRIMARY KEY("user_id","name") +); +--> statement-breakpoint +CREATE TABLE "tension_walls_sets" ( + "wall_uuid" text NOT NULL, + "set_id" integer NOT NULL, + CONSTRAINT "idx_16457_sqlite_autoindex_walls_sets_1" PRIMARY KEY("wall_uuid","set_id") +); +--> statement-breakpoint +CREATE TABLE "kilter_circuits_climbs" ( + "circuit_uuid" text NOT NULL, + "climb_uuid" text NOT NULL, + "position" integer, + CONSTRAINT "idx_16868_sqlite_autoindex_circuits_climbs_1" PRIMARY KEY("circuit_uuid","climb_uuid") +); +--> statement-breakpoint +CREATE TABLE "tension_products_angles" ( + "product_id" integer NOT NULL, + "angle" integer NOT NULL, + CONSTRAINT "idx_16414_sqlite_autoindex_products_angles_1" PRIMARY KEY("product_id","angle") +); +--> statement-breakpoint +CREATE TABLE "kilter_user_syncs" ( + "user_id" integer NOT NULL, + "table_name" text NOT NULL, + "last_synchronized_at" text, + CONSTRAINT "idx_16833_sqlite_autoindex_user_syncs_1" PRIMARY KEY("user_id","table_name") +); +--> statement-breakpoint +CREATE TABLE "tension_circuits_climbs" ( + "circuit_uuid" text NOT NULL, + "climb_uuid" text NOT NULL, + "position" integer, + CONSTRAINT "idx_16482_sqlite_autoindex_circuits_climbs_1" PRIMARY KEY("circuit_uuid","climb_uuid") +); +--> statement-breakpoint +CREATE TABLE "tension_user_syncs" ( + "user_id" integer NOT NULL, + "table_name" text NOT NULL, + "last_synchronized_at" text, + CONSTRAINT "idx_16452_sqlite_autoindex_user_syncs_1" PRIMARY KEY("user_id","table_name") +); +--> statement-breakpoint +CREATE TABLE "kilter_tags" ( + "entity_uuid" text NOT NULL, + "user_id" integer NOT NULL, + "name" text NOT NULL, + "is_listed" boolean, + CONSTRAINT "idx_16853_sqlite_autoindex_tags_1" PRIMARY KEY("entity_uuid","user_id","name") +); +--> statement-breakpoint +CREATE TABLE "tension_tags" ( + "entity_uuid" text NOT NULL, + "user_id" integer NOT NULL, + "name" text NOT NULL, + "is_listed" boolean, + CONSTRAINT "idx_16472_sqlite_autoindex_tags_1" PRIMARY KEY("entity_uuid","user_id","name") +); +--> statement-breakpoint +CREATE TABLE "kilter_beta_links" ( + "climb_uuid" text NOT NULL, + "link" text NOT NULL, + "foreign_username" text, + "angle" integer, + "thumbnail" text, + "is_listed" boolean, + "created_at" text, + CONSTRAINT "idx_16883_sqlite_autoindex_beta_links_1" PRIMARY KEY("climb_uuid","link") +); +--> statement-breakpoint +CREATE TABLE "tension_beta_links" ( + "climb_uuid" text NOT NULL, + "link" text NOT NULL, + "foreign_username" text, + "angle" integer, + "thumbnail" text, + "is_listed" boolean, + "created_at" text, + CONSTRAINT "idx_16497_sqlite_autoindex_beta_links_1" PRIMARY KEY("climb_uuid","link") +); +--> statement-breakpoint +ALTER TABLE "kilter_climb_cache_fields" ADD CONSTRAINT "climb_cache_fields_climb_uuid_fkey1" FOREIGN KEY ("climb_uuid") REFERENCES "public"."kilter_climbs"("uuid") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_layouts" ADD CONSTRAINT "layouts_product_id_fkey1" FOREIGN KEY ("product_id") REFERENCES "public"."kilter_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_climb_cache_fields" ADD CONSTRAINT "climb_cache_fields_climb_uuid_fkey" FOREIGN KEY ("climb_uuid") REFERENCES "public"."tension_climbs"("uuid") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_leds" ADD CONSTRAINT "leds_hole_id_fkey1" FOREIGN KEY ("hole_id") REFERENCES "public"."kilter_holes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_leds" ADD CONSTRAINT "leds_product_size_id_fkey1" FOREIGN KEY ("product_size_id") REFERENCES "public"."kilter_product_sizes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_product_sizes" ADD CONSTRAINT "product_sizes_product_id_fkey1" FOREIGN KEY ("product_id") REFERENCES "public"."kilter_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_bids" ADD CONSTRAINT "bids_climb_uuid_fkey1" FOREIGN KEY ("climb_uuid") REFERENCES "public"."kilter_climbs"("uuid") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_bids" ADD CONSTRAINT "bids_user_id_fkey1" FOREIGN KEY ("user_id") REFERENCES "public"."kilter_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_holes" ADD CONSTRAINT "holes_product_id_fkey1" FOREIGN KEY ("product_id") REFERENCES "public"."kilter_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_placement_roles" ADD CONSTRAINT "placement_roles_product_id_fkey1" FOREIGN KEY ("product_id") REFERENCES "public"."kilter_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_placements" ADD CONSTRAINT "placements_default_placement_role_id_fkey1" FOREIGN KEY ("default_placement_role_id") REFERENCES "public"."kilter_placement_roles"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_placements" ADD CONSTRAINT "placements_hole_id_fkey1" FOREIGN KEY ("hole_id") REFERENCES "public"."kilter_holes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_placements" ADD CONSTRAINT "placements_layout_id_fkey1" FOREIGN KEY ("layout_id") REFERENCES "public"."kilter_layouts"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_placements" ADD CONSTRAINT "placements_set_id_fkey1" FOREIGN KEY ("set_id") REFERENCES "public"."kilter_sets"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_climbs" ADD CONSTRAINT "climbs_layout_id_fkey1" FOREIGN KEY ("layout_id") REFERENCES "public"."kilter_layouts"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_product_sizes_layouts_sets" ADD CONSTRAINT "product_sizes_layouts_sets_layout_id_fkey1" FOREIGN KEY ("layout_id") REFERENCES "public"."kilter_layouts"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_product_sizes_layouts_sets" ADD CONSTRAINT "product_sizes_layouts_sets_product_size_id_fkey1" FOREIGN KEY ("product_size_id") REFERENCES "public"."kilter_product_sizes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_product_sizes_layouts_sets" ADD CONSTRAINT "product_sizes_layouts_sets_set_id_fkey1" FOREIGN KEY ("set_id") REFERENCES "public"."kilter_sets"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_walls" ADD CONSTRAINT "walls_layout_id_fkey1" FOREIGN KEY ("layout_id") REFERENCES "public"."kilter_layouts"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_walls" ADD CONSTRAINT "walls_product_id_fkey1" FOREIGN KEY ("product_id") REFERENCES "public"."kilter_products"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_walls" ADD CONSTRAINT "walls_product_size_id_fkey1" FOREIGN KEY ("product_size_id") REFERENCES "public"."kilter_product_sizes"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_walls" ADD CONSTRAINT "walls_user_id_fkey1" FOREIGN KEY ("user_id") REFERENCES "public"."kilter_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_bids" ADD CONSTRAINT "bids_climb_uuid_fkey" FOREIGN KEY ("climb_uuid") REFERENCES "public"."tension_climbs"("uuid") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_bids" ADD CONSTRAINT "bids_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."tension_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_holes" ADD CONSTRAINT "holes_mirrored_hole_id_fkey" FOREIGN KEY ("mirrored_hole_id") REFERENCES "public"."tension_holes"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_holes" ADD CONSTRAINT "holes_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "public"."tension_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_climbs" ADD CONSTRAINT "climbs_layout_id_fkey" FOREIGN KEY ("layout_id") REFERENCES "public"."tension_layouts"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_placements" ADD CONSTRAINT "placements_default_placement_role_id_fkey" FOREIGN KEY ("default_placement_role_id") REFERENCES "public"."tension_placement_roles"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_placements" ADD CONSTRAINT "placements_hole_id_fkey" FOREIGN KEY ("hole_id") REFERENCES "public"."tension_holes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_placements" ADD CONSTRAINT "placements_layout_id_fkey" FOREIGN KEY ("layout_id") REFERENCES "public"."tension_layouts"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_placements" ADD CONSTRAINT "placements_set_id_fkey" FOREIGN KEY ("set_id") REFERENCES "public"."tension_sets"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_placement_roles" ADD CONSTRAINT "placement_roles_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "public"."tension_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_leds" ADD CONSTRAINT "leds_hole_id_fkey" FOREIGN KEY ("hole_id") REFERENCES "public"."tension_holes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_leds" ADD CONSTRAINT "leds_product_size_id_fkey" FOREIGN KEY ("product_size_id") REFERENCES "public"."tension_product_sizes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_layouts" ADD CONSTRAINT "layouts_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "public"."tension_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_product_sizes_layouts_sets" ADD CONSTRAINT "product_sizes_layouts_sets_layout_id_fkey" FOREIGN KEY ("layout_id") REFERENCES "public"."tension_layouts"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_product_sizes_layouts_sets" ADD CONSTRAINT "product_sizes_layouts_sets_product_size_id_fkey" FOREIGN KEY ("product_size_id") REFERENCES "public"."tension_product_sizes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_product_sizes_layouts_sets" ADD CONSTRAINT "product_sizes_layouts_sets_set_id_fkey" FOREIGN KEY ("set_id") REFERENCES "public"."tension_sets"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_product_sizes" ADD CONSTRAINT "product_sizes_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "public"."tension_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_ascents" ADD CONSTRAINT "ascents_attempt_id_fkey1" FOREIGN KEY ("attempt_id") REFERENCES "public"."kilter_attempts"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_ascents" ADD CONSTRAINT "ascents_climb_uuid_fkey1" FOREIGN KEY ("climb_uuid") REFERENCES "public"."kilter_climbs"("uuid") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_ascents" ADD CONSTRAINT "ascents_difficulty_fkey1" FOREIGN KEY ("difficulty") REFERENCES "public"."kilter_difficulty_grades"("difficulty") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_ascents" ADD CONSTRAINT "ascents_user_id_fkey1" FOREIGN KEY ("user_id") REFERENCES "public"."kilter_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_walls" ADD CONSTRAINT "walls_layout_id_fkey" FOREIGN KEY ("layout_id") REFERENCES "public"."tension_layouts"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_walls" ADD CONSTRAINT "walls_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "public"."tension_products"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_walls" ADD CONSTRAINT "walls_product_size_id_fkey" FOREIGN KEY ("product_size_id") REFERENCES "public"."tension_product_sizes"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_walls" ADD CONSTRAINT "walls_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."tension_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_ascents" ADD CONSTRAINT "ascents_attempt_id_fkey" FOREIGN KEY ("attempt_id") REFERENCES "public"."tension_attempts"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_ascents" ADD CONSTRAINT "ascents_climb_uuid_fkey" FOREIGN KEY ("climb_uuid") REFERENCES "public"."tension_climbs"("uuid") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_ascents" ADD CONSTRAINT "ascents_difficulty_fkey" FOREIGN KEY ("difficulty") REFERENCES "public"."tension_difficulty_grades"("difficulty") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_ascents" ADD CONSTRAINT "ascents_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."tension_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_products_angles" ADD CONSTRAINT "products_angles_product_id_fkey1" FOREIGN KEY ("product_id") REFERENCES "public"."kilter_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_walls_sets" ADD CONSTRAINT "walls_sets_set_id_fkey1" FOREIGN KEY ("set_id") REFERENCES "public"."kilter_sets"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_walls_sets" ADD CONSTRAINT "walls_sets_wall_uuid_fkey1" FOREIGN KEY ("wall_uuid") REFERENCES "public"."kilter_walls"("uuid") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_walls_sets" ADD CONSTRAINT "walls_sets_set_id_fkey" FOREIGN KEY ("set_id") REFERENCES "public"."tension_sets"("id") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_walls_sets" ADD CONSTRAINT "walls_sets_wall_uuid_fkey" FOREIGN KEY ("wall_uuid") REFERENCES "public"."tension_walls"("uuid") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_products_angles" ADD CONSTRAINT "products_angles_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "public"."tension_products"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_user_syncs" ADD CONSTRAINT "user_syncs_user_id_fkey1" FOREIGN KEY ("user_id") REFERENCES "public"."kilter_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_user_syncs" ADD CONSTRAINT "user_syncs_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."tension_users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "kilter_beta_links" ADD CONSTRAINT "beta_links_climb_uuid_fkey1" FOREIGN KEY ("climb_uuid") REFERENCES "public"."kilter_climbs"("uuid") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +ALTER TABLE "tension_beta_links" ADD CONSTRAINT "beta_links_climb_uuid_fkey" FOREIGN KEY ("climb_uuid") REFERENCES "public"."tension_climbs"("uuid") ON DELETE restrict ON UPDATE cascade;--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16797_sqlite_autoindex_leds_2" ON "kilter_leds" USING btree ("product_size_id" int4_ops,"position" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16791_sqlite_autoindex_holes_2" ON "kilter_holes" USING btree ("product_id" text_ops,"name" text_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16791_sqlite_autoindex_holes_3" ON "kilter_holes" USING btree ("product_id" int4_ops,"x" int4_ops,"y" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16904_sqlite_autoindex_placements_2" ON "kilter_placements" USING btree ("layout_id" int4_ops,"hole_id" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16813_sqlite_autoindex_product_sizes_layouts_sets_2" ON "kilter_product_sizes_layouts_sets" USING btree ("product_size_id" int4_ops,"layout_id" int4_ops,"set_id" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16405_sqlite_autoindex_holes_2" ON "tension_holes" USING btree ("product_id" text_ops,"name" text_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16405_sqlite_autoindex_holes_3" ON "tension_holes" USING btree ("product_id" int4_ops,"x" int4_ops,"y" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16518_sqlite_autoindex_placements_2" ON "tension_placements" USING btree ("layout_id" int4_ops,"hole_id" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16411_sqlite_autoindex_leds_2" ON "tension_leds" USING btree ("product_size_id" int4_ops,"position" int4_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "idx_16427_sqlite_autoindex_product_sizes_layouts_sets_2" ON "tension_product_sizes_layouts_sets" USING btree ("product_size_id" int4_ops,"layout_id" int4_ops,"set_id" int4_ops); +*/ \ No newline at end of file diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..028c7ae --- /dev/null +++ b/drizzle/meta/0000_snapshot.json @@ -0,0 +1,4188 @@ +{ + "id": "00000000-0000-0000-0000-000000000000", + "prevId": "", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.kilter_climb_cache_fields": { + "name": "kilter_climb_cache_fields", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ascensionist_count": { + "name": "ascensionist_count", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "display_difficulty": { + "name": "display_difficulty", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "quality_average": { + "name": "quality_average", + "type": "double precision", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "climb_cache_fields_climb_uuid_fkey1": { + "name": "climb_cache_fields_climb_uuid_fkey1", + "tableFrom": "kilter_climb_cache_fields", + "tableTo": "kilter_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_attempts": { + "name": "kilter_attempts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_climb_random_positions": { + "name": "kilter_climb_random_positions", + "schema": "", + "columns": { + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_layouts": { + "name": "kilter_layouts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "instagram_caption": { + "name": "instagram_caption", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_mirrored": { + "name": "is_mirrored", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "layouts_product_id_fkey1": { + "name": "layouts_product_id_fkey1", + "tableFrom": "kilter_layouts", + "tableTo": "kilter_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_android_metadata": { + "name": "kilter_android_metadata", + "schema": "", + "columns": { + "locale": { + "name": "locale", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_circuits": { + "name": "kilter_circuits", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "color": { + "name": "color", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_public": { + "name": "is_public", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_climb_stats": { + "name": "tension_climb_stats", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "display_difficulty": { + "name": "display_difficulty", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "benchmark_difficulty": { + "name": "benchmark_difficulty", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "ascensionist_count": { + "name": "ascensionist_count", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "difficulty_average": { + "name": "difficulty_average", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "quality_average": { + "name": "quality_average", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "fa_username": { + "name": "fa_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "fa_at": { + "name": "fa_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_climb_cache_fields": { + "name": "tension_climb_cache_fields", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ascensionist_count": { + "name": "ascensionist_count", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "display_difficulty": { + "name": "display_difficulty", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "quality_average": { + "name": "quality_average", + "type": "double precision", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "climb_cache_fields_climb_uuid_fkey": { + "name": "climb_cache_fields_climb_uuid_fkey", + "tableFrom": "tension_climb_cache_fields", + "tableTo": "tension_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_leds": { + "name": "kilter_leds", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_size_id": { + "name": "product_size_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hole_id": { + "name": "hole_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "idx_16797_sqlite_autoindex_leds_2": { + "name": "idx_16797_sqlite_autoindex_leds_2", + "columns": [ + { + "expression": "product_size_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "position", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "leds_hole_id_fkey1": { + "name": "leds_hole_id_fkey1", + "tableFrom": "kilter_leds", + "tableTo": "kilter_holes", + "schemaTo": "public", + "columnsFrom": [ + "hole_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "leds_product_size_id_fkey1": { + "name": "leds_product_size_id_fkey1", + "tableFrom": "kilter_leds", + "tableTo": "kilter_product_sizes", + "schemaTo": "public", + "columnsFrom": [ + "product_size_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_climb_stats": { + "name": "kilter_climb_stats", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "display_difficulty": { + "name": "display_difficulty", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "benchmark_difficulty": { + "name": "benchmark_difficulty", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "ascensionist_count": { + "name": "ascensionist_count", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "difficulty_average": { + "name": "difficulty_average", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "quality_average": { + "name": "quality_average", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "fa_username": { + "name": "fa_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "fa_at": { + "name": "fa_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_product_sizes": { + "name": "kilter_product_sizes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_left": { + "name": "edge_left", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_right": { + "name": "edge_right", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_bottom": { + "name": "edge_bottom", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_top": { + "name": "edge_top", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "image_filename": { + "name": "image_filename", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "product_sizes_product_id_fkey1": { + "name": "product_sizes_product_id_fkey1", + "tableFrom": "kilter_product_sizes", + "tableTo": "kilter_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_kits": { + "name": "kilter_kits", + "schema": "", + "columns": { + "serial_number": { + "name": "serial_number", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_autoconnect": { + "name": "is_autoconnect", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_bids": { + "name": "kilter_bids", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_mirror": { + "name": "is_mirror", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "bid_count": { + "name": "bid_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "comment": { + "name": "comment", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "climbed_at": { + "name": "climbed_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "bids_climb_uuid_fkey1": { + "name": "bids_climb_uuid_fkey1", + "tableFrom": "kilter_bids", + "tableTo": "kilter_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "bids_user_id_fkey1": { + "name": "bids_user_id_fkey1", + "tableFrom": "kilter_bids", + "tableTo": "kilter_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_holes": { + "name": "kilter_holes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "x": { + "name": "x", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "y": { + "name": "y", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "mirrored_hole_id": { + "name": "mirrored_hole_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "mirror_group": { + "name": "mirror_group", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + } + }, + "indexes": { + "idx_16791_sqlite_autoindex_holes_2": { + "name": "idx_16791_sqlite_autoindex_holes_2", + "columns": [ + { + "expression": "product_id", + "asc": true, + "nulls": "last", + "opclass": "text_ops", + "isExpression": false + }, + { + "expression": "name", + "asc": true, + "nulls": "last", + "opclass": "text_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "idx_16791_sqlite_autoindex_holes_3": { + "name": "idx_16791_sqlite_autoindex_holes_3", + "columns": [ + { + "expression": "product_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "x", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "y", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "holes_product_id_fkey1": { + "name": "holes_product_id_fkey1", + "tableFrom": "kilter_holes", + "tableTo": "kilter_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_placement_roles": { + "name": "kilter_placement_roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "full_name": { + "name": "full_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "led_color": { + "name": "led_color", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "screen_color": { + "name": "screen_color", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "placement_roles_product_id_fkey1": { + "name": "placement_roles_product_id_fkey1", + "tableFrom": "kilter_placement_roles", + "tableTo": "kilter_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_difficulty_grades": { + "name": "kilter_difficulty_grades", + "schema": "", + "columns": { + "difficulty": { + "name": "difficulty", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "boulder_name": { + "name": "boulder_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "route_name": { + "name": "route_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_placements": { + "name": "kilter_placements", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hole_id": { + "name": "hole_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "set_id": { + "name": "set_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "default_placement_role_id": { + "name": "default_placement_role_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "idx_16904_sqlite_autoindex_placements_2": { + "name": "idx_16904_sqlite_autoindex_placements_2", + "columns": [ + { + "expression": "layout_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "hole_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "placements_default_placement_role_id_fkey1": { + "name": "placements_default_placement_role_id_fkey1", + "tableFrom": "kilter_placements", + "tableTo": "kilter_placement_roles", + "schemaTo": "public", + "columnsFrom": [ + "default_placement_role_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "placements_hole_id_fkey1": { + "name": "placements_hole_id_fkey1", + "tableFrom": "kilter_placements", + "tableTo": "kilter_holes", + "schemaTo": "public", + "columnsFrom": [ + "hole_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "placements_layout_id_fkey1": { + "name": "placements_layout_id_fkey1", + "tableFrom": "kilter_placements", + "tableTo": "kilter_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "placements_set_id_fkey1": { + "name": "placements_set_id_fkey1", + "tableFrom": "kilter_placements", + "tableTo": "kilter_sets", + "schemaTo": "public", + "columnsFrom": [ + "set_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_climbs": { + "name": "kilter_climbs", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "setter_id": { + "name": "setter_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "setter_username": { + "name": "setter_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "hsm": { + "name": "hsm", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_left": { + "name": "edge_left", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_right": { + "name": "edge_right", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_bottom": { + "name": "edge_bottom", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_top": { + "name": "edge_top", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "frames_count": { + "name": "frames_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "frames_pace": { + "name": "frames_pace", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "frames": { + "name": "frames", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_draft": { + "name": "is_draft", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "climbs_layout_id_fkey1": { + "name": "climbs_layout_id_fkey1", + "tableFrom": "kilter_climbs", + "tableTo": "kilter_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_product_sizes_layouts_sets": { + "name": "kilter_product_sizes_layouts_sets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_size_id": { + "name": "product_size_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "set_id": { + "name": "set_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "image_filename": { + "name": "image_filename", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "idx_16813_sqlite_autoindex_product_sizes_layouts_sets_2": { + "name": "idx_16813_sqlite_autoindex_product_sizes_layouts_sets_2", + "columns": [ + { + "expression": "product_size_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "layout_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "set_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "product_sizes_layouts_sets_layout_id_fkey1": { + "name": "product_sizes_layouts_sets_layout_id_fkey1", + "tableFrom": "kilter_product_sizes_layouts_sets", + "tableTo": "kilter_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "product_sizes_layouts_sets_product_size_id_fkey1": { + "name": "product_sizes_layouts_sets_product_size_id_fkey1", + "tableFrom": "kilter_product_sizes_layouts_sets", + "tableTo": "kilter_product_sizes", + "schemaTo": "public", + "columnsFrom": [ + "product_size_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "product_sizes_layouts_sets_set_id_fkey1": { + "name": "product_sizes_layouts_sets_set_id_fkey1", + "tableFrom": "kilter_product_sizes_layouts_sets", + "tableTo": "kilter_sets", + "schemaTo": "public", + "columnsFrom": [ + "set_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_shared_syncs": { + "name": "kilter_shared_syncs", + "schema": "", + "columns": { + "table_name": { + "name": "table_name", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "last_synchronized_at": { + "name": "last_synchronized_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_users": { + "name": "kilter_users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_products": { + "name": "kilter_products", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "min_count_in_frame": { + "name": "min_count_in_frame", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "max_count_in_frame": { + "name": "max_count_in_frame", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_sets": { + "name": "kilter_sets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "hsm": { + "name": "hsm", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_walls": { + "name": "kilter_walls", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_adjustable": { + "name": "is_adjustable", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "product_size_id": { + "name": "product_size_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hsm": { + "name": "hsm", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "serial_number": { + "name": "serial_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "walls_layout_id_fkey1": { + "name": "walls_layout_id_fkey1", + "tableFrom": "kilter_walls", + "tableTo": "kilter_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_product_id_fkey1": { + "name": "walls_product_id_fkey1", + "tableFrom": "kilter_walls", + "tableTo": "kilter_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_product_size_id_fkey1": { + "name": "walls_product_size_id_fkey1", + "tableFrom": "kilter_walls", + "tableTo": "kilter_product_sizes", + "schemaTo": "public", + "columnsFrom": [ + "product_size_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_user_id_fkey1": { + "name": "walls_user_id_fkey1", + "tableFrom": "kilter_walls", + "tableTo": "kilter_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_android_metadata": { + "name": "tension_android_metadata", + "schema": "", + "columns": { + "locale": { + "name": "locale", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_attempts": { + "name": "tension_attempts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_bids": { + "name": "tension_bids", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_mirror": { + "name": "is_mirror", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "bid_count": { + "name": "bid_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "comment": { + "name": "comment", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "climbed_at": { + "name": "climbed_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "bids_climb_uuid_fkey": { + "name": "bids_climb_uuid_fkey", + "tableFrom": "tension_bids", + "tableTo": "tension_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "bids_user_id_fkey": { + "name": "bids_user_id_fkey", + "tableFrom": "tension_bids", + "tableTo": "tension_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_holes": { + "name": "tension_holes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "x": { + "name": "x", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "y": { + "name": "y", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "mirrored_hole_id": { + "name": "mirrored_hole_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "mirror_group": { + "name": "mirror_group", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + } + }, + "indexes": { + "idx_16405_sqlite_autoindex_holes_2": { + "name": "idx_16405_sqlite_autoindex_holes_2", + "columns": [ + { + "expression": "product_id", + "asc": true, + "nulls": "last", + "opclass": "text_ops", + "isExpression": false + }, + { + "expression": "name", + "asc": true, + "nulls": "last", + "opclass": "text_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "idx_16405_sqlite_autoindex_holes_3": { + "name": "idx_16405_sqlite_autoindex_holes_3", + "columns": [ + { + "expression": "product_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "x", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "y", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "holes_mirrored_hole_id_fkey": { + "name": "holes_mirrored_hole_id_fkey", + "tableFrom": "tension_holes", + "tableTo": "tension_holes", + "schemaTo": "public", + "columnsFrom": [ + "mirrored_hole_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "holes_product_id_fkey": { + "name": "holes_product_id_fkey", + "tableFrom": "tension_holes", + "tableTo": "tension_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_circuits": { + "name": "tension_circuits", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "color": { + "name": "color", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_public": { + "name": "is_public", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_kits": { + "name": "tension_kits", + "schema": "", + "columns": { + "serial_number": { + "name": "serial_number", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_autoconnect": { + "name": "is_autoconnect", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_climb_random_positions": { + "name": "tension_climb_random_positions", + "schema": "", + "columns": { + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_climbs": { + "name": "tension_climbs", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "setter_id": { + "name": "setter_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "setter_username": { + "name": "setter_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "hsm": { + "name": "hsm", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_left": { + "name": "edge_left", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_right": { + "name": "edge_right", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_bottom": { + "name": "edge_bottom", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_top": { + "name": "edge_top", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "frames_count": { + "name": "frames_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "frames_pace": { + "name": "frames_pace", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "frames": { + "name": "frames", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_draft": { + "name": "is_draft", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "climbs_layout_id_fkey": { + "name": "climbs_layout_id_fkey", + "tableFrom": "tension_climbs", + "tableTo": "tension_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_sets": { + "name": "tension_sets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "hsm": { + "name": "hsm", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_placements": { + "name": "tension_placements", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hole_id": { + "name": "hole_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "set_id": { + "name": "set_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "default_placement_role_id": { + "name": "default_placement_role_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "idx_16518_sqlite_autoindex_placements_2": { + "name": "idx_16518_sqlite_autoindex_placements_2", + "columns": [ + { + "expression": "layout_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "hole_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "placements_default_placement_role_id_fkey": { + "name": "placements_default_placement_role_id_fkey", + "tableFrom": "tension_placements", + "tableTo": "tension_placement_roles", + "schemaTo": "public", + "columnsFrom": [ + "default_placement_role_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "placements_hole_id_fkey": { + "name": "placements_hole_id_fkey", + "tableFrom": "tension_placements", + "tableTo": "tension_holes", + "schemaTo": "public", + "columnsFrom": [ + "hole_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "placements_layout_id_fkey": { + "name": "placements_layout_id_fkey", + "tableFrom": "tension_placements", + "tableTo": "tension_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "placements_set_id_fkey": { + "name": "placements_set_id_fkey", + "tableFrom": "tension_placements", + "tableTo": "tension_sets", + "schemaTo": "public", + "columnsFrom": [ + "set_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_placement_roles": { + "name": "tension_placement_roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "full_name": { + "name": "full_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "led_color": { + "name": "led_color", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "screen_color": { + "name": "screen_color", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "placement_roles_product_id_fkey": { + "name": "placement_roles_product_id_fkey", + "tableFrom": "tension_placement_roles", + "tableTo": "tension_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_leds": { + "name": "tension_leds", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_size_id": { + "name": "product_size_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hole_id": { + "name": "hole_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "idx_16411_sqlite_autoindex_leds_2": { + "name": "idx_16411_sqlite_autoindex_leds_2", + "columns": [ + { + "expression": "product_size_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "position", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "leds_hole_id_fkey": { + "name": "leds_hole_id_fkey", + "tableFrom": "tension_leds", + "tableTo": "tension_holes", + "schemaTo": "public", + "columnsFrom": [ + "hole_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "leds_product_size_id_fkey": { + "name": "leds_product_size_id_fkey", + "tableFrom": "tension_leds", + "tableTo": "tension_product_sizes", + "schemaTo": "public", + "columnsFrom": [ + "product_size_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_layouts": { + "name": "tension_layouts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "instagram_caption": { + "name": "instagram_caption", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_mirrored": { + "name": "is_mirrored", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "layouts_product_id_fkey": { + "name": "layouts_product_id_fkey", + "tableFrom": "tension_layouts", + "tableTo": "tension_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_shared_syncs": { + "name": "tension_shared_syncs", + "schema": "", + "columns": { + "table_name": { + "name": "table_name", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "last_synchronized_at": { + "name": "last_synchronized_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_product_sizes_layouts_sets": { + "name": "tension_product_sizes_layouts_sets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_size_id": { + "name": "product_size_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "set_id": { + "name": "set_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "image_filename": { + "name": "image_filename", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "idx_16427_sqlite_autoindex_product_sizes_layouts_sets_2": { + "name": "idx_16427_sqlite_autoindex_product_sizes_layouts_sets_2", + "columns": [ + { + "expression": "product_size_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "layout_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + }, + { + "expression": "set_id", + "asc": true, + "nulls": "last", + "opclass": "int4_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "product_sizes_layouts_sets_layout_id_fkey": { + "name": "product_sizes_layouts_sets_layout_id_fkey", + "tableFrom": "tension_product_sizes_layouts_sets", + "tableTo": "tension_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "product_sizes_layouts_sets_product_size_id_fkey": { + "name": "product_sizes_layouts_sets_product_size_id_fkey", + "tableFrom": "tension_product_sizes_layouts_sets", + "tableTo": "tension_product_sizes", + "schemaTo": "public", + "columnsFrom": [ + "product_size_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "product_sizes_layouts_sets_set_id_fkey": { + "name": "product_sizes_layouts_sets_set_id_fkey", + "tableFrom": "tension_product_sizes_layouts_sets", + "tableTo": "tension_sets", + "schemaTo": "public", + "columnsFrom": [ + "set_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_product_sizes": { + "name": "tension_product_sizes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_left": { + "name": "edge_left", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_right": { + "name": "edge_right", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_bottom": { + "name": "edge_bottom", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "edge_top": { + "name": "edge_top", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "image_filename": { + "name": "image_filename", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "product_sizes_product_id_fkey": { + "name": "product_sizes_product_id_fkey", + "tableFrom": "tension_product_sizes", + "tableTo": "tension_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_ascents": { + "name": "kilter_ascents", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_mirror": { + "name": "is_mirror", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "attempt_id": { + "name": "attempt_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "bid_count": { + "name": "bid_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "quality": { + "name": "quality", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "difficulty": { + "name": "difficulty", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_benchmark": { + "name": "is_benchmark", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "comment": { + "name": "comment", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "climbed_at": { + "name": "climbed_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "ascents_attempt_id_fkey1": { + "name": "ascents_attempt_id_fkey1", + "tableFrom": "kilter_ascents", + "tableTo": "kilter_attempts", + "schemaTo": "public", + "columnsFrom": [ + "attempt_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "ascents_climb_uuid_fkey1": { + "name": "ascents_climb_uuid_fkey1", + "tableFrom": "kilter_ascents", + "tableTo": "kilter_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "ascents_difficulty_fkey1": { + "name": "ascents_difficulty_fkey1", + "tableFrom": "kilter_ascents", + "tableTo": "kilter_difficulty_grades", + "schemaTo": "public", + "columnsFrom": [ + "difficulty" + ], + "columnsTo": [ + "difficulty" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "ascents_user_id_fkey1": { + "name": "ascents_user_id_fkey1", + "tableFrom": "kilter_ascents", + "tableTo": "kilter_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_walls": { + "name": "tension_walls", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_adjustable": { + "name": "is_adjustable", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "layout_id": { + "name": "layout_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "product_size_id": { + "name": "product_size_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hsm": { + "name": "hsm", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "serial_number": { + "name": "serial_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "walls_layout_id_fkey": { + "name": "walls_layout_id_fkey", + "tableFrom": "tension_walls", + "tableTo": "tension_layouts", + "schemaTo": "public", + "columnsFrom": [ + "layout_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_product_id_fkey": { + "name": "walls_product_id_fkey", + "tableFrom": "tension_walls", + "tableTo": "tension_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_product_size_id_fkey": { + "name": "walls_product_size_id_fkey", + "tableFrom": "tension_walls", + "tableTo": "tension_product_sizes", + "schemaTo": "public", + "columnsFrom": [ + "product_size_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_user_id_fkey": { + "name": "walls_user_id_fkey", + "tableFrom": "tension_walls", + "tableTo": "tension_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_products": { + "name": "tension_products", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "min_count_in_frame": { + "name": "min_count_in_frame", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "max_count_in_frame": { + "name": "max_count_in_frame", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_difficulty_grades": { + "name": "tension_difficulty_grades", + "schema": "", + "columns": { + "difficulty": { + "name": "difficulty", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "boulder_name": { + "name": "boulder_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "route_name": { + "name": "route_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_ascents": { + "name": "tension_ascents", + "schema": "", + "columns": { + "uuid": { + "name": "uuid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_mirror": { + "name": "is_mirror", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "attempt_id": { + "name": "attempt_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "bid_count": { + "name": "bid_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "quality": { + "name": "quality", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "difficulty": { + "name": "difficulty", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "is_benchmark": { + "name": "is_benchmark", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "comment": { + "name": "comment", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "climbed_at": { + "name": "climbed_at", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "ascents_attempt_id_fkey": { + "name": "ascents_attempt_id_fkey", + "tableFrom": "tension_ascents", + "tableTo": "tension_attempts", + "schemaTo": "public", + "columnsFrom": [ + "attempt_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "ascents_climb_uuid_fkey": { + "name": "ascents_climb_uuid_fkey", + "tableFrom": "tension_ascents", + "tableTo": "tension_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "ascents_difficulty_fkey": { + "name": "ascents_difficulty_fkey", + "tableFrom": "tension_ascents", + "tableTo": "tension_difficulty_grades", + "schemaTo": "public", + "columnsFrom": [ + "difficulty" + ], + "columnsTo": [ + "difficulty" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "ascents_user_id_fkey": { + "name": "ascents_user_id_fkey", + "tableFrom": "tension_ascents", + "tableTo": "tension_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_users": { + "name": "tension_users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_products_angles": { + "name": "kilter_products_angles", + "schema": "", + "columns": { + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "products_angles_product_id_fkey1": { + "name": "products_angles_product_id_fkey1", + "tableFrom": "kilter_products_angles", + "tableTo": "kilter_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16800_sqlite_autoindex_products_angles_1": { + "name": "idx_16800_sqlite_autoindex_products_angles_1", + "columns": [ + "product_id", + "angle" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_walls_sets": { + "name": "kilter_walls_sets", + "schema": "", + "columns": { + "wall_uuid": { + "name": "wall_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "set_id": { + "name": "set_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "walls_sets_set_id_fkey1": { + "name": "walls_sets_set_id_fkey1", + "tableFrom": "kilter_walls_sets", + "tableTo": "kilter_sets", + "schemaTo": "public", + "columnsFrom": [ + "set_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_sets_wall_uuid_fkey1": { + "name": "walls_sets_wall_uuid_fkey1", + "tableFrom": "kilter_walls_sets", + "tableTo": "kilter_walls", + "schemaTo": "public", + "columnsFrom": [ + "wall_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16838_sqlite_autoindex_walls_sets_1": { + "name": "idx_16838_sqlite_autoindex_walls_sets_1", + "columns": [ + "wall_uuid", + "set_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_user_permissions": { + "name": "kilter_user_permissions", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "idx_16828_sqlite_autoindex_user_permissions_1": { + "name": "idx_16828_sqlite_autoindex_user_permissions_1", + "columns": [ + "user_id", + "name" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_user_permissions": { + "name": "tension_user_permissions", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "idx_16447_sqlite_autoindex_user_permissions_1": { + "name": "idx_16447_sqlite_autoindex_user_permissions_1", + "columns": [ + "user_id", + "name" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_walls_sets": { + "name": "tension_walls_sets", + "schema": "", + "columns": { + "wall_uuid": { + "name": "wall_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "set_id": { + "name": "set_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "walls_sets_set_id_fkey": { + "name": "walls_sets_set_id_fkey", + "tableFrom": "tension_walls_sets", + "tableTo": "tension_sets", + "schemaTo": "public", + "columnsFrom": [ + "set_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "walls_sets_wall_uuid_fkey": { + "name": "walls_sets_wall_uuid_fkey", + "tableFrom": "tension_walls_sets", + "tableTo": "tension_walls", + "schemaTo": "public", + "columnsFrom": [ + "wall_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16457_sqlite_autoindex_walls_sets_1": { + "name": "idx_16457_sqlite_autoindex_walls_sets_1", + "columns": [ + "wall_uuid", + "set_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_circuits_climbs": { + "name": "kilter_circuits_climbs", + "schema": "", + "columns": { + "circuit_uuid": { + "name": "circuit_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "idx_16868_sqlite_autoindex_circuits_climbs_1": { + "name": "idx_16868_sqlite_autoindex_circuits_climbs_1", + "columns": [ + "circuit_uuid", + "climb_uuid" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_products_angles": { + "name": "tension_products_angles", + "schema": "", + "columns": { + "product_id": { + "name": "product_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "products_angles_product_id_fkey": { + "name": "products_angles_product_id_fkey", + "tableFrom": "tension_products_angles", + "tableTo": "tension_products", + "schemaTo": "public", + "columnsFrom": [ + "product_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16414_sqlite_autoindex_products_angles_1": { + "name": "idx_16414_sqlite_autoindex_products_angles_1", + "columns": [ + "product_id", + "angle" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_user_syncs": { + "name": "kilter_user_syncs", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "table_name": { + "name": "table_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "last_synchronized_at": { + "name": "last_synchronized_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "user_syncs_user_id_fkey1": { + "name": "user_syncs_user_id_fkey1", + "tableFrom": "kilter_user_syncs", + "tableTo": "kilter_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16833_sqlite_autoindex_user_syncs_1": { + "name": "idx_16833_sqlite_autoindex_user_syncs_1", + "columns": [ + "user_id", + "table_name" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_circuits_climbs": { + "name": "tension_circuits_climbs", + "schema": "", + "columns": { + "circuit_uuid": { + "name": "circuit_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "idx_16482_sqlite_autoindex_circuits_climbs_1": { + "name": "idx_16482_sqlite_autoindex_circuits_climbs_1", + "columns": [ + "circuit_uuid", + "climb_uuid" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_user_syncs": { + "name": "tension_user_syncs", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "table_name": { + "name": "table_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "last_synchronized_at": { + "name": "last_synchronized_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "user_syncs_user_id_fkey": { + "name": "user_syncs_user_id_fkey", + "tableFrom": "tension_user_syncs", + "tableTo": "tension_users", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16452_sqlite_autoindex_user_syncs_1": { + "name": "idx_16452_sqlite_autoindex_user_syncs_1", + "columns": [ + "user_id", + "table_name" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_tags": { + "name": "kilter_tags", + "schema": "", + "columns": { + "entity_uuid": { + "name": "entity_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "idx_16853_sqlite_autoindex_tags_1": { + "name": "idx_16853_sqlite_autoindex_tags_1", + "columns": [ + "entity_uuid", + "user_id", + "name" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_tags": { + "name": "tension_tags", + "schema": "", + "columns": { + "entity_uuid": { + "name": "entity_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "idx_16472_sqlite_autoindex_tags_1": { + "name": "idx_16472_sqlite_autoindex_tags_1", + "columns": [ + "entity_uuid", + "user_id", + "name" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.kilter_beta_links": { + "name": "kilter_beta_links", + "schema": "", + "columns": { + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "link": { + "name": "link", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "foreign_username": { + "name": "foreign_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "thumbnail": { + "name": "thumbnail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "beta_links_climb_uuid_fkey1": { + "name": "beta_links_climb_uuid_fkey1", + "tableFrom": "kilter_beta_links", + "tableTo": "kilter_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16883_sqlite_autoindex_beta_links_1": { + "name": "idx_16883_sqlite_autoindex_beta_links_1", + "columns": [ + "climb_uuid", + "link" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.tension_beta_links": { + "name": "tension_beta_links", + "schema": "", + "columns": { + "climb_uuid": { + "name": "climb_uuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "link": { + "name": "link", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "foreign_username": { + "name": "foreign_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "angle": { + "name": "angle", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "thumbnail": { + "name": "thumbnail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_listed": { + "name": "is_listed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "beta_links_climb_uuid_fkey": { + "name": "beta_links_climb_uuid_fkey", + "tableFrom": "tension_beta_links", + "tableTo": "tension_climbs", + "schemaTo": "public", + "columnsFrom": [ + "climb_uuid" + ], + "columnsTo": [ + "uuid" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "idx_16497_sqlite_autoindex_beta_links_1": { + "name": "idx_16497_sqlite_autoindex_beta_links_1", + "columns": [ + "climb_uuid", + "link" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "tables": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json new file mode 100644 index 0000000..2c91883 --- /dev/null +++ b/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1734255307302, + "tag": "0000_cloudy_carlie_cooper", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/drizzle/relations.ts b/drizzle/relations.ts new file mode 100644 index 0000000..ae6e2c4 --- /dev/null +++ b/drizzle/relations.ts @@ -0,0 +1,436 @@ +import { relations } from "drizzle-orm/relations"; +import { kilterClimbs, kilterClimbCacheFields, kilterProducts, kilterLayouts, tensionClimbs, tensionClimbCacheFields, kilterHoles, kilterLeds, kilterProductSizes, kilterBids, kilterUsers, kilterPlacementRoles, kilterPlacements, kilterSets, kilterProductSizesLayoutsSets, kilterWalls, tensionBids, tensionUsers, tensionHoles, tensionProducts, tensionLayouts, tensionPlacementRoles, tensionPlacements, tensionSets, tensionLeds, tensionProductSizes, tensionProductSizesLayoutsSets, kilterAttempts, kilterAscents, kilterDifficultyGrades, tensionWalls, tensionAttempts, tensionAscents, tensionDifficultyGrades, kilterProductsAngles, kilterWallsSets, tensionWallsSets, tensionProductsAngles, kilterUserSyncs, tensionUserSyncs, kilterBetaLinks, tensionBetaLinks } from "./schema"; + +export const kilterClimbCacheFieldsRelations = relations(kilterClimbCacheFields, ({one}) => ({ + kilterClimb: one(kilterClimbs, { + fields: [kilterClimbCacheFields.climbUuid], + references: [kilterClimbs.uuid] + }), +})); + +export const kilterClimbsRelations = relations(kilterClimbs, ({one, many}) => ({ + kilterClimbCacheFields: many(kilterClimbCacheFields), + kilterBids: many(kilterBids), + kilterLayout: one(kilterLayouts, { + fields: [kilterClimbs.layoutId], + references: [kilterLayouts.id] + }), + kilterAscents: many(kilterAscents), + kilterBetaLinks: many(kilterBetaLinks), +})); + +export const kilterLayoutsRelations = relations(kilterLayouts, ({one, many}) => ({ + kilterProduct: one(kilterProducts, { + fields: [kilterLayouts.productId], + references: [kilterProducts.id] + }), + kilterPlacements: many(kilterPlacements), + kilterClimbs: many(kilterClimbs), + kilterProductSizesLayoutsSets: many(kilterProductSizesLayoutsSets), + kilterWalls: many(kilterWalls), +})); + +export const kilterProductsRelations = relations(kilterProducts, ({many}) => ({ + kilterLayouts: many(kilterLayouts), + kilterProductSizes: many(kilterProductSizes), + kilterHoles: many(kilterHoles), + kilterPlacementRoles: many(kilterPlacementRoles), + kilterWalls: many(kilterWalls), + kilterProductsAngles: many(kilterProductsAngles), +})); + +export const tensionClimbCacheFieldsRelations = relations(tensionClimbCacheFields, ({one}) => ({ + tensionClimb: one(tensionClimbs, { + fields: [tensionClimbCacheFields.climbUuid], + references: [tensionClimbs.uuid] + }), +})); + +export const tensionClimbsRelations = relations(tensionClimbs, ({one, many}) => ({ + tensionClimbCacheFields: many(tensionClimbCacheFields), + tensionBids: many(tensionBids), + tensionLayout: one(tensionLayouts, { + fields: [tensionClimbs.layoutId], + references: [tensionLayouts.id] + }), + tensionAscents: many(tensionAscents), + tensionBetaLinks: many(tensionBetaLinks), +})); + +export const kilterLedsRelations = relations(kilterLeds, ({one}) => ({ + kilterHole: one(kilterHoles, { + fields: [kilterLeds.holeId], + references: [kilterHoles.id] + }), + kilterProductSize: one(kilterProductSizes, { + fields: [kilterLeds.productSizeId], + references: [kilterProductSizes.id] + }), +})); + +export const kilterHolesRelations = relations(kilterHoles, ({one, many}) => ({ + kilterLeds: many(kilterLeds), + kilterProduct: one(kilterProducts, { + fields: [kilterHoles.productId], + references: [kilterProducts.id] + }), + kilterPlacements: many(kilterPlacements), +})); + +export const kilterProductSizesRelations = relations(kilterProductSizes, ({one, many}) => ({ + kilterLeds: many(kilterLeds), + kilterProduct: one(kilterProducts, { + fields: [kilterProductSizes.productId], + references: [kilterProducts.id] + }), + kilterProductSizesLayoutsSets: many(kilterProductSizesLayoutsSets), + kilterWalls: many(kilterWalls), +})); + +export const kilterBidsRelations = relations(kilterBids, ({one}) => ({ + kilterClimb: one(kilterClimbs, { + fields: [kilterBids.climbUuid], + references: [kilterClimbs.uuid] + }), + kilterUser: one(kilterUsers, { + fields: [kilterBids.userId], + references: [kilterUsers.id] + }), +})); + +export const kilterUsersRelations = relations(kilterUsers, ({many}) => ({ + kilterBids: many(kilterBids), + kilterWalls: many(kilterWalls), + kilterAscents: many(kilterAscents), + kilterUserSyncs: many(kilterUserSyncs), +})); + +export const kilterPlacementRolesRelations = relations(kilterPlacementRoles, ({one, many}) => ({ + kilterProduct: one(kilterProducts, { + fields: [kilterPlacementRoles.productId], + references: [kilterProducts.id] + }), + kilterPlacements: many(kilterPlacements), +})); + +export const kilterPlacementsRelations = relations(kilterPlacements, ({one}) => ({ + kilterPlacementRole: one(kilterPlacementRoles, { + fields: [kilterPlacements.defaultPlacementRoleId], + references: [kilterPlacementRoles.id] + }), + kilterHole: one(kilterHoles, { + fields: [kilterPlacements.holeId], + references: [kilterHoles.id] + }), + kilterLayout: one(kilterLayouts, { + fields: [kilterPlacements.layoutId], + references: [kilterLayouts.id] + }), + kilterSet: one(kilterSets, { + fields: [kilterPlacements.setId], + references: [kilterSets.id] + }), +})); + +export const kilterSetsRelations = relations(kilterSets, ({many}) => ({ + kilterPlacements: many(kilterPlacements), + kilterProductSizesLayoutsSets: many(kilterProductSizesLayoutsSets), + kilterWallsSets: many(kilterWallsSets), +})); + +export const kilterProductSizesLayoutsSetsRelations = relations(kilterProductSizesLayoutsSets, ({one}) => ({ + kilterLayout: one(kilterLayouts, { + fields: [kilterProductSizesLayoutsSets.layoutId], + references: [kilterLayouts.id] + }), + kilterProductSize: one(kilterProductSizes, { + fields: [kilterProductSizesLayoutsSets.productSizeId], + references: [kilterProductSizes.id] + }), + kilterSet: one(kilterSets, { + fields: [kilterProductSizesLayoutsSets.setId], + references: [kilterSets.id] + }), +})); + +export const kilterWallsRelations = relations(kilterWalls, ({one, many}) => ({ + kilterLayout: one(kilterLayouts, { + fields: [kilterWalls.layoutId], + references: [kilterLayouts.id] + }), + kilterProduct: one(kilterProducts, { + fields: [kilterWalls.productId], + references: [kilterProducts.id] + }), + kilterProductSize: one(kilterProductSizes, { + fields: [kilterWalls.productSizeId], + references: [kilterProductSizes.id] + }), + kilterUser: one(kilterUsers, { + fields: [kilterWalls.userId], + references: [kilterUsers.id] + }), + kilterWallsSets: many(kilterWallsSets), +})); + +export const tensionBidsRelations = relations(tensionBids, ({one}) => ({ + tensionClimb: one(tensionClimbs, { + fields: [tensionBids.climbUuid], + references: [tensionClimbs.uuid] + }), + tensionUser: one(tensionUsers, { + fields: [tensionBids.userId], + references: [tensionUsers.id] + }), +})); + +export const tensionUsersRelations = relations(tensionUsers, ({many}) => ({ + tensionBids: many(tensionBids), + tensionWalls: many(tensionWalls), + tensionAscents: many(tensionAscents), + tensionUserSyncs: many(tensionUserSyncs), +})); + +export const tensionHolesRelations = relations(tensionHoles, ({one, many}) => ({ + tensionHole: one(tensionHoles, { + fields: [tensionHoles.mirroredHoleId], + references: [tensionHoles.id], + relationName: "tensionHoles_mirroredHoleId_tensionHoles_id" + }), + tensionHoles: many(tensionHoles, { + relationName: "tensionHoles_mirroredHoleId_tensionHoles_id" + }), + tensionProduct: one(tensionProducts, { + fields: [tensionHoles.productId], + references: [tensionProducts.id] + }), + tensionPlacements: many(tensionPlacements), + tensionLeds: many(tensionLeds), +})); + +export const tensionProductsRelations = relations(tensionProducts, ({many}) => ({ + tensionHoles: many(tensionHoles), + tensionPlacementRoles: many(tensionPlacementRoles), + tensionLayouts: many(tensionLayouts), + tensionProductSizes: many(tensionProductSizes), + tensionWalls: many(tensionWalls), + tensionProductsAngles: many(tensionProductsAngles), +})); + +export const tensionLayoutsRelations = relations(tensionLayouts, ({one, many}) => ({ + tensionClimbs: many(tensionClimbs), + tensionPlacements: many(tensionPlacements), + tensionProduct: one(tensionProducts, { + fields: [tensionLayouts.productId], + references: [tensionProducts.id] + }), + tensionProductSizesLayoutsSets: many(tensionProductSizesLayoutsSets), + tensionWalls: many(tensionWalls), +})); + +export const tensionPlacementsRelations = relations(tensionPlacements, ({one}) => ({ + tensionPlacementRole: one(tensionPlacementRoles, { + fields: [tensionPlacements.defaultPlacementRoleId], + references: [tensionPlacementRoles.id] + }), + tensionHole: one(tensionHoles, { + fields: [tensionPlacements.holeId], + references: [tensionHoles.id] + }), + tensionLayout: one(tensionLayouts, { + fields: [tensionPlacements.layoutId], + references: [tensionLayouts.id] + }), + tensionSet: one(tensionSets, { + fields: [tensionPlacements.setId], + references: [tensionSets.id] + }), +})); + +export const tensionPlacementRolesRelations = relations(tensionPlacementRoles, ({one, many}) => ({ + tensionPlacements: many(tensionPlacements), + tensionProduct: one(tensionProducts, { + fields: [tensionPlacementRoles.productId], + references: [tensionProducts.id] + }), +})); + +export const tensionSetsRelations = relations(tensionSets, ({many}) => ({ + tensionPlacements: many(tensionPlacements), + tensionProductSizesLayoutsSets: many(tensionProductSizesLayoutsSets), + tensionWallsSets: many(tensionWallsSets), +})); + +export const tensionLedsRelations = relations(tensionLeds, ({one}) => ({ + tensionHole: one(tensionHoles, { + fields: [tensionLeds.holeId], + references: [tensionHoles.id] + }), + tensionProductSize: one(tensionProductSizes, { + fields: [tensionLeds.productSizeId], + references: [tensionProductSizes.id] + }), +})); + +export const tensionProductSizesRelations = relations(tensionProductSizes, ({one, many}) => ({ + tensionLeds: many(tensionLeds), + tensionProductSizesLayoutsSets: many(tensionProductSizesLayoutsSets), + tensionProduct: one(tensionProducts, { + fields: [tensionProductSizes.productId], + references: [tensionProducts.id] + }), + tensionWalls: many(tensionWalls), +})); + +export const tensionProductSizesLayoutsSetsRelations = relations(tensionProductSizesLayoutsSets, ({one}) => ({ + tensionLayout: one(tensionLayouts, { + fields: [tensionProductSizesLayoutsSets.layoutId], + references: [tensionLayouts.id] + }), + tensionProductSize: one(tensionProductSizes, { + fields: [tensionProductSizesLayoutsSets.productSizeId], + references: [tensionProductSizes.id] + }), + tensionSet: one(tensionSets, { + fields: [tensionProductSizesLayoutsSets.setId], + references: [tensionSets.id] + }), +})); + +export const kilterAscentsRelations = relations(kilterAscents, ({one}) => ({ + kilterAttempt: one(kilterAttempts, { + fields: [kilterAscents.attemptId], + references: [kilterAttempts.id] + }), + kilterClimb: one(kilterClimbs, { + fields: [kilterAscents.climbUuid], + references: [kilterClimbs.uuid] + }), + kilterDifficultyGrade: one(kilterDifficultyGrades, { + fields: [kilterAscents.difficulty], + references: [kilterDifficultyGrades.difficulty] + }), + kilterUser: one(kilterUsers, { + fields: [kilterAscents.userId], + references: [kilterUsers.id] + }), +})); + +export const kilterAttemptsRelations = relations(kilterAttempts, ({many}) => ({ + kilterAscents: many(kilterAscents), +})); + +export const kilterDifficultyGradesRelations = relations(kilterDifficultyGrades, ({many}) => ({ + kilterAscents: many(kilterAscents), +})); + +export const tensionWallsRelations = relations(tensionWalls, ({one, many}) => ({ + tensionLayout: one(tensionLayouts, { + fields: [tensionWalls.layoutId], + references: [tensionLayouts.id] + }), + tensionProduct: one(tensionProducts, { + fields: [tensionWalls.productId], + references: [tensionProducts.id] + }), + tensionProductSize: one(tensionProductSizes, { + fields: [tensionWalls.productSizeId], + references: [tensionProductSizes.id] + }), + tensionUser: one(tensionUsers, { + fields: [tensionWalls.userId], + references: [tensionUsers.id] + }), + tensionWallsSets: many(tensionWallsSets), +})); + +export const tensionAscentsRelations = relations(tensionAscents, ({one}) => ({ + tensionAttempt: one(tensionAttempts, { + fields: [tensionAscents.attemptId], + references: [tensionAttempts.id] + }), + tensionClimb: one(tensionClimbs, { + fields: [tensionAscents.climbUuid], + references: [tensionClimbs.uuid] + }), + tensionDifficultyGrade: one(tensionDifficultyGrades, { + fields: [tensionAscents.difficulty], + references: [tensionDifficultyGrades.difficulty] + }), + tensionUser: one(tensionUsers, { + fields: [tensionAscents.userId], + references: [tensionUsers.id] + }), +})); + +export const tensionAttemptsRelations = relations(tensionAttempts, ({many}) => ({ + tensionAscents: many(tensionAscents), +})); + +export const tensionDifficultyGradesRelations = relations(tensionDifficultyGrades, ({many}) => ({ + tensionAscents: many(tensionAscents), +})); + +export const kilterProductsAnglesRelations = relations(kilterProductsAngles, ({one}) => ({ + kilterProduct: one(kilterProducts, { + fields: [kilterProductsAngles.productId], + references: [kilterProducts.id] + }), +})); + +export const kilterWallsSetsRelations = relations(kilterWallsSets, ({one}) => ({ + kilterSet: one(kilterSets, { + fields: [kilterWallsSets.setId], + references: [kilterSets.id] + }), + kilterWall: one(kilterWalls, { + fields: [kilterWallsSets.wallUuid], + references: [kilterWalls.uuid] + }), +})); + +export const tensionWallsSetsRelations = relations(tensionWallsSets, ({one}) => ({ + tensionSet: one(tensionSets, { + fields: [tensionWallsSets.setId], + references: [tensionSets.id] + }), + tensionWall: one(tensionWalls, { + fields: [tensionWallsSets.wallUuid], + references: [tensionWalls.uuid] + }), +})); + +export const tensionProductsAnglesRelations = relations(tensionProductsAngles, ({one}) => ({ + tensionProduct: one(tensionProducts, { + fields: [tensionProductsAngles.productId], + references: [tensionProducts.id] + }), +})); + +export const kilterUserSyncsRelations = relations(kilterUserSyncs, ({one}) => ({ + kilterUser: one(kilterUsers, { + fields: [kilterUserSyncs.userId], + references: [kilterUsers.id] + }), +})); + +export const tensionUserSyncsRelations = relations(tensionUserSyncs, ({one}) => ({ + tensionUser: one(tensionUsers, { + fields: [tensionUserSyncs.userId], + references: [tensionUsers.id] + }), +})); + +export const kilterBetaLinksRelations = relations(kilterBetaLinks, ({one}) => ({ + kilterClimb: one(kilterClimbs, { + fields: [kilterBetaLinks.climbUuid], + references: [kilterClimbs.uuid] + }), +})); + +export const tensionBetaLinksRelations = relations(tensionBetaLinks, ({one}) => ({ + tensionClimb: one(tensionClimbs, { + fields: [tensionBetaLinks.climbUuid], + references: [tensionClimbs.uuid] + }), +})); \ No newline at end of file diff --git a/drizzle/schema.ts b/drizzle/schema.ts new file mode 100644 index 0000000..f4df148 --- /dev/null +++ b/drizzle/schema.ts @@ -0,0 +1,905 @@ +import { pgTable, foreignKey, bigserial, text, integer, doublePrecision, boolean, bigint, timestamp, uniqueIndex, primaryKey } from "drizzle-orm/pg-core" +import { sql } from "drizzle-orm" + + + +export const kilterClimbCacheFields = pgTable("kilter_climb_cache_fields", { + id: bigserial({ mode: "bigint" }).primaryKey().notNull(), + climbUuid: text("climb_uuid"), + ascensionistCount: integer("ascensionist_count"), + displayDifficulty: doublePrecision("display_difficulty"), + qualityAverage: doublePrecision("quality_average"), +}, (table) => [ + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [kilterClimbs.uuid], + name: "climb_cache_fields_climb_uuid_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterAttempts = pgTable("kilter_attempts", { + id: integer().primaryKey().notNull(), + position: integer(), + name: text(), +}); + +export const kilterClimbRandomPositions = pgTable("kilter_climb_random_positions", { + climbUuid: text("climb_uuid").primaryKey().notNull(), + position: integer(), +}); + +export const kilterLayouts = pgTable("kilter_layouts", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + name: text(), + instagramCaption: text("instagram_caption"), + isMirrored: boolean("is_mirrored"), + isListed: boolean("is_listed"), + password: text(), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [kilterProducts.id], + name: "layouts_product_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterAndroidMetadata = pgTable("kilter_android_metadata", { + locale: text(), +}); + +export const kilterCircuits = pgTable("kilter_circuits", { + uuid: text().primaryKey().notNull(), + name: text(), + description: text(), + color: text(), + userId: integer("user_id"), + isPublic: boolean("is_public"), + createdAt: text("created_at"), + updatedAt: text("updated_at"), +}); + +export const tensionClimbStats = pgTable("tension_climb_stats", { + id: bigserial({ mode: "bigint" }).primaryKey().notNull(), + climbUuid: text("climb_uuid"), + // You can use { mode: "bigint" } if numbers are exceeding js number limitations + angle: bigint({ mode: "number" }), + displayDifficulty: doublePrecision("display_difficulty"), + benchmarkDifficulty: doublePrecision("benchmark_difficulty"), + // You can use { mode: "bigint" } if numbers are exceeding js number limitations + ascensionistCount: bigint("ascensionist_count", { mode: "number" }), + difficultyAverage: doublePrecision("difficulty_average"), + qualityAverage: doublePrecision("quality_average"), + faUsername: text("fa_username"), + faAt: timestamp("fa_at", { mode: 'string' }), +}); + +export const tensionClimbCacheFields = pgTable("tension_climb_cache_fields", { + id: bigserial({ mode: "bigint" }).primaryKey().notNull(), + climbUuid: text("climb_uuid"), + ascensionistCount: integer("ascensionist_count"), + displayDifficulty: doublePrecision("display_difficulty"), + qualityAverage: doublePrecision("quality_average"), +}, (table) => [ + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [tensionClimbs.uuid], + name: "climb_cache_fields_climb_uuid_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterLeds = pgTable("kilter_leds", { + id: integer().primaryKey().notNull(), + productSizeId: integer("product_size_id"), + holeId: integer("hole_id"), + position: integer(), +}, (table) => [ + uniqueIndex("idx_16797_sqlite_autoindex_leds_2").using("btree", table.productSizeId.asc().nullsLast().op("int4_ops"), table.position.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.holeId], + foreignColumns: [kilterHoles.id], + name: "leds_hole_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.productSizeId], + foreignColumns: [kilterProductSizes.id], + name: "leds_product_size_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterClimbStats = pgTable("kilter_climb_stats", { + id: bigserial({ mode: "bigint" }).primaryKey().notNull(), + climbUuid: text("climb_uuid"), + // You can use { mode: "bigint" } if numbers are exceeding js number limitations + angle: bigint({ mode: "number" }), + displayDifficulty: doublePrecision("display_difficulty"), + benchmarkDifficulty: doublePrecision("benchmark_difficulty"), + // You can use { mode: "bigint" } if numbers are exceeding js number limitations + ascensionistCount: bigint("ascensionist_count", { mode: "number" }), + difficultyAverage: doublePrecision("difficulty_average"), + qualityAverage: doublePrecision("quality_average"), + faUsername: text("fa_username"), + faAt: timestamp("fa_at", { mode: 'string' }), +}); + +export const kilterProductSizes = pgTable("kilter_product_sizes", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + edgeLeft: integer("edge_left"), + edgeRight: integer("edge_right"), + edgeBottom: integer("edge_bottom"), + edgeTop: integer("edge_top"), + name: text(), + description: text(), + imageFilename: text("image_filename"), + position: integer(), + isListed: boolean("is_listed"), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [kilterProducts.id], + name: "product_sizes_product_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterKits = pgTable("kilter_kits", { + serialNumber: text("serial_number").primaryKey().notNull(), + name: text(), + isAutoconnect: boolean("is_autoconnect"), + isListed: boolean("is_listed"), + createdAt: text("created_at"), + updatedAt: text("updated_at"), +}); + +export const kilterBids = pgTable("kilter_bids", { + uuid: text().primaryKey().notNull(), + userId: integer("user_id"), + climbUuid: text("climb_uuid"), + angle: integer(), + isMirror: boolean("is_mirror"), + bidCount: integer("bid_count").default(1), + comment: text().default(''), + climbedAt: text("climbed_at"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [kilterClimbs.uuid], + name: "bids_climb_uuid_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.userId], + foreignColumns: [kilterUsers.id], + name: "bids_user_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterHoles = pgTable("kilter_holes", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + name: text(), + x: integer(), + y: integer(), + mirroredHoleId: integer("mirrored_hole_id"), + mirrorGroup: integer("mirror_group").default(0), +}, (table) => [ + uniqueIndex("idx_16791_sqlite_autoindex_holes_2").using("btree", table.productId.asc().nullsLast().op("text_ops"), table.name.asc().nullsLast().op("text_ops")), + uniqueIndex("idx_16791_sqlite_autoindex_holes_3").using("btree", table.productId.asc().nullsLast().op("int4_ops"), table.x.asc().nullsLast().op("int4_ops"), table.y.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.productId], + foreignColumns: [kilterProducts.id], + name: "holes_product_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterPlacementRoles = pgTable("kilter_placement_roles", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + position: integer(), + name: text(), + fullName: text("full_name"), + ledColor: text("led_color"), + screenColor: text("screen_color"), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [kilterProducts.id], + name: "placement_roles_product_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterDifficultyGrades = pgTable("kilter_difficulty_grades", { + difficulty: integer().primaryKey().notNull(), + boulderName: text("boulder_name"), + routeName: text("route_name"), + isListed: boolean("is_listed"), +}); + +export const kilterPlacements = pgTable("kilter_placements", { + id: integer().primaryKey().notNull(), + layoutId: integer("layout_id"), + holeId: integer("hole_id"), + setId: integer("set_id"), + defaultPlacementRoleId: integer("default_placement_role_id"), +}, (table) => [ + uniqueIndex("idx_16904_sqlite_autoindex_placements_2").using("btree", table.layoutId.asc().nullsLast().op("int4_ops"), table.holeId.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.defaultPlacementRoleId], + foreignColumns: [kilterPlacementRoles.id], + name: "placements_default_placement_role_id_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.holeId], + foreignColumns: [kilterHoles.id], + name: "placements_hole_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.layoutId], + foreignColumns: [kilterLayouts.id], + name: "placements_layout_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.setId], + foreignColumns: [kilterSets.id], + name: "placements_set_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterClimbs = pgTable("kilter_climbs", { + uuid: text().primaryKey().notNull(), + layoutId: integer("layout_id"), + setterId: integer("setter_id"), + setterUsername: text("setter_username"), + name: text(), + description: text().default(''), + hsm: integer(), + edgeLeft: integer("edge_left"), + edgeRight: integer("edge_right"), + edgeBottom: integer("edge_bottom"), + edgeTop: integer("edge_top"), + angle: integer(), + framesCount: integer("frames_count").default(1), + framesPace: integer("frames_pace").default(0), + frames: text(), + isDraft: boolean("is_draft").default(false), + isListed: boolean("is_listed"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.layoutId], + foreignColumns: [kilterLayouts.id], + name: "climbs_layout_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterProductSizesLayoutsSets = pgTable("kilter_product_sizes_layouts_sets", { + id: integer().primaryKey().notNull(), + productSizeId: integer("product_size_id"), + layoutId: integer("layout_id"), + setId: integer("set_id"), + imageFilename: text("image_filename"), + isListed: boolean("is_listed"), +}, (table) => [ + uniqueIndex("idx_16813_sqlite_autoindex_product_sizes_layouts_sets_2").using("btree", table.productSizeId.asc().nullsLast().op("int4_ops"), table.layoutId.asc().nullsLast().op("int4_ops"), table.setId.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.layoutId], + foreignColumns: [kilterLayouts.id], + name: "product_sizes_layouts_sets_layout_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.productSizeId], + foreignColumns: [kilterProductSizes.id], + name: "product_sizes_layouts_sets_product_size_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.setId], + foreignColumns: [kilterSets.id], + name: "product_sizes_layouts_sets_set_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterSharedSyncs = pgTable("kilter_shared_syncs", { + tableName: text("table_name").primaryKey().notNull(), + lastSynchronizedAt: text("last_synchronized_at"), +}); + +export const kilterUsers = pgTable("kilter_users", { + id: integer().primaryKey().notNull(), + username: text(), + createdAt: text("created_at"), +}); + +export const kilterProducts = pgTable("kilter_products", { + id: integer().primaryKey().notNull(), + name: text(), + isListed: boolean("is_listed"), + password: text(), + minCountInFrame: integer("min_count_in_frame"), + maxCountInFrame: integer("max_count_in_frame"), +}); + +export const kilterSets = pgTable("kilter_sets", { + id: integer().primaryKey().notNull(), + name: text(), + hsm: integer(), +}); + +export const kilterWalls = pgTable("kilter_walls", { + uuid: text().primaryKey().notNull(), + userId: integer("user_id"), + name: text(), + productId: integer("product_id"), + isAdjustable: boolean("is_adjustable"), + angle: integer(), + layoutId: integer("layout_id"), + productSizeId: integer("product_size_id"), + hsm: integer(), + serialNumber: text("serial_number"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.layoutId], + foreignColumns: [kilterLayouts.id], + name: "walls_layout_id_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.productId], + foreignColumns: [kilterProducts.id], + name: "walls_product_id_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.productSizeId], + foreignColumns: [kilterProductSizes.id], + name: "walls_product_size_id_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.userId], + foreignColumns: [kilterUsers.id], + name: "walls_user_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionAndroidMetadata = pgTable("tension_android_metadata", { + locale: text(), +}); + +export const tensionAttempts = pgTable("tension_attempts", { + id: integer().primaryKey().notNull(), + position: integer(), + name: text(), +}); + +export const tensionBids = pgTable("tension_bids", { + uuid: text().primaryKey().notNull(), + userId: integer("user_id"), + climbUuid: text("climb_uuid"), + angle: integer(), + isMirror: boolean("is_mirror"), + bidCount: integer("bid_count").default(1), + comment: text().default(''), + climbedAt: text("climbed_at"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [tensionClimbs.uuid], + name: "bids_climb_uuid_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.userId], + foreignColumns: [tensionUsers.id], + name: "bids_user_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionHoles = pgTable("tension_holes", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + name: text(), + x: integer(), + y: integer(), + mirroredHoleId: integer("mirrored_hole_id"), + mirrorGroup: integer("mirror_group").default(0), +}, (table) => [ + uniqueIndex("idx_16405_sqlite_autoindex_holes_2").using("btree", table.productId.asc().nullsLast().op("text_ops"), table.name.asc().nullsLast().op("text_ops")), + uniqueIndex("idx_16405_sqlite_autoindex_holes_3").using("btree", table.productId.asc().nullsLast().op("int4_ops"), table.x.asc().nullsLast().op("int4_ops"), table.y.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.mirroredHoleId], + foreignColumns: [table.id], + name: "holes_mirrored_hole_id_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.productId], + foreignColumns: [tensionProducts.id], + name: "holes_product_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionCircuits = pgTable("tension_circuits", { + uuid: text().primaryKey().notNull(), + name: text(), + description: text(), + color: text(), + userId: integer("user_id"), + isPublic: boolean("is_public"), + createdAt: text("created_at"), + updatedAt: text("updated_at"), +}); + +export const tensionKits = pgTable("tension_kits", { + serialNumber: text("serial_number").primaryKey().notNull(), + name: text(), + isAutoconnect: boolean("is_autoconnect"), + isListed: boolean("is_listed"), + createdAt: text("created_at"), + updatedAt: text("updated_at"), +}); + +export const tensionClimbRandomPositions = pgTable("tension_climb_random_positions", { + climbUuid: text("climb_uuid").primaryKey().notNull(), + position: integer(), +}); + +export const tensionClimbs = pgTable("tension_climbs", { + uuid: text().primaryKey().notNull(), + layoutId: integer("layout_id"), + setterId: integer("setter_id"), + setterUsername: text("setter_username"), + name: text(), + description: text().default(''), + hsm: integer(), + edgeLeft: integer("edge_left"), + edgeRight: integer("edge_right"), + edgeBottom: integer("edge_bottom"), + edgeTop: integer("edge_top"), + angle: integer(), + framesCount: integer("frames_count").default(1), + framesPace: integer("frames_pace").default(0), + frames: text(), + isDraft: boolean("is_draft").default(false), + isListed: boolean("is_listed"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.layoutId], + foreignColumns: [tensionLayouts.id], + name: "climbs_layout_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionSets = pgTable("tension_sets", { + id: integer().primaryKey().notNull(), + name: text(), + hsm: integer(), +}); + +export const tensionPlacements = pgTable("tension_placements", { + id: integer().primaryKey().notNull(), + layoutId: integer("layout_id"), + holeId: integer("hole_id"), + setId: integer("set_id"), + defaultPlacementRoleId: integer("default_placement_role_id"), +}, (table) => [ + uniqueIndex("idx_16518_sqlite_autoindex_placements_2").using("btree", table.layoutId.asc().nullsLast().op("int4_ops"), table.holeId.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.defaultPlacementRoleId], + foreignColumns: [tensionPlacementRoles.id], + name: "placements_default_placement_role_id_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.holeId], + foreignColumns: [tensionHoles.id], + name: "placements_hole_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.layoutId], + foreignColumns: [tensionLayouts.id], + name: "placements_layout_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.setId], + foreignColumns: [tensionSets.id], + name: "placements_set_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionPlacementRoles = pgTable("tension_placement_roles", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + position: integer(), + name: text(), + fullName: text("full_name"), + ledColor: text("led_color"), + screenColor: text("screen_color"), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [tensionProducts.id], + name: "placement_roles_product_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionLeds = pgTable("tension_leds", { + id: integer().primaryKey().notNull(), + productSizeId: integer("product_size_id"), + holeId: integer("hole_id"), + position: integer(), +}, (table) => [ + uniqueIndex("idx_16411_sqlite_autoindex_leds_2").using("btree", table.productSizeId.asc().nullsLast().op("int4_ops"), table.position.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.holeId], + foreignColumns: [tensionHoles.id], + name: "leds_hole_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.productSizeId], + foreignColumns: [tensionProductSizes.id], + name: "leds_product_size_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionLayouts = pgTable("tension_layouts", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + name: text(), + instagramCaption: text("instagram_caption"), + isMirrored: boolean("is_mirrored"), + isListed: boolean("is_listed"), + password: text(), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [tensionProducts.id], + name: "layouts_product_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionSharedSyncs = pgTable("tension_shared_syncs", { + tableName: text("table_name").primaryKey().notNull(), + lastSynchronizedAt: text("last_synchronized_at"), +}); + +export const tensionProductSizesLayoutsSets = pgTable("tension_product_sizes_layouts_sets", { + id: integer().primaryKey().notNull(), + productSizeId: integer("product_size_id"), + layoutId: integer("layout_id"), + setId: integer("set_id"), + imageFilename: text("image_filename"), + isListed: boolean("is_listed"), +}, (table) => [ + uniqueIndex("idx_16427_sqlite_autoindex_product_sizes_layouts_sets_2").using("btree", table.productSizeId.asc().nullsLast().op("int4_ops"), table.layoutId.asc().nullsLast().op("int4_ops"), table.setId.asc().nullsLast().op("int4_ops")), + foreignKey({ + columns: [table.layoutId], + foreignColumns: [tensionLayouts.id], + name: "product_sizes_layouts_sets_layout_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.productSizeId], + foreignColumns: [tensionProductSizes.id], + name: "product_sizes_layouts_sets_product_size_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), + foreignKey({ + columns: [table.setId], + foreignColumns: [tensionSets.id], + name: "product_sizes_layouts_sets_set_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionProductSizes = pgTable("tension_product_sizes", { + id: integer().primaryKey().notNull(), + productId: integer("product_id"), + edgeLeft: integer("edge_left"), + edgeRight: integer("edge_right"), + edgeBottom: integer("edge_bottom"), + edgeTop: integer("edge_top"), + name: text(), + description: text(), + imageFilename: text("image_filename"), + position: integer(), + isListed: boolean("is_listed"), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [tensionProducts.id], + name: "product_sizes_product_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const kilterAscents = pgTable("kilter_ascents", { + uuid: text().primaryKey().notNull(), + climbUuid: text("climb_uuid"), + angle: integer(), + isMirror: boolean("is_mirror"), + userId: integer("user_id"), + attemptId: integer("attempt_id"), + bidCount: integer("bid_count").default(1), + quality: integer(), + difficulty: integer(), + isBenchmark: integer("is_benchmark").default(0), + comment: text().default(''), + climbedAt: text("climbed_at"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.attemptId], + foreignColumns: [kilterAttempts.id], + name: "ascents_attempt_id_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [kilterClimbs.uuid], + name: "ascents_climb_uuid_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.difficulty], + foreignColumns: [kilterDifficultyGrades.difficulty], + name: "ascents_difficulty_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.userId], + foreignColumns: [kilterUsers.id], + name: "ascents_user_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionWalls = pgTable("tension_walls", { + uuid: text().primaryKey().notNull(), + userId: integer("user_id"), + name: text(), + productId: integer("product_id"), + isAdjustable: boolean("is_adjustable"), + angle: integer(), + layoutId: integer("layout_id"), + productSizeId: integer("product_size_id"), + hsm: integer(), + serialNumber: text("serial_number"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.layoutId], + foreignColumns: [tensionLayouts.id], + name: "walls_layout_id_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.productId], + foreignColumns: [tensionProducts.id], + name: "walls_product_id_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.productSizeId], + foreignColumns: [tensionProductSizes.id], + name: "walls_product_size_id_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.userId], + foreignColumns: [tensionUsers.id], + name: "walls_user_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionProducts = pgTable("tension_products", { + id: integer().primaryKey().notNull(), + name: text(), + isListed: boolean("is_listed"), + password: text(), + minCountInFrame: integer("min_count_in_frame"), + maxCountInFrame: integer("max_count_in_frame"), +}); + +export const tensionDifficultyGrades = pgTable("tension_difficulty_grades", { + difficulty: integer().primaryKey().notNull(), + boulderName: text("boulder_name"), + routeName: text("route_name"), + isListed: boolean("is_listed"), +}); + +export const tensionAscents = pgTable("tension_ascents", { + uuid: text().primaryKey().notNull(), + climbUuid: text("climb_uuid"), + angle: integer(), + isMirror: boolean("is_mirror"), + userId: integer("user_id"), + attemptId: integer("attempt_id"), + bidCount: integer("bid_count").default(1), + quality: integer(), + difficulty: integer(), + isBenchmark: integer("is_benchmark").default(0), + comment: text().default(''), + climbedAt: text("climbed_at"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.attemptId], + foreignColumns: [tensionAttempts.id], + name: "ascents_attempt_id_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [tensionClimbs.uuid], + name: "ascents_climb_uuid_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.difficulty], + foreignColumns: [tensionDifficultyGrades.difficulty], + name: "ascents_difficulty_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.userId], + foreignColumns: [tensionUsers.id], + name: "ascents_user_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), +]); + +export const tensionUsers = pgTable("tension_users", { + id: integer().primaryKey().notNull(), + username: text(), + createdAt: text("created_at"), +}); + +export const kilterProductsAngles = pgTable("kilter_products_angles", { + productId: integer("product_id").notNull(), + angle: integer().notNull(), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [kilterProducts.id], + name: "products_angles_product_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + primaryKey({ columns: [table.productId, table.angle], name: "idx_16800_sqlite_autoindex_products_angles_1"}), +]); + +export const kilterWallsSets = pgTable("kilter_walls_sets", { + wallUuid: text("wall_uuid").notNull(), + setId: integer("set_id").notNull(), +}, (table) => [ + foreignKey({ + columns: [table.setId], + foreignColumns: [kilterSets.id], + name: "walls_sets_set_id_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.wallUuid], + foreignColumns: [kilterWalls.uuid], + name: "walls_sets_wall_uuid_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + primaryKey({ columns: [table.wallUuid, table.setId], name: "idx_16838_sqlite_autoindex_walls_sets_1"}), +]); + +export const kilterUserPermissions = pgTable("kilter_user_permissions", { + userId: integer("user_id").notNull(), + name: text().notNull(), +}, (table) => [ + primaryKey({ columns: [table.userId, table.name], name: "idx_16828_sqlite_autoindex_user_permissions_1"}), +]); + +export const tensionUserPermissions = pgTable("tension_user_permissions", { + userId: integer("user_id").notNull(), + name: text().notNull(), +}, (table) => [ + primaryKey({ columns: [table.userId, table.name], name: "idx_16447_sqlite_autoindex_user_permissions_1"}), +]); + +export const tensionWallsSets = pgTable("tension_walls_sets", { + wallUuid: text("wall_uuid").notNull(), + setId: integer("set_id").notNull(), +}, (table) => [ + foreignKey({ + columns: [table.setId], + foreignColumns: [tensionSets.id], + name: "walls_sets_set_id_fkey" + }).onUpdate("cascade").onDelete("restrict"), + foreignKey({ + columns: [table.wallUuid], + foreignColumns: [tensionWalls.uuid], + name: "walls_sets_wall_uuid_fkey" + }).onUpdate("cascade").onDelete("cascade"), + primaryKey({ columns: [table.wallUuid, table.setId], name: "idx_16457_sqlite_autoindex_walls_sets_1"}), +]); + +export const kilterCircuitsClimbs = pgTable("kilter_circuits_climbs", { + circuitUuid: text("circuit_uuid").notNull(), + climbUuid: text("climb_uuid").notNull(), + position: integer(), +}, (table) => [ + primaryKey({ columns: [table.circuitUuid, table.climbUuid], name: "idx_16868_sqlite_autoindex_circuits_climbs_1"}), +]); + +export const tensionProductsAngles = pgTable("tension_products_angles", { + productId: integer("product_id").notNull(), + angle: integer().notNull(), +}, (table) => [ + foreignKey({ + columns: [table.productId], + foreignColumns: [tensionProducts.id], + name: "products_angles_product_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), + primaryKey({ columns: [table.productId, table.angle], name: "idx_16414_sqlite_autoindex_products_angles_1"}), +]); + +export const kilterUserSyncs = pgTable("kilter_user_syncs", { + userId: integer("user_id").notNull(), + tableName: text("table_name").notNull(), + lastSynchronizedAt: text("last_synchronized_at"), +}, (table) => [ + foreignKey({ + columns: [table.userId], + foreignColumns: [kilterUsers.id], + name: "user_syncs_user_id_fkey1" + }).onUpdate("cascade").onDelete("cascade"), + primaryKey({ columns: [table.userId, table.tableName], name: "idx_16833_sqlite_autoindex_user_syncs_1"}), +]); + +export const tensionCircuitsClimbs = pgTable("tension_circuits_climbs", { + circuitUuid: text("circuit_uuid").notNull(), + climbUuid: text("climb_uuid").notNull(), + position: integer(), +}, (table) => [ + primaryKey({ columns: [table.circuitUuid, table.climbUuid], name: "idx_16482_sqlite_autoindex_circuits_climbs_1"}), +]); + +export const tensionUserSyncs = pgTable("tension_user_syncs", { + userId: integer("user_id").notNull(), + tableName: text("table_name").notNull(), + lastSynchronizedAt: text("last_synchronized_at"), +}, (table) => [ + foreignKey({ + columns: [table.userId], + foreignColumns: [tensionUsers.id], + name: "user_syncs_user_id_fkey" + }).onUpdate("cascade").onDelete("cascade"), + primaryKey({ columns: [table.userId, table.tableName], name: "idx_16452_sqlite_autoindex_user_syncs_1"}), +]); + +export const kilterTags = pgTable("kilter_tags", { + entityUuid: text("entity_uuid").notNull(), + userId: integer("user_id").notNull(), + name: text().notNull(), + isListed: boolean("is_listed"), +}, (table) => [ + primaryKey({ columns: [table.entityUuid, table.userId, table.name], name: "idx_16853_sqlite_autoindex_tags_1"}), +]); + +export const tensionTags = pgTable("tension_tags", { + entityUuid: text("entity_uuid").notNull(), + userId: integer("user_id").notNull(), + name: text().notNull(), + isListed: boolean("is_listed"), +}, (table) => [ + primaryKey({ columns: [table.entityUuid, table.userId, table.name], name: "idx_16472_sqlite_autoindex_tags_1"}), +]); + +export const kilterBetaLinks = pgTable("kilter_beta_links", { + climbUuid: text("climb_uuid").notNull(), + link: text().notNull(), + foreignUsername: text("foreign_username"), + angle: integer(), + thumbnail: text(), + isListed: boolean("is_listed"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [kilterClimbs.uuid], + name: "beta_links_climb_uuid_fkey1" + }).onUpdate("cascade").onDelete("restrict"), + primaryKey({ columns: [table.climbUuid, table.link], name: "idx_16883_sqlite_autoindex_beta_links_1"}), +]); + +export const tensionBetaLinks = pgTable("tension_beta_links", { + climbUuid: text("climb_uuid").notNull(), + link: text().notNull(), + foreignUsername: text("foreign_username"), + angle: integer(), + thumbnail: text(), + isListed: boolean("is_listed"), + createdAt: text("created_at"), +}, (table) => [ + foreignKey({ + columns: [table.climbUuid], + foreignColumns: [tensionClimbs.uuid], + name: "beta_links_climb_uuid_fkey" + }).onUpdate("cascade").onDelete("restrict"), + primaryKey({ columns: [table.climbUuid, table.link], name: "idx_16497_sqlite_autoindex_beta_links_1"}), +]); diff --git a/next.config.mjs b/next.config.mjs index 19ae794..19c2ae6 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -8,7 +8,7 @@ const nextConfig = { ignoreDuringBuilds: true, }, typescript: { - ignoreBuildErrors: true, + // ignoreBuildErrors: true, }, }; diff --git a/package-lock.json b/package-lock.json index 5f5b401..15eaeb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,15 @@ "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3", "@atlaskit/pragmatic-drag-and-drop-react-accessibility": "^1.2.3", "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^1.1.3", - "@neondatabase/serverless": "^0.9.5", + "@neondatabase/serverless": "0.9.5", "@types/web-bluetooth": "^0.0.20", "@vercel/analytics": "^1.4.1", "@vercel/postgres": "^0.10.0", "antd": "^5.22.3", "chart.js": "^4.4.7", + "dotenv": "^16.4.7", + "drizzle-kit": "^0.30.1", + "drizzle-orm": "^0.38.2", "idb": "^8.0.0", "next": "14.2.11", "peerjs": "^1.5.4", @@ -369,9 +372,9 @@ } }, "node_modules/@atlaskit/tokens": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-2.4.3.tgz", - "integrity": "sha512-cfCpkO7Sv3nDh+RqYoPnGcaIWJRGZQ7lNaWYViVyyHRdBSzUmjI9ir4bhVwfSvNWMcMCGxsSB1T3ptspjwNZqQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-2.4.2.tgz", + "integrity": "sha512-wdlYc9a4Bm9aPUd8z5U2wq1V1P1PFXMeVjx3WdrrFk8LYVnWhSWqCGea0xP1qAMsT9YnDzPSlwowNkQZ5umLSw==", "license": "Apache-2.0", "dependencies": { "@atlaskit/ds-lib": "^3.3.0", @@ -561,6 +564,12 @@ "node": ">=10" } }, + "node_modules/@drizzle-team/brocli": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", + "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", + "license": "Apache-2.0" + }, "node_modules/@emotion/babel-plugin": { "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", @@ -705,26 +714,21 @@ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", "license": "MIT" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", - "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", - "cpu": [ - "ppc64" - ], + "node_modules/@esbuild-kit/core-utils": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", + "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", + "deprecated": "Merged into tsx: https://tsx.is", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" + "dependencies": { + "esbuild": "~0.18.20", + "source-map-support": "^0.5.21" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", - "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ "arm" ], @@ -734,13 +738,13 @@ "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", - "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", "cpu": [ "arm64" ], @@ -750,13 +754,13 @@ "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", - "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", "cpu": [ "x64" ], @@ -766,13 +770,13 @@ "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", - "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", "cpu": [ "arm64" ], @@ -782,13 +786,13 @@ "darwin" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", - "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", "cpu": [ "x64" ], @@ -798,13 +802,13 @@ "darwin" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", - "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", "cpu": [ "arm64" ], @@ -814,13 +818,13 @@ "freebsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", - "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", "cpu": [ "x64" ], @@ -830,13 +834,13 @@ "freebsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", - "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", "cpu": [ "arm" ], @@ -846,13 +850,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", - "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", "cpu": [ "arm64" ], @@ -862,13 +866,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", - "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", "cpu": [ "ia32" ], @@ -878,13 +882,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", - "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ "loong64" ], @@ -894,13 +898,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", - "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", "cpu": [ "mips64el" ], @@ -910,13 +914,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", - "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", "cpu": [ "ppc64" ], @@ -926,13 +930,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", - "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", "cpu": [ "riscv64" ], @@ -942,13 +946,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", - "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", "cpu": [ "s390x" ], @@ -958,13 +962,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", - "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", "cpu": [ "x64" ], @@ -974,13 +978,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", - "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", "cpu": [ "x64" ], @@ -990,29 +994,13 @@ "netbsd" ], "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", - "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", - "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", "cpu": [ "x64" ], @@ -1022,13 +1010,13 @@ "openbsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", - "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", "cpu": [ "x64" ], @@ -1038,13 +1026,13 @@ "sunos" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", - "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", "cpu": [ "arm64" ], @@ -1054,13 +1042,13 @@ "win32" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", - "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", "cpu": [ "ia32" ], @@ -1070,13 +1058,13 @@ "win32" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", - "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "cpu": [ "x64" ], @@ -1086,405 +1074,397 @@ "win32" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, + "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@esbuild-kit/esm-loader": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", + "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", + "deprecated": "Merged into tsx: https://tsx.is", + "license": "MIT", + "dependencies": { + "@esbuild-kit/core-utils": "^3.3.2", + "get-tsconfig": "^4.7.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.10.0" + "node": ">=12" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=12" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "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==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", - "license": "MIT" - }, - "node_modules/@msgpack/msgpack": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.8.0.tgz", - "integrity": "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==", - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@neondatabase/serverless": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-0.9.5.tgz", - "integrity": "sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==", - "license": "MIT", - "dependencies": { - "@types/pg": "8.11.6" - } - }, - "node_modules/@next/env": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.11.tgz", - "integrity": "sha512-HYsQRSIXwiNqvzzYThrBwq6RhXo3E0n8j8nQnAs8i4fCEo2Zf/3eS0IiRA8XnRg9Ha0YnpkyJZIZg1qEwemrHw==", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.11.tgz", - "integrity": "sha512-7mw+xW7Y03Ph4NTCcAzYe+vu4BNjEHZUfZayyF3Y1D9RX6c5NIe25m1grHEAkyUuaqjRxOYhnCNeglOkIqLkBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "10.3.10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.11.tgz", - "integrity": "sha512-eiY9u7wEJZWp/Pga07Qy3ZmNEfALmmSS1HtsJF3y1QEyaExu7boENz11fWqDmZ3uvcyAxCMhTrA1jfVxITQW8g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.11.tgz", - "integrity": "sha512-lnB0zYCld4yE0IX3ANrVMmtAbziBb7MYekcmR6iE9bujmgERl6+FK+b0MBq0pl304lYe7zO4yxJus9H/Af8jbg==", + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.11.tgz", - "integrity": "sha512-Ulo9TZVocYmUAtzvZ7FfldtwUoQY0+9z3BiXZCLSUwU2bp7GqHA7/bqrfsArDlUb2xeGwn3ZuBbKtNK8TR0A8w==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ - "arm64" + "x64" ], "license": "MIT", "optional": true, "os": [ - "linux" + "netbsd" ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.11.tgz", - "integrity": "sha512-fH377DnKGyUnkWlmUpFF1T90m0dADBfK11dF8sOQkiELF9M+YwDRCGe8ZyDzvQcUd20Rr5U7vpZRrAxKwd3Rzg==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", "cpu": [ "arm64" ], "license": "MIT", "optional": true, "os": [ - "linux" + "openbsd" ], "engines": { - "node": ">= 10" + "node": ">=18" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.11.tgz", - "integrity": "sha512-a0TH4ZZp4NS0LgXP/488kgvWelNpwfgGTUCDXVhPGH6pInb7yIYNgM4kmNWOxBFt+TIuOH6Pi9NnGG4XWFUyXQ==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], "license": "MIT", "optional": true, "os": [ - "linux" + "openbsd" ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.11.tgz", - "integrity": "sha512-DYYZcO4Uir2gZxA4D2JcOAKVs8ZxbOFYPpXSVIgeoQbREbeEHxysVsg3nY4FrQy51e5opxt5mOHl/LzIyZBoKA==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], "license": "MIT", "optional": true, "os": [ - "linux" + "sunos" ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.11.tgz", - "integrity": "sha512-PwqHeKG3/kKfPpM6of1B9UJ+Er6ySUy59PeFu0Un0LBzJTRKKAg2V6J60Yqzp99m55mLa+YTbU6xj61ImTv9mg==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -1494,13 +1474,13 @@ "win32" ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.11.tgz", - "integrity": "sha512-0U7PWMnOYIvM74GY6rbH6w7v+vNPDVH1gUhlwHpfInJnNe5LkmUZqhp7FNWeNa5wbVgRcRi1F1cyxp4dmeLLvA==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -1510,13 +1490,13 @@ "win32" ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.11.tgz", - "integrity": "sha512-gQpS7mcgovWoaTG1FbS5/ojF7CGfql1Q0ZLsMrhcsi2Sr9HEqsUZ70MPJyaYBXbk6iEAP7UXMD9HC8KY1qNwvA==", + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -1526,455 +1506,415 @@ "win32" ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=12.4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@rc-component/async-validator": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", - "integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==", - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.24.4" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=14.x" + "node": ">=10.10.0" } }, - "node_modules/@rc-component/color-picker": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-2.0.1.tgz", - "integrity": "sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==", - "license": "MIT", - "dependencies": { - "@ant-design/fast-color": "^2.0.6", - "@babel/runtime": "^7.23.6", - "classnames": "^2.2.6", - "rc-util": "^5.38.1" + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@rc-component/context": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@rc-component/context/-/context-1.4.0.tgz", - "integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==", - "license": "MIT", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.10.1", - "rc-util": "^5.27.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "engines": { + "node": ">=12" } }, - "node_modules/@rc-component/mini-decimal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz", - "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.0" - }, "engines": { - "node": ">=8.x" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@rc-component/mutate-observer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz", - "integrity": "sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.18.0", - "classnames": "^2.3.2", - "rc-util": "^5.24.4" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8.x" + "node": ">=12" }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@rc-component/portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", - "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.18.0", - "classnames": "^2.3.2", - "rc-util": "^5.24.4" + "jest-get-type": "^29.6.3" }, "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rc-component/qrcode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.0.0.tgz", - "integrity": "sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.24.7", - "classnames": "^2.3.2", - "rc-util": "^5.38.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rc-component/tour": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.15.1.tgz", - "integrity": "sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.18.0", - "@rc-component/portal": "^1.0.0-9", - "@rc-component/trigger": "^2.0.0", - "classnames": "^2.3.2", - "rc-util": "^5.24.4" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rc-component/trigger": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.6.tgz", - "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "@rc-component/portal": "^1.1.0", - "classnames": "^2.3.2", - "rc-motion": "^2.0.0", - "rc-resize-observer": "^1.3.1", - "rc-util": "^5.44.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "node": ">=6.0.0" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", - "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==", - "cpu": [ - "arm" - ], + "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==", "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz", - "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==", - "cpu": [ - "arm64" - ], + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", - "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", - "cpu": [ - "arm64" - ], + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz", - "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==", + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, + "node_modules/@msgpack/msgpack": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.8.0.tgz", + "integrity": "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@neondatabase/serverless": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-0.9.5.tgz", + "integrity": "sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==", + "license": "MIT", + "dependencies": { + "@types/pg": "8.11.6" + } + }, + "node_modules/@next/env": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.11.tgz", + "integrity": "sha512-HYsQRSIXwiNqvzzYThrBwq6RhXo3E0n8j8nQnAs8i4fCEo2Zf/3eS0IiRA8XnRg9Ha0YnpkyJZIZg1qEwemrHw==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.11.tgz", + "integrity": "sha512-7mw+xW7Y03Ph4NTCcAzYe+vu4BNjEHZUfZayyF3Y1D9RX6c5NIe25m1grHEAkyUuaqjRxOYhnCNeglOkIqLkBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.11.tgz", + "integrity": "sha512-eiY9u7wEJZWp/Pga07Qy3ZmNEfALmmSS1HtsJF3y1QEyaExu7boENz11fWqDmZ3uvcyAxCMhTrA1jfVxITQW8g==", "cpu": [ - "x64" + "arm64" ], "license": "MIT", "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz", - "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==", - "cpu": [ - "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz", - "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==", + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.11.tgz", + "integrity": "sha512-lnB0zYCld4yE0IX3ANrVMmtAbziBb7MYekcmR6iE9bujmgERl6+FK+b0MBq0pl304lYe7zO4yxJus9H/Af8jbg==", "cpu": [ "x64" ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz", - "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==", - "cpu": [ - "arm" - ], - "license": "MIT", "optional": true, "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz", - "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==", - "cpu": [ - "arm" + "darwin" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz", - "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==", + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.11.tgz", + "integrity": "sha512-Ulo9TZVocYmUAtzvZ7FfldtwUoQY0+9z3BiXZCLSUwU2bp7GqHA7/bqrfsArDlUb2xeGwn3ZuBbKtNK8TR0A8w==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz", - "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==", - "cpu": [ - "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz", - "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==", + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.11.tgz", + "integrity": "sha512-fH377DnKGyUnkWlmUpFF1T90m0dADBfK11dF8sOQkiELF9M+YwDRCGe8ZyDzvQcUd20Rr5U7vpZRrAxKwd3Rzg==", "cpu": [ - "loong64" + "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz", - "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==", - "cpu": [ - "ppc64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz", - "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==", + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.11.tgz", + "integrity": "sha512-a0TH4ZZp4NS0LgXP/488kgvWelNpwfgGTUCDXVhPGH6pInb7yIYNgM4kmNWOxBFt+TIuOH6Pi9NnGG4XWFUyXQ==", "cpu": [ - "riscv64" + "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz", - "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==", - "cpu": [ - "s390x" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", - "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.11.tgz", + "integrity": "sha512-DYYZcO4Uir2gZxA4D2JcOAKVs8ZxbOFYPpXSVIgeoQbREbeEHxysVsg3nY4FrQy51e5opxt5mOHl/LzIyZBoKA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz", - "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==", - "cpu": [ - "x64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz", - "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==", + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.11.tgz", + "integrity": "sha512-PwqHeKG3/kKfPpM6of1B9UJ+Er6ySUy59PeFu0Un0LBzJTRKKAg2V6J60Yqzp99m55mLa+YTbU6xj61ImTv9mg==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz", - "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==", + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.11.tgz", + "integrity": "sha512-0U7PWMnOYIvM74GY6rbH6w7v+vNPDVH1gUhlwHpfInJnNe5LkmUZqhp7FNWeNa5wbVgRcRi1F1cyxp4dmeLLvA==", "cpu": [ "ia32" ], @@ -1982,323 +1922,563 @@ "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz", - "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==", + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.11.tgz", + "integrity": "sha512-gQpS7mcgovWoaTG1FbS5/ojF7CGfql1Q0ZLsMrhcsi2Sr9HEqsUZ70MPJyaYBXbk6iEAP7UXMD9HC8KY1qNwvA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", - "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "tslib": "^2.4.0" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" + "engines": { + "node": ">= 8" } }, - "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", - "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", - "dependencies": { - "undici-types": "~6.20.0" + "license": "MIT", + "engines": { + "node": ">=12.4.0" } }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, - "node_modules/@types/pg": { - "version": "8.11.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", - "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^4.0.1" + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "devOptional": true, - "license": "MIT" + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } }, - "node_modules/@types/react": { - "version": "18.3.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.16.tgz", - "integrity": "sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==", - "devOptional": true, + "node_modules/@rc-component/async-validator": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", + "integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==", "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" } }, - "node_modules/@types/react-dom": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", - "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", - "dev": true, + "node_modules/@rc-component/color-picker": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-2.0.1.tgz", + "integrity": "sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==", "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^2.0.6", + "@babel/runtime": "^7.23.6", + "classnames": "^2.2.6", + "rc-util": "^5.38.1" + }, "peerDependencies": { - "@types/react": "^18.0.0" + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, + "node_modules/@rc-component/context": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rc-component/context/-/context-1.4.0.tgz", + "integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==", "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "@babel/runtime": "^7.10.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", - "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", - "dev": true, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz", + "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==", "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@babel/runtime": "^7.18.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8.x" } }, - "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/@rc-component/mutate-observer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz", + "integrity": "sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8.x" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", - "dev": true, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=8.x" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", - "dev": true, + "node_modules/@rc-component/qrcode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.0.0.tgz", + "integrity": "sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "@babel/runtime": "^7.24.7", + "classnames": "^2.3.2", + "rc-util": "^5.38.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8.x" }, "peerDependencies": { - "eslint": "^8.56.0" + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.15.1.tgz", + "integrity": "sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/portal": "^1.0.0-9", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/trigger": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.6.tgz", + "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@rc-component/portal": "^1.1.0", + "classnames": "^2.3.2", + "rc-motion": "^2.0.0", + "rc-resize-observer": "^1.3.1", + "rc-util": "^5.44.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", + "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/pg": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", + "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.16.tgz", + "integrity": "sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", + "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -2797,16 +2977,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2816,16 +2996,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2852,19 +3032,20 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", + "call-bind": "^1.0.5", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2989,6 +3170,12 @@ "node": ">=8" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, "node_modules/bufferutil": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", @@ -3056,14 +3243,14 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" }, "engines": { "node": ">= 0.4" @@ -3082,9 +3269,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001689", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz", - "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "funding": [ { "type": "opencollective", @@ -3487,6 +3674,158 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/drizzle-kit": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.30.1.tgz", + "integrity": "sha512-HmA/NeewvHywhJ2ENXD3KvOuM/+K2dGLJfxVfIHsGwaqKICJnS+Ke2L6UcSrSrtMJLJaT0Im1Qv4TFXfaZShyw==", + "license": "MIT", + "dependencies": { + "@drizzle-team/brocli": "^0.10.2", + "@esbuild-kit/esm-loader": "^2.5.5", + "esbuild": "^0.19.7", + "esbuild-register": "^3.5.0" + }, + "bin": { + "drizzle-kit": "bin.cjs" + } + }, + "node_modules/drizzle-orm": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.38.3.tgz", + "integrity": "sha512-w41Y+PquMpSff/QDRGdItG0/aWca+/J3Sda9PPGkTxBtjWQvgU1jxlFBXdjog5tYvTu58uvi3PwR1NuCx0KeZg==", + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/client-rds-data": ">=3", + "@cloudflare/workers-types": ">=4", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.10.0", + "@op-engineering/op-sqlite": ">=2", + "@opentelemetry/api": "^1.4.1", + "@planetscale/database": ">=1", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", + "@types/better-sqlite3": "*", + "@types/pg": "*", + "@types/react": ">=18", + "@types/sql.js": "*", + "@vercel/postgres": ">=0.8.0", + "@xata.io/client": "*", + "better-sqlite3": ">=7", + "bun-types": "*", + "expo-sqlite": ">=14.0.0", + "knex": "*", + "kysely": "*", + "mysql2": ">=2", + "pg": ">=8", + "postgres": ">=3", + "react": ">=18", + "sql.js": ">=1", + "sqlite3": ">=5" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-rds-data": { + "optional": true + }, + "@cloudflare/workers-types": { + "optional": true + }, + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@libsql/client-wasm": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@op-engineering/op-sqlite": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, + "@types/better-sqlite3": { + "optional": true + }, + "@types/pg": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "@types/sql.js": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "bun-types": { + "optional": true + }, + "expo-sqlite": { + "optional": true + }, + "knex": { + "optional": true + }, + "kysely": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "postgres": { + "optional": true + }, + "prisma": { + "optional": true + }, + "react": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, "node_modules/dunder-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", @@ -3540,60 +3879,58 @@ } }, "node_modules/es-abstract": { - "version": "1.23.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz", - "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.4", + "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.1", + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.7", - "get-intrinsic": "^1.2.6", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.4", - "gopd": "^1.2.0", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", "hasown": "^2.0.2", - "internal-slot": "^1.1.0", + "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", + "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", + "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.1.1", + "is-string": "^1.0.7", "is-typed-array": "^1.1.13", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.0.0", + "is-weakref": "^1.0.2", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-regex-test": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.3", - "typed-array-length": "^1.0.7", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.16" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -3712,42 +4049,53 @@ } }, "node_modules/esbuild": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", - "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "hasInstallScript": true, "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=18" + "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.0", - "@esbuild/android-arm": "0.24.0", - "@esbuild/android-arm64": "0.24.0", - "@esbuild/android-x64": "0.24.0", - "@esbuild/darwin-arm64": "0.24.0", - "@esbuild/darwin-x64": "0.24.0", - "@esbuild/freebsd-arm64": "0.24.0", - "@esbuild/freebsd-x64": "0.24.0", - "@esbuild/linux-arm": "0.24.0", - "@esbuild/linux-arm64": "0.24.0", - "@esbuild/linux-ia32": "0.24.0", - "@esbuild/linux-loong64": "0.24.0", - "@esbuild/linux-mips64el": "0.24.0", - "@esbuild/linux-ppc64": "0.24.0", - "@esbuild/linux-riscv64": "0.24.0", - "@esbuild/linux-s390x": "0.24.0", - "@esbuild/linux-x64": "0.24.0", - "@esbuild/netbsd-x64": "0.24.0", - "@esbuild/openbsd-arm64": "0.24.0", - "@esbuild/openbsd-x64": "0.24.0", - "@esbuild/sunos-x64": "0.24.0", - "@esbuild/win32-arm64": "0.24.0", - "@esbuild/win32-ia32": "0.24.0", - "@esbuild/win32-x64": "0.24.0" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" } }, "node_modules/escape-string-regexp": { @@ -4509,17 +4857,16 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz", - "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -4585,7 +4932,6 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", - "dev": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -4829,9 +5175,9 @@ } }, "node_modules/idb": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.1.tgz", - "integrity": "sha512-EkBCzUZSdhJV8PxMSbeEV//xguVKZu9hZZulM+2gHXI0t2hGVU3eYE6/XnH77DS6FM2FY8wl17aDcu9vXpvLWQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.0.tgz", + "integrity": "sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==", "license": "ISC" }, "node_modules/ignore": { @@ -5150,13 +5496,13 @@ } }, "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz", + "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", + "call-bind": "^1.0.7", "has-tostringtag": "^1.0.2" }, "engines": { @@ -5225,13 +5571,13 @@ } }, "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz", + "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", + "call-bind": "^1.0.7", "has-tostringtag": "^1.0.2" }, "engines": { @@ -5648,9 +5994,9 @@ "license": "ISC" }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.15", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.15.tgz", + "integrity": "sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -6997,9 +7343,9 @@ "license": "MIT" }, "node_modules/rc-virtual-list": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.16.1.tgz", - "integrity": "sha512-algM5UsB7vrlPNr9lsZEH8s9KHkP8XbT/Y0qylyPkiM8mIOlSJLjBNADcmbYPEQCm4zW82mZRJuVHNzqqN0EAQ==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.16.0.tgz", + "integrity": "sha512-tRpWBC0msU+MxFxnD6+y4v0P17Yzplf+mbiHrqRvfVanx0S4o0XV+2zu4vv7hM9nNfcucO+MPHivqpRT2lfnFQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", @@ -7019,6 +7365,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -7041,6 +7388,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -7246,7 +7594,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -7314,86 +7661,269 @@ "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.28.1", + "@rollup/rollup-android-arm64": "4.28.1", + "@rollup/rollup-darwin-arm64": "4.28.1", + "@rollup/rollup-darwin-x64": "4.28.1", + "@rollup/rollup-freebsd-arm64": "4.28.1", + "@rollup/rollup-freebsd-x64": "4.28.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.1", + "@rollup/rollup-linux-arm-musleabihf": "4.28.1", + "@rollup/rollup-linux-arm64-gnu": "4.28.1", + "@rollup/rollup-linux-arm64-musl": "4.28.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.28.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1", + "@rollup/rollup-linux-riscv64-gnu": "4.28.1", + "@rollup/rollup-linux-s390x-gnu": "4.28.1", + "@rollup/rollup-linux-x64-gnu": "4.28.1", + "@rollup/rollup-linux-x64-musl": "4.28.1", + "@rollup/rollup-win32-arm64-msvc": "4.28.1", + "@rollup/rollup-win32-ia32-msvc": "4.28.1", + "@rollup/rollup-win32-x64-msvc": "4.28.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "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", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/server-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", + "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "license": "MIT" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.28.1", - "@rollup/rollup-android-arm64": "4.28.1", - "@rollup/rollup-darwin-arm64": "4.28.1", - "@rollup/rollup-darwin-x64": "4.28.1", - "@rollup/rollup-freebsd-arm64": "4.28.1", - "@rollup/rollup-freebsd-x64": "4.28.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.28.1", - "@rollup/rollup-linux-arm-musleabihf": "4.28.1", - "@rollup/rollup-linux-arm64-gnu": "4.28.1", - "@rollup/rollup-linux-arm64-musl": "4.28.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.28.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1", - "@rollup/rollup-linux-riscv64-gnu": "4.28.1", - "@rollup/rollup-linux-s390x-gnu": "4.28.1", - "@rollup/rollup-linux-x64-gnu": "4.28.1", - "@rollup/rollup-linux-x64-musl": "4.28.1", - "@rollup/rollup-win32-arm64-msvc": "4.28.1", - "@rollup/rollup-win32-ia32-msvc": "4.28.1", - "@rollup/rollup-win32-x64-msvc": "4.28.1", - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, - "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", "dependencies": { - "queue-microtask": "^1.2.2" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=0.4" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.2.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7402,124 +7932,243 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } }, - "node_modules/scroll-into-view-if-needed": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", - "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "license": "MIT", "dependencies": { - "compute-scroll-into-view": "^3.0.2" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/sdp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", - "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true, "license": "MIT" }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "license": "MIT" }, - "node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", "license": "MIT" }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "node_modules/string-width-cjs/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "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==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "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==", + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "license": "MIT", "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -7528,15 +8177,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-list": { + "node_modules/string.prototype.repeat": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7545,17 +8210,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { + "call-bind": "^1.0.8", "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7564,18 +8229,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7584,257 +8247,321 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "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==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=14" + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" } }, - "node_modules/slash": { + "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } } }, - "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", + "node_modules/stylis": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", + "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "node_modules/swr": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", "license": "MIT", "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^2.0.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, "license": "MIT" }, - "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/string-convert": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", - "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", - "license": "MIT" + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/string-width-cjs": { - "name": "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==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/string-width-cjs/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==", - "dev": true, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", "license": "MIT" }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=16" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "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/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -7843,17 +8570,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -7862,16 +8592,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -7880,478 +8613,637 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=8" + "node": ">=14.17" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, + "node_modules/use-debounce": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.4.tgz", + "integrity": "sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "*" } }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "node_modules/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/uuid": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vite": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", + "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", "license": "MIT", "dependencies": { - "client-only": "0.0.1" + "esbuild": "^0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">= 12.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { - "@babel/core": { + "@types/node": { "optional": true }, - "babel-plugin-macros": { + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { "optional": true } } }, - "node_modules/stylis": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", - "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==", - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/vite-node": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/vitest" } }, - "node_modules/swr": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", - "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", + "node_modules/vite-node/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "license": "MIT", - "dependencies": { - "client-only": "^0.0.1", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" } }, - "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": ">=12" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/throttle-debounce": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=12.22" + "node": ">=12" } }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", - "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", - "license": "MIT" - }, - "node_modules/tinypool": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", - "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">=12" } }, - "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14.0.0" + "node": ">=12" } }, - "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=14.0.0" + "node": ">=12" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8.0" + "node": ">=12" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", - "license": "MIT" - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">=12" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "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/turbo-stream": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", - "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", - "license": "ISC" + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", - "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "reflect.getprototypeof": "^1.0.6" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=14.17" + "node": ">=12" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/use-debounce": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.4.tgz", - "integrity": "sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==", + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 16.0.0" - }, - "peerDependencies": { - "react": "*" + "node": ">=12" } }, - "node_modules/use-memo-one": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", - "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/use-sync-external-store": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", - "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/uuid": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", - "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "node_modules/vite-node/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "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", - "bin": { - "uuid": "dist/esm/bin/uuid" + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/vite": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", - "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", + "node_modules/vite-node/node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "license": "MIT", "dependencies": { - "esbuild": "^0.24.0", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -8360,25 +9252,19 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "terser": "^5.4.0" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, - "jiti": { - "optional": true - }, "less": { "optional": true }, @@ -8399,41 +9285,13 @@ }, "terser": { "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true } } }, - "node_modules/vite-node": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", - "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-node/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], @@ -8443,13 +9301,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "cpu": [ "arm" ], @@ -8459,13 +9317,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "cpu": [ "arm64" ], @@ -8475,13 +9333,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], @@ -8491,13 +9349,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], @@ -8507,13 +9365,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "cpu": [ "x64" ], @@ -8523,13 +9381,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], @@ -8539,13 +9397,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "cpu": [ "x64" ], @@ -8555,13 +9413,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], @@ -8571,13 +9429,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "cpu": [ "arm64" ], @@ -8587,13 +9445,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "cpu": [ "ia32" ], @@ -8603,13 +9461,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "cpu": [ "loong64" ], @@ -8619,13 +9477,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "cpu": [ "mips64el" ], @@ -8635,13 +9493,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], @@ -8651,13 +9509,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "cpu": [ "riscv64" ], @@ -8667,13 +9525,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "cpu": [ "s390x" ], @@ -8683,13 +9541,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], @@ -8699,13 +9557,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], @@ -8715,13 +9573,13 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "cpu": [ "x64" ], @@ -8731,13 +9589,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "cpu": [ "x64" ], @@ -8747,13 +9605,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "cpu": [ "arm64" ], @@ -8763,13 +9621,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "cpu": [ "ia32" ], @@ -8779,13 +9637,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], @@ -8795,132 +9653,46 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vite-node/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "hasInstallScript": true, "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/vite-node/node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "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.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/vite-node/node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "node": ">=18" }, "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "node_modules/vite/node_modules/postcss": { @@ -9565,17 +10337,17 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz", + "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==", "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" + "is-boolean-object": "^1.2.0", + "is-number-object": "^1.1.0", + "is-string": "^1.1.0", + "is-symbol": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -9806,20 +10578,6 @@ } } }, - "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index bff32e2..bcc4e36 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,15 @@ "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3", "@atlaskit/pragmatic-drag-and-drop-react-accessibility": "^1.2.3", "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^1.1.3", - "@neondatabase/serverless": "^0.9.5", + "@neondatabase/serverless": "0.9.5", "@types/web-bluetooth": "^0.0.20", "@vercel/analytics": "^1.4.1", "@vercel/postgres": "^0.10.0", "antd": "^5.22.3", "chart.js": "^4.4.7", + "dotenv": "^16.4.7", + "drizzle-kit": "^0.30.1", + "drizzle-orm": "^0.38.2", "idb": "^8.0.0", "next": "14.2.11", "peerjs": "^1.5.4", @@ -56,4 +59,4 @@ "react-dom": "^18", "typescript": "^5.7.2" } -} +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 7dba3e0..6c5b659 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,10 @@ { "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -18,11 +22,25 @@ } ], "paths": { - "@/*": ["./*"], - "@/c/*": ["./app/components/*"], - "@/lib/*": ["./app/lib/*"] - } + "@/*": [ + "./*" + ], + "@/c/*": [ + "./app/components/*" + ], + "@/lib/*": [ + "./app/lib/*" + ] + }, + "target": "ES2017" }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] } diff --git a/vercel.json b/vercel.json index 76dc589..0da3b15 100644 --- a/vercel.json +++ b/vercel.json @@ -1,4 +1,5 @@ { + "installCommand": "npm install --legacy-peer-deps", "crons": [ { "path": "/api/internal/shared-sync",