From 53fdc51ee7eca3db7fc30d5ad1c8bc53deaaf52b Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Tue, 16 Apr 2024 18:38:43 -0700 Subject: [PATCH] Creating specific id collection and wishlist pages as well as name to both. --- .eslintrc.cjs | 1 + drizzle/0011_charming_bucky.sql | 2 + drizzle/meta/0011_snapshot.json | 1612 +++++++++++++++++ drizzle/meta/_journal.json | 7 + package.json | 26 +- pnpm-lock.yaml | 445 ++--- .../+page.server.ts | 0 .../{collection => collections}/+page.svelte | 0 .../[id]}/+page.server.ts | 0 .../(protected)/collections/[id]/+page.svelte | 0 .../add/+page.server.ts | 0 .../add/+page.svelte | 0 .../add/bgg/+page.server.ts | 0 .../add/bgg/+page.svelte | 0 .../(protected)/wishlists/+page.server.ts | 164 ++ .../{wishlist => wishlists}/+page.svelte | 0 .../wishlists/[id]/+page.server.ts | 164 ++ .../(protected)/wishlists/[id]/+page.svelte | 0 src/routes/(app)/+page.server.ts | 37 +- src/routes/(app)/+page.svelte | 42 +- src/schema.ts | 2 + 21 files changed, 2247 insertions(+), 255 deletions(-) create mode 100644 drizzle/0011_charming_bucky.sql create mode 100644 drizzle/meta/0011_snapshot.json rename src/routes/(app)/(protected)/{collection => collections}/+page.server.ts (100%) rename src/routes/(app)/(protected)/{collection => collections}/+page.svelte (100%) rename src/routes/(app)/(protected)/{wishlist => collections/[id]}/+page.server.ts (100%) create mode 100644 src/routes/(app)/(protected)/collections/[id]/+page.svelte rename src/routes/(app)/(protected)/{collection => collections}/add/+page.server.ts (100%) rename src/routes/(app)/(protected)/{collection => collections}/add/+page.svelte (100%) rename src/routes/(app)/(protected)/{collection => collections}/add/bgg/+page.server.ts (100%) rename src/routes/(app)/(protected)/{collection => collections}/add/bgg/+page.svelte (100%) create mode 100644 src/routes/(app)/(protected)/wishlists/+page.server.ts rename src/routes/(app)/(protected)/{wishlist => wishlists}/+page.svelte (100%) create mode 100644 src/routes/(app)/(protected)/wishlists/[id]/+page.server.ts create mode 100644 src/routes/(app)/(protected)/wishlists/[id]/+page.svelte diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 770ef68..9afc111 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,3 +1,4 @@ +/** @type { import("eslint").Linter.Config } */ module.exports = { root: true, extends: [ diff --git a/drizzle/0011_charming_bucky.sql b/drizzle/0011_charming_bucky.sql new file mode 100644 index 0000000..d64073f --- /dev/null +++ b/drizzle/0011_charming_bucky.sql @@ -0,0 +1,2 @@ +ALTER TABLE "collections" ADD COLUMN "name" text DEFAULT 'My Collection' NOT NULL;--> statement-breakpoint +ALTER TABLE "wishlists" ADD COLUMN "name" text DEFAULT 'My Wishlist' NOT NULL; \ No newline at end of file diff --git a/drizzle/meta/0011_snapshot.json b/drizzle/meta/0011_snapshot.json new file mode 100644 index 0000000..a612907 --- /dev/null +++ b/drizzle/meta/0011_snapshot.json @@ -0,0 +1,1612 @@ +{ + "id": "6e0ad58c-dcd1-48d2-b286-4314ae69792b", + "prevId": "74c910fb-38f9-44d8-bd22-b36a517d7b8b", + "version": "5", + "dialect": "pg", + "tables": { + "categories": { + "name": "categories", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "categories_cuid_unique": { + "name": "categories_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "categories_to_external_ids": { + "name": "categories_to_external_ids", + "schema": "", + "columns": { + "category_id": { + "name": "category_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "external_id": { + "name": "external_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "categories_to_external_ids_category_id_categories_id_fk": { + "name": "categories_to_external_ids_category_id_categories_id_fk", + "tableFrom": "categories_to_external_ids", + "tableTo": "categories", + "columnsFrom": [ + "category_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "categories_to_external_ids_external_id_external_ids_id_fk": { + "name": "categories_to_external_ids_external_id_external_ids_id_fk", + "tableFrom": "categories_to_external_ids", + "tableTo": "external_ids", + "columnsFrom": [ + "external_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "categories_to_external_ids_category_id_external_id_pk": { + "name": "categories_to_external_ids_category_id_external_id_pk", + "columns": [ + "category_id", + "external_id" + ] + } + }, + "uniqueConstraints": {} + }, + "categories_to_games": { + "name": "categories_to_games", + "schema": "", + "columns": { + "category_id": { + "name": "category_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "categories_to_games_category_id_categories_id_fk": { + "name": "categories_to_games_category_id_categories_id_fk", + "tableFrom": "categories_to_games", + "tableTo": "categories", + "columnsFrom": [ + "category_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "categories_to_games_game_id_games_id_fk": { + "name": "categories_to_games_game_id_games_id_fk", + "tableFrom": "categories_to_games", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "categories_to_games_category_id_game_id_pk": { + "name": "categories_to_games_category_id_game_id_pk", + "columns": [ + "category_id", + "game_id" + ] + } + }, + "uniqueConstraints": {} + }, + "collection_items": { + "name": "collection_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "collection_id": { + "name": "collection_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "times_played": { + "name": "times_played", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "collection_items_collection_id_collections_id_fk": { + "name": "collection_items_collection_id_collections_id_fk", + "tableFrom": "collection_items", + "tableTo": "collections", + "columnsFrom": [ + "collection_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "collection_items_game_id_games_id_fk": { + "name": "collection_items_game_id_games_id_fk", + "tableFrom": "collection_items", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "collection_items_cuid_unique": { + "name": "collection_items_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "collections": { + "name": "collections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'My Collection'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "collections_user_id_users_id_fk": { + "name": "collections_user_id_users_id_fk", + "tableFrom": "collections", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "collections_cuid_unique": { + "name": "collections_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "expansions": { + "name": "expansions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "base_game_id": { + "name": "base_game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "expansions_base_game_id_games_id_fk": { + "name": "expansions_base_game_id_games_id_fk", + "tableFrom": "expansions", + "tableTo": "games", + "columnsFrom": [ + "base_game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "expansions_game_id_games_id_fk": { + "name": "expansions_game_id_games_id_fk", + "tableFrom": "expansions", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "expansions_cuid_unique": { + "name": "expansions_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "external_ids": { + "name": "external_ids", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "external_id_type", + "primaryKey": false, + "notNull": true + }, + "external_id": { + "name": "external_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "external_ids_cuid_unique": { + "name": "external_ids_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "games": { + "name": "games", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "year_published": { + "name": "year_published", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "min_players": { + "name": "min_players", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "max_players": { + "name": "max_players", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "playtime": { + "name": "playtime", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "min_playtime": { + "name": "min_playtime", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "max_playtime": { + "name": "max_playtime", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "min_age": { + "name": "min_age", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "image_url": { + "name": "image_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "thumb_url": { + "name": "thumb_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "text_searchable_index": { + "name": "text_searchable_index", + "type": "tsvector", + "primaryKey": false, + "notNull": false + }, + "last_sync_at": { + "name": "last_sync_at", + "type": "timestamp (6) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "text_searchable_idx": { + "name": "text_searchable_idx", + "columns": [ + "text_searchable_index" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "games_cuid_unique": { + "name": "games_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "games_to_external_ids": { + "name": "games_to_external_ids", + "schema": "", + "columns": { + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "external_id": { + "name": "external_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "games_to_external_ids_game_id_games_id_fk": { + "name": "games_to_external_ids_game_id_games_id_fk", + "tableFrom": "games_to_external_ids", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "games_to_external_ids_external_id_external_ids_id_fk": { + "name": "games_to_external_ids_external_id_external_ids_id_fk", + "tableFrom": "games_to_external_ids", + "tableTo": "external_ids", + "columnsFrom": [ + "external_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "games_to_external_ids_game_id_external_id_pk": { + "name": "games_to_external_ids_game_id_external_id_pk", + "columns": [ + "game_id", + "external_id" + ] + } + }, + "uniqueConstraints": {} + }, + "mechanics": { + "name": "mechanics", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mechanics_cuid_unique": { + "name": "mechanics_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "mechanics_to_external_ids": { + "name": "mechanics_to_external_ids", + "schema": "", + "columns": { + "mechanic_id": { + "name": "mechanic_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "external_id": { + "name": "external_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "mechanics_to_external_ids_mechanic_id_mechanics_id_fk": { + "name": "mechanics_to_external_ids_mechanic_id_mechanics_id_fk", + "tableFrom": "mechanics_to_external_ids", + "tableTo": "mechanics", + "columnsFrom": [ + "mechanic_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "mechanics_to_external_ids_external_id_external_ids_id_fk": { + "name": "mechanics_to_external_ids_external_id_external_ids_id_fk", + "tableFrom": "mechanics_to_external_ids", + "tableTo": "external_ids", + "columnsFrom": [ + "external_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "mechanics_to_external_ids_mechanic_id_external_id_pk": { + "name": "mechanics_to_external_ids_mechanic_id_external_id_pk", + "columns": [ + "mechanic_id", + "external_id" + ] + } + }, + "uniqueConstraints": {} + }, + "mechanics_to_games": { + "name": "mechanics_to_games", + "schema": "", + "columns": { + "mechanic_id": { + "name": "mechanic_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "mechanics_to_games_mechanic_id_mechanics_id_fk": { + "name": "mechanics_to_games_mechanic_id_mechanics_id_fk", + "tableFrom": "mechanics_to_games", + "tableTo": "mechanics", + "columnsFrom": [ + "mechanic_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "mechanics_to_games_game_id_games_id_fk": { + "name": "mechanics_to_games_game_id_games_id_fk", + "tableFrom": "mechanics_to_games", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "mechanics_to_games_mechanic_id_game_id_pk": { + "name": "mechanics_to_games_mechanic_id_game_id_pk", + "columns": [ + "mechanic_id", + "game_id" + ] + } + }, + "uniqueConstraints": {} + }, + "password_reset_tokens": { + "name": "password_reset_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp (6) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "password_reset_tokens_user_id_users_id_fk": { + "name": "password_reset_tokens_user_id_users_id_fk", + "tableFrom": "password_reset_tokens", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "publishers": { + "name": "publishers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "publishers_cuid_unique": { + "name": "publishers_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "publishers_to_external_ids": { + "name": "publishers_to_external_ids", + "schema": "", + "columns": { + "publisher_id": { + "name": "publisher_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "external_id": { + "name": "external_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "publishers_to_external_ids_publisher_id_publishers_id_fk": { + "name": "publishers_to_external_ids_publisher_id_publishers_id_fk", + "tableFrom": "publishers_to_external_ids", + "tableTo": "publishers", + "columnsFrom": [ + "publisher_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "publishers_to_external_ids_external_id_external_ids_id_fk": { + "name": "publishers_to_external_ids_external_id_external_ids_id_fk", + "tableFrom": "publishers_to_external_ids", + "tableTo": "external_ids", + "columnsFrom": [ + "external_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "publishers_to_external_ids_publisher_id_external_id_pk": { + "name": "publishers_to_external_ids_publisher_id_external_id_pk", + "columns": [ + "publisher_id", + "external_id" + ] + } + }, + "uniqueConstraints": {} + }, + "publishers_to_games": { + "name": "publishers_to_games", + "schema": "", + "columns": { + "publisher_id": { + "name": "publisher_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "publishers_to_games_publisher_id_publishers_id_fk": { + "name": "publishers_to_games_publisher_id_publishers_id_fk", + "tableFrom": "publishers_to_games", + "tableTo": "publishers", + "columnsFrom": [ + "publisher_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "publishers_to_games_game_id_games_id_fk": { + "name": "publishers_to_games_game_id_games_id_fk", + "tableFrom": "publishers_to_games", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": { + "publishers_to_games_publisher_id_game_id_pk": { + "name": "publishers_to_games_publisher_id_game_id_pk", + "columns": [ + "publisher_id", + "game_id" + ] + } + }, + "uniqueConstraints": {} + }, + "recovery_codes": { + "name": "recovery_codes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "code": { + "name": "code", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "used": { + "name": "used", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "recovery_codes_user_id_users_id_fk": { + "name": "recovery_codes_user_id_users_id_fk", + "tableFrom": "recovery_codes", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "roles": { + "name": "roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "roles_cuid_unique": { + "name": "roles_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + }, + "roles_name_unique": { + "name": "roles_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "sessions": { + "name": "sessions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "ip_country": { + "name": "ip_country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "sessions_user_id_users_id_fk": { + "name": "sessions_user_id_users_id_fk", + "tableFrom": "sessions", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "primary": { + "name": "primary", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "user_roles_user_id_users_id_fk": { + "name": "user_roles_user_id_users_id_fk", + "tableFrom": "user_roles", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "user_roles_role_id_roles_id_fk": { + "name": "user_roles_role_id_roles_id_fk", + "tableFrom": "user_roles", + "tableTo": "roles", + "columnsFrom": [ + "role_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_roles_cuid_unique": { + "name": "user_roles_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "hashed_password": { + "name": "hashed_password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "verified": { + "name": "verified", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "receive_email": { + "name": "receive_email", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "theme": { + "name": "theme", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'system'" + }, + "two_factor_secret": { + "name": "two_factor_secret", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_cuid_unique": { + "name": "users_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + }, + "users_username_unique": { + "name": "users_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + }, + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + } + }, + "wishlist_items": { + "name": "wishlist_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "wishlist_id": { + "name": "wishlist_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "wishlist_items_wishlist_id_wishlists_id_fk": { + "name": "wishlist_items_wishlist_id_wishlists_id_fk", + "tableFrom": "wishlist_items", + "tableTo": "wishlists", + "columnsFrom": [ + "wishlist_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "wishlist_items_game_id_games_id_fk": { + "name": "wishlist_items_game_id_games_id_fk", + "tableFrom": "wishlist_items", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "wishlist_items_cuid_unique": { + "name": "wishlist_items_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + }, + "wishlists": { + "name": "wishlists", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "cuid": { + "name": "cuid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'My Wishlist'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "wishlists_user_id_users_id_fk": { + "name": "wishlists_user_id_users_id_fk", + "tableFrom": "wishlists", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "wishlists_cuid_unique": { + "name": "wishlists_cuid_unique", + "nullsNotDistinct": false, + "columns": [ + "cuid" + ] + } + } + } + }, + "enums": { + "external_id_type": { + "name": "external_id_type", + "values": { + "game": "game", + "category": "category", + "mechanic": "mechanic", + "publisher": "publisher", + "designer": "designer", + "artist": "artist" + } + } + }, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index 3987f28..7fdd662 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -78,6 +78,13 @@ "when": 1712271520175, "tag": "0010_wakeful_metal_master", "breakpoints": true + }, + { + "idx": 11, + "version": "5", + "when": 1713311328819, + "tag": "0011_charming_bucky", + "breakpoints": true } ] } \ No newline at end of file diff --git a/package.json b/package.json index 69891e2..c948486 100644 --- a/package.json +++ b/package.json @@ -23,17 +23,17 @@ "devDependencies": { "@melt-ui/pp": "^0.3.0", "@melt-ui/svelte": "^0.76.3", - "@playwright/test": "^1.43.0", + "@playwright/test": "^1.43.1", "@resvg/resvg-js": "^2.6.2", "@sveltejs/adapter-auto": "^3.2.0", - "@sveltejs/enhanced-img": "^0.1.9", - "@sveltejs/kit": "^2.5.5", + "@sveltejs/enhanced-img": "^0.2.0", + "@sveltejs/kit": "^2.5.6", "@sveltejs/vite-plugin-svelte": "^3.1.0", "@types/cookie": "^0.6.0", "@types/node": "^20.12.6", "@types/pg": "^8.11.5", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@typescript-eslint/eslint-plugin": "^7.7.0", + "@typescript-eslint/parser": "^7.7.0", "autoprefixer": "^10.4.19", "dotenv": "^16.4.5", "drizzle-kit": "^0.20.14", @@ -47,18 +47,18 @@ "postcss-load-config": "^5.0.3", "postcss-preset-env": "^9.5.4", "prettier": "^3.2.5", - "prettier-plugin-svelte": "^3.2.2", + "prettier-plugin-svelte": "^3.2.3", "sass": "^1.74.1", "satori": "^0.10.13", "satori-html": "^0.3.2", - "svelte": "^4.2.12", + "svelte": "^4.2.14", "svelte-check": "^3.6.9", "svelte-headless-table": "^0.18.2", "svelte-meta-tags": "^3.1.2", "svelte-preprocess": "^5.1.3", "svelte-sequential-preprocessor": "^2.0.1", "sveltekit-flash-message": "^2.4.4", - "sveltekit-rate-limiter": "^0.4.3", + "sveltekit-rate-limiter": "^0.5.1", "sveltekit-superforms": "^2.12.4", "tailwindcss": "^3.4.3", "ts-node": "^10.9.2", @@ -80,26 +80,26 @@ "@iconify-icons/mdi": "^1.2.47", "@lucia-auth/adapter-drizzle": "^1.0.7", "@lukeed/uuid": "^2.0.1", - "@neondatabase/serverless": "^0.9.0", + "@neondatabase/serverless": "^0.9.1", "@paralleldrive/cuid2": "^2.2.2", "@sveltejs/adapter-vercel": "^5.2.0", "@types/feather-icons": "^4.29.4", "@vercel/og": "^0.5.20", - "bits-ui": "^0.19.7", + "bits-ui": "^0.21.3", "boardgamegeekclient": "^1.9.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "cookie": "^0.6.0", "drizzle-orm": "^0.30.7", "feather-icons": "^4.29.1", - "formsnap": "^0.5.1", + "formsnap": "^1.0.0", "html-entities": "^2.5.2", - "iconify-icon": "^2.0.0", + "iconify-icon": "^2.1.0", "just-capitalize": "^3.2.0", "just-kebab-case": "^4.2.0", "loader": "^2.1.1", "lucia": "3.1.1", - "lucide-svelte": "^0.358.0", + "lucide-svelte": "^0.368.0", "open-props": "^1.7.2", "oslo": "^1.2.0", "pg": "^8.11.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9fbfa2..5372e3e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,14 +21,14 @@ dependencies: specifier: ^2.0.1 version: 2.0.1 '@neondatabase/serverless': - specifier: ^0.9.0 - version: 0.9.0 + specifier: ^0.9.1 + version: 0.9.1 '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 '@sveltejs/adapter-vercel': specifier: ^5.2.0 - version: 5.2.0(@sveltejs/kit@2.5.5) + version: 5.2.0(@sveltejs/kit@2.5.6) '@types/feather-icons': specifier: ^4.29.4 version: 4.29.4 @@ -36,8 +36,8 @@ dependencies: specifier: ^0.5.20 version: 0.5.20 bits-ui: - specifier: ^0.19.7 - version: 0.19.7(svelte@4.2.13) + specifier: ^0.21.3 + version: 0.21.3(svelte@4.2.14) boardgamegeekclient: specifier: ^1.9.1 version: 1.9.1 @@ -52,19 +52,19 @@ dependencies: version: 0.6.0 drizzle-orm: specifier: ^0.30.7 - version: 0.30.8(@neondatabase/serverless@0.9.0)(@types/pg@8.11.5)(pg@8.11.5)(postgres@3.4.4) + version: 0.30.8(@neondatabase/serverless@0.9.1)(@types/pg@8.11.5)(pg@8.11.5)(postgres@3.4.4) feather-icons: specifier: ^4.29.1 version: 4.29.1 formsnap: - specifier: ^0.5.1 - version: 0.5.1(svelte@4.2.13)(sveltekit-superforms@2.12.4) + specifier: ^1.0.0 + version: 1.0.0(svelte@4.2.14)(sveltekit-superforms@2.12.4) html-entities: specifier: ^2.5.2 version: 2.5.2 iconify-icon: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.1.0 + version: 2.1.0 just-capitalize: specifier: ^3.2.0 version: 3.2.0 @@ -78,8 +78,8 @@ dependencies: specifier: 3.1.1 version: 3.1.1 lucide-svelte: - specifier: ^0.358.0 - version: 0.358.0(svelte@4.2.13) + specifier: ^0.368.0 + version: 0.368.0(svelte@4.2.14) open-props: specifier: ^1.7.2 version: 1.7.2 @@ -97,10 +97,10 @@ dependencies: version: 1.5.3 radix-svelte: specifier: ^0.9.0 - version: 0.9.0(svelte@4.2.13) + version: 0.9.0(svelte@4.2.14) svelte-french-toast: specifier: ^1.2.0 - version: 1.2.0(svelte@4.2.13) + version: 1.2.0(svelte@4.2.14) svelte-lazy-loader: specifier: ^1.0.0 version: 1.0.0 @@ -120,28 +120,28 @@ dependencies: devDependencies: '@melt-ui/pp': specifier: ^0.3.0 - version: 0.3.0(@melt-ui/svelte@0.76.3)(svelte@4.2.13) + version: 0.3.0(@melt-ui/svelte@0.76.3)(svelte@4.2.14) '@melt-ui/svelte': specifier: ^0.76.3 - version: 0.76.3(svelte@4.2.13) + version: 0.76.3(svelte@4.2.14) '@playwright/test': - specifier: ^1.43.0 - version: 1.43.0 + specifier: ^1.43.1 + version: 1.43.1 '@resvg/resvg-js': specifier: ^2.6.2 version: 2.6.2 '@sveltejs/adapter-auto': specifier: ^3.2.0 - version: 3.2.0(@sveltejs/kit@2.5.5) + version: 3.2.0(@sveltejs/kit@2.5.6) '@sveltejs/enhanced-img': - specifier: ^0.1.9 - version: 0.1.9(svelte@4.2.13) + specifier: ^0.2.0 + version: 0.2.0(svelte@4.2.14) '@sveltejs/kit': - specifier: ^2.5.5 - version: 2.5.5(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8) + specifier: ^2.5.6 + version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.0 - version: 3.1.0(svelte@4.2.13)(vite@5.2.8) + version: 3.1.0(svelte@4.2.14)(vite@5.2.8) '@types/cookie': specifier: ^0.6.0 version: 0.6.0 @@ -152,11 +152,11 @@ devDependencies: specifier: ^8.11.5 version: 8.11.5 '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.7.0 + version: 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.7.0 + version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) @@ -174,7 +174,7 @@ devDependencies: version: 9.1.0(eslint@8.57.0) eslint-plugin-svelte: specifier: ^2.36.0 - version: 2.37.0(eslint@8.57.0)(svelte@4.2.13)(ts-node@10.9.2) + version: 2.37.0(eslint@8.57.0)(svelte@4.2.14)(ts-node@10.9.2) just-clone: specifier: ^6.2.0 version: 6.2.0 @@ -197,8 +197,8 @@ devDependencies: specifier: ^3.2.5 version: 3.2.5 prettier-plugin-svelte: - specifier: ^3.2.2 - version: 3.2.2(prettier@3.2.5)(svelte@4.2.13) + specifier: ^3.2.3 + version: 3.2.3(prettier@3.2.5)(svelte@4.2.14) sass: specifier: ^1.74.1 version: 1.75.0 @@ -209,32 +209,32 @@ devDependencies: specifier: ^0.3.2 version: 0.3.2 svelte: - specifier: ^4.2.12 - version: 4.2.13 + specifier: ^4.2.14 + version: 4.2.14 svelte-check: specifier: ^3.6.9 - version: 3.6.9(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.13) + version: 3.6.9(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.14) svelte-headless-table: specifier: ^0.18.2 - version: 0.18.2(svelte@4.2.13) + version: 0.18.2(svelte@4.2.14) svelte-meta-tags: specifier: ^3.1.2 - version: 3.1.2(svelte@4.2.13)(typescript@5.4.5) + version: 3.1.2(svelte@4.2.14)(typescript@5.4.5) svelte-preprocess: specifier: ^5.1.3 - version: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.13)(typescript@5.4.5) + version: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.14)(typescript@5.4.5) svelte-sequential-preprocessor: specifier: ^2.0.1 version: 2.0.1 sveltekit-flash-message: specifier: ^2.4.4 - version: 2.4.4(@sveltejs/kit@2.5.5)(svelte@4.2.13) + version: 2.4.4(@sveltejs/kit@2.5.6)(svelte@4.2.14) sveltekit-rate-limiter: - specifier: ^0.4.3 - version: 0.4.3(@sveltejs/kit@2.5.5) + specifier: ^0.5.1 + version: 0.5.1(@sveltejs/kit@2.5.6) sveltekit-superforms: specifier: ^2.12.4 - version: 2.12.4(@sveltejs/kit@2.5.5)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.13) + version: 2.12.4(@sveltejs/kit@2.5.6)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.14) tailwindcss: specifier: ^3.4.3 version: 3.4.3(ts-node@10.9.2) @@ -271,11 +271,11 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 /@babel/runtime@7.24.1: @@ -1918,11 +1918,11 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.20 - /@jridgewell/gen-mapping@0.3.4: - resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 @@ -1938,6 +1938,10 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -1997,21 +2001,21 @@ packages: - supports-color dev: false - /@melt-ui/pp@0.3.0(@melt-ui/svelte@0.76.3)(svelte@4.2.13): + /@melt-ui/pp@0.3.0(@melt-ui/svelte@0.76.3)(svelte@4.2.14): resolution: {integrity: sha512-b07Bdh8l2KcwKVCXOY+SoBw1dk9eWvQfMSi6SoacpRVyVmmfpi0kV4oGt3HYF0tUCB3sEmVicxse50ZzZxEzEA==} engines: {pnpm: '>=8.6.3'} peerDependencies: '@melt-ui/svelte': '>= 0.29.0' svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1 dependencies: - '@melt-ui/svelte': 0.76.3(svelte@4.2.13) + '@melt-ui/svelte': 0.76.3(svelte@4.2.14) estree-walker: 3.0.3 magic-string: 0.30.5 - svelte: 4.2.13 + svelte: 4.2.14 dev: true - /@melt-ui/svelte@0.76.0(svelte@4.2.13): - resolution: {integrity: sha512-X1ktxKujjLjOBt8LBvfckHGDMrkHWceRt1jdsUTf0EH76ikNPP1ofSoiV0IhlduDoCBV+2YchJ8kXCDfDXfC9Q==} + /@melt-ui/svelte@0.76.2(svelte@4.2.14): + resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==} peerDependencies: svelte: '>=3 <5' dependencies: @@ -2021,10 +2025,10 @@ packages: dequal: 2.0.3 focus-trap: 7.5.4 nanoid: 5.0.7 - svelte: 4.2.13 + svelte: 4.2.14 dev: false - /@melt-ui/svelte@0.76.3(svelte@4.2.13): + /@melt-ui/svelte@0.76.3(svelte@4.2.14): resolution: {integrity: sha512-fEtwHnOVLH0eNwtr+7pX5JQVtOL2XWVFA0/xrNU0yL6NkEpv++4NUwaaulGZC4nVmVG/gIA1JK2fx5M0u01TlA==} peerDependencies: svelte: '>=3 <5' @@ -2035,7 +2039,7 @@ packages: dequal: 2.0.3 focus-trap: 7.5.4 nanoid: 5.0.6 - svelte: 4.2.13 + svelte: 4.2.14 dev: true /@napi-rs/wasm-runtime@0.1.2: @@ -2048,8 +2052,8 @@ packages: dev: false optional: true - /@neondatabase/serverless@0.9.0: - resolution: {integrity: sha512-mmJnUAzlzvxNSZuuhI6kgJjH+JgFdBMYUWxihtq/nj0Tjt+Y5UU3W+SvRFoucnd5NObYkuLYQzk+zV5DGFKGJg==} + /@neondatabase/serverless@0.9.1: + resolution: {integrity: sha512-Xi+tVIXuaeB24BHzhr0W/4vcbb9WwIaB6yK0RsMIteLtzNB86+am6EDFovd3rYCYM1ea7rWcwte2dLOrzW7eqA==} dependencies: '@types/pg': 8.6.6 dev: false @@ -2677,12 +2681,12 @@ packages: '@noble/hashes': 1.3.2 dev: false - /@playwright/test@1.43.0: - resolution: {integrity: sha512-Ebw0+MCqoYflop7wVKj711ccbNlrwTBCtjY5rlbiY9kHL2bCYxq+qltK6uPsVBGGAOb033H2VO0YobcQVxoW7Q==} + /@playwright/test@1.43.1: + resolution: {integrity: sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==} engines: {node: '>=16'} hasBin: true dependencies: - playwright: 1.43.0 + playwright: 1.43.1 dev: true /@polka/url@1.0.0-next.25: @@ -2977,21 +2981,21 @@ packages: requiresBuild: true optional: true - /@sveltejs/adapter-auto@3.2.0(@sveltejs/kit@2.5.5): + /@sveltejs/adapter-auto@3.2.0(@sveltejs/kit@2.5.6): resolution: {integrity: sha512-She5nKT47kwHE18v9NMe6pbJcvULr82u0V3yZ0ej3n1laWKGgkgdEABE9/ak5iDPs93LqsBkuIo51kkwCLBjJA==} peerDependencies: '@sveltejs/kit': ^2.0.0 dependencies: - '@sveltejs/kit': 2.5.5(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8) + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8) import-meta-resolve: 4.0.0 dev: true - /@sveltejs/adapter-vercel@5.2.0(@sveltejs/kit@2.5.5): + /@sveltejs/adapter-vercel@5.2.0(@sveltejs/kit@2.5.6): resolution: {integrity: sha512-872y13DxKcOBxgnXc4C2YHRw1ow9N1CpUxMH34NYFqCn6PUO6f34qle8v/Byr8sHEC/d+PZIAI3MJs3c8f7TfA==} peerDependencies: '@sveltejs/kit': ^2.4.0 dependencies: - '@sveltejs/kit': 2.5.5(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8) + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8) '@vercel/nft': 0.26.4 esbuild: 0.19.12 transitivePeerDependencies: @@ -2999,19 +3003,19 @@ packages: - supports-color dev: false - /@sveltejs/enhanced-img@0.1.9(svelte@4.2.13): - resolution: {integrity: sha512-gUgaiG88P6moWcxZx4YrzMhAlw1TgggKRp7n9gdfCREDeXHysCd1l9GpQR3sh109SM3rNlkiaAzt+iPLT0aG1w==} + /@sveltejs/enhanced-img@0.2.0(svelte@4.2.14): + resolution: {integrity: sha512-W6wG0RxQYoL13LmUl8IBHeQatMXSd2ybrjg/WQuE5EoIJq+wUkf1hUDaMp9PHe4ubpnzWK/c0QaE5Ls+zjHimA==} dependencies: magic-string: 0.30.9 - svelte-parse-markup: 0.1.2(svelte@4.2.13) - vite-imagetools: 6.2.9 + svelte-parse-markup: 0.1.2(svelte@4.2.14) + vite-imagetools: 7.0.1 transitivePeerDependencies: - rollup - svelte dev: true - /@sveltejs/kit@2.5.5(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8): - resolution: {integrity: sha512-ULe3PB00q4+wYRL+IS5FDPsCEVnhEITofm7b9Yz8malcH3r1SAnW/JJ6T13hIMeu8QNRIuVQWo+P4+2VklbnLQ==} + /@sveltejs/kit@2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8): + resolution: {integrity: sha512-AYb02Jm5MfNqJHc8zrj7ScQAFAKmTUCkpkfoi8EVaZZDdnjkvI7L2GtnTDhpiXSAZRVitZX4qm59sMS1FgL+lQ==} engines: {node: '>=18.13'} hasBin: true requiresBuild: true @@ -3020,23 +3024,23 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.13)(vite@5.2.8) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.14)(vite@5.2.8) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 4.3.2 esm-env: 1.0.0 import-meta-resolve: 4.0.0 kleur: 4.1.5 - magic-string: 0.30.8 + magic-string: 0.30.9 mrmime: 2.0.0 sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.4 - svelte: 4.2.13 + svelte: 4.2.14 tiny-glob: 0.2.9 vite: 5.2.8(@types/node@20.12.7)(sass@1.75.0) - /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8): + /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8): resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} engines: {node: ^18.0.0 || >=20} peerDependencies: @@ -3044,27 +3048,27 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.13)(vite@5.2.8) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.14)(vite@5.2.8) debug: 4.3.4 - svelte: 4.2.13 + svelte: 4.2.14 vite: 5.2.8(@types/node@20.12.7)(sass@1.75.0) transitivePeerDependencies: - supports-color - /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.13)(vite@5.2.8): + /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.14)(vite@5.2.8): resolution: {integrity: sha512-sY6ncCvg+O3njnzbZexcVtUqOBE3iYmQPJ9y+yXSkOwG576QI/xJrBnQSRXFLGwJNBa0T78JEKg5cIR0WOAuUw==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8) + '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.9 - svelte: 4.2.13 - svelte-hmr: 0.16.0(svelte@4.2.13) + svelte: 4.2.14 + svelte-hmr: 0.16.0(svelte@4.2.14) vite: 5.2.8(@types/node@20.12.7)(sass@1.75.0) vitefu: 0.2.5(vite@5.2.8) transitivePeerDependencies: @@ -3141,23 +3145,23 @@ packages: requiresBuild: true optional: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 @@ -3170,20 +3174,20 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4 eslint: 8.57.0 typescript: 5.4.5 @@ -3191,26 +3195,26 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/scope-manager@7.7.0: + resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -3219,26 +3223,26 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/types@7.7.0: + resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5): + resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.4 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 @@ -3246,18 +3250,18 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -3265,11 +3269,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/visitor-keys@7.7.0: + resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/types': 7.7.0 eslint-visitor-keys: 3.4.3 dev: true @@ -3533,15 +3537,15 @@ packages: file-uri-to-path: 1.0.0 dev: false - /bits-ui@0.19.7(svelte@4.2.13): - resolution: {integrity: sha512-GHUpKvN7QyazhnZNkUy0lxg6W1M6KJHWSZ4a/UGCjPE6nQgk6vKbGysY67PkDtQMknZTZAzVoMj1Eic4IKeCRQ==} + /bits-ui@0.21.3(svelte@4.2.14): + resolution: {integrity: sha512-VMQVXwYIjYmDoudIRm2ZlS2guy97lUQk73DwSfTnaS0dhldImbDFMATNxjLSLsTDj8FqJ8Dv78wSctdxcloIbQ==} peerDependencies: svelte: ^4.0.0 dependencies: '@internationalized/date': 3.5.2 - '@melt-ui/svelte': 0.76.0(svelte@4.2.13) + '@melt-ui/svelte': 0.76.2(svelte@4.2.14) nanoid: 5.0.7 - svelte: 4.2.13 + svelte: 4.2.14 dev: false /boardgamegeekclient@1.9.1: @@ -4020,7 +4024,7 @@ packages: - supports-color dev: true - /drizzle-orm@0.30.8(@neondatabase/serverless@0.9.0)(@types/pg@8.11.5)(pg@8.11.5)(postgres@3.4.4): + /drizzle-orm@0.30.8(@neondatabase/serverless@0.9.1)(@types/pg@8.11.5)(pg@8.11.5)(postgres@3.4.4): resolution: {integrity: sha512-9pBJA0IjnpPpzZ6s9jlS1CQAbKoBmbn2GJesPhXaVblAA/joOJ4AWWevYcqvLGj9SvThBAl7WscN8Zwgg5mnTw==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' @@ -4100,7 +4104,7 @@ packages: sqlite3: optional: true dependencies: - '@neondatabase/serverless': 0.9.0 + '@neondatabase/serverless': 0.9.1 '@types/pg': 8.11.5 pg: 8.11.5 postgres: 3.4.4 @@ -4340,7 +4344,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-svelte@2.37.0(eslint@8.57.0)(svelte@4.2.13)(ts-node@10.9.2): + /eslint-plugin-svelte@2.37.0(eslint@8.57.0)(svelte@4.2.14)(ts-node@10.9.2): resolution: {integrity: sha512-H/2Gz7agYHEMEEzRuLYuCmAIdjuBnbhFG9hOK0yCdSBvvJGJMkjo+lR6j67OIvLOavgp4L7zA5LnDKi8WqdPhQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -4362,8 +4366,8 @@ packages: postcss-safe-parser: 6.0.0(postcss@8.4.38) postcss-selector-parser: 6.0.16 semver: 7.6.0 - svelte: 4.2.13 - svelte-eslint-parser: 0.34.1(svelte@4.2.13) + svelte: 4.2.14 + svelte-eslint-parser: 0.34.1(svelte@4.2.14) transitivePeerDependencies: - supports-color - ts-node @@ -4596,15 +4600,15 @@ packages: dependencies: tabbable: 6.2.0 - /formsnap@0.5.1(svelte@4.2.13)(sveltekit-superforms@2.12.4): - resolution: {integrity: sha512-8ppOlOu7llBEJbV0PzUz/KWh1J8KfiGqwjiyb8emQ2m+/nYXohLBtMcLVpW3XwlMkUbYaIXM+5lhfGjw8xbGJw==} + /formsnap@1.0.0(svelte@4.2.14)(sveltekit-superforms@2.12.4): + resolution: {integrity: sha512-NQEbkCS1tKGnn6gBojIuNutxImmq/9bUk9JQ5kW8WOY37QNFtJxYr/SbX8ONWuiVLaczSvGSWXIv3hNu19arqQ==} peerDependencies: svelte: ^4.0.0 sveltekit-superforms: ^2.3.0 dependencies: nanoid: 5.0.7 - svelte: 4.2.13 - sveltekit-superforms: 2.12.4(@sveltejs/kit@2.5.5)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.13) + svelte: 4.2.14 + sveltekit-superforms: 2.12.4(@sveltejs/kit@2.5.6)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.14) dev: false /fraction.js@4.3.7: @@ -4804,8 +4808,8 @@ packages: engines: {node: '>=16.17.0'} dev: true - /iconify-icon@2.0.0: - resolution: {integrity: sha512-38ArOkxmyD9oDbJBkxaFpE6eZ0K3F9Sk+3x4mWGfjMJaxi3EKrix9Du4iWhgBFT3imKC4FJJE34ur2Rc7Xm+Uw==} + /iconify-icon@2.1.0: + resolution: {integrity: sha512-lto4XU3bwTQnb+D/CsJ4dWAo0aDe+uPMxEtxyOodw9l7R9QnJUUab3GCehlw2M8mDHdeUu/ufx8PvRQiJphhXg==} dependencies: '@iconify/types': 2.0.0 dev: false @@ -4815,9 +4819,9 @@ packages: engines: {node: '>= 4'} dev: true - /imagetools-core@6.0.4: - resolution: {integrity: sha512-N1qs5qn7u9nR3kboISkYuvJm8MohiphCfBa+wx1UOropVaFis9/mh6wuDPLHJNhl6/64C7q2Pch5NASVKAaSrg==} - engines: {node: '>=12.0.0'} + /imagetools-core@7.0.0: + resolution: {integrity: sha512-6fYbD7u4VIOt6fqKrOlbF77JXgUVyUmEJIPlfYVTuR/S2Ig9cX3gukGiLEU0aSetcfE7CYnhLTPtTEu4mLwhCw==} + engines: {node: '>=18.0.0'} dependencies: sharp: 0.33.3 dev: true @@ -5104,12 +5108,12 @@ packages: oslo: 1.0.1 dev: false - /lucide-svelte@0.358.0(svelte@4.2.13): - resolution: {integrity: sha512-KSdl/FSW5EhexI+qZH/YV/6WmuMybx1dw1VD7n53xDJCpYUm/7dftOV3yTV0KaJxN7/tDss15M62SVvLLWsXLA==} + /lucide-svelte@0.368.0(svelte@4.2.14): + resolution: {integrity: sha512-/uSazMXmY0cZzehGaE1SHQDtQrQBvAVR8UCEpNEjRKSy3yluSqtlGj7T5KvewJpP9kBDCKPgKVcKgdJgEzpRlw==} peerDependencies: svelte: ^3 || ^4 || ^5.0.0-next.42 dependencies: - svelte: 4.2.13 + svelte: 4.2.14 dev: false /magic-string@0.30.5: @@ -5119,12 +5123,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - /magic-string@0.30.9: resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} engines: {node: '>=12'} @@ -5226,8 +5224,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -5631,18 +5629,18 @@ packages: pathe: 1.1.2 dev: true - /playwright-core@1.43.0: - resolution: {integrity: sha512-iWFjyBUH97+pUFiyTqSLd8cDMMOS0r2ZYz2qEsPjH8/bX++sbIJT35MSwKnp1r/OQBAqC5XO99xFbJ9XClhf4w==} + /playwright-core@1.43.1: + resolution: {integrity: sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==} engines: {node: '>=16'} hasBin: true dev: true - /playwright@1.43.0: - resolution: {integrity: sha512-SiOKHbVjTSf6wHuGCbqrEyzlm6qvXcv7mENP+OZon1I07brfZLGdfWV0l/efAzVx7TF3Z45ov1gPEkku9q25YQ==} + /playwright@1.43.1: + resolution: {integrity: sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.43.0 + playwright-core: 1.43.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -6178,14 +6176,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@3.2.2(prettier@3.2.5)(svelte@4.2.13): - resolution: {integrity: sha512-ZzzE/wMuf48/1+Lf2Ffko0uDa6pyCfgHV6+uAhtg2U0AAXGrhCSW88vEJNAkAxW5qyrFY1y1zZ4J8TgHrjW++Q==} + /prettier-plugin-svelte@3.2.3(prettier@3.2.5)(svelte@4.2.14): + resolution: {integrity: sha512-wJq8RunyFlWco6U0WJV5wNCM7zpBFakS76UBSbmzMGpncpK98NZABaE+s7n8/APDCEVNHXC5Mpq+MLebQtsRlg==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 dependencies: prettier: 3.2.5 - svelte: 4.2.13 + svelte: 4.2.14 dev: true /prettier@3.2.5: @@ -6227,7 +6225,7 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /radix-svelte@0.9.0(svelte@4.2.13): + /radix-svelte@0.9.0(svelte@4.2.14): resolution: {integrity: sha512-0PJMHiZVTjWGrjK7c2/FY+nq0fBGwPXNy6fFvkLZIs73hTIai/Exw+pi3TCvtd80gSjFb5utdHWI3qiuuN0B/Q==} engines: {node: '>= 16'} peerDependencies: @@ -6235,7 +6233,7 @@ packages: dependencies: '@floating-ui/core': 1.5.0 '@floating-ui/dom': 1.5.3 - svelte: 4.2.13 + svelte: 4.2.14 dev: false /react-is@18.2.0: @@ -6649,7 +6647,7 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-check@3.6.9(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.13): + /svelte-check@3.6.9(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.14): resolution: {integrity: sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==} hasBin: true peerDependencies: @@ -6661,8 +6659,8 @@ packages: import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.2.13 - svelte-preprocess: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.13)(typescript@5.4.5) + svelte: 4.2.14 + svelte-preprocess: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.14)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - '@babel/core' @@ -6676,7 +6674,7 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.34.1(svelte@4.2.13): + /svelte-eslint-parser@0.34.1(svelte@4.2.14): resolution: {integrity: sha512-9+uLA1pqI9AZioKVGJzYYmlOZWxfoCXSbAM9iaNm7H01XlYlzRTtJfZgl9o3StQGN41PfGJIbkKkfk3e/pHFfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -6690,69 +6688,69 @@ packages: espree: 9.6.1 postcss: 8.4.38 postcss-scss: 4.0.9(postcss@8.4.38) - svelte: 4.2.13 + svelte: 4.2.14 dev: true - /svelte-french-toast@1.2.0(svelte@4.2.13): + /svelte-french-toast@1.2.0(svelte@4.2.14): resolution: {integrity: sha512-5PW+6RFX3xQPbR44CngYAP1Sd9oCq9P2FOox4FZffzJuZI2mHOB7q5gJBVnOiLF5y3moVGZ7u2bYt7+yPAgcEQ==} peerDependencies: svelte: ^3.57.0 || ^4.0.0 dependencies: - svelte: 4.2.13 - svelte-writable-derived: 3.1.0(svelte@4.2.13) + svelte: 4.2.14 + svelte-writable-derived: 3.1.0(svelte@4.2.14) dev: false - /svelte-headless-table@0.18.2(svelte@4.2.13): + /svelte-headless-table@0.18.2(svelte@4.2.14): resolution: {integrity: sha512-dnDTaXW5CNzRUjHVbc/Hb0Zv80zU4VcIUnAja6OuZriXvim1AqcWYQCHPRzBGwqj1m3YEHHNvspSzY0o5HzA0A==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.13 - svelte-keyed: 2.0.0(svelte@4.2.13) - svelte-render: 2.0.1(svelte@4.2.13) - svelte-subscribe: 2.0.1(svelte@4.2.13) + svelte: 4.2.14 + svelte-keyed: 2.0.0(svelte@4.2.14) + svelte-render: 2.0.1(svelte@4.2.14) + svelte-subscribe: 2.0.1(svelte@4.2.14) dev: true - /svelte-hmr@0.16.0(svelte@4.2.13): + /svelte-hmr@0.16.0(svelte@4.2.14): resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.2.13 + svelte: 4.2.14 - /svelte-keyed@2.0.0(svelte@4.2.13): + /svelte-keyed@2.0.0(svelte@4.2.14): resolution: {integrity: sha512-7TeEn+QbJC2OJrHiuM0T8vMBkms3DNpTE+Ir+NtnVBnBMA78aL4f1ft9t0Hn/pBbD/TnIXi4YfjFRAgtN+DZ5g==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.13 + svelte: 4.2.14 dev: true /svelte-lazy-loader@1.0.0: resolution: {integrity: sha512-AZD6R60vksyojn21FgXLglmBiBB9K5Dkdu0hdGrLbCaRCYT68IsWkZfRUqKhMx1IfzqWcZQ8X9y/f+Ih0oNQkQ==} dev: false - /svelte-meta-tags@3.1.2(svelte@4.2.13)(typescript@5.4.5): + /svelte-meta-tags@3.1.2(svelte@4.2.14)(typescript@5.4.5): resolution: {integrity: sha512-zw8xSA10ce7atFO1o0N1x41+qU+HBnpGx8KcVRAWPy5iiRdO6fvUFMg6VwJVgMhLSBEUTZXKAvMALLUssbCoCw==} peerDependencies: svelte: ^3.55.0 || ^4.0.0 dependencies: schema-dts: 1.1.2(typescript@5.4.5) - svelte: 4.2.13 + svelte: 4.2.14 transitivePeerDependencies: - typescript dev: true - /svelte-parse-markup@0.1.2(svelte@4.2.13): + /svelte-parse-markup@0.1.2(svelte@4.2.14): resolution: {integrity: sha512-DycY7DJr7VqofiJ63ut1/NEG92HrWWL56VWITn/cJCu+LlZhMoBkBXT4opUitPEEwbq1nMQbv4vTKUfbOqIW1g==} peerDependencies: svelte: ^3.0.0 || ^4.0.0 dependencies: - svelte: 4.2.13 + svelte: 4.2.14 dev: true - /svelte-preprocess@5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.13)(typescript@5.4.5): + /svelte-preprocess@5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(sass@1.75.0)(svelte@4.2.14)(typescript@5.4.5): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true @@ -6798,48 +6796,48 @@ packages: sass: 1.75.0 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.2.13 + svelte: 4.2.14 typescript: 5.4.5 dev: true - /svelte-render@2.0.1(svelte@4.2.13): + /svelte-render@2.0.1(svelte@4.2.14): resolution: {integrity: sha512-RpB0SurwXm4xhjvHHtjeqMmvd645FURb79GFOotScOSqnKK5vpqBgoBPGC0pp+E/eZgDSQ9rRAdn/+N4ys1mXQ==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.13 - svelte-subscribe: 2.0.1(svelte@4.2.13) + svelte: 4.2.14 + svelte-subscribe: 2.0.1(svelte@4.2.14) dev: true /svelte-sequential-preprocessor@2.0.1: resolution: {integrity: sha512-N5JqlBni6BzElxmuFrOPxOJnjsxh1cFDACLEVKs8OHBcx8ZNRO1p5SxuQex1m3qbLzAC8G99EHeWcxGkjyKjLQ==} engines: {node: '>=16'} dependencies: - svelte: 4.2.13 + svelte: 4.2.14 tslib: 2.6.2 dev: true - /svelte-subscribe@2.0.1(svelte@4.2.13): + /svelte-subscribe@2.0.1(svelte@4.2.14): resolution: {integrity: sha512-eKXIjLxB4C7eQWPqKEdxcGfNXm2g/qJ67zmEZK/GigCZMfrTR3m7DPY93R6MX+5uoqM1FRYxl8LZ1oy4URWi2A==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.13 + svelte: 4.2.14 dev: true - /svelte-writable-derived@3.1.0(svelte@4.2.13): + /svelte-writable-derived@3.1.0(svelte@4.2.14): resolution: {integrity: sha512-cTvaVFNIJ036vSDIyPxJYivKC7ZLtcFOPm1Iq6qWBDo1fOHzfk6ZSbwaKrxhjgy52Rbl5IHzRcWgos6Zqn9/rg==} peerDependencies: svelte: ^3.2.1 || ^4.0.0-next.1 dependencies: - svelte: 4.2.13 + svelte: 4.2.14 dev: false - /svelte@4.2.13: - resolution: {integrity: sha512-jtVt2KXLbQnsWN93Zd7EVboNh8Tqexes4rZfXNP7nYRjd9+JjubTD8BXloUmU1OUYpc6pdd1aKBhCV+b2ZKoMg==} + /svelte@4.2.14: + resolution: {integrity: sha512-ry3+YlWqZpHxLy45MW4MZIxNdvB+Wl7p2nnstWKbOAewaJyNJuOtivSbRChcfIej6wFBjWqyKmf/NgK1uW2JAA==} engines: {node: '>=16'} dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 '@types/estree': 1.0.5 @@ -6854,36 +6852,53 @@ packages: magic-string: 0.30.9 periscopic: 3.1.0 - /sveltekit-flash-message@2.4.4(@sveltejs/kit@2.5.5)(svelte@4.2.13): + /sveltekit-flash-message@2.4.4(@sveltejs/kit@2.5.6)(svelte@4.2.14): resolution: {integrity: sha512-CFN03chH/FMEJcBZ/8zKm7RqGee/pwb57Spbbx8QCQPhe7N9ofZHd9iYV2vVy4E9glBo/oQ1IG7VQje6L092wg==} peerDependencies: '@sveltejs/kit': 1.x || 2.x svelte: 3.x || 4.x || >=5.0.0-next.51 dependencies: - '@sveltejs/kit': 2.5.5(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8) - svelte: 4.2.13 + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8) + svelte: 4.2.14 dev: true - /sveltekit-rate-limiter@0.4.3(@sveltejs/kit@2.5.5): - resolution: {integrity: sha512-BKkD2tvgyz5j4Fn1vt0y7FLF0zZ01f9thjWPGDb6fyX3tBXyMrtZ8ISK8M7zjz9Cik/2KrkvFtmldhXF6/hjqw==} + /sveltekit-rate-limiter@0.5.1(@sveltejs/kit@2.5.6): + resolution: {integrity: sha512-Q2C7mT9PdoL6v3VXgxngyXiEg2i3Dp0iVjVvKi722lroTM7oHxAJsmj66607BiSw8mdQk1Me6nhE6uRXrkDVIg==} peerDependencies: '@sveltejs/kit': 1.x || 2.x dependencies: '@isaacs/ttlcache': 1.4.1 - '@sveltejs/kit': 2.5.5(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8) + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8) dev: true - /sveltekit-superforms@2.12.4(@sveltejs/kit@2.5.5)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.13): + /sveltekit-superforms@2.12.4(@sveltejs/kit@2.5.6)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.14): resolution: {integrity: sha512-0LILJfTpOZj8UhEfcuVZwuyDR63EGTjBq/TwHJn38PcC6KHGZ0bXu8DVHxslGUffEi9EHgeyshoJk7x3EoJVhQ==} peerDependencies: '@sveltejs/kit': 1.x || 2.x svelte: 3.x || 4.x || >=5.0.0-next.51 + peerDependenciesMeta: + '@sinclair/typebox': + optional: true + '@vinejs/vine': + optional: true + arktype: + optional: true + joi: + optional: true + superstruct: + optional: true + valibot: + optional: true + yup: + optional: true + zod: + optional: true dependencies: - '@sveltejs/kit': 2.5.5(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.13)(vite@5.2.8) + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.8) devalue: 4.3.2 just-clone: 6.2.0 memoize-weak: 1.0.2 - svelte: 4.2.13 + svelte: 4.2.14 ts-deepmerge: 7.0.0 optionalDependencies: '@gcornut/valibot-json-schema': 0.0.27(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(valibot@0.30.0) @@ -7195,12 +7210,12 @@ packages: requiresBuild: true optional: true - /vite-imagetools@6.2.9: - resolution: {integrity: sha512-C4ZYhgj2vAj43/TpZ06XlDNP0p/7LIeYbgUYr+xG44nM++4HGX6YZBKAYpiBNgiCFUTJ6eXkRppWBrfPMevgmg==} - engines: {node: '>=12.0.0'} + /vite-imagetools@7.0.1: + resolution: {integrity: sha512-23jnLhkTH0HR9Vd9LxMYnajOLeo0RJNEAHhtlsQP6kfPuOBoTzt54rWbEWB9jmhEXAOflLQpM+FrmilVPAoyGA==} + engines: {node: '>=18.0.0'} dependencies: '@rollup/pluginutils': 5.1.0 - imagetools-core: 6.0.4 + imagetools-core: 7.0.0 transitivePeerDependencies: - rollup dev: true diff --git a/src/routes/(app)/(protected)/collection/+page.server.ts b/src/routes/(app)/(protected)/collections/+page.server.ts similarity index 100% rename from src/routes/(app)/(protected)/collection/+page.server.ts rename to src/routes/(app)/(protected)/collections/+page.server.ts diff --git a/src/routes/(app)/(protected)/collection/+page.svelte b/src/routes/(app)/(protected)/collections/+page.svelte similarity index 100% rename from src/routes/(app)/(protected)/collection/+page.svelte rename to src/routes/(app)/(protected)/collections/+page.svelte diff --git a/src/routes/(app)/(protected)/wishlist/+page.server.ts b/src/routes/(app)/(protected)/collections/[id]/+page.server.ts similarity index 100% rename from src/routes/(app)/(protected)/wishlist/+page.server.ts rename to src/routes/(app)/(protected)/collections/[id]/+page.server.ts diff --git a/src/routes/(app)/(protected)/collections/[id]/+page.svelte b/src/routes/(app)/(protected)/collections/[id]/+page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/(app)/(protected)/collection/add/+page.server.ts b/src/routes/(app)/(protected)/collections/add/+page.server.ts similarity index 100% rename from src/routes/(app)/(protected)/collection/add/+page.server.ts rename to src/routes/(app)/(protected)/collections/add/+page.server.ts diff --git a/src/routes/(app)/(protected)/collection/add/+page.svelte b/src/routes/(app)/(protected)/collections/add/+page.svelte similarity index 100% rename from src/routes/(app)/(protected)/collection/add/+page.svelte rename to src/routes/(app)/(protected)/collections/add/+page.svelte diff --git a/src/routes/(app)/(protected)/collection/add/bgg/+page.server.ts b/src/routes/(app)/(protected)/collections/add/bgg/+page.server.ts similarity index 100% rename from src/routes/(app)/(protected)/collection/add/bgg/+page.server.ts rename to src/routes/(app)/(protected)/collections/add/bgg/+page.server.ts diff --git a/src/routes/(app)/(protected)/collection/add/bgg/+page.svelte b/src/routes/(app)/(protected)/collections/add/bgg/+page.svelte similarity index 100% rename from src/routes/(app)/(protected)/collection/add/bgg/+page.svelte rename to src/routes/(app)/(protected)/collections/add/bgg/+page.svelte diff --git a/src/routes/(app)/(protected)/wishlists/+page.server.ts b/src/routes/(app)/(protected)/wishlists/+page.server.ts new file mode 100644 index 0000000..18b376d --- /dev/null +++ b/src/routes/(app)/(protected)/wishlists/+page.server.ts @@ -0,0 +1,164 @@ +import { error, type Actions } from '@sveltejs/kit'; +import { and, eq } from 'drizzle-orm'; +import { zod } from 'sveltekit-superforms/adapters'; +import { superValidate } from 'sveltekit-superforms/server'; +import { redirect } from 'sveltekit-flash-message/server'; +import { modifyListGameSchema } from '$lib/validations/zod-schemas'; +import db from '$lib/drizzle.js'; +import { notSignedInMessage } from '$lib/flashMessages.js'; +import { games, wishlist_items, wishlists } from '../../../../schema.js'; + +export async function load(event) { + const { params, locals } = event; + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + + console.log('Wishlist load User id', locals.user.id); + + try { + const wishlist = await db.query.wishlists.findFirst({ + where: eq(wishlists.user_id, locals.user.id) + }); + + if (!wishlist) { + redirect(302, '/404'); + } + + const items = await db.query.wishlist_items.findMany({ + where: eq(wishlist_items.wishlist_id, wishlist.id), + with: { + game: { + columns: { + id: true, + name: true, + thumb_url: true + } + } + } + }); + + console.log('wishlist', wishlist); + + return { + items + }; + } catch (e) { + console.error(e); + } + redirect(302, '/404'); +} + +export const actions: Actions = { + // Add game to a wishlist + add: async (event) => { + const { locals } = event; + const form = await superValidate(event, zod(modifyListGameSchema)); + + try { + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + + const game = await db.query.games.findFirst({ + where: eq(games.id, form.data.id) + }); + + if (!game) { + // game = await prisma.game.create({ + // data: { + // name: form.name + // } + // }); + console.log('game not found'); + redirect(302, '/404'); + } + + if (game) { + const wishlist = await db.query.wishlists.findFirst({ + where: eq(wishlists.user_id, locals.user.id) + }); + + if (!wishlist) { + console.log('Wishlist not found'); + return error(404, 'Wishlist not found'); + } + + await db.insert(wishlist_items).values({ + game_id: game.id, + wishlist_id: wishlist.id + }); + } + + return { + form + }; + } catch (e) { + console.error(e); + return error(500, 'Something went wrong'); + } + }, + // Create new wishlist + create: async (event) => { + const { locals } = event; + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + return error(405, 'Method not allowed'); + }, + // Delete a wishlist + delete: async ({ locals }) => { + if (!locals.user) { + redirect(302, '/login'); + } + return error(405, 'Method not allowed'); + }, + // Remove game from a wishlist + remove: async (event) => { + const { locals } = event; + const form = await superValidate(event, zod(modifyListGameSchema)); + + try { + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + + const game = await db.query.games.findFirst({ + where: eq(games.id, form.data.id) + }); + + if (!game) { + // game = await prisma.game.create({ + // data: { + // name: form.name + // } + // }); + console.log('game not found'); + redirect(302, '/404'); + } + + if (game) { + const wishlist = await db.query.wishlists.findFirst({ + where: eq(wishlists.user_id, locals.user.id) + }); + + if (!wishlist) { + console.log('Wishlist not found'); + return error(404, 'Wishlist not found'); + } + + await db.delete(wishlist_items).where(and( + eq(wishlist_items.wishlist_id, wishlist.id), + eq(wishlist_items.game_id, game.id) + )); + } + + return { + form + }; + } catch (e) { + console.error(e); + return error(500, 'Something went wrong'); + } + } +}; diff --git a/src/routes/(app)/(protected)/wishlist/+page.svelte b/src/routes/(app)/(protected)/wishlists/+page.svelte similarity index 100% rename from src/routes/(app)/(protected)/wishlist/+page.svelte rename to src/routes/(app)/(protected)/wishlists/+page.svelte diff --git a/src/routes/(app)/(protected)/wishlists/[id]/+page.server.ts b/src/routes/(app)/(protected)/wishlists/[id]/+page.server.ts new file mode 100644 index 0000000..18b376d --- /dev/null +++ b/src/routes/(app)/(protected)/wishlists/[id]/+page.server.ts @@ -0,0 +1,164 @@ +import { error, type Actions } from '@sveltejs/kit'; +import { and, eq } from 'drizzle-orm'; +import { zod } from 'sveltekit-superforms/adapters'; +import { superValidate } from 'sveltekit-superforms/server'; +import { redirect } from 'sveltekit-flash-message/server'; +import { modifyListGameSchema } from '$lib/validations/zod-schemas'; +import db from '$lib/drizzle.js'; +import { notSignedInMessage } from '$lib/flashMessages.js'; +import { games, wishlist_items, wishlists } from '../../../../schema.js'; + +export async function load(event) { + const { params, locals } = event; + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + + console.log('Wishlist load User id', locals.user.id); + + try { + const wishlist = await db.query.wishlists.findFirst({ + where: eq(wishlists.user_id, locals.user.id) + }); + + if (!wishlist) { + redirect(302, '/404'); + } + + const items = await db.query.wishlist_items.findMany({ + where: eq(wishlist_items.wishlist_id, wishlist.id), + with: { + game: { + columns: { + id: true, + name: true, + thumb_url: true + } + } + } + }); + + console.log('wishlist', wishlist); + + return { + items + }; + } catch (e) { + console.error(e); + } + redirect(302, '/404'); +} + +export const actions: Actions = { + // Add game to a wishlist + add: async (event) => { + const { locals } = event; + const form = await superValidate(event, zod(modifyListGameSchema)); + + try { + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + + const game = await db.query.games.findFirst({ + where: eq(games.id, form.data.id) + }); + + if (!game) { + // game = await prisma.game.create({ + // data: { + // name: form.name + // } + // }); + console.log('game not found'); + redirect(302, '/404'); + } + + if (game) { + const wishlist = await db.query.wishlists.findFirst({ + where: eq(wishlists.user_id, locals.user.id) + }); + + if (!wishlist) { + console.log('Wishlist not found'); + return error(404, 'Wishlist not found'); + } + + await db.insert(wishlist_items).values({ + game_id: game.id, + wishlist_id: wishlist.id + }); + } + + return { + form + }; + } catch (e) { + console.error(e); + return error(500, 'Something went wrong'); + } + }, + // Create new wishlist + create: async (event) => { + const { locals } = event; + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + return error(405, 'Method not allowed'); + }, + // Delete a wishlist + delete: async ({ locals }) => { + if (!locals.user) { + redirect(302, '/login'); + } + return error(405, 'Method not allowed'); + }, + // Remove game from a wishlist + remove: async (event) => { + const { locals } = event; + const form = await superValidate(event, zod(modifyListGameSchema)); + + try { + if (!locals.user) { + redirect(302, '/login', notSignedInMessage, event); + } + + const game = await db.query.games.findFirst({ + where: eq(games.id, form.data.id) + }); + + if (!game) { + // game = await prisma.game.create({ + // data: { + // name: form.name + // } + // }); + console.log('game not found'); + redirect(302, '/404'); + } + + if (game) { + const wishlist = await db.query.wishlists.findFirst({ + where: eq(wishlists.user_id, locals.user.id) + }); + + if (!wishlist) { + console.log('Wishlist not found'); + return error(404, 'Wishlist not found'); + } + + await db.delete(wishlist_items).where(and( + eq(wishlist_items.wishlist_id, wishlist.id), + eq(wishlist_items.game_id, game.id) + )); + } + + return { + form + }; + } catch (e) { + console.error(e); + return error(500, 'Something went wrong'); + } + } +}; diff --git a/src/routes/(app)/(protected)/wishlists/[id]/+page.svelte b/src/routes/(app)/(protected)/wishlists/[id]/+page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/(app)/+page.server.ts b/src/routes/(app)/+page.server.ts index 907ae29..5e001b6 100644 --- a/src/routes/(app)/+page.server.ts +++ b/src/routes/(app)/+page.server.ts @@ -1,13 +1,16 @@ import type { MetaTagsProps } from 'svelte-meta-tags'; +import { eq } from 'drizzle-orm'; import type { PageServerLoad } from './$types'; +import db from '$lib/drizzle'; +import { collections, wishlists } from '../../schema'; -export const load: PageServerLoad = async ({ fetch, url }) => { +export const load: PageServerLoad = async ({ locals, url }) => { const image = { url: `${ new URL(url.pathname, url.origin).href }og?header=Bored Game&page=Home&content=Keep track of your games`, width: 1200, - height: 630 + height: 630, }; const metaTags: MetaTagsProps = Object.freeze({ title: 'Home', @@ -19,7 +22,7 @@ export const load: PageServerLoad = async ({ fetch, url }) => { title: 'Home', description: 'Bored Game, keep track of your games', images: [image], - siteName: 'Bored Game' + siteName: 'Bored Game', }, twitter: { handle: '@boredgame', @@ -30,9 +33,31 @@ export const load: PageServerLoad = async ({ fetch, url }) => { image: `${ new URL(url.pathname, url.origin).href }og?header=Bored Game&page=Home&content=Keep track of your games`, - imageAlt: 'Home | Bored Game' - } + imageAlt: 'Home | Bored Game', + }, }); - return { metaTagsChild: metaTags }; + const user = locals.user; + if (user) { + const userWishlists = await db.query.wishlists.findMany({ + columns: { + cuid: true, + name: true, + }, + where: eq(wishlists.user_id, user.id), + }); + const userCollection = await db.query.collections.findMany({ + columns: { + cuid: true, + name: true, + }, + where: eq(collections.user_id, user.id), + }); + + console.log('Wishlists', userWishlists); + console.log('Collections', userCollection); + return { metaTagsChild: metaTags, user, wishlists: userWishlists, collections: userCollection }; + } + + return { metaTagsChild: metaTags, user: locals.user, wishlists: [], collections: [] }; }; diff --git a/src/routes/(app)/+page.svelte b/src/routes/(app)/+page.svelte index ab93e00..d0e0759 100644 --- a/src/routes/(app)/+page.svelte +++ b/src/routes/(app)/+page.svelte @@ -1,17 +1,29 @@
- diff --git a/src/schema.ts b/src/schema.ts index 3b31627..544fe96 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -140,6 +140,7 @@ export const collections = pgTable('collections', { user_id: uuid('user_id') .notNull() .references(() => users.id, { onDelete: 'cascade' }), + name: text('name').notNull().default('My Collection'), created_at: timestamp('created_at').notNull().defaultNow(), updated_at: timestamp('updated_at').notNull().defaultNow(), }); @@ -188,6 +189,7 @@ export const wishlists = pgTable('wishlists', { user_id: uuid('user_id') .notNull() .references(() => users.id, { onDelete: 'cascade' }), + name: text('name').notNull().default('My Wishlist'), created_at: timestamp('created_at').notNull().defaultNow(), updated_at: timestamp('updated_at').notNull().defaultNow(), });