aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.json3
-rw-r--r--src/app.html2
-rw-r--r--src/lib/Head.svelte20
-rw-r--r--src/lib/Header.svelte36
-rw-r--r--src/lib/Username.svelte8
-rw-r--r--src/lib/api.ts8
-rw-r--r--src/lib/constants.ts11
-rw-r--r--src/lib/profile.ts57
-rw-r--r--src/lib/utils.ts37
-rw-r--r--src/routes/__layout.svelte6
-rw-r--r--src/routes/player/[player]/[profile].svelte32
-rw-r--r--src/routes/player/[player]/index.svelte (renamed from src/routes/player/[player].svelte)94
-rw-r--r--svelte.config.js20
-rw-r--r--yarn.lock196
14 files changed, 434 insertions, 96 deletions
diff --git a/package.json b/package.json
index 4a21fe6..336d02a 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,8 @@
"dependencies": {
"@fontsource/fira-mono": "^4.5.0",
"@lukeed/uuid": "^2.0.0",
- "cookie": "^0.4.1"
+ "cookie": "^0.4.1",
+ "vite-plugin-html": "^2"
},
"packageManager": "yarn@3.1.1"
}
diff --git a/src/app.html b/src/app.html
index b0013f4..e0a73a9 100644
--- a/src/app.html
+++ b/src/app.html
@@ -9,6 +9,6 @@
%svelte.head%
</head>
<body>
- <div>%svelte.body%</div>
+ %svelte.body%
</body>
</html>
diff --git a/src/lib/Head.svelte b/src/lib/Head.svelte
index d301f14..e8032db 100644
--- a/src/lib/Head.svelte
+++ b/src/lib/Head.svelte
@@ -1,17 +1,17 @@
<script lang="ts">
- /** The title that is shown at the top of the page and in search engines */
- export let title = 'SkyBlock Stats'
- /** The description that is shown in search engines */
+ /** The title that is shown at the top of the page and in search engines */
+ export let title = 'SkyBlock Stats'
+ /** The description that is shown in search engines */
export let description = ''
- /** The title that is shown in platforms like Discord */
+ /** The title that is shown in platforms like Discord */
export let metaTitle = title
- /** The description that is shown in platforms like Discord */
- export let metaDescription = description
+ /** The description that is shown in platforms like Discord */
+ export let metaDescription = description
</script>
<svelte:head>
- <title>{title}</title>
- <meta name="description" content={description}>
- <meta property="og:title" content={metaTitle}>
- <meta property="og:description" content={metaDescription}>
+ <title>{title}</title>
+ <meta name="description" content={description} />
+ <meta property="og:title" content={metaTitle} />
+ <meta property="og:description" content={metaDescription} />
</svelte:head>
diff --git a/src/lib/Header.svelte b/src/lib/Header.svelte
index 27c7d09..a5ec702 100644
--- a/src/lib/Header.svelte
+++ b/src/lib/Header.svelte
@@ -21,7 +21,7 @@
}}
>
<input
- class="enter-username-button"
+ class="enter-username-input"
type="text"
placeholder="Enter username"
name="user-search"
@@ -34,3 +34,37 @@
/>
</form>
</header>
+
+<style>
+ header {
+ background-color: var(--theme-background);
+ box-shadow: 0 0 1em rgba(0, 0, 0, 0.8);
+ padding: 0.5rem 10%;
+ }
+
+ .user-form {
+ display: inline-block;
+ text-align: center;
+ font-size: 1.25rem;
+ /* center the forms */
+ margin: 0 auto;
+ width: max-content;
+ }
+
+ .enter-username-input {
+ box-shadow: none;
+ /* add a slight shadow on the form in the index page */
+ max-width: calc(90vw - 8em);
+ }
+
+ .back-arrow {
+ float: left;
+ transition: stroke 200ms;
+ stroke: var(--theme-darker-text);
+ margin-top: 0.4em;
+ margin-right: 1em;
+ }
+ .back-arrow:hover {
+ stroke: var(--theme-main-text);
+ }
+</style>
diff --git a/src/lib/Username.svelte b/src/lib/Username.svelte
index 764721c..d415511 100644
--- a/src/lib/Username.svelte
+++ b/src/lib/Username.svelte
@@ -26,9 +26,11 @@
{:else if headType == '2d'}
<Head2d {player} isPartOfUsername={true} />
{/if}
- <span class="username-rank-prefix">
- {@html formattingCodeToHtml(player.rank.colored)}
- </span>
+ {#if prefix}
+ <span class="username-rank-prefix">
+ {@html formattingCodeToHtml(player.rank.colored)}
+ </span>
+ {/if}
<span class="username" style="color: {player.rank.color}">{player.username}</span>
</ConditionalLink>
diff --git a/src/lib/api.ts b/src/lib/api.ts
index 3c1d8ec..db6bf81 100644
--- a/src/lib/api.ts
+++ b/src/lib/api.ts
@@ -1,7 +1 @@
-const BASE_URL = 'https://skyblock-api.matdoes.dev/'
-
-export async function get(path: string) {
- const resp = await fetch(BASE_URL + path)
- return await resp.json()
-}
-
+export const API_URL = 'https://skyblock-api.matdoes.dev/' \ No newline at end of file
diff --git a/src/lib/constants.ts b/src/lib/constants.ts
new file mode 100644
index 0000000..dc84994
--- /dev/null
+++ b/src/lib/constants.ts
@@ -0,0 +1,11 @@
+import { API_URL } from '$lib/api'
+
+export let constants: any = {}
+
+async function updateConstants() {
+ constants = await fetch(API_URL + 'constants').then(r => r.json())
+ console.log('updated constants')
+}
+
+updateConstants()
+setInterval(updateConstants, 60 * 60 * 1000) // update every hour \ No newline at end of file
diff --git a/src/lib/profile.ts b/src/lib/profile.ts
new file mode 100644
index 0000000..6388128
--- /dev/null
+++ b/src/lib/profile.ts
@@ -0,0 +1,57 @@
+import { constants } from './constants'
+import { cleanId, millisecondsToTime } from './utils'
+
+/**
+ * Convert milliseconds since epoch into a string, but if it was within the
+ * past week then show the timeago
+ */
+function prettyTimestamp(ms: number) {
+ const isWithinPastWeek = Date.now() - ms < 1000 * 60 * 60 * 24 * 7
+ const timeAsString = isWithinPastWeek ? (millisecondsToTime(Date.now() - ms) + ' ago') : (new Date(ms)).toUTCString()
+ return timeAsString
+}
+
+export function generateMetaDescription(data) {
+ const result: string[] = []
+
+ result.push(`💾 Last save: ${prettyTimestamp(data.member.last_save * 1000)}`)
+
+ result.push(`🚶 Profile created: ${prettyTimestamp(data.member.first_join * 1000)}`)
+
+ result.push(`✨ Fairy souls: ${data.member.fairy_souls.total}/${constants.max_fairy_souls}`)
+
+ if (data.profile.minion_count >= constants.max_minions)
+ result.push(`🤖 Minion count: ${data.profile.minion_count}`)
+
+ let mostSignificantKillsStat = null
+ let mostSignificantDeathsStat = null
+
+ for (const stat of data.member.stats) {
+ if (
+ stat.category === 'kills'
+ && stat.rawName != 'kills'
+ && stat.value >= 200_000
+ && stat.value > (mostSignificantKillsStat?.value ?? 0)
+ )
+ mostSignificantKillsStat = stat
+ if (
+ stat.category === 'deaths'
+ && stat.rawName != 'deaths'
+ && stat.value > 1_000_000
+ && stat.value > (mostSignificantDeathsStat?.value ?? 0)
+ )
+ mostSignificantDeathsStat = stat
+ }
+
+ if (mostSignificantKillsStat)
+ result.push(
+ `⚔️ ${mostSignificantKillsStat.value.toLocaleString()} ${mostSignificantKillsStat.unit || cleanId(mostSignificantKillsStat.rawName).toLowerCase()}`
+ )
+
+ if (mostSignificantDeathsStat)
+ result.push(
+ `☠ ${mostSignificantDeathsStat.value.toLocaleString()} ${mostSignificantDeathsStat.unit || cleanId(mostSignificantDeathsStat.rawName).toLowerCase()}`
+ )
+
+ return result.join('\n')
+} \ No newline at end of file
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index e6f85ff..5d8ecc8 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -70,12 +70,14 @@ export function formattingCodeToHtml(formatted: string): string {
export function removeFormattingCode(formatted: string): string {
return formatted.replace(new RegExp(colorCodeCharacter + '.', 'g'), '')
}
-function moveStringToEnd(word: string, thing: string) {
+
+function moveToEndOfId(word: string, thing: string) {
if (thing.startsWith(`${word}_`))
- thing = thing.substr(`${word}_`.length) + `_${word}`
+ thing = thing.slice(`${word}_`.length) + `_${word}`
return thing
}
-function millisecondsToTime(totalMilliseconds: number) {
+
+export function millisecondsToTime(totalMilliseconds: number) {
const totalSeconds = totalMilliseconds / 1000
const totalMinutes = totalSeconds / 60
const totalHours = totalMinutes / 60
@@ -98,29 +100,20 @@ function millisecondsToTime(totalMilliseconds: number) {
else if (milliseconds == 1) stringUnits.push(`${milliseconds} millisecond`)
return stringUnits.slice(0, 2).join(' and ')
}
-export function cleanNumber(number: number, unit?: string): string {
- switch (unit) {
- case 'time':
- return millisecondsToTime(number)
- case 'date':
- return (new Date(number * 1000)).toUTCString()
- }
- return number.toLocaleString() + (unit ? (' ' + unit) : '')
-}
-export function clean(thing: string | number) {
- if (typeof thing === 'number') {
- return cleanNumber(thing)
- } else {
- for (const string of ['deaths', 'kills', 'collection', 'skill'])
- thing = moveStringToEnd(string, thing)
- return thing
- .replace(/^./, thing[0].toUpperCase())
- .replace(/_/g, ' ')
- }
+
+export function cleanId(id: string) {
+ for (const string of ['deaths', 'kills', 'collection', 'skill'])
+ id = moveToEndOfId(string, id)
+
+ return id
+ .replace(/^./, id[0].toUpperCase())
+ .replace(/_/g, ' ')
}
+
export function toRomanNumerals(number: number) {
return ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'][number]
}
+
export function shuffle<T>(a: T[]): T[] {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1))
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index d1fca30..2da6384 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -3,6 +3,6 @@
import '../app.css'
</script>
-<main>
- <slot />
-</main>
+<nav />
+
+<slot />
diff --git a/src/routes/player/[player]/[profile].svelte b/src/routes/player/[player]/[profile].svelte
new file mode 100644
index 0000000..c5276bc
--- /dev/null
+++ b/src/routes/player/[player]/[profile].svelte
@@ -0,0 +1,32 @@
+<script lang="ts" context="module">
+ import type { Load } from '@sveltejs/kit'
+ import { API_URL } from '$lib/api'
+
+ export const load: Load = async ({ params, fetch }) => {
+ const player: string = params.player
+ const profile: string = params.profile
+ const res = await fetch(`${API_URL}player/${player}/${profile}`).then(r => r.json())
+ return {
+ props: {
+ data: res,
+ },
+ }
+ }
+</script>
+
+<script lang="ts">
+ import Head from '$lib/Head.svelte'
+ import Header from '$lib/Header.svelte'
+ import Username from '$lib/Username.svelte'
+ import { generateMetaDescription } from '$lib/profile'
+
+ export let data
+</script>
+
+<Head
+ title="{data.member.username}'s SkyBlock profile ({data.member.profileName})"
+ description={generateMetaDescription(data)}
+ metaTitle={(data.member.rank.name ? `[${data.member.rank.name}] ` : '') +
+ `${data.member.username}\'s SkyBlock profile (${data.member.profileName})`}
+/>
+<Header backArrowHref="/player/{data.member.username}" />
diff --git a/src/routes/player/[player].svelte b/src/routes/player/[player]/index.svelte
index 2cce8e7..73dfb0c 100644
--- a/src/routes/player/[player].svelte
+++ b/src/routes/player/[player]/index.svelte
@@ -1,24 +1,34 @@
<script lang="ts" context="module">
- import { get } from '$lib/api'
import type { Load } from '@sveltejs/kit'
+ import { API_URL } from '$lib/api'
+
export const load: Load = async ({ params, fetch }) => {
const player: string = params.player
- // if (browser) alert('doing get')
- const res = await fetch(`https://skyblock-api.matdoes.dev/player/${player}`).then(r => r.json())
- // const res = await get(`player/${player}`)
+ const res = await fetch(`${API_URL}player/${player}?customization=true`).then(r => r.json())
+
+ console.log('res', res)
+
+ if (!res.player) {
+ return { fallthrough: true } as unknown
+ }
+
+ if (res.player.username !== player) {
+ return {
+ redirect: `/player/${res.player.username}`,
+ status: 302,
+ }
+ }
+
return {
- props: {
- data: res,
- },
+ props: { data: res },
}
}
</script>
<script lang="ts">
- import Head from '$lib/Head.svelte'
- import Header from '$lib/Header.svelte'
- import { browser } from '$app/env'
import Username from '$lib/Username.svelte'
+ import Header from '$lib/Header.svelte'
+ import Head from '$lib/Head.svelte'
export let data
@@ -34,7 +44,6 @@
}
}
- // {%- set activeProfileOnline = getTime() - 60 < activeProfileLastSave -%}
const isActiveProfileOnline = Date.now() / 1000 - 60 < activeProfileLastSave
</script>
@@ -60,36 +69,39 @@
{/if}
</svelte:head>
-<h1><Username player={data.player} headType="3d" />'s profiles</h1>
-
-<ul class="profile-list">
- {#each data.profiles as profile}
- <li
- class="profile-list-item"
- class:profile-list-item-active={profile.uuid === activeProfile.uuid}
- class:profile-list-item-online={profile.uuid === activeProfile.uuid && isActiveProfileOnline}
- >
- <a class="profile-name" href="/player/{data.player.username}/{profile.name}">
- {profile.name}
- </a>
- <span class="profile-members">
- {#if profile.members.length > 1}
- {#each profile.members as player}
- <span class="member">
- <Username
- {player}
- headType="2d"
- hyperlinkToProfile={player.uuid != data.player.uuid}
- />
- </span>
- {/each}
- {:else}
- Solo
- {/if}
- </span>
- </li>
- {/each}
-</ul>
+<main>
+ <h1><Username player={data.player} headType="3d" />'s profiles</h1>
+
+ <ul class="profile-list">
+ {#each data.profiles as profile}
+ <li
+ class="profile-list-item"
+ class:profile-list-item-active={profile.uuid === activeProfile.uuid}
+ class:profile-list-item-online={profile.uuid === activeProfile.uuid &&
+ isActiveProfileOnline}
+ >
+ <a class="profile-name" href="/player/{data.player.username}/{profile.name}">
+ {profile.name}
+ </a>
+ <span class="profile-members">
+ {#if profile.members.length > 1}
+ {#each profile.members as player}
+ <span class="member">
+ <Username
+ {player}
+ headType="2d"
+ hyperlinkToProfile={player.uuid != data.player.uuid}
+ />
+ </span>
+ {/each}
+ {:else}
+ Solo
+ {/if}
+ </span>
+ </li>
+ {/each}
+ </ul>
+</main>
<style>
.profile-name {
diff --git a/svelte.config.js b/svelte.config.js
index 1fa366b..3baa3ff 100644
--- a/svelte.config.js
+++ b/svelte.config.js
@@ -1,5 +1,6 @@
-import adapter from '@sveltejs/adapter-auto';
-import preprocess from 'svelte-preprocess';
+import adapter from '@sveltejs/adapter-auto'
+import preprocess from 'svelte-preprocess'
+import { minifyHtml } from 'vite-plugin-html'
/** @type {import('@sveltejs/kit').Config} */
const config = {
@@ -13,7 +14,20 @@ const config = {
// Override http methods in the Todo forms
methodOverride: {
allowed: ['PATCH', 'DELETE']
- }
+ },
+
+ // https://vitejs.dev/config/
+ vite: {
+ plugins: [minifyHtml()],
+ build: {
+ rollupOptions: {
+ external: ['discord-api-types/payloads/v9', 'discord-api-types', 'discord-api-types/v9'],
+ output: {
+ manualChunks: undefined,
+ },
+ },
+ },
+ },
}
};
diff --git a/yarn.lock b/yarn.lock
index b5dfd5d..3feac19 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -341,6 +341,11 @@ astral-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+async@0.9.x:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -371,12 +376,25 @@ buffer-crc32@^0.2.5:
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+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"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-chalk@^2.0.0:
+camel-case@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+ integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+ dependencies:
+ pascal-case "^3.1.2"
+ tslib "^2.0.3"
+
+chalk@^2.0.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==
@@ -408,6 +426,13 @@ chokidar@^3.4.1:
optionalDependencies:
fsevents "~2.3.2"
+clean-css@^5.2.2:
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.2.4.tgz#982b058f8581adb2ae062520808fb2429bd487a4"
+ integrity sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==
+ dependencies:
+ source-map "~0.6.0"
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -432,6 +457,16 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+ integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -482,6 +517,31 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
+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==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+dotenv-expand@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+ integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@^10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
+ integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
+
+ejs@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a"
+ integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==
+ dependencies:
+ jake "^10.6.1"
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -918,6 +978,13 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
+filelist@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b"
+ integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==
+ dependencies:
+ minimatch "^3.0.4"
+
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -938,6 +1005,15 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
+fs-extra@^10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
+ integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -1006,7 +1082,7 @@ globrex@^0.1.2:
resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
-graceful-fs@^4.1.3:
+graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.9"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
@@ -1028,6 +1104,24 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+he@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+html-minifier-terser@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+ integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+ dependencies:
+ camel-case "^4.1.2"
+ clean-css "^5.2.2"
+ commander "^8.3.0"
+ he "^1.2.0"
+ param-case "^3.0.4"
+ relateurl "^0.2.7"
+ terser "^5.10.0"
+
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -1105,6 +1199,16 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+jake@^10.6.1:
+ version "10.8.2"
+ resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
+ integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==
+ dependencies:
+ async "0.9.x"
+ chalk "^2.4.2"
+ filelist "^1.0.1"
+ minimatch "^3.0.4"
+
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -1133,6 +1237,15 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
kleur@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d"
@@ -1156,6 +1269,13 @@ lodash.truncate@^4.4.2:
resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
+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@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -1227,6 +1347,14 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+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"
+
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
@@ -1251,6 +1379,14 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
+param-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+ integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -1258,6 +1394,14 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+pascal-case@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+ integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
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"
@@ -1339,6 +1483,11 @@ regexpp@^3.1.0, regexpp@^3.2.0:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+relateurl@^0.2.7:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+ integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+
require-from-string@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
@@ -1456,7 +1605,20 @@ 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.7.3:
+source-map-support@~0.5.20:
+ 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.0, source-map@~0.6.0:
+ 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.7.3, source-map@~0.7.2:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
@@ -1566,6 +1728,15 @@ table@^6.0.9:
string-width "^4.2.3"
strip-ansi "^6.0.1"
+terser@^5.10.0:
+ version "5.10.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc"
+ integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.7.2"
+ source-map-support "~0.5.20"
+
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -1591,7 +1762,7 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.3.1:
+tslib@^2.0.3, tslib@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
@@ -1620,6 +1791,11 @@ typescript@*, typescript@~4.5.4:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -1632,6 +1808,18 @@ v8-compile-cache@^2.0.3:
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+vite-plugin-html@^2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/vite-plugin-html/-/vite-plugin-html-2.1.2.tgz#aaf846a806b37e4884870e5ce1918166e9ce9125"
+ integrity sha512-7HXkL6n7M2qDEaUV4Vnz8yM2glW4gV36d5HSBIM5gOoAG1PkuQb4Vv9FTPgPiQxq4sPRf/6IgABX0MeLVW+CyQ==
+ dependencies:
+ "@rollup/pluginutils" "^4.1.2"
+ dotenv "^10.0.0"
+ dotenv-expand "^5.1.0"
+ ejs "^3.1.6"
+ fs-extra "^10.0.0"
+ html-minifier-terser "^6.1.0"
+
vite@^2.8.0:
version "2.8.2"
resolved "https://registry.yarnpkg.com/vite/-/vite-2.8.2.tgz#6bced4a0a8b0db24636f5159c3f371c156521a58"