From ec339cfd99d024c77d5315132cc6836da7c7c93b Mon Sep 17 00:00:00 2001 From: Izan Gil <66965250+SrIzan10@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:13 +0200 Subject: [PATCH 1/7] feat: first commit, basically gravatar selector left --- compose.yml | 12 + drizzle.config.ts | 15 + package.json | 22 +- .../20240330233911_init/migration.sql | 10 - prisma/migrations/migration_lock.toml | 3 - prisma/schema.prisma | 22 - src/app.d.ts | 5 +- src/app.html | 11 +- src/drizzle/0000_wealthy_dagger.sql | 32 + src/drizzle/meta/0000_snapshot.json | 150 ++ src/drizzle/meta/_journal.json | 13 + src/hooks.client.ts | 23 - src/hooks.server.ts | 42 +- src/lib/components/NavBar.svelte | 57 +- src/lib/components/dashboard/Messages.svelte | 5 +- src/lib/components/dashboard/UserCard.svelte | 9 +- src/lib/server/auth/index.ts | 35 + src/lib/server/db/index.ts | 17 +- src/lib/server/db/schema.ts | 29 + src/lib/types/ResultType.ts | 23 + src/lib/zod/auth.ts | 6 + src/routes/+layout.server.ts | 7 + src/routes/+layout.svelte | 8 +- src/routes/+page.svelte | 12 + .../{[...user] => [user]}/+page.server.ts | 21 +- src/routes/{[...user] => [user]}/+page.svelte | 8 +- src/routes/api/logout/+server.ts | 15 + src/routes/dashboard/+page.server.ts | 20 +- src/routes/dashboard/+page.svelte | 14 +- src/routes/login/+page.server.ts | 47 + src/routes/login/+page.svelte | 39 + src/routes/register/+page.server.ts | 47 + src/routes/register/+page.svelte | 39 + src/routes/signIn/+page.svelte | 16 - src/routes/signUp/+page.svelte | 7 - static/android-chrome-192x192.png | Bin 0 -> 2025 bytes static/android-chrome-256x256.png | Bin 0 -> 2526 bytes static/apple-touch-icon.png | Bin 0 -> 1520 bytes static/browserconfig.xml | 9 + static/favicon-16x16.png | Bin 0 -> 450 bytes static/favicon-32x32.png | Bin 0 -> 639 bytes static/favicon.ico | Bin 0 -> 15086 bytes static/favicon.png | Bin 1571 -> 0 bytes static/html_code.html | 9 + static/mstile-150x150.png | Bin 0 -> 1533 bytes static/safari-pinned-tab.svg | 24 + static/site.webmanifest | 19 + static/tbh.png | Bin 0 -> 6746 bytes static/tbh.webp | Bin 0 -> 3742 bytes vite.config.ts | 5 +- yarn.lock | 1395 ++++++++--------- 51 files changed, 1385 insertions(+), 917 deletions(-) create mode 100644 compose.yml create mode 100644 drizzle.config.ts delete mode 100644 prisma/migrations/20240330233911_init/migration.sql delete mode 100644 prisma/migrations/migration_lock.toml delete mode 100644 prisma/schema.prisma create mode 100644 src/drizzle/0000_wealthy_dagger.sql create mode 100644 src/drizzle/meta/0000_snapshot.json create mode 100644 src/drizzle/meta/_journal.json delete mode 100644 src/hooks.client.ts create mode 100644 src/lib/server/auth/index.ts create mode 100644 src/lib/server/db/schema.ts create mode 100644 src/lib/types/ResultType.ts create mode 100644 src/lib/zod/auth.ts create mode 100644 src/routes/+layout.server.ts rename src/routes/{[...user] => [user]}/+page.server.ts (59%) rename src/routes/{[...user] => [user]}/+page.svelte (93%) create mode 100644 src/routes/api/logout/+server.ts create mode 100644 src/routes/login/+page.server.ts create mode 100644 src/routes/login/+page.svelte create mode 100644 src/routes/register/+page.server.ts create mode 100644 src/routes/register/+page.svelte delete mode 100644 src/routes/signIn/+page.svelte delete mode 100644 src/routes/signUp/+page.svelte create mode 100644 static/android-chrome-192x192.png create mode 100644 static/android-chrome-256x256.png create mode 100644 static/apple-touch-icon.png create mode 100644 static/browserconfig.xml create mode 100644 static/favicon-16x16.png create mode 100644 static/favicon-32x32.png create mode 100644 static/favicon.ico delete mode 100644 static/favicon.png create mode 100644 static/html_code.html create mode 100644 static/mstile-150x150.png create mode 100644 static/safari-pinned-tab.svg create mode 100644 static/site.webmanifest create mode 100644 static/tbh.png create mode 100644 static/tbh.webp diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..d5ecbb7 --- /dev/null +++ b/compose.yml @@ -0,0 +1,12 @@ +volumes: + psql-tbh: +services: + psql: + image: postgres + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: dfsjhkdswkjntelsmldbfvsgknl5t + volumes: + - psql-tbh:/var/lib/postgresql/data + ports: + - 5555:5432 \ No newline at end of file diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..9a7ef11 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,15 @@ +import 'dotenv/config'; +import { defineConfig } from 'drizzle-kit'; + +export default defineConfig({ + dialect: 'postgresql', + out: './src/drizzle', + schema: './src/lib/server/db/schema.ts', + dbCredentials: { + url: process.env.DATABASE_URL!, + }, + // Print all statements + verbose: true, + // Always ask for confirmation + strict: true, +}); \ No newline at end of file diff --git a/package.json b/package.json index 404591f..7223b12 100644 --- a/package.json +++ b/package.json @@ -2,16 +2,13 @@ "name": "tbh", "version": "0.0.1-alpha", "private": true, - "packageManager": "yarn@1.22.21", "scripts": { "dev": "vite dev", "dev:pages": "wrangler pages dev .svelte-kit/cloudflare", - "build": "yarn db:generateprod && vite build", + "build": "vite build", "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "db:generate": "prisma generate", - "db:generateprod": "prisma generate --no-engine", "tail": "wrangler pages deployment tail --project-name=tbh" }, "devDependencies": { @@ -22,6 +19,8 @@ "@types/ws": "^8.5.10", "autoprefixer": "^10.4.17", "daisyui": "^4.6.1", + "dotenv": "^16.4.5", + "drizzle-kit": "^0.23.2", "postcss": "^8.4.34", "prisma": "^5.11.0", "svelte": "^4.2.7", @@ -34,16 +33,21 @@ }, "type": "module", "dependencies": { - "@clerk/themes": "^1.7.10", + "@libsql/client": "^0.6.1", + "@lucia-auth/adapter-drizzle": "^1.0.7", "@neondatabase/serverless": "^0.9.0", "@prisma/adapter-neon": "^5.11.0", "@prisma/client": "^5.11.0", "@prisma/extension-accelerate": "^1.0.0", "@types/node": "^20.11.17", - "clerk-sveltekit": "^0.4.1", - "isomorphic-ws": "^5.0.0", + "drizzle-orm": "^0.32.2", + "lucia": "^3.2.0", + "lucide-svelte": "^0.381.0", + "postgres": "^3.4.4", + "svelte-sonner": "^0.3.27", "ts-node": "^10.9.2", "ws": "^8.16.0", - "zod": "^3.22.4" - } + "zod": "^3.23.8" + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/prisma/migrations/20240330233911_init/migration.sql b/prisma/migrations/20240330233911_init/migration.sql deleted file mode 100644 index 977c674..0000000 --- a/prisma/migrations/20240330233911_init/migration.sql +++ /dev/null @@ -1,10 +0,0 @@ --- CreateTable -CREATE TABLE "Question" ( - "id" TEXT NOT NULL, - "body" TEXT NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - "forUser" TEXT NOT NULL, - - CONSTRAINT "Question_pkey" PRIMARY KEY ("id") -); diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml deleted file mode 100644 index fbffa92..0000000 --- a/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma deleted file mode 100644 index d0a5fcf..0000000 --- a/prisma/schema.prisma +++ /dev/null @@ -1,22 +0,0 @@ -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? -// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init - -generator client { - provider = "prisma-client-js" -} - -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} - -model Question { - id String @id @default(uuid()) - body String - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - forUser String -} \ No newline at end of file diff --git a/src/app.d.ts b/src/app.d.ts index 743f07b..fc92ec8 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -3,7 +3,10 @@ declare global { namespace App { // interface Error {} - // interface Locals {} + interface Locals { + user: import("lucia").User | null; + session: import("lucia").Session | null; + } // interface PageData {} // interface PageState {} // interface Platform {} diff --git a/src/app.html b/src/app.html index fdf2de7..39e70d7 100644 --- a/src/app.html +++ b/src/app.html @@ -2,10 +2,19 @@ - %sveltekit.head% + + + + + + + + + +
%sveltekit.body%
diff --git a/src/drizzle/0000_wealthy_dagger.sql b/src/drizzle/0000_wealthy_dagger.sql new file mode 100644 index 0000000..bbcc97d --- /dev/null +++ b/src/drizzle/0000_wealthy_dagger.sql @@ -0,0 +1,32 @@ +CREATE TABLE IF NOT EXISTS "question" ( + "id" text PRIMARY KEY NOT NULL, + "for_username" text NOT NULL, + "text" text NOT NULL, + "created-at" date +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "session" ( + "id" text PRIMARY KEY NOT NULL, + "user_id" text NOT NULL, + "expires_at" timestamp with time zone NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "user" ( + "id" text PRIMARY KEY DEFAULT '2a78a7e1-5468-474e-9858-2ab153c036c9' NOT NULL, + "username" text NOT NULL, + "hashed_password" text NOT NULL, + "image_url" text DEFAULT '/tbh.webp', + CONSTRAINT "user_username_unique" UNIQUE("username") +); +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "question" ADD CONSTRAINT "question_for_username_user_username_fk" FOREIGN KEY ("for_username") REFERENCES "public"."user"("username") ON DELETE no action ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; diff --git a/src/drizzle/meta/0000_snapshot.json b/src/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..f5a59a1 --- /dev/null +++ b/src/drizzle/meta/0000_snapshot.json @@ -0,0 +1,150 @@ +{ + "id": "6202055c-f02c-43c8-b2da-1e6f52b0d9bb", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.question": { + "name": "question", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "for_username": { + "name": "for_username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created-at": { + "name": "created-at", + "type": "date", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "question_for_username_user_username_fk": { + "name": "question_for_username_user_username_fk", + "tableFrom": "question", + "tableTo": "user", + "columnsFrom": [ + "for_username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "default": "'2a78a7e1-5468-474e-9858-2ab153c036c9'" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "hashed_password": { + "name": "hashed_password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "image_url": { + "name": "image_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/tbh.webp'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + } + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/src/drizzle/meta/_journal.json b/src/drizzle/meta/_journal.json new file mode 100644 index 0000000..649c7d3 --- /dev/null +++ b/src/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1723065498982, + "tag": "0000_wealthy_dagger", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/src/hooks.client.ts b/src/hooks.client.ts deleted file mode 100644 index 22be2dd..0000000 --- a/src/hooks.client.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { HandleClientError } from '@sveltejs/kit' -import { initializeClerkClient } from 'clerk-sveltekit/client' -import { PUBLIC_CLERK_PUBLISHABLE_KEY } from '$env/static/public' -import { dark } from '@clerk/themes' - -initializeClerkClient(PUBLIC_CLERK_PUBLISHABLE_KEY, { - afterSignInUrl: '/dashboard', - afterSignUpUrl: '/dashboard', - signInUrl: '/signIn', - signUpUrl: '/signUp', - appearance: { - baseTheme: dark, - variables: { - colorBackground: '#15191E', - colorPrimary: '#7582ff', - colorSuccess: '#69fec3' - } - } -}) - -export const handleError: HandleClientError = async ({ error, event }) => { - console.error(error, event) -} \ No newline at end of file diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 52e9e44..105546c 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,12 +1,32 @@ -import type { Handle } from '@sveltejs/kit' -import { sequence } from '@sveltejs/kit/hooks' -import { handleClerk } from 'clerk-sveltekit/server' -import { CLERK_SECRET_KEY } from '$env/static/private' +import { lucia } from "$lib/server/auth"; +import type { Handle } from "@sveltejs/kit"; -export const handle: Handle = sequence( - handleClerk(CLERK_SECRET_KEY, { - debug: true, - protectedPaths: ['/dashboard'], - signInUrl: '/signIn', - }) -) \ No newline at end of file +export const handle: Handle = async ({ event, resolve }) => { + const sessionId = event.cookies.get(lucia.sessionCookieName); + if (!sessionId) { + event.locals.user = null; + event.locals.session = null; + return resolve(event); + } + + const { session, user } = await lucia.validateSession(sessionId); + if (session && session.fresh) { + const sessionCookie = lucia.createSessionCookie(session.id); + // sveltekit types deviates from the de-facto standard + // you can use 'as any' too + event.cookies.set(sessionCookie.name, sessionCookie.value, { + path: ".", + ...sessionCookie.attributes + }); + } + if (!session) { + const sessionCookie = lucia.createBlankSessionCookie(); + event.cookies.set(sessionCookie.name, sessionCookie.value, { + path: ".", + ...sessionCookie.attributes + }); + } + event.locals.user = user; + event.locals.session = session; + return resolve(event); +}; diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte index 8959161..809b4db 100644 --- a/src/lib/components/NavBar.svelte +++ b/src/lib/components/NavBar.svelte @@ -1,22 +1,51 @@ - + + + \ No newline at end of file diff --git a/src/lib/components/dashboard/Messages.svelte b/src/lib/components/dashboard/Messages.svelte index a9a7b60..50e57f3 100644 --- a/src/lib/components/dashboard/Messages.svelte +++ b/src/lib/components/dashboard/Messages.svelte @@ -1,8 +1,9 @@
@@ -13,7 +14,7 @@ Why not post your link?

- +
{/if} {#each [...messages] as msg} diff --git a/src/lib/components/dashboard/UserCard.svelte b/src/lib/components/dashboard/UserCard.svelte index 8792611..804394a 100644 --- a/src/lib/components/dashboard/UserCard.svelte +++ b/src/lib/components/dashboard/UserCard.svelte @@ -1,18 +1,19 @@ \ No newline at end of file diff --git a/src/lib/server/auth/index.ts b/src/lib/server/auth/index.ts new file mode 100644 index 0000000..806cda7 --- /dev/null +++ b/src/lib/server/auth/index.ts @@ -0,0 +1,35 @@ +import { Lucia } from "lucia"; +import { dev } from "$app/environment"; +import { DrizzlePostgreSQLAdapter } from "@lucia-auth/adapter-drizzle"; +import db from "../db"; +import * as schema from "../db/schema"; + +const adapter = new DrizzlePostgreSQLAdapter(db, schema.session, schema.user); + +export const lucia = new Lucia(adapter, { + sessionCookie: { + attributes: { + secure: !dev, + } + }, + getUserAttributes: (attributes) => { + return { + username: attributes.username, + hashedPassword: attributes.hashedPassword, + imageUrl: attributes.imageUrl, + }; + } +}); + +declare module "lucia" { + interface Register { + Lucia: typeof lucia; + DatabaseUserAttributes: DatabaseUserAttributes; + } +} + +interface DatabaseUserAttributes { + username: string; + hashedPassword: string; + imageUrl: string | null; +} \ No newline at end of file diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts index 45d1af6..ba9f559 100644 --- a/src/lib/server/db/index.ts +++ b/src/lib/server/db/index.ts @@ -1,5 +1,14 @@ -import { DATABASE_URL } from "$env/static/private" -import { PrismaClient } from "@prisma/client/edge" +import { createClient } from '@libsql/client/web'; +import { drizzle } from 'drizzle-orm/postgres-js'; +import * as schema from './schema'; +import { DATABASE_URL } from '$env/static/private'; +import postgres from 'postgres'; -const prisma = new PrismaClient({ datasources: { db: { url: DATABASE_URL } } }) -export default prisma \ No newline at end of file +/* const turso = createClient({ + url: DATABASE_URL, + authToken: DATABASE_AUTH_TOKEN, +}); */ +const pg = postgres(DATABASE_URL) +const db = drizzle(pg, { schema }); + +export default db; \ No newline at end of file diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts new file mode 100644 index 0000000..d281434 --- /dev/null +++ b/src/lib/server/db/schema.ts @@ -0,0 +1,29 @@ +import { sql } from "drizzle-orm"; +import { pgTable, text, integer, date, timestamp } from "drizzle-orm/pg-core"; + +export const user = pgTable("user", { + id: text("id").primaryKey().default(crypto.randomUUID()), + username: text("username").notNull().unique(), + hashedPassword: text("hashed_password").notNull(), + imageUrl: text("image_url").default('/tbh.webp'), +}); + +export const session = pgTable("session", { + id: text("id").primaryKey(), + userId: text("user_id") + .notNull() + .references(() => user.id), + expiresAt: timestamp("expires_at", { + withTimezone: true, + mode: "date" + }).notNull() +}); + +export const question = pgTable("question", { + id: text("id").primaryKey(), + forUsername: text("for_username") + .notNull() + .references(() => user.username), + body: text("text").notNull(), + createdAt: date('created-at') +}); \ No newline at end of file diff --git a/src/lib/types/ResultType.ts b/src/lib/types/ResultType.ts new file mode 100644 index 0000000..fc8d9b8 --- /dev/null +++ b/src/lib/types/ResultType.ts @@ -0,0 +1,23 @@ +import type { BuildQueryResult, DBQueryConfig, ExtractTablesWithRelations } from 'drizzle-orm'; +import * as schema from '../server/db/schema'; + +type Schema = typeof schema; +type TSchema = ExtractTablesWithRelations; + +export type IncludeRelation = DBQueryConfig< + 'one' | 'many', + boolean, + TSchema, + TSchema[TableName] +>['with']; + +export type InferResultType< + TableName extends keyof TSchema, + With extends IncludeRelation | undefined = undefined +> = BuildQueryResult< + TSchema, + TSchema[TableName], + { + with: With; + } +>; \ No newline at end of file diff --git a/src/lib/zod/auth.ts b/src/lib/zod/auth.ts new file mode 100644 index 0000000..5aa3549 --- /dev/null +++ b/src/lib/zod/auth.ts @@ -0,0 +1,6 @@ +import { z } from "zod"; + +export const accountSchema = z.object({ + username: z.string().min(3, { message: 'Mininum 3 characters' }).max(31, { message: 'Maximum 31 characters' }).regex(/^[a-z0-9_-]+$/, { message: 'Only characters from a-z, 0-9, underscores and dashes' }), + password: z.string().min(6, { message: 'Minimum 6 characters' }).max(255, { message: 'Maximum 255 characters' }), +}) \ No newline at end of file diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts new file mode 100644 index 0000000..29d579c --- /dev/null +++ b/src/routes/+layout.server.ts @@ -0,0 +1,7 @@ +import type { LayoutServerLoad } from './$types'; + +export const load: LayoutServerLoad = async (event) => { + return { + user: event.locals.user, + }; +}; \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index dc3716f..2e552e6 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,6 +1,9 @@ - - + + \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 78be877..5eb87e6 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,3 +1,15 @@ + +

insert landing page here

bottom text

diff --git a/src/routes/[...user]/+page.server.ts b/src/routes/[user]/+page.server.ts similarity index 59% rename from src/routes/[...user]/+page.server.ts rename to src/routes/[user]/+page.server.ts index 32cbd8a..4464bcb 100644 --- a/src/routes/[...user]/+page.server.ts +++ b/src/routes/[user]/+page.server.ts @@ -1,17 +1,17 @@ -import { CLERK_SECRET_KEY } from '$env/static/private'; import type { PageServerLoad } from './$types'; import { z } from 'zod'; import { redirect } from '@sveltejs/kit'; -import type { User } from '$lib/types/User'; -import prisma from '$lib/server/db'; +import db from '$lib/server/db'; +import * as schema from '$lib/server/db/schema'; +import { eq } from 'drizzle-orm'; export const load: PageServerLoad = async ({ params }) => { - const getUser = (await fetch(`https://api.clerk.com/v1/users?username=${params.user}`, { headers: { 'Authorization': `Bearer ${CLERK_SECRET_KEY}` } }).then(res => res.json()))[0] as User | null; + const getUser = await db.select().from(schema.user).where(eq(schema.user.username, params.user)).execute().then(res => res[0]); if (!getUser) throw redirect(302, '/404') return { - imageUrl: getUser.image_url, - username: getUser.username!, + imageUrl: getUser.imageUrl, + username: getUser.username, }; }; @@ -28,11 +28,10 @@ export const actions = { try { formSchema.parse({ question, username }) - await prisma.question.create({ - data: { - body: question as string, - forUser: username as string - } + await db.insert(schema.question).values({ + body: question as string, + forUsername: username as string, + id: crypto.randomUUID() }) return { success: true, diff --git a/src/routes/[...user]/+page.svelte b/src/routes/[user]/+page.svelte similarity index 93% rename from src/routes/[...user]/+page.svelte rename to src/routes/[user]/+page.svelte index cd488e1..88cb62b 100644 --- a/src/routes/[...user]/+page.svelte +++ b/src/routes/[user]/+page.svelte @@ -1,10 +1,10 @@ {#if form} diff --git a/src/routes/api/logout/+server.ts b/src/routes/api/logout/+server.ts new file mode 100644 index 0000000..24fcd6d --- /dev/null +++ b/src/routes/api/logout/+server.ts @@ -0,0 +1,15 @@ +import { error, redirect } from '@sveltejs/kit'; +import { lucia } from '$lib/server/auth'; + +export const GET = async ({ locals, cookies }) => { + if (!locals.session) return error(401, 'Unauthorized'); + + await lucia.invalidateSession(locals.session.id) + + const sessionCookie = lucia.createBlankSessionCookie(); + cookies.set(sessionCookie.name, sessionCookie.value, { + path: '.', + ...sessionCookie.attributes + }); + return redirect(302, '/') +}; \ No newline at end of file diff --git a/src/routes/dashboard/+page.server.ts b/src/routes/dashboard/+page.server.ts index e591d3d..2a51623 100644 --- a/src/routes/dashboard/+page.server.ts +++ b/src/routes/dashboard/+page.server.ts @@ -1,19 +1,17 @@ -import { CLERK_SECRET_KEY } from '$env/static/private'; -import prisma from '$lib/server/db'; -import type { User } from '$lib/types/User'; +import db from '$lib/server/db'; +import { desc, eq } from 'drizzle-orm'; import type { PageServerLoad } from './$types'; +import { question } from '$lib/server/db/schema'; +import { redirect } from '@sveltejs/kit'; export const load: PageServerLoad = async (event) => { // @ts-ignore - const user = event.locals.session; - const getUsername = (await fetch(`https://api.clerk.com/v1/users?user_id=${user.userId}`, { headers: { 'Authorization': `Bearer ${CLERK_SECRET_KEY}` } }).then(res => res.json()))[0] as User; - const questions = await prisma.question.findMany({ - where: { - forUser: getUsername.username! - } - }) + const user = event.locals.user; + if (!user) return redirect(302, '/login') + const questions = await db.select().from(question).where(eq(question.forUsername, user.username)).orderBy(desc(question.createdAt)).execute(); return { - questions + questions, + user } }; \ No newline at end of file diff --git a/src/routes/dashboard/+page.svelte b/src/routes/dashboard/+page.svelte index 3e1e309..09c01db 100644 --- a/src/routes/dashboard/+page.svelte +++ b/src/routes/dashboard/+page.svelte @@ -1,19 +1,13 @@ - +{#if data.user}
- - q.body)} clerk={clerk} /> + + q.body)} user={data.user} />
-
- - -

Loading!

-
\ No newline at end of file +{/if} \ No newline at end of file diff --git a/src/routes/login/+page.server.ts b/src/routes/login/+page.server.ts new file mode 100644 index 0000000..94a5a7e --- /dev/null +++ b/src/routes/login/+page.server.ts @@ -0,0 +1,47 @@ +import { lucia } from '$lib/server/auth' +import db from '$lib/server/db/index.js' +import { user } from '$lib/server/db/schema.js' +import { accountSchema } from '$lib/zod/auth.js' +import { redirect } from '@sveltejs/kit' +import { eq } from 'drizzle-orm' + +export const actions = { + default: async ({ request, cookies }) => { + const formData = await request.formData() + const parsed = accountSchema.safeParse(Object.fromEntries(formData.entries())) + + if (!parsed.success) { + return { + success: false, + message: `From ${parsed.error.errors[0].path.join('.')}: ${parsed.error.errors[0].message}` + } + } + + const existingUser = (await db.select().from(user).where(eq(user.username, parsed.data.username)).execute())[0] + if (!existingUser) { + return { + success: false, + message: 'Incorrect username or password' + } + } + + const hashedPassword = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(parsed.data.password)).then(buffer => Array.from(new Uint8Array(buffer)).map(byte => byte.toString(16).padStart(2, '0')).join('')) + const validPassword = hashedPassword === existingUser.hashedPassword + if (!validPassword) { + return { + error: "Incorrect username or password", + success: false, + }; + } + + const session = await lucia.createSession(existingUser.id, {}); + const sessionCookie = lucia.createSessionCookie(session.id); + cookies.set(sessionCookie.name, sessionCookie.value, { + path: ".", + ...sessionCookie.attributes + }); + + return redirect(302, '/dashboard') + } +} + \ No newline at end of file diff --git a/src/routes/login/+page.svelte b/src/routes/login/+page.svelte new file mode 100644 index 0000000..01866c1 --- /dev/null +++ b/src/routes/login/+page.svelte @@ -0,0 +1,39 @@ + + +
+
+
+
+

Login

+

It's great to see you again!

+
+
+
+ + +
+
+ Register +
+ +
+ +
+
+
\ No newline at end of file diff --git a/src/routes/register/+page.server.ts b/src/routes/register/+page.server.ts new file mode 100644 index 0000000..fd2d029 --- /dev/null +++ b/src/routes/register/+page.server.ts @@ -0,0 +1,47 @@ +import { lucia } from '$lib/server/auth' +import db from '$lib/server/db/index.js' +import { user } from '$lib/server/db/schema.js' +import { accountSchema } from '$lib/zod/auth.js' +import { redirect } from '@sveltejs/kit' +import { eq } from 'drizzle-orm' +import { generateId } from 'lucia' + +export const actions = { + default: async ({ request, cookies }) => { + const formData = await request.formData() + const parsed = accountSchema.safeParse(Object.fromEntries(formData.entries())) + + if (!parsed.success) { + return { + success: false, + message: `From ${parsed.error.errors[0].path.join('.')}: ${parsed.error.errors[0].message}` + } + } + + if ((await db.select().from(user).where(eq(user.username, parsed.data.username)).execute())[0]) { + return { + success: false, + message: 'Username already exists' + } + } + + const { username, password } = parsed.data + const hashedPassword = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(password)).then(buffer => Array.from(new Uint8Array(buffer)).map(byte => byte.toString(16).padStart(2, '0')).join('')) + const userId = generateId(15); + + await db.insert(user).values({ + username, + hashedPassword, + id: userId + }) + + const session = await lucia.createSession(userId, {}); + const sessionCookie = lucia.createSessionCookie(session.id); + cookies.set(sessionCookie.name, sessionCookie.value, { + path: ".", + ...sessionCookie.attributes + }); + + return redirect(302, '/dashboard') + } +} \ No newline at end of file diff --git a/src/routes/register/+page.svelte b/src/routes/register/+page.svelte new file mode 100644 index 0000000..641098a --- /dev/null +++ b/src/routes/register/+page.svelte @@ -0,0 +1,39 @@ + + +
+
+
+
+

Sign up

+

Let's start your anonymous question page!

+
+
+
+ + +
+
+ Login +
+ +
+ +
+
+
\ No newline at end of file diff --git a/src/routes/signIn/+page.svelte b/src/routes/signIn/+page.svelte deleted file mode 100644 index 0734dca..0000000 --- a/src/routes/signIn/+page.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
-
- - - - -

Cooking...

-
-
- -
-
\ No newline at end of file diff --git a/src/routes/signUp/+page.svelte b/src/routes/signUp/+page.svelte deleted file mode 100644 index e0fb669..0000000 --- a/src/routes/signUp/+page.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -
- -
\ No newline at end of file diff --git a/static/android-chrome-192x192.png b/static/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd8227adb479bab75ba9941b54a62f82cb84440 GIT binary patch literal 2025 zcmVPx#KTu3mMNDaN+1c6I+1bOx!`a!{+1c6I+1b|C*4f$F z+1c6I+1UU90RR90CMG65Jw3(6#S|12etv#qV`H$eu$!BkAOx~y0000AbW%=J04ZYG zvWGw?mqtGx| zRpiq1Pv;x7Jwep>d(X=g&Tk+}ekTU)y$JCBhlsl{6s!#P{)Y!v+|l_>M7x-Vx{B5L zdm1i-P_y{%uaQ&}?folRNa+3wA#LX2N!@=!;6=jV7tIAGQb{3k^rViX3!-N~EY$J4 zzq!;RlTdTfTx<|i2}RjlZ%{@{N0n%9F;PWIp3vN6QNpO^xA{MhYBkC5k0^wj{h#w` zK~cW3q@08QAqevD|2%?R{6C8zAOFuG$jSdR2#T!y*9Zz~`9EwtsI&85Bd9U+pC&^? z%!?T02mqLO0?N{Vji92LfUv13M**XR%$tmj(-nZP42rVJ+MF`rP3Fca2ar36^39;0 znTR(8jMFB-rsKM7NSHB*@>j53$5aR~QoyMAZcpnR>5%4i1Du5aQDCkW?Efmm;AU!Fq2}}4x#snkiC5CE25x_2n7*GVTn-GzV zpj`|Vf+m3N<+uWx0Jc0tG=jDmqBx4ZOiBGE0MN|_i9&8^y#uTWJdh)ELYC z_Ota~PT(g3w*>BRm!*2Z$;{VV)nwOnR#dZxl{SQOn^xuV`bZ8jV!)^WPD4KeY z<`vk7GHYelV02mz+SC%j?MWq%hWKyQ-1s)`3=RNrqK9kJ}p0bmNz z$FO_GH#~o(@BohUL%;8w@8PG%EC5P00k6+kDM0JEa}%H`=v@?)W&lP7^vx##yb1;n zcE6k6rGoNHpi|HrfW;Gud_Mq*0bouocq^EC10A%m-rFgfV0ccA^v+(rOr<|*nI!4?WQ5t#Yy$6o~~kNK7v zfOUek%3wF0#EoSZe)a5j6~LY)Jb=MI169*FPJ`SJ&yfIVGKaZw_41P;GJvDpgaXhb zoBt030NMb6J^(=*fVc}ln;gJ|d_tQRz+?nahO8LulXs+%7`gIcejmX0QLMQTl3(*H zCAN{A>%tSRF<_-%p>rt z5@Q>qdqiPboyO!Lh2Qg2F}i2oV=5!Cd}etUL4j>q$hN`ZuY!ncqqr@Cd7H8dT)&UK zI*ri6<-S9+6m4<3dt}^Q_U*At8FJcX;4UTesCVk@QIvL{ z_+j5CUMrp)HH+3>x_77kr*6?z?QvJFgtK?J@3#*y$&}S9qdHlw!u+ciJN=OUZKF7n z`wI)NJ=C|#qu6GvTJ$TLTPn8ZlB&6;Dt^V*S`UV(*!um7!}t4{wWzI2TQld~JR|)1 z!#0ngTzI+v4v0|%z{q__Y{)@gV_AmANq@3SfbW^FoUQ=!mVy7d$9bOFi8(tvMW18_ zNJw`_@g?aw`u zcvp5q$*y*P6@!R?0mNmYp8&(H-ftMr#uAjbd;cS8#!DmjaR~8N)daKOqAWRQnfm^Mqb`b~dNcj6I(yIm?Eh&00BAgHEFxe)1^@s6 zS9(-fbW&k=AaHVTW@&6?Aar?fWguyAbYlPjc%0+%3K74o@y2zNmU-QO-}A@$e!kCnzR&sdoLst#16ER55&(d8azTkbY?dx;eUPod?keWYaYLYGLq^WXJm{)4V%P|M)s)XTJL{Ot}A;n zX22Gh2ORM{*?#8M`Tfqgqy6INQ~_2x7Sw#5@cCtKoM!zxnSN7|eS0k)e*_`uTrZ)~ z_2}PqaW4eKgjG9#125Ow%zhut{TZ~}!3+V>ZzONy6EB3CSZG4`ku1@c!s0(J8E5dz zTuU6RaLu|e*lX~{u2d^M$Gh8VsHQ;ivo8nY5~`#Lj~;Fzptl!uDKK3|857?Z%UxoK z11%UOOhvR4x1Fez<@g1j*uYjR`(PwKI!ufERz8F==CQ94bi%$>-&0}HBvFFM*e>R_ zLDGgptF@gIO?D4N%jvjmhf?#CS(!1Z7k4OnP_1|Ba%o0$GTGFI)og3-sOTw?9<@!v z(e2(ZP}H^0?I@vF&{oBrOHRv$LG3 zf?_8(&-P)??Z(t#74D6WNkT9P4u-9w`N!d99!mK8z{i$e2UKmTP7efzE@?h?T%Elj zBq=BFcSti2U8d=o{Z_)f;Sl+>1pGLsWH$XwCG2865{H{ChOSz2GNIZi78N2T%_5WR ztvS4Ch#q|1LUA&Kdy7+&0ETV?#ohjZW((g%`72!x|g>rQ|>2O?w!$j!9JP#pz*gcsd6~4Kg->Q~nrG~1KF0HyYDtYA&J5ZcwibYP` zk8cuIS3sL|1(CyjV%29iI)}cf2gYwfuIXBvVaNo2G|q5NreZr3s*g!)qNwtXa;%im zKqyf+Klm2bGb4es(Ui-FX?9}J_17iN4xpsaG5Mlc%uA~fGsO(o^b3=y+FownuPIk0 zX%H46Eq4GF^T;O30Ez*0nHVKOK6OY`M;4lo!m3imlPGd+1R2E9CR4TfX~SaKr|59u zNYUuzya%L$^9Xh|(ID~A9{Wa{#q%M3kNYXd&enRp(L5RV21y<9KY?y_|FK?B{>v@> zT!_>s-PHhuf_5ha48mJ{ql!H9!|5tyQ%;R{-3|<+34MbkeBRfLW?Z-<{yspmW9e~P zlU&ChuzSHyG;;Q$smzXQce*oVKT8j6|0=4f65+Ce!LS8YY@XvM+XC^KByUo!+)D+S zP*o#rvm7HiS;bDh0(j4>Kf)li0k{KeVOn0A*@r{u30F-Y>_l<_A}rT?iYfut-T6ka zv62PDj{Yo70Om}#P@Mfu&^3ZVQ>QxsjgmvAX_w_U;;cvTD|9Hp_Sz@tG9vK2^YfiQ zH3wF=`ZA(U$)YR)CvzwcpHgpEvy5jRl)uPqgMm}IZPoZ`)w<7ngcJeW40|r_uXS&J zkkyVUiXsn~@BP#O6I#H-gnKa;DAscbK58gyKvz2Xf;|c_ENRQ8qtQ|e#dZ=5A&Px# zT>JU8F=>#Xc=qq;mFoQOXJN`$I{e%s)KzZ6C-2yQg0W28A41w8&49>)5zm7G7%>vY z@RKeI?*lFGVa1HS(-NF;*Jc%c1mCzb_GiWfJ~qYRpF`5?@lS-P*Jg3FcqQ3h zCc&UqLx!ZYH7pJC=4}4>0Z+l^2&<(x`&f&~Msntz49+s-v|j$U58s^)jk4~}&fJ+| zKD_6xU{H;#F+4@?PBoo&>e^V-EZES1Cs>U3%v13(E{j`5xR1&Fjd>t?H3f$RGgmU< zX zR$hvWHi}v6`jKnyQ#JTTVI?~_{;}yya#FkHyN|dZYb}{@7opdJdvsEsb6ZkMO3lQ8 zLl=czHiq3=tthKER%p8(l06+i#WpAGwOqYW>QT2Dx~}G6Ddo&V@H!D4=c~L z^*nVa>LS5oEA>$c-r=xsUpbM|V^j=wS#s4zS_G&y9( zD_18jwB8fWf_Uga+rezI^G{W?yog|G^K(O;q|>i`=XmqIaL)ous2mS67z8UhSXcX- zkTZEKT?s;adkV}NJXv0S@1ODa^&Ms0;+?Lo%nw2&9RuB2EgzG7ZN|62q1@U3MP=OX z@_;{i>$ew5nlnS;-(#2qqL*`7B#~cVwDrV>-wdj|o_$*7KW8#8+Bb9&;P4`k-HVhF zL`;x3T#7(`_@_%-$+lGd3le&BE3cRqCJNS1hp+tEq2f5MnLqDH)IL{YAEfEHxlDOv zpf0EBA(nu*_fy=}9GiZh`xs^X@Y43xlY-SRev-7Mcjb!kjWRYGo_M*7THLIWbEu{3 z4Zd`M>NB#gcO=IJ=5(s{i`dKB*$h_}?3>~v<-FR+SyD8kBVn>bYwbEWMCDp;N=P_~ zDce6G;OEdpu}D&&dAAt(6h%bi* md%OF)Rl6l#avZrw^ues6Y|N7N!OOcVfRmkzZIdPx#Ay7;|`?(;TQWOuWz; zFeONqM@KoZB^WM?wvlI|EQfX=vuyAqb8H&zMg|x(M)w`bv`=6e*SWC?bOa5`MiX?D zH$f9}gRdO4B;YLvDGB)aj+X@d<)9=1?;Mhy5gafBG6WX%@IX&u%fLIcZM1r6mHAO&B zkD4MNsfVrzNa~?00+M>@ihx*uF?vlEEkLe{4Wd$OVpq^x5@06|AG z=nVuN%b)`UEhBYBY!G~b)SL~%Qdh)Y2RfEQ2L@Uyi)9|yfzHLygBn^ai)9|yfHn*g z{(g37$6&Pr9v%Msa<{uTeQN=qPj=Pr^omF81_?i^dD**S$=Bm~t==cpA}Bh1ukK6l zf5vqSE(;m5e@PqDwvgoc;0?S7f2b&V1lCt|~&J z7f-7Gnf>yuo_)hb&*trKtGZF>u+03gvtPbZ>JJ3HNXSo}JK5AT0=Auj;SaFF$CF%mC(Td{R6_CEEo0wDM{yUSZL# z!YuMaf3}B8>oj(>dX+>oM%P6DR#y6Dqx0jD6Z%c{%`lmat!TA3xyz{)eW{FML7Oi> zm#7<||5s7R{^+h1eQGx1eQlzt*Avo+?TttP6dGy7zC(}z0^$RPG}^a*boBrzbZ9nW z-`C|U(Ei!IWef|9{ci|#2WX4%-$ulH52(@8rb8Byla45nAVs^IBK@9Nk!1I6OOh>oD6b zY8}{C7G%~YtLu~NSjAc4+S3Xb<5r0l%43kMbxn1JE5Sly57xZu9?MGYw!?8gsg>zT zvmFjn?9d!49XH#TA;m@pc>7jYyKS#Eh+a+D$ zwy}4IO#YKCdQU|L96FQv3Sj6+P7mXJNM9<6$blKLpv_}Gxlj@jbS%;n@gr5aP|yfE z777|WzLv`bjiF(HYCQ82nmaB^>EX>4U6ba`-PAZc)PV*mhnoa6Eg2ys>@ zD9TUE%t_@^00ScnE@KN5BNI!L6ay0=M1VBIWCJ6!R3OXP)X2ol#2my2%YaCrN-hBE W7ZG&wLN%2D0000 + + + + + #da532c + + + diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf1bd643b8a6395c90d4c32cce7784f735ad31e GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%At0G|+7pUlFWguty^x9;A(d;a|S1q&9iu(0gevqxN9+`zzK(xgcd5fO!j zg~yH^+q!kDpP%1*)kjBxCi9d8`2{oV)M(?Mck%Dj;$_aZvR-R|;?q4{977~7r}p3G zJFLLtd^pNu0pp>qcmMx?vBTr?lAo%ZRJH9Gob^}t1b$P3q$BpJlv^SK<0%@4))1)s|O!ymnpOW*aU z!9SoA!>d9fN`ey06$*;-(=u~X6-p`#QWY`_N|G5ED&{=?#KTb-rlE1l|MVHpr$G$N z%G`R%+``Jj-jhX`g%w;HOb(|oD{l@_IDO;Fi6du@$Q)rm-QcmnOON4|xM0aAC)24w PD;PXo{an^LB{Ts5)P%tn literal 0 HcmV?d00001 diff --git a/static/favicon-32x32.png b/static/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..b33614970c4af78623e4bfd014b1285b237a29b0 GIT binary patch literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaN>1AIbUeKHGg5(j`f?%cU^@!~~mYimJ4!Jwd^RjXEQ+qUiK(W9A}nHm}z zRaI3JCQSJD?OSheuZrc-0H6lmk|4ieh6C))8n?4Pi>;g#?3ADFtOIn1m#2$kh{fsJ z;OM4i1)d|~O9YQvB z5)7$*I|3PAo{+RX_(S%h9{a(y9jn#5Ql2~rd@WgcQY!7{mU{xWl?JOmuG$(m|D2N& z!^el6+M#ovHf;M~zFQ;ljtocleY0PU9CjLQ0UTHy@J8G1jL43Spct(Ri6{w5ELSKf%1_J8 zNmVGREJ#(zEGS84V5pe$_!AFDVVH)-DgV=FJf8+JFe`KGC36ca3wuu%VHQ?!X)rmQ w!mPYGMB(&}D<_VeIU;j}{d9xJ0xvy=SK@*tpPWpm01boFyt=akR{0AP(BN&o-= literal 0 HcmV?d00001 diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..93a9ae54ea41550a89ea37e6fe01ea708af43598 GIT binary patch literal 15086 zcmdU$KZsRF6vk(9L9F~!Xkn2p64_#lt%6{&Az~$1Xk)ox6VpjL3$qZg6J^U3i-kyH zVdsL2#Uf}K-BRO*ZR{)p0ZFmu=KEdeT<6W5x&PjK>-yk0cV^D{&Uen7nRnl0-oa*isVnsVp`3GeV1hmIID|=ElOxtY=YLY;_`ugh>Pk4|oO&InPWr}%FMN)* z7P4QEP@jGMPf8!(3w`Sxeb0R_>ZL7KIP{8PA91(XI>#XH)cfbG8RHzcaBAESn&+Hh z-^8}9{Wovk6n$if56>-oE@_@~YtT8fv9VFyyLYdXpgWL1+^(edv&N~L!TWW2dAT@t z>{us3cOZZ4;8?38jq%+#7?+%`t*v#EG4gNxZiH(o>CAcqNzATR_%_~^C~9r-?g{(LbrGm{j2 zvS;BkM6d-ThmUVKG{gY+5U~4$J77kXgi5$VbcJ6@B z`sFa=aeO4O8^^lj#{9q~vj%Wa)_xy+^4N7RzysYbxi|g|`QiH*8Oasv#U3*IE-kg3 z$cDBLUeDUtqHUH>Z zZsYdawQD6;_P6D*A^%DK#KD;yW77v~cXziEYLggR&bi7DF`{eSLLZDVZ}`N*e9QY@ zt%krLN0!^z2l3$pJ>qG>uejU#=JI2CF#eXChP8!z?ff)97JtZ}XX8wZbj`it+8SUR zW3vY2!{*>%c8M15$?q?8*$3FC*1_WFdTz$Pi2>W(IgL+zx9nTEC*L1Jf9xf&@P&{c z+r#h(b^APH3qP>HG<>UX@j@%u6P9<&d6v#xNhen0v(80+`@9>+QI``z%aTPaZ)e% zYCLChT${#)$y#uRy_3X#$L)g&_C#`?i$nN!XG)GHu{Xc~i`+~+=eal-mp|V7IH&MW zy~2e&HVHcDVuS6-dsvgdY0ilU>q0!_5nd@_4xNeRxhOx*6~*R(qEP#vb3fDm>)cng zJI)=XUD4kW(UJuHBQ+^Hw@bU^oYZCD+~2f^Keapb4?1VS-V1i#<{pcQ&^YVe8n@ly9x?i3dt_jJA9#wjoE{hSQmWad!**k!%nFg5!Rgg%EVIoXAT{7V|y?Y9PnM$ z9ro~!ZLOcdsAA7?H+!%n{`jtPk9~@}*&jW6G@Ap99Uaq;Td<=XRKCTdT(|l8`I^09 z(z5rX7^>VeXS(K_zKwxRZQv^S_KRiZqz!_rPY3aXz z|Gvz-aY=D!Eas1Y#;_;%U`4k0uIi6DxP~ zy(f&{p5=d99EhvYcff(QU{8#k&FaUw?9vAVtYps3XWUAk_wh>-cn{%$4Ypv^-nV0a zxxQ@41sL|O(!_;1JJYf06?2XQw zwf7~Dz3|Lfw$3$o*z0Vm{qXwr>mn4!B+P-M8>den`jRzC%`U{?86B@%VW@vIwB`B9 zlPATaM~_P3IiAM`25Qer-h#coyfeED*TfsSD_X7lJ`W46zqKQ9&+7pwUbCr%W^Z1y}ehCMC1 z*m#T&a5H=1Hd{EP#Bh#QOx7cP{~%$a{$?3l+EUB*2B`=$pE#QJd?&&!^= ztky5qZ|ZyBXMGKf)K8NgbFwA(W&L>jvFbO#U~iQ55OeT8nXBy|?Cqm@&M9;rOW1D+ e&y3af@9vWBezlV}b*H+*eXAt*v3Yc{!S;W$gT@yC literal 0 HcmV?d00001 diff --git a/static/favicon.png b/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH + + + + + + + + \ No newline at end of file diff --git a/static/mstile-150x150.png b/static/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..49751dd1ed4339862a384a7124b3a3067e1407fa GIT binary patch literal 1533 zcmZXUdpHvc7{*s<$K1}2q{s}FOEH|NhzeOWm(AUCqS;15W*c&kl81;emzcZNY0oAH z=OntWTv~2z(PoL7<{HK@G-v(U)B8N%^F6=s{o{TA`m#OU;VK|45C8yBaXIIN0swZX z{up^V*(Il1P$FCMVQ1XV007PTN?T|J8SfyX;0^#r|Ndzin0q3;&mzKOI2;c57s-4+ zpAUgRwzs!CJ3C!mTqqPuY;0^l_Q`9R2PC1~y#Q-^!wEF^gS>5TVP-h8D; zB*%Gommjh)=~cA`>agz(eAxMMtxKSh=MF?S=yNVlo;AOEB>;rf1bTJ2KTt;~o`EpNWcWvV$xz3>WfDSH3fXizTA3eHBZ~$1``z3jCy+V{jfe z0zLjg(D()z)dh14GQ&-VFf2pj_U=1XkzLfDV{Dn~n`UlrayKUT)?G)!T&J<{IgVm| zyUMcYepPR#3dQ*`Z!iq|s6%C>C%1%57@K>&Lx=X&vE`WIdQ@)tcf8)RV6a&KUZ3>C zKqvNA%7(eW=ECzz`CXP5hkV$3z!FU>8kQ?)pa zk={e_6F^!CdeVdnOvt!T1;%FNnrs>g_3iGfV*|O}JEz%LBsa^V=+@CjH_njVx>4BE z-l6DN;p#Z1Dysdc)&<}mfdcixn0X+*4QrSeNb^x4h`OE%_f<+Y;{ ztV{;*M@A><8l$hd1=@FdNlO0_t=k}6$f@@Sts6wU9VL%CKC20~4lU`CS;~_bw(29p zC2+~?ih>|~^QVp*21hFD%#vvG!hpFL@-vAcsWN-QEYIAfm$FA$B}9d)>a+r5o|_1Ouu?y z9+rU+GEV`Y=;}R8uoAYctyvW7=xItyMoPBKB{!Yy`IyBvztNcBe@< zH$3fX)znLkH!~fFq<$m2%8k69*0Ij(`boq}Vx_Xm70KG5CpCp=(=dn0;dDRzCx0JG zSMGtLLrUJczMtdf>wN!`em5a^Xwd z4D9+(UQLkJqr#;?MO4E`X@sF`=E=Q7xcV$`iuGfy zp>U=Z!RKi*O*f)#g3zkpY>`T>p`_Eg6*Mb?bnfG02;v6PnX z`svI33V4z3_2Be+lXm4)ndz74?N36X + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + diff --git a/static/site.webmanifest b/static/site.webmanifest new file mode 100644 index 0000000..ddca7e2 --- /dev/null +++ b/static/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "TBH", + "short_name": "TBH", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/static/tbh.png b/static/tbh.png new file mode 100644 index 0000000000000000000000000000000000000000..cb40e26ef4ca79678f2869a4e7b6593300aea1db GIT binary patch literal 6746 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 I0000000Vs=4.17.21" - browserslist@^4.22.2: version "4.22.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" @@ -1134,15 +1211,10 @@ buffer-crc32@^0.2.5: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -call-bind@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" - integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.3" - set-function-length "^1.2.0" +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== callsites@^3.0.0: version "3.1.0" @@ -1167,15 +1239,6 @@ capnp-ts@^0.7.0: debug "^4.3.1" tslib "^2.2.0" -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chokidar@^3.4.1, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -1191,14 +1254,6 @@ chokidar@^3.4.1, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -clerk-sveltekit@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/clerk-sveltekit/-/clerk-sveltekit-0.4.1.tgz#4de4b04c7ad472d50f22a3faa7319cd3c29ead27" - integrity sha512-MlV4kYLHXEZ8uaP5V/B9o0p5Aq6HUktIgNXlUWVxFbiSJ7RNqEEOIlMssGHrkow/5LDJsLqO4IrnnXyUROV5ww== - dependencies: - "@clerk/backend" "^0.32.1" - "@clerk/clerk-js" "^4.61.0" - code-red@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.4.tgz#59ba5c9d1d320a4ef795bc10a28bd42bfebe3e35" @@ -1210,13 +1265,6 @@ code-red@^1.0.3: estree-walker "^3.0.3" periscopic "^3.1.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1224,11 +1272,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -1244,12 +1287,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie@0.5.0, cookie@^0.5.0: +cookie@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== @@ -1259,29 +1297,6 @@ cookie@^0.6.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== -copy-to-clipboard@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" - integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== - dependencies: - toggle-selection "^1.0.6" - -core-js@3.26.1: - version "3.26.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" - integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -1317,16 +1332,6 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - culori@^3: version "3.3.0" resolved "https://registry.yarnpkg.com/culori/-/culori-3.3.0.tgz#e33530adbd124d53bd6550394397e695eaaed739" @@ -1347,6 +1352,11 @@ data-uri-to-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz#d296973d5a4897a5dbe31716d118211921f04770" integrity sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA== +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + debug@^4.3.1, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -1354,27 +1364,12 @@ debug@^4.3.1, debug@^4.3.4: dependencies: ms "2.1.2" -deepmerge@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" - integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.2" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -dequal@2.0.3, dequal@^2.0.3: +dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -1384,6 +1379,11 @@ detect-indent@^6.1.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + devalue@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/devalue/-/devalue-4.3.2.tgz#cc44e4cf3872ac5a78229fbce3b77e57032727b5" @@ -1404,13 +1404,25 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== +dotenv@^16.4.5: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +drizzle-kit@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/drizzle-kit/-/drizzle-kit-0.23.2.tgz#07fdc374e5e7c2a9f580d7449e000e90603dc16b" + integrity sha512-NWkQ7GD2OTbQ7HzcjsaCOf3n0tlFPSEAF38fvDpwDj8jRbGWGFtN2cD8I8wp4lU+5Os/oyP2xycTKGLHdPipUw== dependencies: - no-case "^3.0.4" - tslib "^2.0.3" + "@drizzle-team/brocli" "^0.8.2" + "@esbuild-kit/esm-loader" "^2.5.5" + esbuild "^0.19.7" + esbuild-register "^3.5.0" + +drizzle-orm@^0.32.2: + version "0.32.2" + resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.32.2.tgz#a44d8703120d44ad8005c6130b0b96ef967534d3" + integrity sha512-3fXKzPzrgZIcnWCSLiERKN5Opf9Iagrag75snfFlKeKSYB1nlgPBshzW3Zn6dQymkyiib+xc4nIz0t8U+Xdpuw== eastasianwidth@^0.2.0: version "0.2.0" @@ -1432,23 +1444,18 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - es6-promise@^3.1.2: version "3.3.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== +esbuild-register@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8" + integrity sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A== + dependencies: + debug "^4.3.4" + esbuild@0.17.19: version "0.17.19" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" @@ -1477,7 +1484,7 @@ esbuild@0.17.19: "@esbuild/win32-ia32" "0.17.19" "@esbuild/win32-x64" "0.17.19" -esbuild@^0.19.11, esbuild@^0.19.3: +esbuild@^0.19.11, esbuild@^0.19.3, esbuild@^0.19.7: version "0.19.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== @@ -1506,16 +1513,39 @@ esbuild@^0.19.11, esbuild@^0.19.3: "@esbuild/win32-ia32" "0.19.12" "@esbuild/win32-x64" "0.19.12" +esbuild@~0.18.20: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + 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" + escalade@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -1554,11 +1584,6 @@ fast-glob@^3.2.7, fast-glob@^3.3.0: merge2 "^1.3.0" micromatch "^4.0.4" -fastest-levenshtein@1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - fastparse@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" @@ -1571,6 +1596,14 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1578,11 +1611,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -1591,11 +1619,23 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + fraction.js@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== +fs-monkey@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1611,17 +1651,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - get-source@^2.0.12: version "2.0.12" resolved "https://registry.yarnpkg.com/get-source/-/get-source-2.0.12.tgz#0b47d57ea1e53ce0d3a69f4f3d277eb8047da944" @@ -1630,6 +1659,13 @@ get-source@^2.0.12: data-uri-to-buffer "^2.0.0" source-map "^0.6.1" +get-tsconfig@^4.7.0: + version "4.7.5" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" + integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== + dependencies: + resolve-pkg-maps "^1.0.0" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1644,7 +1680,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-to-regexp@0.4.1, glob-to-regexp@^0.4.1: +glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== @@ -1682,40 +1718,11 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - graceful-fs@^4.1.3: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - hasown@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" @@ -1723,13 +1730,6 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -hoist-non-react-statics@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -1756,11 +1756,6 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -1809,11 +1804,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isomorphic-ws@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" - integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== - jackspeak@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" @@ -1828,26 +1818,33 @@ jiti@^1.19.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== -js-cookie@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414" - integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +js-base64@^3.7.5: + version "3.7.7" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== kleur@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== +libsql@^0.3.10, libsql@^0.3.15: + version "0.3.18" + resolved "https://registry.yarnpkg.com/libsql/-/libsql-0.3.18.tgz#796f403736e7c6c7a3b7be35f559f702d3ab6166" + integrity sha512-lvhKr7WV3NLWRbXkjn/MeKqXOAqWKU0PX9QYrvDh7fneukapj+iUQ4qgJASrQyxcCrEsClXCQiiK5W6OoYPAlA== + dependencies: + "@neon-rs/load" "^0.0.4" + detect-libc "2.0.2" + libsql "^0.3.15" + optionalDependencies: + "@libsql/darwin-arm64" "0.3.18" + "@libsql/darwin-x64" "0.3.18" + "@libsql/linux-arm64-gnu" "0.3.18" + "@libsql/linux-arm64-musl" "0.3.18" + "@libsql/linux-x64-gnu" "0.3.18" + "@libsql/linux-x64-musl" "0.3.18" + "@libsql/win32-x64-msvc" "0.3.18" + lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -1868,23 +1865,23 @@ locate-character@^3.0.0: resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== -lodash@>=4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lucia@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lucia/-/lucia-3.2.0.tgz#de041c49fdcda8d370c5c894086b3d9e907e8c9e" + integrity sha512-eXMxXwk6hqtjRTj4W/x3EnTUtAztLPm0p2N2TEBMDEbakDLXiYnDQ9z/qahjPdPdhPguQc+vwO0/88zIWxlpuw== + dependencies: + oslo "1.2.0" + +lucide-svelte@^0.381.0: + version "0.381.0" + resolved "https://registry.yarnpkg.com/lucide-svelte/-/lucide-svelte-0.381.0.tgz#0717d91c954d72dd428e127aa87f58b8b5a4233d" + integrity sha512-bk9nlg6XHzvYoCA+rBLOFNsdJY6+qG/hRw4f6urUzvfnzlEue5+idoFeXXf2pCiNoSE/05IWper2cZ9BDV4EAQ== + magic-string@^0.25.3: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -1904,16 +1901,25 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-obj@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - mdn-data@2.0.30: version "2.0.30" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== +memfs-browser@^3.4.13000: + version "3.5.10302" + resolved "https://registry.yarnpkg.com/memfs-browser/-/memfs-browser-3.5.10302.tgz#2067baf616a1b3a8e8023a033e5ead434a7ea0c0" + integrity sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw== + dependencies: + memfs "3.5.3" + +memfs@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.3.tgz#d9b40fe4f8d5788c5f895bda804cd0d9eeee9f3b" + integrity sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== + dependencies: + fs-monkey "^1.0.4" + merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -2020,18 +2026,19 @@ nanoid@^3.3.3, nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch-native@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.0.1.tgz#1dfe78f57545d07e07016b7df4c0cb9d2ff416c7" - integrity sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg== +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" node-forge@^1: version "1.3.1" @@ -2063,11 +2070,6 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2075,6 +2077,14 @@ once@^1.3.0: dependencies: wrappy "1" +oslo@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/oslo/-/oslo-1.2.0.tgz#3d7e3132de725c4ec9ab738445e959bae99e5b2f" + integrity sha512-OoFX6rDsNcOQVAD2gQD/z03u4vEjWZLzJtwkmgfRF+KpQUXwdgEXErD7zNhyowmHwHefP+PM9Pw13pgpHMRlzw== + dependencies: + "@node-rs/argon2" "1.7.0" + "@node-rs/bcrypt" "1.9.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2082,16 +2092,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2120,11 +2120,6 @@ path-to-regexp@^6.2.0: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - periscopic@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" @@ -2255,6 +2250,11 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +postgres@^3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/postgres/-/postgres-3.4.4.tgz#adbe08dc1fff0dea3559aa4f83ded70a289a6cb8" + integrity sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A== + printable-characters@^1.0.42: version "1.0.42" resolved "https://registry.yarnpkg.com/printable-characters/-/printable-characters-1.0.42.tgz#3f18e977a9bd8eb37fcc4ff5659d7be90868b3d8" @@ -2267,40 +2267,11 @@ prisma@^5.11.0: dependencies: "@prisma/engines" "5.11.0" -pvtsutils@^1.3.2, pvtsutils@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.5.tgz#b8705b437b7b134cd7fd858f025a23456f1ce910" - integrity sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA== - dependencies: - tslib "^2.6.1" - -pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - -qrcode.react@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8" - integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -2315,16 +2286,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -regenerator-runtime@0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - regexparam@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-3.0.0.tgz#1673e09d41cb7fd41eaafd4040a6aa90daa0a21a" @@ -2335,12 +2296,17 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve.exports@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.19.0, resolve@^1.22.2, resolve@^1.22.8: +resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.8: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -2443,18 +2409,6 @@ set-cookie-parser@^2.6.0: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== -set-function-length@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== - dependencies: - define-data-property "^1.1.2" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2467,16 +2421,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" @@ -2491,23 +2435,6 @@ sirv@^2.0.4: mrmime "^2.0.0" totalist "^3.0.0" -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -snakecase-keys@5.4.4: - version "5.4.4" - resolved "https://registry.yarnpkg.com/snakecase-keys/-/snakecase-keys-5.4.4.tgz#28745b0175863ffc292ad97d96fe4e8e288a87a2" - integrity sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA== - dependencies: - map-obj "^4.1.0" - snake-case "^3.0.4" - type-fest "^2.5.2" - sorcery@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" @@ -2523,16 +2450,19 @@ source-map-js@^1.0.1, source-map-js@^1.0.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map@0.6.1, source-map@^0.6.1: +source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -2551,8 +2481,16 @@ stoppable@^1.1.0: resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: - name string-width-cjs +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2570,8 +2508,14 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - name strip-ansi-cjs +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -2592,11 +2536,6 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - sucrase@^3.32.0: version "3.35.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" @@ -2610,13 +2549,6 @@ sucrase@^3.32.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -2652,6 +2584,11 @@ svelte-preprocess@^5.1.0: sorcery "^0.11.0" strip-indent "^3.0.0" +svelte-sonner@^0.3.27: + version "0.3.27" + resolved "https://registry.yarnpkg.com/svelte-sonner/-/svelte-sonner-0.3.27.tgz#e64c2a35de8b08e9f00038a4b30afe891fc45d2e" + integrity sha512-+PvbuePNTyTNCepCWqKcFeu+Lo27yYuwfSc7zJvrWjCRMJrWAmccPg3j7jO1W13QoN3TySXU5Trb956VBQiM5Q== + svelte@^4.2.7: version "4.2.10" resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.10.tgz#3bef8d79ca75eb53cc4d03f9fac1546e60393f77" @@ -2672,18 +2609,6 @@ svelte@^4.2.7: magic-string "^0.30.4" periscopic "^3.1.0" -swr@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.0.tgz#575c6ac1bec087847f4c86a39ccbc0043c834d6a" - integrity sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ== - dependencies: - use-sync-external-store "^1.2.0" - -tabbable@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - tailwindcss@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" @@ -2734,11 +2659,6 @@ tiny-glob@^0.2.9: globalyzer "0.1.0" globrex "^0.1.2" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2746,11 +2666,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== - totalist@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" @@ -2780,21 +2695,11 @@ ts-node@^10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.2.0, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.6.1, tslib@^2.6.2: +tslib@^2.2.0, tslib@^2.4.0, tslib@^2.4.1: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -type-fest@^2.5.2: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - typescript@^5.0.3, typescript@^5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" @@ -2820,11 +2725,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -use-sync-external-store@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -2851,16 +2751,10 @@ vitefu@^0.2.5: resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-0.2.5.tgz#c1b93c377fbdd3e5ddd69840ea3aa70b40d90969" integrity sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q== -webcrypto-core@^1.7.4: - version "1.7.8" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.8.tgz#056918036e846c72cfebbb04052e283f57f1114a" - integrity sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg== - dependencies: - "@peculiar/asn1-schema" "^2.3.8" - "@peculiar/json-schema" "^1.1.12" - asn1js "^3.0.1" - pvtsutils "^1.3.5" - tslib "^2.6.2" +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== which@^2.0.1: version "2.0.2" @@ -2938,6 +2832,11 @@ ws@^8.11.0, ws@^8.16.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== +ws@^8.13.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== + xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -2948,11 +2847,6 @@ xxhash-wasm@^1.0.1: resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz#ecc0f813219b727af4d5f3958ca6becee2f2f1ff" integrity sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A== -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - yaml@^2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" @@ -2972,7 +2866,12 @@ youch@^3.2.2: mustache "^4.2.0" stacktracey "^2.1.8" -zod@^3.20.6, zod@^3.22.4: +zod@^3.20.6: version "3.22.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== + +zod@^3.23.8: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== From 09bb41d29451a5b1c8ea013b4ff45467887dce42 Mon Sep 17 00:00:00 2001 From: Izan Gil <66965250+SrIzan10@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:55:20 +0200 Subject: [PATCH 2/7] feat: gravatar done --- src/lib/components/NavBar.svelte | 11 +++++------ src/lib/zod/gravatar.ts | 5 +++++ src/routes/dashboard/+page.server.ts | 28 +++++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 src/lib/zod/gravatar.ts diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte index 809b4db..9391ee1 100644 --- a/src/lib/components/NavBar.svelte +++ b/src/lib/components/NavBar.svelte @@ -1,4 +1,5 @@