This commit is contained in:
Eugene 2024-07-26 21:09:41 +02:00
parent c328127493
commit 2cd3078d43
No known key found for this signature in database
GPG key ID: 5896FCBBDD1CF4F4
34 changed files with 267 additions and 241 deletions

View file

@ -21,8 +21,8 @@ yarn *ARGS:
migrate *ARGS:
cargo run --all-features -p warpgate-db-migrations -- {{ARGS}}
lint:
cd warpgate-web && yarn run lint
lint *ARGS:
cd warpgate-web && yarn run lint {{ARGS}}
svelte-check:
cd warpgate-web && yarn run check

View file

@ -138,11 +138,14 @@ rules:
imports: always-multiline
exports: always-multiline
functions: only-multiline
'@typescript-eslint/use-unknown-in-catch-callback-variable': off
overrides:
- files: '*.svelte'
parser: 'svelte-eslint-parser'
parserOptions:
svelteFeatures:
experimentalGenerics: true
parser:
ts: '@typescript-eslint/parser'
js: 'espree'

View file

@ -27,20 +27,21 @@
"@otplib/plugin-crypto-js": "^12.0.1",
"@otplib/preset-browser": "^12.0.1",
"@sveltejs/vite-plugin-svelte": "^3.1.1",
"@sveltestrap/sveltestrap": "^6.2.7",
"@tsconfig/svelte": "^5.0.0",
"@types/qrcode": "^1.5.0",
"@types/ua-parser-js": "^0.7.36",
"@typescript-eslint/eslint-plugin": "^7.13.0",
"@typescript-eslint/parser": "^7.13.0",
"@typescript-eslint/eslint-plugin": "^7.17.0",
"@typescript-eslint/parser": "^7.17.0",
"bootstrap": "^5.3.3",
"copy-text-to-clipboard": "^3.0.1",
"date-fns": "^3.6.0",
"eslint": "^8.57.0",
"eslint": "^8",
"eslint-config-standard": "^17.1.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.2.0",
"eslint-plugin-promise": "^7.0.0",
"eslint-plugin-svelte": "^2.39.4",
"format-duration": "^3.0.2",
"otplib": "^12.0.1",
@ -51,15 +52,14 @@
"svelte-fa": "^4.0.2",
"svelte-intersection-observer": "^1.0.0",
"svelte-observable": "^0.4.0",
"svelte-preprocess": "^5.0.3",
"svelte-preprocess": "^6.0.2",
"svelte-spa-router": "^4.0.1",
"@sveltestrap/sveltestrap": "^6.2.7",
"thenby": "^1.3.4",
"tslib": "^2.6.3",
"typescript": "^5.0.0",
"ua-parser-js": "^1.0.35",
"vite": "^5.3.1",
"vite-plugin-checker": "^0.6.4",
"vite": "^5.3.5",
"vite-plugin-checker": "^0.7.2",
"vite-tsconfig-paths": "^4.3.2",
"xterm": "^4.18.0",
"xterm-addon-serialize": "^0.7.0"

View file

