diff options
author | mat <github@matdoes.dev> | 2022-12-15 14:59:56 -0600 |
---|---|---|
committer | mat <github@matdoes.dev> | 2022-12-15 14:59:56 -0600 |
commit | 6e723aadf6de45a79b4ef64d288ea275628232c5 (patch) | |
tree | c27bcc33aefa9212baf6f3d9c2eb1af88d6c5105 /src | |
parent | 89bf3d31e36ad3bdfd45461ee6fb69a4c791f848 (diff) | |
download | skyblock-stats-6e723aadf6de45a79b4ef64d288ea275628232c5.tar.gz skyblock-stats-6e723aadf6de45a79b4ef64d288ea275628232c5.tar.bz2 skyblock-stats-6e723aadf6de45a79b4ef64d288ea275628232c5.zip |
start updating to sveltekit v1
Diffstat (limited to 'src')
-rw-r--r-- | src/app.html | 27 | ||||
-rw-r--r-- | src/hooks.ts | 2 | ||||
-rw-r--r-- | src/lib/AuctionPriceScatterplot.svelte | 2 | ||||
-rw-r--r-- | src/lib/BackgroundImage.svelte | 2 | ||||
-rw-r--r-- | src/lib/Collapsible.svelte | 2 | ||||
-rw-r--r-- | src/lib/layout/Loader.svelte | 2 | ||||
-rw-r--r-- | src/lib/minecraft/inventory.ts | 2 | ||||
-rw-r--r-- | src/params/username.ts | 5 | ||||
-rw-r--r-- | src/routes/+error.svelte (renamed from src/routes/__error.svelte) | 22 | ||||
-rw-r--r-- | src/routes/+layout.svelte (renamed from src/routes/__layout.svelte) | 0 | ||||
-rw-r--r-- | src/routes/+page.svelte (renamed from src/routes/index.svelte) | 16 | ||||
-rw-r--r-- | src/routes/+page.ts | 7 | ||||
-rw-r--r-- | src/routes/[player=username]/+page.ts | 11 | ||||
-rw-r--r-- | src/routes/[player].ts | 14 | ||||
-rw-r--r-- | src/routes/auctionprices/+page.svelte (renamed from src/routes/auctionprices.svelte) | 27 | ||||
-rw-r--r-- | src/routes/auctionprices/+page.ts | 13 | ||||
-rw-r--r-- | src/routes/chat/+page.svelte (renamed from src/routes/chat.svelte) | 0 | ||||
-rw-r--r-- | src/routes/election/+page.svelte (renamed from src/routes/election.svelte) | 2 | ||||
-rw-r--r-- | src/routes/items/+page.svelte (renamed from src/routes/items.svelte) | 0 | ||||
-rw-r--r-- | src/routes/leaderboard/+page.ts (renamed from src/routes/leaderboard/index.ts) | 7 | ||||
-rw-r--r-- | src/routes/leaderboard/[name]/+page.ts (renamed from src/routes/leaderboard/[name].ts) | 6 | ||||
-rw-r--r-- | src/routes/leaderboards/+page.svelte (renamed from src/routes/leaderboards/index.svelte) | 15 | ||||
-rw-r--r-- | src/routes/leaderboards/+page.ts | 6 | ||||
-rw-r--r-- | src/routes/leaderboards/[name]/+page.svelte (renamed from src/routes/leaderboards/[name].svelte) | 19 | ||||
-rw-r--r-- | src/routes/leaderboards/[name]/+page.ts | 16 | ||||
-rw-r--r-- | src/routes/loggedin/+page.ts (renamed from src/routes/loggedin.ts) | 0 | ||||
-rw-r--r-- | src/routes/login/+page.ts (renamed from src/routes/login.ts) | 0 | ||||
-rw-r--r-- | src/routes/logout/+page.ts (renamed from src/routes/logout.ts) | 0 | ||||
-rw-r--r-- | src/routes/player/+page.server.ts | 16 | ||||
-rw-r--r-- | src/routes/player/[player]/+page.svelte (renamed from src/routes/player/[player]/index.svelte) | 37 | ||||
-rw-r--r-- | src/routes/player/[player]/+page.ts | 24 | ||||
-rw-r--r-- | src/routes/player/[player]/[profile]/+page.svelte (renamed from src/routes/player/[player]/[profile].svelte) | 65 | ||||
-rw-r--r-- | src/routes/player/[player]/[profile]/+page.ts | 48 | ||||
-rw-r--r-- | src/routes/player/index.ts | 14 | ||||
-rw-r--r-- | src/routes/profile/index.svelte | 2 | ||||
-rw-r--r-- | src/routes/verify/+page.server.ts (renamed from src/routes/verify.ts) | 0 | ||||
-rw-r--r-- | src/routes/verify/+page.svelte (renamed from src/routes/verify.svelte) | 0 |
37 files changed, 200 insertions, 231 deletions
diff --git a/src/app.html b/src/app.html index e0a73a9..b9273a6 100644 --- a/src/app.html +++ b/src/app.html @@ -1,14 +1,17 @@ <!DOCTYPE html> <html lang="en"> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> - <meta name="theme-color" content="#010101"> - <meta property="og:site_name" content="Hypixel SkyBlock Stats"> - <meta property="og:type" content="website"/> - %svelte.head% - </head> - <body> - %svelte.body% - </body> -</html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="theme-color" content="#010101"> + <meta property="og:site_name" content="Hypixel SkyBlock Stats"> + <meta property="og:type" content="website" /> + %sveltekit.head% +</head> + +<body> + %sveltekit.body% +</body> + +</html>
\ No newline at end of file diff --git a/src/hooks.ts b/src/hooks.ts index 3fa9299..457e8ae 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -1,5 +1,5 @@ import cookie from 'cookie' -import type { ExternalFetch, GetSession, Handle } from '@sveltejs/kit' +import type { Handle } from '@sveltejs/kit' export const handle: Handle = async ({ event, resolve }) => { diff --git a/src/lib/AuctionPriceScatterplot.svelte b/src/lib/AuctionPriceScatterplot.svelte index da1aed2..17a09f1 100644 --- a/src/lib/AuctionPriceScatterplot.svelte +++ b/src/lib/AuctionPriceScatterplot.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { browser } from '$app/env' + import { browser } from '$app/environment' import type { ItemAuctionsSchema, SimpleAuctionSchema } from './APITypes' import type { PreviewedAuctionData } from './utils' diff --git a/src/lib/BackgroundImage.svelte b/src/lib/BackgroundImage.svelte index 0b2f043..17d8705 100644 --- a/src/lib/BackgroundImage.svelte +++ b/src/lib/BackgroundImage.svelte @@ -1,6 +1,6 @@ <script lang="ts"> import { onDestroy, onMount } from 'svelte' - import { browser } from '$app/env' + import { browser } from '$app/environment' export let url: string let styleHtml = `<style class="background-image-style">:root{--background:url(${url})}</style>` diff --git a/src/lib/Collapsible.svelte b/src/lib/Collapsible.svelte index a7b6105..68fee79 100644 --- a/src/lib/Collapsible.svelte +++ b/src/lib/Collapsible.svelte @@ -4,7 +4,7 @@ Collapsible content that works without JS but is enhanced by it. --> <script lang="ts"> - import { browser } from '$app/env' + import { browser } from '$app/environment' import { onMount } from 'svelte' import { cleanId } from './utils' diff --git a/src/lib/layout/Loader.svelte b/src/lib/layout/Loader.svelte index 3884e55..dd04924 100644 --- a/src/lib/layout/Loader.svelte +++ b/src/lib/layout/Loader.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { browser } from '$app/env' + import { browser } from '$app/environment' import { navigating } from '$app/stores' let progress = 0 diff --git a/src/lib/minecraft/inventory.ts b/src/lib/minecraft/inventory.ts index 227ed0c..5bd79c2 100644 --- a/src/lib/minecraft/inventory.ts +++ b/src/lib/minecraft/inventory.ts @@ -1,6 +1,6 @@ import * as skyblockAssets from 'skyblock-assets' import { vanilla } from '$lib/packs' -import { browser } from '$app/env' +import { browser } from '$app/environment' export interface Item { id?: string diff --git a/src/params/username.ts b/src/params/username.ts new file mode 100644 index 0000000..855481a --- /dev/null +++ b/src/params/username.ts @@ -0,0 +1,5 @@ +import type { ParamMatcher } from '@sveltejs/kit' + +export const match = ((param) => { + return /^\w{2,16}$/.test(param) +}) satisfies ParamMatcher
\ No newline at end of file diff --git a/src/routes/__error.svelte b/src/routes/+error.svelte index 3057f19..83b4407 100644 --- a/src/routes/__error.svelte +++ b/src/routes/+error.svelte @@ -1,22 +1,12 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - - export const load: Load = async ({ error, status }) => { - return { - props: { - error, - status, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' - export let status: number - export let error: Error + import { page } from '$app/stores' + + // sveltekit bug: types of error and status say they can be null but they can't + let error = $page.error! + let status = $page.status! </script> <Head title={error.message} /> @@ -26,7 +16,7 @@ <div> <h1>{status}</h1> <p>{error.message}</p> - <a href="/" sveltekit:prefetch>Home</a> + <a href="/" data-sveltekit-preload-data="hover">Home</a> </div> </main> diff --git a/src/routes/__layout.svelte b/src/routes/+layout.svelte index 74e29b9..74e29b9 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/+layout.svelte diff --git a/src/routes/index.svelte b/src/routes/+page.svelte index 851f70e..3c518fb 100644 --- a/src/routes/index.svelte +++ b/src/routes/+page.svelte @@ -1,15 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - - export const load: Load = async ({ params, fetch, session }) => { - return { - props: { - loggedIn: session.sid !== undefined, - }, - } - } -</script> - <script lang="ts"> import Username from '$lib/minecraft/Username.svelte' import SearchUser from '$lib/SearchUser.svelte' @@ -17,10 +5,12 @@ import Head from '$lib/Head.svelte' import Emoji from '$lib/Emoji.svelte' import LoginButton from '$lib/LoginButton.svelte' + import type { PageData } from './$types' export const hydrate = false - export let loggedIn: boolean + export let data: PageData + export let loggedIn: boolean = data.loggedIn </script> <svelte:head> diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 0000000..cd45f69 --- /dev/null +++ b/src/routes/+page.ts @@ -0,0 +1,7 @@ +import type { PageData } from './$types' + +export const load = (({ session }) => { + return { + loggedIn: session.sid !== undefined, + } +}) satisfies PageData diff --git a/src/routes/[player=username]/+page.ts b/src/routes/[player=username]/+page.ts new file mode 100644 index 0000000..c846929 --- /dev/null +++ b/src/routes/[player=username]/+page.ts @@ -0,0 +1,11 @@ +import type { PageLoad } from './$types' + + +export const get = (({ params }) => { + return { + status: 303, + headers: { + location: `/player/${params.player}` + } + } +}) satisfies PageLoad
\ No newline at end of file diff --git a/src/routes/[player].ts b/src/routes/[player].ts deleted file mode 100644 index 3f79368..0000000 --- a/src/routes/[player].ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ParamMatcher, RequestHandler } from '@sveltejs/kit' - -export const match: ParamMatcher = (param) => { - return /^\w{2,16}$/.test(param) -} - -export const get: RequestHandler = async ({ params }) => { - return { - status: 303, - headers: { - location: `/player/${params.player}` - } - } -}
\ No newline at end of file diff --git a/src/routes/auctionprices.svelte b/src/routes/auctionprices/+page.svelte index ac75c86..844af04 100644 --- a/src/routes/auctionprices.svelte +++ b/src/routes/auctionprices/+page.svelte @@ -1,21 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const auctionItemsPromise = fetchApi(`auctionitems`, fetch).then(r => r.json()) - const data = await fetchApi(`auctionprices`, fetch).then(r => r.json()) - const auctionItems = await auctionItemsPromise - - return { - props: { - data, - auctionItems, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' @@ -23,12 +5,15 @@ import type { ItemAuctionsSchema } from '$lib/APITypes' import AuctionPriceScatterplot from '$lib/AuctionPriceScatterplot.svelte' import AuctionPreviewTooltip from '$lib/AuctionPreviewTooltip.svelte' - import { browser } from '$app/env' + import { browser } from '$app/environment' import Item from '$lib/minecraft/Item.svelte' import furfskyReborn from 'skyblock-assets/matchers/furfsky_reborn.json' + import type { PageData } from './$types' + import { fetchApi } from '$lib/api' - export let data: ItemAuctionsSchema[] - export let auctionItems: Record<string, { display: { name: string }; vanillaId?: string }> + export let data: PageData + let auctionPrices: ItemAuctionsSchema[] = data.prices + let auctionItems: Record<string, { display: { name: string }; vanillaId?: string }> = data.items let currentlyPreviewedAuction: PreviewedAuctionData | null = null diff --git a/src/routes/auctionprices/+page.ts b/src/routes/auctionprices/+page.ts new file mode 100644 index 0000000..8166a3c --- /dev/null +++ b/src/routes/auctionprices/+page.ts @@ -0,0 +1,13 @@ +import type { PageData } from './$types' +import { fetchApi } from '$lib/api' + +export const load = (async ({ fetch }) => { + const auctionItemsPromise = fetchApi(`auctionitems`, fetch).then(r => r.json()) + const prices = await fetchApi(`auctionprices`, fetch).then(r => r.json()) + const items = await auctionItemsPromise + + return { + prices, + items, + } +}) satisfies PageData diff --git a/src/routes/chat.svelte b/src/routes/chat/+page.svelte index df7aeee..df7aeee 100644 --- a/src/routes/chat.svelte +++ b/src/routes/chat/+page.svelte diff --git a/src/routes/election.svelte b/src/routes/election/+page.svelte index ad869a1..1754655 100644 --- a/src/routes/election.svelte +++ b/src/routes/election/+page.svelte @@ -23,7 +23,7 @@ import { onDestroy, onMount } from 'svelte' import MayorSkin from '$lib/MayorSkin.svelte' import { invalidate } from '$app/navigation' - import { browser } from '$app/env' + import { browser } from '$app/environment' export let data: ElectionData diff --git a/src/routes/items.svelte b/src/routes/items/+page.svelte index 82b3ee3..82b3ee3 100644 --- a/src/routes/items.svelte +++ b/src/routes/items/+page.svelte diff --git a/src/routes/leaderboard/index.ts b/src/routes/leaderboard/+page.ts index e904469..871f4bc 100644 --- a/src/routes/leaderboard/index.ts +++ b/src/routes/leaderboard/+page.ts @@ -1,11 +1,10 @@ -import type { RequestHandler } from '@sveltejs/kit' +import type { PageLoad } from './$types' - -export const get: RequestHandler = () => { +export const load = (() => { return { status: 303, headers: { location: '/leaderboards' } } -} +}) satisfies PageLoad diff --git a/src/routes/leaderboard/[name].ts b/src/routes/leaderboard/[name]/+page.ts index 11f3468..c4b668e 100644 --- a/src/routes/leaderboard/[name].ts +++ b/src/routes/leaderboard/[name]/+page.ts @@ -1,12 +1,12 @@ -import type { RequestHandler } from '@sveltejs/kit' +import type { PageLoad } from './$types' // The route /leaderboard/<name> was moved to /leaderboards/<name> for // consistency. -export const get: RequestHandler = ({ params }) => { +export const get = (({ params }) => { return { status: 303, headers: { location: `/leaderboards/${params.name}` } } -} +}) satisfies PageLoad diff --git a/src/routes/leaderboards/index.svelte b/src/routes/leaderboards/+page.svelte index 50687c8..1d66ef5 100644 --- a/src/routes/leaderboards/index.svelte +++ b/src/routes/leaderboards/+page.svelte @@ -1,18 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ fetch }) => { - const data = await fetchApi(`leaderboards`, fetch).then(r => r.json()) - - return { - props: { - data, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' diff --git a/src/routes/leaderboards/+page.ts b/src/routes/leaderboards/+page.ts new file mode 100644 index 0000000..d5a8480 --- /dev/null +++ b/src/routes/leaderboards/+page.ts @@ -0,0 +1,6 @@ +import type { PageData } from './$types' +import { fetchApi } from '$lib/api' + +export const load = (async ({ fetch }) => { + return await fetchApi(`leaderboards`, fetch).then(r => r.json()) +}) satisfies PageData diff --git a/src/routes/leaderboards/[name].svelte b/src/routes/leaderboards/[name]/+page.svelte index 75000a9..cfb7311 100644 --- a/src/routes/leaderboards/[name].svelte +++ b/src/routes/leaderboards/[name]/+page.svelte @@ -1,22 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const dataText = await fetchApi(`leaderboards/${params.name}`, fetch).then(r => r.text()) - - const data = JSON.parse(dataText) - - if (data.list.length === 0) return { status: 404, error: 'Unknown leaderboard' } - - return { - props: { - data, - }, - } as any - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' diff --git a/src/routes/leaderboards/[name]/+page.ts b/src/routes/leaderboards/[name]/+page.ts new file mode 100644 index 0000000..78f3f6b --- /dev/null +++ b/src/routes/leaderboards/[name]/+page.ts @@ -0,0 +1,16 @@ +import type { PageData } from './$types' +import { fetchApi } from '$lib/api' + +export const load = (async ({ params, fetch }) => { + const dataText = await fetchApi(`leaderboards/${params.name}`, fetch).then(r => r.text()) + + const data = JSON.parse(dataText) + + if (data.list.length === 0) return { status: 404, error: 'Unknown leaderboard' } + + return { + props: { + data, + }, + } as any +}) satisfies PageData diff --git a/src/routes/loggedin.ts b/src/routes/loggedin/+page.ts index 9ae28ef..9ae28ef 100644 --- a/src/routes/loggedin.ts +++ b/src/routes/loggedin/+page.ts diff --git a/src/routes/login.ts b/src/routes/login/+page.ts index 1cd9b23..1cd9b23 100644 --- a/src/routes/login.ts +++ b/src/routes/login/+page.ts diff --git a/src/routes/logout.ts b/src/routes/logout/+page.ts index 25be86c..25be86c 100644 --- a/src/routes/logout.ts +++ b/src/routes/logout/+page.ts diff --git a/src/routes/player/+page.server.ts b/src/routes/player/+page.server.ts new file mode 100644 index 0000000..3a1b069 --- /dev/null +++ b/src/routes/player/+page.server.ts @@ -0,0 +1,16 @@ +import type { Actions } from './$types' + +export const actions: Actions = { + default: async ({ request }) => { + const form = await request.formData() + + const player = form.get('user-search') + + return { + status: 303, + headers: { + location: `/player/${player}` + } + } + } +}
\ No newline at end of file diff --git a/src/routes/player/[player]/index.svelte b/src/routes/player/[player]/+page.svelte index 5a51816..6711864 100644 --- a/src/routes/player/[player]/index.svelte +++ b/src/routes/player/[player]/+page.svelte @@ -1,34 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const player: string = params.player - - const data = await fetchApi(`player/${player}?customization=true`, fetch).then(r => r.json()) - - if (!data.player) { - return { - status: 404, - error: 'Unknown player', - } - } - - if (data.player.username !== player) { - return { - redirect: `/player/${data.player.username}`, - status: 302, - } as any - } - - return { - props: { - data, - }, - } - } -</script> - <script lang="ts"> import type { CleanPlayer, CleanProfile, CleanUser } from '$lib/APITypes' import BackgroundImage from '$lib/BackgroundImage.svelte' @@ -40,9 +9,9 @@ import { MODE_EMOJIS, DEFAULT_MODE_EMOJI } from '$lib/profile' import Tooltip from '$lib/Tooltip.svelte' import { cleanId } from '$lib/utils' - import { navigating } from '$app/stores' + import type { PageData } from './$types' - export let data: CleanUser & { player: CleanPlayer } + export let data: PageData let activeProfile: CleanProfile | null = null let activeProfileLastSave: number = 0 @@ -97,7 +66,7 @@ <a class="profile-name" href="/player/{data.player?.username}/{profile.name}" - sveltekit:prefetch + data-sveltekit-preload-data="hover" > {profile.name} </a> diff --git a/src/routes/player/[player]/+page.ts b/src/routes/player/[player]/+page.ts new file mode 100644 index 0000000..bd7c002 --- /dev/null +++ b/src/routes/player/[player]/+page.ts @@ -0,0 +1,24 @@ +import type { PageLoad } from './$types' +import { fetchApi } from '$lib/api' + +export const load = (async ({ params, fetch }) => { + const player: string = params.player! + + const data = await fetchApi(`player/${player}?customization=true`, fetch).then(r => r.json()) + + if (!data.player) { + return { + status: 404, + error: 'Unknown player', + } + } + + if (data.player.username !== player) { + return { + redirect: `/player/${data.player.username}`, + status: 302, + } as any + } + + return data +}) satisfies PageLoad diff --git a/src/routes/player/[player]/[profile].svelte b/src/routes/player/[player]/[profile]/+page.svelte index e686164..247619d 100644 --- a/src/routes/player/[player]/[profile].svelte +++ b/src/routes/player/[player]/[profile]/+page.svelte @@ -1,60 +1,8 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { loadPack } from '$lib/packs' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const player: string = params.player - const profile: string = params.profile - const data: CleanMemberProfile = await fetchApi( - `player/${player}/${profile}?customization=true`, - fetch - ).then(async r => { - const text = await r.text() - try { - return JSON.parse(text) - } catch (e) { - throw new Error(`Invalid JSON: ${text}`) - } - }) - - if (!data.member) { - return { - status: 404, - error: 'Unknown profile', - } - } - - if (data.member.username !== player) { - return { - redirect: `/player/${data.member.username}/${data.profile.name}`, - status: 302, - } as any - } - if (!data.member.left && data.profile.name !== profile) { - return { - redirect: `/player/${data.member.username}/${data.profile.name}`, - status: 302, - } as any - } - - const packName = params.pack ?? data?.customization?.pack - - let pack = await loadPack(packName) - - return { - props: { - data, - pack, - }, - } - } -</script> - <script lang="ts"> import { inventoryIconMap, skyblockItemToUrl } from '$lib/minecraft/inventory' import FarmingContests from '$lib/sections/FarmingContests.svelte' import Leaderboards from '$lib/sections/Leaderboards.svelte' + import Achievements from '$lib/sections/Achievements.svelte' import Inventories from '$lib/sections/Inventories.svelte' import Collections from '$lib/sections/Collections.svelte' import { chooseDefaultBackground } from '$lib/backgrounds' @@ -62,8 +10,10 @@ import type { CleanMemberProfile } from '$lib/APITypes' import Username from '$lib/minecraft/Username.svelte' import StatList from '$lib/sections/StatList.svelte' + import Auctions from '$lib/sections/Auctions.svelte' import Infobox from '$lib/sections/Infobox.svelte' import Minions from '$lib/sections/Minions.svelte' + import Essence from '$lib/sections/Essence.svelte' import Slayers from '$lib/sections/Slayers.svelte' import type { MatcherFile } from 'skyblock-assets' import Claimed from '$lib/sections/Claimed.svelte' @@ -76,17 +26,16 @@ import Pets from '$lib/sections/Pets.svelte' import Coop from '$lib/sections/Coop.svelte' import Bank from '$lib/sections/Bank.svelte' + import type { PageData } from './$types' import Header from '$lib/Header.svelte' import Emoji from '$lib/Emoji.svelte' import { cleanId } from '$lib/utils' import Head from '$lib/Head.svelte' import Toc from '$lib/Toc.svelte' - import Achievements from '$lib/sections/Achievements.svelte' - import Essence from '$lib/sections/Essence.svelte' - import Auctions from '$lib/sections/Auctions.svelte' - export let data: CleanMemberProfile - export let pack: MatcherFile + export let data: PageData & CleanMemberProfile + + export let pack: MatcherFile = data.pack let categories: string[] = [] function setCategories() { diff --git a/src/routes/player/[player]/[profile]/+page.ts b/src/routes/player/[player]/[profile]/+page.ts new file mode 100644 index 0000000..e97cbfc --- /dev/null +++ b/src/routes/player/[player]/[profile]/+page.ts @@ -0,0 +1,48 @@ +import type { CleanMemberProfile } from '$lib/APITypes' +import type { PageLoad } from './$types' +import { loadPack } from '$lib/packs' +import { fetchApi } from '$lib/api' + +export const load = (async ({ params, fetch, url }) => { + const player: string = params.player + const profile: string = params.profile + const data: CleanMemberProfile = await fetchApi( + `player/${player}/${profile}?customization=true`, + fetch + ).then(async r => { + const text = await r.text() + try { + return JSON.parse(text) + } catch (e) { + throw new Error(`Invalid JSON: ${text}`) + } + }) + + if (!data.member) { + return { + status: 404, + error: 'Unknown profile', + } + } + + if (data.member.username !== player) { + return { + redirect: `/player/${data.member.username}/${data.profile.name}`, + status: 302, + } as any + } + if (!data.member.left && data.profile.name !== profile) { + return { + redirect: `/player/${data.member.username}/${data.profile.name}`, + status: 302, + } as any + } + + const packName = url.searchParams.get('pack') ?? data?.customization?.pack + const pack = await loadPack(packName) + + return { + ...data, + pack, + } +}) satisfies PageLoad diff --git a/src/routes/player/index.ts b/src/routes/player/index.ts deleted file mode 100644 index 4644499..0000000 --- a/src/routes/player/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { RequestHandler } from '@sveltejs/kit' - -export const post: RequestHandler = async ({ request }) => { - const form = await request.formData() - - const player = form.get('user-search') - - return { - status: 303, - headers: { - location: `/player/${player}` - } - } -}
\ No newline at end of file diff --git a/src/routes/profile/index.svelte b/src/routes/profile/index.svelte index 4da4a8f..0d5ad04 100644 --- a/src/routes/profile/index.svelte +++ b/src/routes/profile/index.svelte @@ -50,7 +50,7 @@ <script lang="ts"> import Emoji from '$lib/Emoji.svelte' - import { browser } from '$app/env' + import { browser } from '$app/environment' import Tooltip from '$lib/Tooltip.svelte' import { onDestroy, onMount } from 'svelte' import backgroundNames from '../../_backgrounds.json' diff --git a/src/routes/verify.ts b/src/routes/verify/+page.server.ts index 3321164..3321164 100644 --- a/src/routes/verify.ts +++ b/src/routes/verify/+page.server.ts diff --git a/src/routes/verify.svelte b/src/routes/verify/+page.svelte index 20de403..20de403 100644 --- a/src/routes/verify.svelte +++ b/src/routes/verify/+page.svelte |