aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-12-15 14:59:56 -0600
committermat <github@matdoes.dev>2022-12-15 14:59:56 -0600
commit6e723aadf6de45a79b4ef64d288ea275628232c5 (patch)
treec27bcc33aefa9212baf6f3d9c2eb1af88d6c5105 /src
parent89bf3d31e36ad3bdfd45461ee6fb69a4c791f848 (diff)
downloadskyblock-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.html27
-rw-r--r--src/hooks.ts2
-rw-r--r--src/lib/AuctionPriceScatterplot.svelte2
-rw-r--r--src/lib/BackgroundImage.svelte2
-rw-r--r--src/lib/Collapsible.svelte2
-rw-r--r--src/lib/layout/Loader.svelte2
-rw-r--r--src/lib/minecraft/inventory.ts2
-rw-r--r--src/params/username.ts5
-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.ts7
-rw-r--r--src/routes/[player=username]/+page.ts11
-rw-r--r--src/routes/[player].ts14
-rw-r--r--src/routes/auctionprices/+page.svelte (renamed from src/routes/auctionprices.svelte)27
-rw-r--r--src/routes/auctionprices/+page.ts13
-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.ts6
-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.ts16
-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.ts16
-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.ts24
-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.ts48
-rw-r--r--src/routes/player/index.ts14
-rw-r--r--src/routes/profile/index.svelte2
-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