@ -1,12 +1,12 @@
<script lang="ts">
import { Input } from '@sveltestrap/sveltestrap'
import { CredentialKind, User, UserRequireCredentialsPolicy } from './lib/api'
import { CredentialKind, type User, type UserRequireCredentialsPolicy } from './lib/api'
export let user: User
export let value: UserRequireCredentialsPolicy
export let possibleCredentials: Set<CredentialKind>
export let protocolId: "http" | "ssh" | "mysql"
export let protocolId: 'http' | 'ssh' | 'mysql'
const labels = {
Password: 'Password',
@ -33,7 +33,7 @@ function updateAny () {
value[protocolId] = undefined
} else {
value[protocolId] = []
let oneCred = Array.from(validCredentials).filter(x => possibleCredentials.has(x))[0]
let oneCred = Array.from(validCredentials).find(x => possibleCredentials.has(x))
if (oneCred) {
value[protocolId] = [oneCred]
}

View file

@ -1,7 +1,7 @@
<script lang="ts">
import { Observable, from, map } from 'rxjs'
import { Role, Target, User, api } from 'admin/lib/api'
import ItemList, { LoadOptions, PaginatedResponse } from 'common/ItemList.svelte'
import { type Role, type Target, type User, api } from 'admin/lib/api'
import ItemList, { type LoadOptions, type PaginatedResponse } from 'common/ItemList.svelte'
import { link } from 'svelte-spa-router'
function getTargets (options: LoadOptions): Observable<PaginatedResponse<Target>> {
@ -48,7 +48,6 @@
</div>
<ItemList load={getTargets} showSearch={true}>
<!-- svelte-ignore a11y-missing-attribute -->
<a
slot="item" let:item={target}
class="list-group-item list-group-item-action"
@ -87,7 +86,6 @@
</div>
<ItemList load={getUsers} showSearch={true}>
<!-- svelte-ignore a11y-missing-attribute -->
<a
slot="item" let:item={user}
class="list-group-item list-group-item-action"
@ -110,7 +108,6 @@
</div>
<ItemList load={getRoles} showSearch={true}>
<!-- svelte-ignore a11y-missing-attribute -->
<a
slot="item" let:item={role}
class="list-group-item list-group-item-action"

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { api, TargetOptions, TlsMode } from 'admin/lib/api'
import { api, type TargetOptions, TlsMode } from 'admin/lib/api'
import AsyncButton from 'common/AsyncButton.svelte'
import { replace } from 'svelte-spa-router'
import { Alert, FormGroup } from '@sveltestrap/sveltestrap'

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { api, User, Target, TargetOptions, TicketAndSecret } from 'admin/lib/api'
import { api, type User, type Target, type TicketAndSecret } from 'admin/lib/api'
import AsyncButton from 'common/AsyncButton.svelte'
import ConnectionInstructions from 'common/ConnectionInstructions.svelte'
import { TargetKind } from 'gateway/lib/api'
@ -68,7 +68,7 @@ async function create () {
targetName={selectedTarget.name}
targetKind={TargetKind[selectedTarget.options.kind]}
username={selectedUser.username}
targetExternalHost={selectedTarget.options.kind == "Http" ? selectedTarget.options.externalHost : undefined}
targetExternalHost={selectedTarget.options.kind === 'Http' ? selectedTarget.options.externalHost : undefined}
ticketSecret={result.secret}
/>
{/if}

View file

@ -3,12 +3,12 @@
import { faCircleDot as iconActive } from '@fortawesome/free-regular-svg-icons'
import { onDestroy } from 'svelte'
import { link } from 'svelte-spa-router'
import { api, SessionSnapshot } from 'admin/lib/api'
import { formatDistance } from 'date-fns';
import { api, type SessionSnapshot } from 'admin/lib/api'
import { formatDistance } from 'date-fns'
import { timer, Observable, switchMap, from, combineLatest, fromEvent, merge } from 'rxjs'
import RelativeDate from './RelativeDate.svelte'
import AsyncButton from 'common/AsyncButton.svelte'
import ItemList, { LoadOptions, PaginatedResponse } from 'common/ItemList.svelte'
import ItemList, { type LoadOptions, type PaginatedResponse } from 'common/ItemList.svelte'
import { Input } from '@sveltestrap/sveltestrap'
import { autosave } from 'common/autosave'

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { api, LogEntry } from 'admin/lib/api'
import { api, type LogEntry } from 'admin/lib/api'
import { Alert } from '@sveltestrap/sveltestrap'
import { firstBy } from 'thenby'
import IntersectionObserver from 'svelte-intersection-observer'
@ -31,7 +31,7 @@ function addItems (newItems: LogEntry[]) {
return
}
items ??= []
if (items?.[0]?.timestamp > newItems[0].timestamp) {
if ((items?.[0]?.timestamp ?? 0) > newItems[0]!.timestamp) {
items = items.concat(newItems)
} else {
items = [

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { api, Recording } from 'admin/lib/api'
import { api, type Recording } from 'admin/lib/api'
import { Alert } from '@sveltestrap/sveltestrap'
import TerminalRecordingPlayer from 'admin/player/TerminalRecordingPlayer.svelte'
import DelayedSpinner from 'common/DelayedSpinner.svelte'

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { api, Role } from 'admin/lib/api'
import { api, type Role } from 'admin/lib/api'
import AsyncButton from 'common/AsyncButton.svelte'
import DelayedSpinner from 'common/DelayedSpinner.svelte'
import { replace } from 'svelte-spa-router'

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { api, SSHKey, SSHKnownHost } from 'admin/lib/api'
import { api, type SSHKey, type SSHKnownHost } from 'admin/lib/api'
import CopyButton from 'common/CopyButton.svelte'
import { Alert } from '@sveltestrap/sveltestrap'

View file

@ -1,9 +1,9 @@
<script lang="ts">
import { api, SessionSnapshot, Recording, TargetSSHOptions, TargetHTTPOptions, TargetMySqlOptions } from 'admin/lib/api'
import { api, type SessionSnapshot, type Recording, type TargetSSHOptions, type TargetHTTPOptions, type TargetMySqlOptions } from 'admin/lib/api'
import { timeAgo } from 'admin/lib/time'
import AsyncButton from 'common/AsyncButton.svelte'
import DelayedSpinner from 'common/DelayedSpinner.svelte'
import { formatDistance, formatDistanceToNow } from 'date-fns';
import { formatDistance, formatDistanceToNow } from 'date-fns'
import { onDestroy } from 'svelte'
import { link } from 'svelte-spa-router'
import { Alert } from '@sveltestrap/sveltestrap'

View file

@ -1,6 +1,6 @@
<script lang="ts">
import { faExternalLink } from '@fortawesome/free-solid-svg-icons'
import { api, Role, Target, User } from 'admin/lib/api'
import { api, type Role, type Target, type User } from 'admin/lib/api'
import AsyncButton from 'common/AsyncButton.svelte'
import ConnectionInstructions from 'common/ConnectionInstructions.svelte'
import DelayedSpinner from 'common/DelayedSpinner.svelte'
@ -17,7 +17,7 @@ let error: Error|undefined
let selectedUser: User|undefined
let target: Target
let allRoles: Role[] = []
let roleIsAllowed: { [id: string] : any; } = {}
let roleIsAllowed: Record<string, any> = {}
async function load () {
try {
@ -110,8 +110,8 @@ async function toggleRole (role: Role) {
{/each}
</select>
</FormGroup>
{:catch error}
<Alert color="danger">{error}</Alert>
{:catch _error}
<Alert color="danger">{_error}</Alert>
{/await}
{/if}
@ -124,7 +124,7 @@ async function toggleRole (role: Role) {
Http: TargetKind.Http,
MySql: TargetKind.MySql,
}[target.options.kind ?? '']}
targetExternalHost={target.options.kind == "Http" ? target.options.externalHost : undefined}
targetExternalHost={target.options.kind === 'Http' ? target.options.externalHost : undefined}
/>
<h4 class="mt-4">Configuration</h4>
@ -234,16 +234,18 @@ async function toggleRole (role: Role) {
{#await loadRoles() then}
<div class="list-group list-group-flush mb-3">
{#each allRoles as role}
<div
<label
for="role-{role.id}"
class="list-group-item list-group-item-action d-flex align-items-center"
on:click={() => toggleRole(role)}
>
<Input
id="role-{role.id}"
class="mb-0 me-2"
type="switch"
on:click={() => toggleRole(role)}
checked={roleIsAllowed[role.id]} />
<div>{role.name}</div>
</div>
</label>
{/each}
</div>
{/await}

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { api, Ticket } from 'admin/lib/api'
import { api, type Ticket } from 'admin/lib/api'
import { link } from 'svelte-spa-router'
import { Alert } from '@sveltestrap/sveltestrap'
import RelativeDate from './RelativeDate.svelte'

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { Tls, TlsMode } from 'admin/lib/api'
import { type Tls, TlsMode } from 'admin/lib/api'
import { FormGroup, Input } from '@sveltestrap/sveltestrap'
export let value: Tls

View file

@ -1,6 +1,6 @@
<script lang="ts">
import { faIdBadge, faKey, faKeyboard, faMobileScreen } from '@fortawesome/free-solid-svg-icons'
import { api, CredentialKind, Role, User, UserAuthCredential, UserRequireCredentialsPolicy } from 'admin/lib/api'
import { api, CredentialKind, type Role, type User, type UserAuthCredential, type UserRequireCredentialsPolicy } from 'admin/lib/api'
import AsyncButton from 'common/AsyncButton.svelte'
import DelayedSpinner from 'common/DelayedSpinner.svelte'
import Fa from 'svelte-fa'
@ -16,9 +16,9 @@ let user: User
let editingCredential: UserAuthCredential|undefined
let policy: UserRequireCredentialsPolicy
let allRoles: Role[] = []
let roleIsAllowed: { [id: string] : any; } = {}
let roleIsAllowed: Record<string, any> = {}
const policyProtocols: {id: 'ssh' | 'http' | 'mysql', name: string}[] = [
const policyProtocols: { id: 'ssh' | 'http' | 'mysql', name: string }[] = [
{ id: 'ssh', name: 'SSH' },
{ id: 'http', name: 'HTTP' },
{ id: 'mysql', name: 'MySQL' },
@ -100,7 +100,7 @@ function saveCredential () {
editingCredential.kind === CredentialKind.Totp
&& !user.credentialPolicy?.[protocol]
&& user.credentials.some(x => x.kind === ck)
&& possibleCredentials[protocol].has(ck)
&& possibleCredentials[protocol]?.has(ck)
) {
user.credentialPolicy = {
...user.credentialPolicy ?? {},
@ -114,6 +114,12 @@ function saveCredential () {
editingCredential = undefined
}
function assertDefined<T>(value: T|undefined): T {
if (value === undefined) {
throw new Error('Value is undefined')
}
return value
}
</script>
{#await load()}
@ -202,12 +208,15 @@ function saveCredential () {
<div>
<strong>{protocol.name}</strong>
</div>
<AuthPolicyEditor
user={user}
bind:value={policy}
possibleCredentials={possibleCredentials[protocol.id]}
protocolId={protocol.id}
/>
{#if possibleCredentials[protocol.id]}
{@const _possibleCredentials = assertDefined(possibleCredentials[protocol.id])}
<AuthPolicyEditor
user={user}
bind:value={policy}
possibleCredentials={_possibleCredentials}
protocolId={protocol.id}
/>
{/if}
</div>
{/each}
</div>
@ -215,16 +224,18 @@ function saveCredential () {
<h4 class="mt-4">User roles</h4>
<div class="list-group list-group-flush mb-3">
{#each allRoles as role}
<div
<label
for="role-{role.id}"
class="list-group-item list-group-item-action d-flex align-items-center"
on:click={() => toggleRole(role)}
>
<Input
id="role-{role.id}"
class="mb-0 me-2"
type="switch"
on:click={() => toggleRole(role)}
checked={roleIsAllowed[role.id]} />
<div>{role.name}</div>
</div>
</label>
{/each}
</div>

View file

@ -2,7 +2,7 @@
import { onMount } from 'svelte'
import { Alert, Button, FormGroup, Input, Modal, ModalBody, ModalFooter, ModalHeader } from '@sveltestrap/sveltestrap'
import QRCode from 'qrcode'
import { TOTP, TOTPOptions } from '@otplib/core'
import { TOTP, type TOTPOptions } from '@otplib/core'
import { createDigest } from '@otplib/plugin-crypto-js'
import { faRefresh } from '@fortawesome/free-solid-svg-icons'
import Fa from 'svelte-fa'

View file

@ -32,7 +32,7 @@
'brightBlack', 'brightRed', 'brightGreen', 'brightYellow', 'brightBlue', 'brightMagenta', 'brightCyan', 'brightWhite',
]
const theme: { [key: string]: string } = {
const theme: Record<string, string> = {
foreground: '#ffcb83',
background: '#262626',
cursor: '#fc531d',
@ -56,7 +56,7 @@
'#fafaff',
]
for (let i = 0; i < COLOR_NAMES.length; i++) {
theme[COLOR_NAMES[i]] = colors[i]
theme[COLOR_NAMES[i]!] = colors[i]!
}
interface AsciiCastHeader {
@ -216,7 +216,7 @@
let lastSize = { cols: term.cols, rows: term.rows }
for (let i = 0; i <= index; i++) {
let event = events[i]
let event = events[i]!
if ('cols' in event) {
lastSize = { cols: event.cols, rows: event.rows }
}
@ -233,7 +233,7 @@
for (let i = index; i < events.length; i++) {
let shouldSnapshot = false
let event = events[i]
let event = events[i]!
if (event.time > time) {
break
}
@ -296,6 +296,12 @@
playing = !playing
}
function keyPressHandler (event: KeyboardEvent) {
if (event.key === ' ') {
togglePlaying()
}
}
step()
function toggleFullscreen () {
@ -318,10 +324,13 @@
</div>
{/if}
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
<div
class="container"
class:invisible={loading}
on:click={togglePlaying}
on:keypress={keyPressHandler}
role="img"
bind:this={containerElement}
></div>

View file

@ -1,7 +1,7 @@
<script lang="ts">
import { faCheck } from '@fortawesome/free-solid-svg-icons'
import Fa from 'svelte-fa'
import { Button, Spinner, Color } from '@sveltestrap/sveltestrap'
import { Button, Spinner, type Color } from '@sveltestrap/sveltestrap'
enum State {
Normal = 'n',

View file

@ -1,7 +1,7 @@
<script lang="ts">
import { faCheck, faCopy } from '@fortawesome/free-solid-svg-icons'
import Fa from 'svelte-fa'
import { Button, Color } from '@sveltestrap/sveltestrap'
import { Button, type Color } from '@sveltestrap/sveltestrap'
import copyTextToClipboard from 'copy-text-to-clipboard'
export let text: string
@ -13,7 +13,9 @@ let successVisible = false
let button: HTMLElement
async function _click () {
if (disabled) return
if (disabled) {
return
}
successVisible = true
copyTextToClipboard(text)
setTimeout(() => {

View file

@ -12,7 +12,7 @@
}
</script>
<script lang="ts">
<script lang="ts" generics="T">
import { onDestroy } from 'svelte'
import { Subject, switchMap, map, Observable, distinctUntilChanged, share, combineLatest, tap, debounceTime } from 'rxjs'
import Pagination from './Pagination.svelte'
@ -20,9 +20,6 @@
import { Input } from '@sveltestrap/sveltestrap'
import DelayedSpinner from './DelayedSpinner.svelte'
// eslint-disable-next-line @typescript-eslint/no-type-alias
type T = $$Generic
export let page = 0
export let pageSize: number|undefined = undefined
export let load: (_: LoadOptions) => Observable<PaginatedResponse<T>>
@ -83,27 +80,27 @@
</div>
{#await $items}
<DelayedSpinner />
{:then items}
{#if items}
{:then _items}
{#if _items}
<div class="list-group list-group-flush mb-3">
{#each items as item}
{#each _items as item}
<slot name="item" item={item} />
{/each}
</div>
<slot name="footer" items={items} />
<slot name="footer" items={_items} />
{:else}
<DelayedSpinner />
{/if}
{#if filter && loaded && !items?.length}
{#if filter && loaded && !_items?.length}
<em>
Nothing found
</em>
{/if}
{/await}
{#await $total then total}
{#if pageSize && total > pageSize}
<Pagination total={total} bind:page={page} pageSize={pageSize} />
{#await $total then _total}
{#if pageSize && _total > pageSize}
<Pagination total={_total} bind:page={page} pageSize={pageSize} />
{/if}
{/await}

View file

@ -1,11 +1,14 @@
<script lang="ts">
// eslint-disable-next-line import/no-duplicates
import { onDestroy, onMount } from 'svelte'
// eslint-disable-next-line import/no-duplicates
import { get } from 'svelte/store'
import { currentThemeFile } from 'theme'
import logo from '../../public/assets/logo.svg?raw'
let element: HTMLElement|undefined
// eslint-disable-next-line @typescript-eslint/max-params
function colorize (r: number, g: number, b: number, dr: number, dg: number, db: number) {
element?.querySelectorAll('path').forEach((p, idx) => {
let d = idx
@ -32,6 +35,7 @@ onDestroy(s)
</script>
<div bind:this={element} class="d-flex">
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
{@html logo}
</div>

View file

@ -1,5 +1,5 @@
import { BehaviorSubject } from 'rxjs'
import { get, writable, Writable } from 'svelte/store'
import { get, writable, type Writable } from 'svelte/store'
export function autosave<T> (key: string, initial: T): ([Writable<T>, BehaviorSubject<T>]) {
key = `warpgate:${key}`

View file

@ -82,6 +82,7 @@ async function logout () {
}
}}
>
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
<img class="logo" src={logo} alt="Warpgate" on:mousedown|preventDefault />
</button>

View file

@ -2,7 +2,7 @@
import { faSignOut } from '@fortawesome/free-solid-svg-icons'
import { Alert } from '@sveltestrap/sveltestrap'
import Fa from 'svelte-fa'
import Router, { push, RouteDetail } from 'svelte-spa-router'
import Router, { push, type RouteDetail } from 'svelte-spa-router'
import { wrap } from 'svelte-spa-router/wrap'
import { get } from 'svelte/store'
import { api } from 'gateway/lib/api'

View file

@ -6,7 +6,7 @@ import Fa from 'svelte-fa'
import { faArrowRight } from '@fortawesome/free-solid-svg-icons'
import { faGoogle, faMicrosoft, faApple } from '@fortawesome/free-brands-svg-icons'
import { api, ApiAuthState, LoginFailureResponseFromJSON, SsoProviderDescription, SsoProviderKind, ResponseError } from 'gateway/lib/api'
import { api, ApiAuthState, LoginFailureResponseFromJSON, type SsoProviderDescription, SsoProviderKind, ResponseError } from 'gateway/lib/api'
import { reloadServerInfo } from 'gateway/lib/store'
import AsyncButton from 'common/AsyncButton.svelte'
import DelayedSpinner from 'common/DelayedSpinner.svelte'
@ -56,7 +56,7 @@ async function continueWithState () {
// todo
}
if (providers.length === 1) {
startSSO(providers[0])
startSSO(providers[0]!)
}
}
if (authState === ApiAuthState.OtpNeeded) {

View file

@ -1,7 +1,7 @@
<script lang="ts">
import { Alert } from '@sveltestrap/sveltestrap'
import { api, ApiAuthState, AuthStateResponseInternal } from 'gateway/lib/api'
import { api, ApiAuthState, type AuthStateResponseInternal } from 'gateway/lib/api'
import AsyncButton from 'common/AsyncButton.svelte'
import DelayedSpinner from 'common/DelayedSpinner.svelte'
import RelativeDate from 'admin/RelativeDate.svelte'

View file

@ -2,8 +2,8 @@
import { Observable, from, map } from 'rxjs'
import { faArrowRight } from '@fortawesome/free-solid-svg-icons'
import ConnectionInstructions from 'common/ConnectionInstructions.svelte'
import ItemList, { LoadOptions, PaginatedResponse } from 'common/ItemList.svelte'
import { api, TargetSnapshot, TargetKind } from 'gateway/lib/api'
import ItemList, { type LoadOptions, type PaginatedResponse } from 'common/ItemList.svelte'
import { api, type TargetSnapshot, TargetKind } from 'gateway/lib/api'
import { createEventDispatcher } from 'svelte'
import Fa from 'svelte-fa'
import { Modal, ModalBody, ModalHeader } from '@sveltestrap/sveltestrap'
@ -53,10 +53,10 @@ function loadURL (url: string) {
class="list-group-item list-group-item-action target-item"
href={
target.kind === TargetKind.WebAdmin
? '/@warpgate/admin'
: target.kind === TargetKind.Http
? `/?warpgate-target=${target.name}`
: '/@warpgate/admin'
? '/@warpgate/admin'
: target.kind === TargetKind.Http
? `/?warpgate-target=${target.name}`
: '/@warpgate/admin'
}
on:click|preventDefault={e => {
if (e.metaKey || e.ctrlKey) {

View file

@ -1,4 +1,4 @@
import { DefaultApi, Configuration } from './api-client/dist'
import { DefaultApi, Configuration } from './api-client'
const configuration = new Configuration({
basePath: '/@warpgate/api',

View file

@ -1,5 +1,5 @@
import { writable } from 'svelte/store'
import { api, Info } from './api'
import { api, type Info } from './api'
export const serverInfo = writable<Info|undefined>(undefined)

View file

@ -7,8 +7,9 @@
"resolveJsonModule": true,
"strictNullChecks": true,
"baseUrl": ".",
"preserveValueImports": false,
"verbatimModuleSyntax": true,
"noUnusedLocals": false,
"noUncheckedIndexedAccess": true,
/**
* Typecheck JS in `.svelte` and `.js` files by default.
* Disable checkJs if you'd like to use dynamic types in JS.
@ -22,8 +23,7 @@
"*": [
"src/*"
]
},
"verbatimModuleSyntax": false,
}
},
"include": [
"src/**/*.d.ts",

View file

@ -8,7 +8,7 @@ export default defineConfig({
plugins: [
svelte(),
tsconfigPaths(),
checker({ typescript: true }),
// checker({ typescript: true }),
],
base: '/@warpgate',
build: {

View file

@ -155,11 +155,16 @@
dependencies:
eslint-visitor-keys "^3.3.0"
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
"@eslint-community/regexpp@^4.10.0":
version "4.10.1"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0"
integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==
"@eslint-community/regexpp@^4.6.1":
version "4.11.0"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae"
integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==
"@eslint/eslintrc@^2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
@ -249,16 +254,11 @@
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
"@jridgewell/sourcemap-codec@^1.4.10":
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24":
version "0.3.25"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
@ -563,62 +563,62 @@
resolved "https://registry.yarnpkg.com/@types/ua-parser-js/-/ua-parser-js-0.7.39.tgz#832c58e460c9435e4e34bb866e85e9146e12cdbb"
integrity sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==
"@typescript-eslint/eslint-plugin@^7.13.0":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz#cdc521c8bca38b55585cf30db787fb2abad3f9fd"
integrity sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==
"@typescript-eslint/eslint-plugin@^7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz#c8ed1af1ad2928ede5cdd207f7e3090499e1f77b"
integrity sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
"@typescript-eslint/scope-manager" "7.13.1"
"@typescript-eslint/type-utils" "7.13.1"
"@typescript-eslint/utils" "7.13.1"
"@typescript-eslint/visitor-keys" "7.13.1"
"@typescript-eslint/scope-manager" "7.17.0"
"@typescript-eslint/type-utils" "7.17.0"
"@typescript-eslint/utils" "7.17.0"
"@typescript-eslint/visitor-keys" "7.17.0"
graphemer "^1.4.0"
ignore "^5.3.1"
natural-compare "^1.4.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/parser@^7.13.0":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.13.1.tgz#fac57811b3e519185f7259bac312291f7b9c4e72"
integrity sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==
"@typescript-eslint/parser@^7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.17.0.tgz#be8e32c159190cd40a305a2121220eadea5a88e7"
integrity sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==
dependencies:
"@typescript-eslint/scope-manager" "7.13.1"
"@typescript-eslint/types" "7.13.1"
"@typescript-eslint/typescript-estree" "7.13.1"
"@typescript-eslint/visitor-keys" "7.13.1"
"@typescript-eslint/scope-manager" "7.17.0"
"@typescript-eslint/types" "7.17.0"
"@typescript-eslint/typescript-estree" "7.17.0"
"@typescript-eslint/visitor-keys" "7.17.0"
debug "^4.3.4"
"@typescript-eslint/scope-manager@7.13.1":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz#c08041206904bf36f0e6997efdb0ca775e0c452e"
integrity sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==
"@typescript-eslint/scope-manager@7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz#e072d0f914662a7bfd6c058165e3c2b35ea26b9d"
integrity sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==
dependencies:
"@typescript-eslint/types" "7.13.1"
"@typescript-eslint/visitor-keys" "7.13.1"
"@typescript-eslint/types" "7.17.0"
"@typescript-eslint/visitor-keys" "7.17.0"
"@typescript-eslint/type-utils@7.13.1":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz#63bec3f1fb43cf0bc409cbdb88ef96d118ca8632"
integrity sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==
"@typescript-eslint/type-utils@7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz#c5da78feb134c9c9978cbe89e2b1a589ed22091a"
integrity sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==
dependencies:
"@typescript-eslint/typescript-estree" "7.13.1"
"@typescript-eslint/utils" "7.13.1"
"@typescript-eslint/typescript-estree" "7.17.0"
"@typescript-eslint/utils" "7.17.0"
debug "^4.3.4"
ts-api-utils "^1.3.0"
"@typescript-eslint/types@7.13.1":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.1.tgz#787db283bd0b58751094c90d5b58bbf5e9fc9bd8"
integrity sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==
"@typescript-eslint/types@7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.17.0.tgz#7ce8185bdf06bc3494e73d143dbf3293111b9cff"
integrity sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==
"@typescript-eslint/typescript-estree@7.13.1":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz#3412841b130e070db2f675e3d9b8cb1ae49e1c3f"
integrity sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==
"@typescript-eslint/typescript-estree@7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz#dcab3fea4c07482329dd6107d3c6480e228e4130"
integrity sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==
dependencies:
"@typescript-eslint/types" "7.13.1"
"@typescript-eslint/visitor-keys" "7.13.1"
"@typescript-eslint/types" "7.17.0"
"@typescript-eslint/visitor-keys" "7.17.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
@ -626,22 +626,22 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/utils@7.13.1":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.13.1.tgz#611083379caa0d3a2c09d126c65065a3e4337ba2"
integrity sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==
"@typescript-eslint/utils@7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.17.0.tgz#815cd85b9001845d41b699b0ce4f92d6dfb84902"
integrity sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@typescript-eslint/scope-manager" "7.13.1"
"@typescript-eslint/types" "7.13.1"
"@typescript-eslint/typescript-estree" "7.13.1"
"@typescript-eslint/scope-manager" "7.17.0"
"@typescript-eslint/types" "7.17.0"
"@typescript-eslint/typescript-estree" "7.17.0"
"@typescript-eslint/visitor-keys@7.13.1":
version "7.13.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz#9c229a795a919db61f2d7f2337ef584ac05fbe96"
integrity sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==
"@typescript-eslint/visitor-keys@7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz#680465c734be30969e564b4647f38d6cdf49bfb0"
integrity sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==
dependencies:
"@typescript-eslint/types" "7.13.1"
"@typescript-eslint/types" "7.17.0"
eslint-visitor-keys "^3.4.3"
"@ungap/structured-clone@^1.2.0":
@ -654,11 +654,16 @@ acorn-jsx@^5.3.2:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.10.0, acorn@^8.9.0:
acorn@^8.10.0:
version "8.12.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c"
integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
acorn@^8.9.0:
version "8.12.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
agent-base@^7.0.2:
version "7.1.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
@ -877,12 +882,12 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
braces@^3.0.3, braces@~3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
fill-range "^7.0.1"
fill-range "^7.1.1"
buffer-crc32@^1.0.0:
version "1.0.0"
@ -1510,27 +1515,27 @@ eslint-plugin-node@^11.1.0:
resolve "^1.10.1"
semver "^6.1.0"
eslint-plugin-promise@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz#e24ab0e3c0a25fa227d98d9ff612156b5af15945"
integrity sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==
eslint-plugin-promise@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-7.0.0.tgz#2d54cf6e92213cb2915be62abf338b64c089431d"
integrity sha512-wb1ECT+b90ndBdAujhIdAU8oQ3Vt5gKqP/t78KOmg0ifynrvc2jGR9f6ndbOVNFpKf6jLUBlBBDF3H3Wk0JICg==
eslint-plugin-svelte@^2.39.4:
version "2.39.4"
resolved "https://registry.yarnpkg.com/eslint-plugin-svelte/-/eslint-plugin-svelte-2.39.4.tgz#540e24fdd50e327785d38086faa32f83cad81dc0"
integrity sha512-MAuMNCOQAfCNaOlJfzC/ZnhQi2YwKdQvjYTFs99QIMWTMhN8nIatwQf8X50kCoSfQb7Q8dadGu8QUOOMoCCMTA==
version "2.43.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-svelte/-/eslint-plugin-svelte-2.43.0.tgz#bcfaec0e114e3450071415c3ef9c57dcf7ce118f"
integrity sha512-REkxQWvg2pp7QVLxQNa+dJ97xUqRe7Y2JJbSWkHSuszu0VcblZtXkPBPckkivk99y5CdLw4slqfPylL2d/X4jQ==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@jridgewell/sourcemap-codec" "^1.4.15"
eslint-compat-utils "^0.5.1"
esutils "^2.0.3"
known-css-properties "^0.32.0"
known-css-properties "^0.34.0"
postcss "^8.4.38"
postcss-load-config "^3.1.4"
postcss-safe-parser "^6.0.0"
postcss-selector-parser "^6.1.0"
semver "^7.6.2"
svelte-eslint-parser "^0.38.0"
svelte-eslint-parser "^0.41.0"
eslint-scope@^7.2.2:
version "7.2.2"
@ -1552,17 +1557,12 @@ eslint-visitor-keys@^1.1.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
eslint-visitor-keys@^3.3.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint@^8.57.0:
eslint@^8:
version "8.57.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
@ -1616,9 +1616,9 @@ espree@^9.6.0, espree@^9.6.1:
eslint-visitor-keys "^3.4.1"
esquery@^1.4.2:
version "1.5.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
version "1.6.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
dependencies:
estraverse "^5.1.0"
@ -1660,10 +1660,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-glob@^3.2.7, fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
fast-glob@^3.2.7, fast-glob@^3.3.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
@ -1671,10 +1671,10 @@ fast-glob@^3.2.7, fast-glob@^3.2.9:
merge2 "^1.3.0"
micromatch "^4.0.4"
fast-glob@^3.3.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
@ -1718,10 +1718,10 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^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"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"
@ -1875,7 +1875,7 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
glob@7.2.3:
glob@7.2.3, glob@^7.1.3:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@ -1887,18 +1887,6 @@ glob@7.2.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.1.3:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
globals@^13.19.0:
version "13.24.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
@ -2329,10 +2317,10 @@ kleur@^4.1.5:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
known-css-properties@^0.32.0:
version "0.32.0"
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.32.0.tgz#0bdb64b1bd16bdf3614a87cedf921d3d6d6a417a"
integrity sha512-PXuex21brpp7qENI143ZL5cWQcMR4IZVeeZv9ew6dg+bZX2xRUu/NzGKudZJY5DO4APiMkNPYIF8VGIdY08Tdw==
known-css-properties@^0.34.0:
version "0.34.0"
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.34.0.tgz#ccd7e9f4388302231b3f174a8b1d5b1f7b576cea"
integrity sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==
levn@^0.4.1:
version "0.4.1"
@ -2409,11 +2397,11 @@ merge2@^1.3.0, merge2@^1.4.1:
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
version "4.0.7"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5"
integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==
dependencies:
braces "^3.0.2"
braces "^3.0.3"
picomatch "^2.3.1"
mime-db@1.52.0:
@ -2453,9 +2441,9 @@ minimatch@^9.0.4:
brace-expansion "^2.0.1"
minimist@^1.2.0, minimist@^1.2.6:
version "1.2.7"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
mkdirp@^0.5.1:
version "0.5.6"
@ -2695,7 +2683,7 @@ periscopic@^3.1.0:
estree-walker "^3.0.0"
is-reference "^3.0.0"
picocolors@^1.0.0:
picocolors@^1.0.0, picocolors@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
@ -2734,20 +2722,20 @@ postcss-scss@^4.0.9:
integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==
postcss-selector-parser@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53"
integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==
version "6.1.1"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38"
integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
postcss@^8.4.38:
version "8.4.38"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
postcss@^8.4.38, postcss@^8.4.39:
version "8.4.40"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.40.tgz#eb81f2a4dd7668ed869a6db25999e02e9ad909d8"
integrity sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==
dependencies:
nanoid "^3.3.7"
picocolors "^1.0.0"
picocolors "^1.0.1"
source-map-js "^1.2.0"
prelude-ls@^1.2.1:
@ -3011,7 +2999,12 @@ semver@^7.3.4:
dependencies:
lru-cache "^6.0.0"
semver@^7.5.0, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2:
semver@^7.5.4, semver@^7.6.2:
version "7.6.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
semver@^7.6.0:
version "7.6.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
@ -3195,28 +3188,26 @@ supports-preserve-symlinks-flag@^1.0.0:
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
svelte-check@^3.4.3:
version "3.8.0"
resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.8.0.tgz#e0850b876d3d32760465bfb26d06b32c4c9f98a1"
integrity sha512-7Nxn+3X97oIvMzYJ7t27w00qUf1Y52irE2RU2dQAd5PyvfGp4E7NLhFKVhb6PV2fx7dCRMpNKDIuazmGthjpSQ==
version "3.8.4"
resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.8.4.tgz#7cd51e978e5a289a1278a2ea2ff77d8bd3e2f0c1"
integrity sha512-61aHMkdinWyH8BkkTX9jPLYxYzaAAz/FK/VQqdr2FiCQQ/q04WCwDlpGbHff1GdrMYTmW8chlTFvRWL9k0A8vg==
dependencies:
"@jridgewell/trace-mapping" "^0.3.17"
chokidar "^3.4.1"
fast-glob "^3.2.7"
import-fresh "^3.2.1"
picocolors "^1.0.0"
sade "^1.7.4"
svelte-preprocess "^5.1.3"
typescript "^5.0.3"
svelte-eslint-parser@^0.38.0:
version "0.38.0"
resolved "https://registry.yarnpkg.com/svelte-eslint-parser/-/svelte-eslint-parser-0.38.0.tgz#a75e54c31531d44cbef3edbbb6a57a8a546abf31"
integrity sha512-5qyDMW19cqafbRua5xLKI4wHfHapDx1emu93Vl3Po+2qcV9mSXL/XhmgBN23S9ddE4SQ7vrF7V6Q2a+VMfmUQg==
svelte-eslint-parser@^0.41.0:
version "0.41.0"
resolved "https://registry.yarnpkg.com/svelte-eslint-parser/-/svelte-eslint-parser-0.41.0.tgz#7d02c2314abe7dc4fe0e935bf4fcc28078c590f2"
integrity sha512-L6f4hOL+AbgfBIB52Z310pg1d2QjRqm7wy3kI1W6hhdhX5bvu7+f0R6w4ykp5HoDdzq+vGhIJmsisaiJDGmVfA==
dependencies:
eslint-scope "^7.2.2"
eslint-visitor-keys "^3.4.3"
espree "^9.6.1"
postcss "^8.4.38"
postcss "^8.4.39"
postcss-scss "^4.0.9"
svelte-fa@^4.0.2:
@ -3239,7 +3230,7 @@ svelte-observable@^0.4.0:
resolved "https://registry.yarnpkg.com/svelte-observable/-/svelte-observable-0.4.0.tgz#74756e42fa3516c154d53f4244fa9cf691854224"
integrity sha512-e8CfnkUfOZ/nAIpdFi+g63lS5oU+8J+KKhwkHpO0/reADeTBbIiVbcCqVrLsETp8+i+4ydQoawNCwMP/C8oMyA==
svelte-preprocess@^5.0.3, svelte-preprocess@^5.1.3:
svelte-preprocess@^5.1.3:
version "5.1.4"
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz#14ada075c94bbd2b71c5ec70ff72f8ebe1c95b91"
integrity sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==
@ -3250,6 +3241,11 @@ svelte-preprocess@^5.0.3, svelte-preprocess@^5.1.3:
sorcery "^0.11.0"
strip-indent "^3.0.0"
svelte-preprocess@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-6.0.2.tgz#920bd53b1127757edb0a7d946dace75a0cac9ecf"
integrity sha512-OvDTLfaOkkhjprbDKO0SOCkjNYuHy16dbD4SpqbIi6QiabOMHxRT4km5/dzbFFkmW1L0E2INF3MFltG2pgOyKQ==
svelte-spa-router@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/svelte-spa-router/-/svelte-spa-router-4.0.1.tgz#720ef0cc9a4af33b155812496545c7999483878c"
@ -3437,11 +3433,16 @@ typed-array-length@^1.0.6:
is-typed-array "^1.1.13"
possible-typed-array-names "^1.0.0"
typescript@^5.0.0, typescript@^5.0.3:
typescript@^5.0.0:
version "5.4.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
typescript@^5.0.3:
version "5.5.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba"
integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==
ua-parser-js@^1.0.35:
version "1.0.37"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f"
@ -3486,10 +3487,10 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
vite-plugin-checker@^0.6.4:
version "0.6.4"
resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.6.4.tgz#aca186ab605aa15bd2c5dd9cc6d7c8fdcbe214ec"
integrity sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==
vite-plugin-checker@^0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.7.2.tgz#093ffdf9ccf51b2c9eab7101480bd0217ae99536"
integrity sha512-xeYeJbG0gaCaT0QcUC4B2Zo4y5NR8ZhYenc5gPbttrZvraRFwkEADCYwq+BfEHl9zYz7yf85TxsiGoYwyyIjhw==
dependencies:
"@babel/code-frame" "^7.12.13"
ansi-escapes "^4.3.0"
@ -3499,7 +3500,6 @@ vite-plugin-checker@^0.6.4:
fast-glob "^3.2.7"
fs-extra "^11.1.0"
npm-run-path "^4.0.1"
semver "^7.5.0"
strip-ansi "^6.0.0"
tiny-invariant "^1.1.0"
vscode-languageclient "^7.0.0"
@ -3516,13 +3516,13 @@ vite-tsconfig-paths@^4.3.2:
globrex "^0.1.2"
tsconfck "^3.0.3"
vite@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.1.tgz#bb2ca6b5fd7483249d3e86b25026e27ba8a663e6"
integrity sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==
vite@^5.3.5:
version "5.3.5"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.5.tgz#b847f846fb2b6cb6f6f4ed50a830186138cb83d8"
integrity sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.38"
postcss "^8.4.39"
rollup "^4.13.0"
optionalDependencies:
fsevents "~2.3.3"