diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 1c3b86b..770ef68 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,31 +1,30 @@ module.exports = { root: true, - parser: '@typescript-eslint/parser', - extends: ['plugin:svelte/recommended'], - plugins: ['@typescript-eslint'], - ignorePatterns: ['*.cjs'], - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - // Parse the ` %sveltekit.head% diff --git a/src/hooks.client.ts b/src/hooks.client.ts new file mode 100644 index 0000000..9f2d761 --- /dev/null +++ b/src/hooks.client.ts @@ -0,0 +1,24 @@ +// import { dev } from '$app/environment'; +// import { handleErrorWithSentry, Replay } from '@sentry/sveltekit'; +// import * as Sentry from '@sentry/sveltekit'; + +// TODO: Fix Sentry +// Sentry.init({ +// dsn: 'https://742e43279df93a3c4a4a78c12eb1f879@o4506057768632320.ingest.sentry.io/4506057770401792', +// tracesSampleRate: 1.0, + +// // This sets the sample rate to be 10%. You may want this to be 100% while +// // in development and sample at a lower rate in production +// replaysSessionSampleRate: 0.1, + +// // If the entire session is not sampled, use the below sample rate to sample +// // sessions when an error occurs. +// replaysOnErrorSampleRate: 1.0, + +// // If you don't want to use Session Replay, just remove the line below: +// integrations: [new Replay()], +// environment: dev ? 'development' : 'production' +// }); + +// // If you have a custom error handler, pass it to `handleErrorWithSentry` +// export const handleError = handleErrorWithSentry(); diff --git a/src/hooks.server..ts b/src/hooks.server..ts deleted file mode 100644 index ef64e7f..0000000 --- a/src/hooks.server..ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Handle } from '@sveltejs/kit'; - -export const handle: Handle = async ({ event, resolve }) => { - let userid = event.cookies.get('userid'); - - if (!userid) { - // if this is the first time the user has visited this app, - // set a cookie so that we recognise them when they return - userid = crypto.randomUUID(); - event.cookies.set('userid', userid, { path: '/' }); - } - - event.locals.userid = userid; - - return resolve(event); -}; diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..a7776f0 --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,60 @@ +// import * as Sentry from '@sentry/sveltekit'; +import { sequence } from '@sveltejs/kit/hooks'; +import type { Handle } from '@sveltejs/kit'; +import { dev } from '$app/environment'; +import { lucia } from '$lib/server/auth'; + +// TODO: Fix Sentry as it is not working on SvelteKit v2 +// Sentry.init({ +// dsn: 'https://742e43279df93a3c4a4a78c12eb1f879@o4506057768632320.ingest.sentry.io/4506057770401792', +// tracesSampleRate: 1, +// environment: dev ? 'development' : 'production', +// enabled: !dev +// }); + +export const authentication: Handle = async function ({ event, resolve }) { + const startTimer = Date.now(); + event.locals.startTimer = startTimer; + + const ip = event.request.headers.get('x-forwarded-for') as string; + const country = event.request.headers.get('x-vercel-ip-country') as string; + event.locals.ip = dev ? '127.0.0.1' : ip; // || event.getClientAddress(); + event.locals.country = dev ? 'us' : country; + + 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); + console.log('sessionCookie', JSON.stringify(sessionCookie, null, 2)); + // 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(); + console.log('blank sessionCookie', JSON.stringify(sessionCookie, null, 2)); + event.cookies.set(sessionCookie.name, sessionCookie.value, { + path: ".", + ...sessionCookie.attributes + }); + } + event.locals.user = user; + event.locals.session = session; + + return resolve(event); +}; + +export const handle: Handle = sequence( + // Sentry.sentryHandle(), + authentication +); +// export const handleError = Sentry.handleErrorWithSentry(); \ No newline at end of file diff --git a/src/lib/Counter.svelte b/src/lib/Counter.svelte deleted file mode 100644 index 9c2199c..0000000 --- a/src/lib/Counter.svelte +++ /dev/null @@ -1,103 +0,0 @@ - - -
- - -
-
- - {Math.floor($displayed_count)} -
-
- - -
- - diff --git a/src/lib/components/header/bored-game.png b/src/lib/assets/bored-game.png similarity index 100% rename from src/lib/components/header/bored-game.png rename to src/lib/assets/bored-game.png diff --git a/src/lib/assets/bored-game.svg b/src/lib/assets/bored-game.svg new file mode 100644 index 0000000..159ae83 --- /dev/null +++ b/src/lib/assets/bored-game.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/components/AddToList.svelte b/src/lib/components/AddToList.svelte new file mode 100644 index 0000000..7756276 --- /dev/null +++ b/src/lib/components/AddToList.svelte @@ -0,0 +1,112 @@ + + +
+ {#if in_wishlist} +
+ + +
+ {:else} +
+ + +
+ {/if} + + {#if in_collection} +
+ + +
+ {:else} +
+ + +
+ {/if} +
+ + + + \ No newline at end of file diff --git a/src/lib/components/analytics.svelte b/src/lib/components/Analytics.svelte similarity index 100% rename from src/lib/components/analytics.svelte rename to src/lib/components/Analytics.svelte diff --git a/src/lib/components/Footer.svelte b/src/lib/components/Footer.svelte new file mode 100644 index 0000000..2e779a4 --- /dev/null +++ b/src/lib/components/Footer.svelte @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/src/lib/components/Game.svelte b/src/lib/components/Game.svelte new file mode 100644 index 0000000..33950ba --- /dev/null +++ b/src/lib/components/Game.svelte @@ -0,0 +1,64 @@ + + +
+ + + + + {game.name} + {#if game?.year_published} + ({game?.year_published}) + {/if} + + + + + + {`Image +
+ {#if game?.players} +

Players: {game.players}

+

Time: {game.playtime} minutes

+ {#if isGameType(game) && game?.min_age} +

Min Age: {game.min_age}

+ {/if} + {#if detailed && isGameType(game) && game?.description} +
{@html game.description}
+ {/if} + {/if} +
+
+
+
+
+ + diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte new file mode 100644 index 0000000..9384909 --- /dev/null +++ b/src/lib/components/Header.svelte @@ -0,0 +1,158 @@ + + +
+
+ +
+ +
+ Bored Game +
+
+ + +
+ + diff --git a/src/lib/components/LinkWithIcon.svelte b/src/lib/components/LinkWithIcon.svelte index e09ab3d..1ca4829 100644 --- a/src/lib/components/LinkWithIcon.svelte +++ b/src/lib/components/LinkWithIcon.svelte @@ -19,5 +19,6 @@ grid-template-columns: repeat(2, auto); place-items: center; gap: 0.25rem; + margin: 1rem; } diff --git a/src/lib/components/loading.svelte b/src/lib/components/Loading.svelte similarity index 100% rename from src/lib/components/loading.svelte rename to src/lib/components/Loading.svelte diff --git a/src/lib/components/WishlistButton.svelte b/src/lib/components/WishlistButton.svelte new file mode 100644 index 0000000..0a8728d --- /dev/null +++ b/src/lib/components/WishlistButton.svelte @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/src/lib/components/button/index.svelte b/src/lib/components/button/index.svelte index 482acd5..80e0419 100644 --- a/src/lib/components/button/index.svelte +++ b/src/lib/components/button/index.svelte @@ -1,6 +1,5 @@ @@ -9,29 +8,22 @@ - diff --git a/src/lib/components/dialog/ClearCollectionDialog.svelte b/src/lib/components/dialog/ClearCollectionDialog.svelte index 6a9d3c5..5f6ed4d 100644 --- a/src/lib/components/dialog/ClearCollectionDialog.svelte +++ b/src/lib/components/dialog/ClearCollectionDialog.svelte @@ -1,13 +1,13 @@ - { boredState.update((n) => ({ ...n, dialog: { isOpen: false } })); }} static -> -
- +> --> +
+
- Clear collection - Are you sure you want to clear your collection? + +
-
+ \ No newline at end of file diff --git a/src/lib/components/game/index.svelte b/src/lib/components/game/index.svelte deleted file mode 100644 index 7149077..0000000 --- a/src/lib/components/game/index.svelte +++ /dev/null @@ -1,187 +0,0 @@ - - -
-

{game.name}

- - - {`Image - - - -
-

Players: {game.players}

-

Time: {game.playtime} minutes

- {#if isGameType(game) && game?.min_age} -

Min Age: {game.min_age}

- {/if} - {#if detailed && isGameType(game) && game?.description} -
{@html game.description}
- {/if} -
- -
- {#if existsInCollection} - - {:else} - - {/if} - {#if existsInWishlist} - - {:else} - - {/if} -
-
- - diff --git a/src/lib/components/header/index.svelte b/src/lib/components/header/index.svelte deleted file mode 100644 index b9319e8..0000000 --- a/src/lib/components/header/index.svelte +++ /dev/null @@ -1,79 +0,0 @@ - - -
-
- - Bored Game Home - -
- - -
- - diff --git a/src/lib/components/header/svelte-logo.svg b/src/lib/components/header/svelte-logo.svg deleted file mode 100644 index 49492a8..0000000 --- a/src/lib/components/header/svelte-logo.svg +++ /dev/null @@ -1 +0,0 @@ -svelte-logo \ No newline at end of file diff --git a/src/lib/components/listbox.svelte b/src/lib/components/listbox.svelte index 31f7096..2ccc13e 100644 --- a/src/lib/components/listbox.svelte +++ b/src/lib/components/listbox.svelte @@ -1,11 +1,11 @@
- - - - + + + + + {#if open} -
- +
+
-
+
{/if} -
+
diff --git a/src/lib/components/search/advancedSearch/index.svelte b/src/lib/components/search/advancedSearch/index.svelte index 6452beb..a355e66 100644 --- a/src/lib/components/search/advancedSearch/index.svelte +++ b/src/lib/components/search/advancedSearch/index.svelte @@ -1,17 +1,17 @@