From efb0e246127489d618ca6e3ea50f10dd1140a954 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Sun, 5 May 2024 00:40:10 +0200 Subject: [PATCH 1/3] fix: date timezone issue, refactor utils --- pnpm-lock.yaml | 12 +- src/lib/components/ui/EntryCard.svelte | 2 +- src/lib/server/query/entry.ts | 4 +- src/lib/server/query/mapping.ts | 4 +- src/lib/shared/util/date.test.ts | 74 ++++++++ src/lib/shared/util/date.ts | 172 +++++++++++++++++ src/lib/shared/util/index.test.ts | 74 -------- src/lib/shared/util/index.ts | 253 +------------------------ src/lib/shared/util/util.test.ts | 27 +++ src/lib/shared/util/util.ts | 105 ++++++++++ src/routes/(app)/visit/+page.svelte | 2 +- src/routes/(app)/visit/+page.ts | 20 +- 12 files changed, 409 insertions(+), 340 deletions(-) create mode 100644 src/lib/shared/util/date.test.ts create mode 100644 src/lib/shared/util/date.ts delete mode 100644 src/lib/shared/util/index.test.ts create mode 100644 src/lib/shared/util/util.test.ts create mode 100644 src/lib/shared/util/util.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a247f1..94c6091 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,6 +31,9 @@ dependencies: isomorphic-dompurify: specifier: ^2.7.0 version: 2.7.0 + prisma: + specifier: ^5.12.1 + version: 5.12.1 qs: specifier: ^6.12.1 version: 6.12.1 @@ -123,9 +126,6 @@ devDependencies: postcss-nesting: specifier: ^12.1.1 version: 12.1.1(postcss@8.4.38) - prisma: - specifier: ^5.12.1 - version: 5.12.1 svelte: specifier: ^4.2.15 version: 4.2.15 @@ -858,9 +858,11 @@ packages: /@prisma/debug@5.12.1: resolution: {integrity: sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A==} + dev: false /@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab: resolution: {integrity: sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==} + dev: false /@prisma/engines@5.12.1: resolution: {integrity: sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA==} @@ -870,6 +872,7 @@ packages: '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab '@prisma/fetch-engine': 5.12.1 '@prisma/get-platform': 5.12.1 + dev: false /@prisma/fetch-engine@5.12.1: resolution: {integrity: sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA==} @@ -877,11 +880,13 @@ packages: '@prisma/debug': 5.12.1 '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab '@prisma/get-platform': 5.12.1 + dev: false /@prisma/get-platform@5.12.1: resolution: {integrity: sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ==} dependencies: '@prisma/debug': 5.12.1 + dev: false /@rollup/plugin-commonjs@25.0.7(rollup@4.14.3): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} @@ -4577,6 +4582,7 @@ packages: requiresBuild: true dependencies: '@prisma/engines': 5.12.1 + dev: false /property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} diff --git a/src/lib/components/ui/EntryCard.svelte b/src/lib/components/ui/EntryCard.svelte index 5958457..409c5db 100644 --- a/src/lib/components/ui/EntryCard.svelte +++ b/src/lib/components/ui/EntryCard.svelte @@ -10,7 +10,7 @@ -
+
{formatDate(entry.current_version.date)} {#if entry.current_version.category} diff --git a/src/lib/server/query/entry.ts b/src/lib/server/query/entry.ts index 73a98f5..aa51a1a 100644 --- a/src/lib/server/query/entry.ts +++ b/src/lib/server/query/entry.ts @@ -10,7 +10,7 @@ import type { PaginationRequest, SortRequest, } from "$lib/shared/model"; -import { DateRange, dateToYMD } from "$lib/shared/util"; +import { DateRange, utcDateToYMD } from "$lib/shared/util"; import { ErrorConflict, ErrorInvalidInput } from "$lib/shared/util/error"; import { prisma } from "$lib/server/prisma"; @@ -365,7 +365,7 @@ left join stations s on s.id = r.station_id`, current_version: { id: item.version_id, text: item.text, - date: dateToYMD(item.date), + date: utcDateToYMD(item.date), category: item.category_id ? { id: item.category_id, diff --git a/src/lib/server/query/mapping.ts b/src/lib/server/query/mapping.ts index 03fd49c..1be7996 100644 --- a/src/lib/server/query/mapping.ts +++ b/src/lib/server/query/mapping.ts @@ -19,7 +19,7 @@ import type { EntryExecution, UserTagNameNonnull, } from "$lib/shared/model"; -import { dateToYMD } from "$lib/shared/util"; +import { utcDateToYMD } from "$lib/shared/util"; import { ErrorNotFound } from "$lib/shared/util/error"; type DbRoomLn = DbRoom & { station: DbStation }; @@ -73,7 +73,7 @@ export function mapVersion(version: DbEntryVersionLn): EntryVersion { return { id: version.id, text: version.text, - date: dateToYMD(version.date), + date: utcDateToYMD(version.date), category: version.category, priority: version.priority, author: version.author, diff --git a/src/lib/shared/util/date.test.ts b/src/lib/shared/util/date.test.ts new file mode 100644 index 0000000..eca9cc9 --- /dev/null +++ b/src/lib/shared/util/date.test.ts @@ -0,0 +1,74 @@ +import { expect, it, vi } from "vitest"; + +import { + DateRange, dateFromYMD, dateToYMD, formatDate, humanDate, utcDateToYMD, +} from "./date"; + +const MINUTE = 60000; +const HOUR = 3_600_000; +const DAY = 24 * HOUR; + +it("formatDate", () => { + const date = new Date(2024, 0, 2); + expect(formatDate(date)).toBe("02.01.2024"); +}); + +it.each([ + { s: "2024-01-02", exp: new Date(2024, 0, 2) }, + { s: "24-01-02", exp: NaN }, +])("dateFromYMD", ({ s, exp }) => { + expect(dateFromYMD(s)).toStrictEqual(exp); +}); + +it("utcDateToYMD", () => { + const utcDate = new Date(Date.UTC(2024, 0, 2)); + expect(utcDateToYMD(utcDate)).toBe("2024-01-02"); +}); + +it("dateToYMD", () => { + const date = new Date(2024, 0, 2); + expect(dateToYMD(date)).toBe("2024-01-02"); +}); + +it.each([ + { s: 0, txt: "jetzt gerade" }, + { s: -30 * MINUTE, txt: "vor 30 Minuten" }, + { s: -11 * HOUR, txt: "vor 11 Stunden" }, + { s: -DAY, txt: "gestern" }, + { s: -2.5 * DAY, txt: "vor 2 Tagen" }, + { s: -2.6 * DAY, txt: "vor 3 Tagen" }, + { s: -3.5 * DAY, txt: "vor 3 Tagen" }, + { s: -4 * DAY, txt: "am 28.12.2023, 12:00" }, + + { s: 28 * MINUTE, txt: "in 28 Minuten" }, + { s: 8 * HOUR, txt: "in 8 Stunden" }, + { s: DAY, txt: "morgen" }, + { s: 2.6 * DAY, txt: "in 3 Tagen" }, + { s: 4 * DAY, txt: "am 05.01.2024, 12:00" }, +])("humanDate", ({ s, txt }) => { + const mockDate = new Date(2024, 0, 1, 12, 0); + vi.setSystemTime(mockDate); + + const dt = new Date(Number(mockDate) + s); + const res = humanDate(dt, true); + expect(res).toBe(txt); + + vi.useRealTimers(); +}); + +it.each([ + { s: "", exp: null }, + { s: "..", exp: null }, + { s: "foo..bar", exp: null }, + { s: "2024-04-15", exp: new DateRange(dateFromYMD("2024-04-15"), dateFromYMD("2024-04-15")) }, + { s: "2024-04-13..2024-04-20", exp: new DateRange(dateFromYMD("2024-04-13"), dateFromYMD("2024-04-20")) }, + { s: "2024-04-13..", exp: new DateRange(dateFromYMD("2024-04-13"), null) }, + { s: "..2024-04-20", exp: new DateRange(null, dateFromYMD("2024-04-20")) }, +])("parse daterange $s", ({ s, exp }) => { + const res = DateRange.parse(s); + expect(res).toStrictEqual(exp); + + if (res && s !== "2024-04-15") { + expect(res.toString()).toBe(s); + } +}); diff --git a/src/lib/shared/util/date.ts b/src/lib/shared/util/date.ts new file mode 100644 index 0000000..43770bb --- /dev/null +++ b/src/lib/shared/util/date.ts @@ -0,0 +1,172 @@ +const LOCALE = "de-DE"; +const MS_PER_DAY = 86400000; + +function coerceDate(date: Date | string): Date { + if (!(date instanceof Date)) { + const d1 = dateFromYMD(date); + if (d1) return d1; + return new Date(date); + } + return date; +} + +export function formatDate(date: Date | string, time = false): string { + const dt = coerceDate(date); + if (time) { + return dt.toLocaleString(LOCALE, { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + }); + } + return dt.toLocaleDateString(LOCALE, { + day: "2-digit", + month: "2-digit", + year: "numeric", + }); +} + +export function dateFromYMD(s: string): Date { + const re = /^(\d{4})-(\d{2})-(\d{2})$/; + const match = s.match(re); + if (match) { + return new Date( + parseInt(match[1]), + parseInt(match[2]) - 1, + parseInt(match[3]), + ); + } + // @ts-expect-error emulate behavior of date constructor + return NaN; +} + +/** Convert the given date to a string (using the internal UTC format) */ +export function utcDateToYMD(date: Date): string { + return date.toISOString().slice(0, 10); +} + +/** Convert the given date to a string (using the local timezone) */ +export function dateToYMD(date: Date): string { + return date.getFullYear().toString().padStart(4, "0") + "-" + + (date.getMonth() + 1).toString().padStart(2, "0") + "-" + + date.getDate().toString().padStart(2, "0"); +} + +function dateDiffInDays(a: Date, b: Date): number { + const ts1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); + const ts2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); + + return Math.round((ts2 - ts1) / MS_PER_DAY); +} + +export function humanDate(date: Date | string, time = false): string { + const now = new Date(); + const dt = coerceDate(date); + const threshold = 302400000; // 3.5 * 24 * 3_600_000 + const diff = Number(dt) - Number(now); // pos: Future, neg: Past + if (Math.abs(diff) > threshold) return `am ${formatDate(date, time)}`; + + const intl = new Intl.RelativeTimeFormat(LOCALE); + + const diffDays = dateDiffInDays(now, dt); + if (diffDays !== 0) { + if (diffDays === 1) return "morgen"; + if (diffDays === -1) return "gestern"; + return intl.format(diffDays, "day"); + } + + if (time) { + const diffHours = Math.round(diff / 3_600_000); + if (diffHours !== 0) return intl.format(diffHours, "hour"); + + const diffMinutes = Math.round(diff / 60_000); + if (diffMinutes !== 0) return intl.format(diffMinutes, "minute"); + } + + return time ? "jetzt gerade" : "heute"; +} + +export class DateRange { + start: Date | null; + + end: Date | null; + + constructor(start: Date | null, end: Date | null) { + if (start === null && end == null) throw Error("this is not a range"); + this.start = start; + this.end = end; + } + + /** Construct a new DateRange with the given length in days */ + static withLength(start: Date, nDays: number): DateRange { + const end = new Date(start); + end.setDate(start.getDate() + nDays); + return new DateRange(start, end); + } + + /** Create a date range of the current calendar week */ + static thisWeek(): DateRange { + const dayStart = new Date(); + // Correct for timezone + dayStart.setMinutes(dayStart.getMinutes() - dayStart.getTimezoneOffset()); + + const todayWd = dayStart.getDay(); + // Day starts at Sunday (0) + const daysMinus = todayWd === 0 ? 6 : todayWd - 1; + dayStart.setDate(dayStart.getDate() - daysMinus); + return DateRange.withLength(dayStart, 6); + } + + /** Parse a date range from a string + * + * Accepted formats: + * - Single date `2024-04-15` => `2024-04-15..2024-04-15` + * - Range with 2 ends: `2024-04-13..2024-04-20` + * - Range with 1 end: `2024-04-13..`; `..2024-04-20` + */ + static parse(s: string): DateRange | null { + const parts = s.split("..", 2); + const parsed = parts.map((p) => { + if (p.length === 0) return null; + return dateFromYMD(p); + }); + + if (parsed.length === 0 + // @ts-expect-error Parsed dates can be NaN + || parsed.findIndex(isNaN) !== -1 + || parsed.every((e) => e === null) + ) return null; + + if (parsed.length === 2) { + return new DateRange(parsed[0], parsed[1]); + } else { + return new DateRange(parsed[0], parsed[0]); + } + } + + /** Shift the range by the given number of days. This modifies the range in-place */ + addDays(n: number) { + this.start?.setDate(this.start.getDate() + n); + this.end?.setDate(this.end.getDate() + n); + } + + /** Return a parsable string representation */ + toString(): string { + let res = ""; + if (this.start) res += dateToYMD(this.start); + res += ".."; + if (this.end) res += dateToYMD(this.end); + return res; + } + + /** Return a string representation for display purposes */ + format(): string { + let res = ""; + if (this.start) res += formatDate(this.start); + res += " \u2013 "; + if (this.end) res += formatDate(this.end); + return res; + } +} diff --git a/src/lib/shared/util/index.test.ts b/src/lib/shared/util/index.test.ts deleted file mode 100644 index 0381f1f..0000000 --- a/src/lib/shared/util/index.test.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { expect, it, vi } from "vitest"; - -import type { EntityQuery } from "$lib/shared/model"; -import { ZEntriesQuery } from "$lib/shared/model/validation"; - -import { - getQueryUrl, humanDate, DateRange, parseQueryUrl, -} from "."; - -const MINUTE = 60000; -const HOUR = 3_600_000; -const DAY = 24 * HOUR; - -it.each([ - { s: 0, txt: "jetzt gerade" }, - { s: -30 * MINUTE, txt: "vor 30 Minuten" }, - { s: -11 * HOUR, txt: "vor 11 Stunden" }, - { s: -DAY, txt: "gestern" }, - { s: -2.5 * DAY, txt: "vor 2 Tagen" }, - { s: -2.6 * DAY, txt: "vor 3 Tagen" }, - { s: -3.5 * DAY, txt: "vor 3 Tagen" }, - { s: -4 * DAY, txt: "am 28.12.2023, 12:00" }, - - { s: 28 * MINUTE, txt: "in 28 Minuten" }, - { s: 8 * HOUR, txt: "in 8 Stunden" }, - { s: DAY, txt: "morgen" }, - { s: 2.6 * DAY, txt: "in 3 Tagen" }, - { s: 4 * DAY, txt: "am 05.01.2024, 12:00" }, -])("humanDate", ({ s, txt }) => { - const mockDate = new Date(2024, 0, 1, 12, 0); - vi.setSystemTime(mockDate); - - const dt = new Date(Number(mockDate) + s); - const res = humanDate(dt, true); - expect(res).toBe(txt); - - vi.useRealTimers(); -}); - -it("getQueryUrl", () => { - const query: EntityQuery = { - filter: { - author: [{ id: 2, name: "Max" }], - category: [{ id: 1, name: "Blutabnahme" }, { id: 2, name: "Labortests" }], - done: true, - search: "Hello World", - }, - pagination: { limit: 10, offset: 20 }, - sort: { field: "room", asc: true }, - }; - - const queryUrl = getQueryUrl(query, ""); - expect(queryUrl).toBe("?filter%5Bauthor%5D%5B0%5D%5Bid%5D=2&filter%5Bauthor%5D%5B0%5D%5Bname%5D=Max&filter%5Bcategory%5D%5B0%5D%5Bid%5D=1&filter%5Bcategory%5D%5B0%5D%5Bname%5D=Blutabnahme&filter%5Bcategory%5D%5B1%5D%5Bid%5D=2&filter%5Bcategory%5D%5B1%5D%5Bname%5D=Labortests&filter%5Bdone%5D=true&filter%5Bsearch%5D=Hello%20World&pagination%5Blimit%5D=10&pagination%5Boffset%5D=20&sort%5Bfield%5D=room&sort%5Basc%5D=true"); - - const decoded = ZEntriesQuery.parse(parseQueryUrl(queryUrl)); - expect(decoded).toStrictEqual(query); -}); - -it.each([ - { s: "", exp: null }, - { s: "..", exp: null }, - { s: "foo..bar", exp: null }, - { s: "2024-04-15", exp: new DateRange(new Date("2024-04-15"), new Date("2024-04-15")) }, - { s: "2024-04-13..2024-04-20", exp: new DateRange(new Date("2024-04-13"), new Date("2024-04-20")) }, - { s: "2024-04-13..", exp: new DateRange(new Date("2024-04-13"), null) }, - { s: "..2024-04-20", exp: new DateRange(null, new Date("2024-04-20")) }, -])("parse date range $s", ({ s, exp }) => { - const res = DateRange.parse(s); - expect(res).toStrictEqual(exp); - - if (res && s !== "2024-04-15") { - expect(res.toString()).toBe(s); - } -}); diff --git a/src/lib/shared/util/index.ts b/src/lib/shared/util/index.ts index 2491245..4f3d187 100644 --- a/src/lib/shared/util/index.ts +++ b/src/lib/shared/util/index.ts @@ -1,251 +1,2 @@ -import { goto } from "$app/navigation"; - -import { isRedirect, error } from "@sveltejs/kit"; -import { TRPCClientError } from "@trpc/client"; -import DOMPurify from "isomorphic-dompurify"; -import qs from "qs"; -import { ZodError } from "zod"; - -import type { EntityQuery, Patient } from "$lib/shared/model"; -import type { RouterOutput } from "../trpc"; - -const LOCALE = "de-DE"; - -function coerceDate(date: Date | string): Date { - if (!(date instanceof Date)) { - return new Date(date); - } - return date; -} - -export function formatDate(date: Date | string, time = false): string { - const dt = coerceDate(date); - if (time) { - return dt.toLocaleString(LOCALE, { - day: "2-digit", - month: "2-digit", - year: "numeric", - hour: "2-digit", - minute: "2-digit", - }); - } - return dt.toLocaleDateString(LOCALE, { - day: "2-digit", - month: "2-digit", - year: "numeric", - }); -} - -const MS_PER_DAY = 86400000; - -function dateDiffInDays(a: Date, b: Date): number { - const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); - const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); - - return Math.round((utc2 - utc1) / MS_PER_DAY); -} - -export function humanDate(date: Date | string, time = false): string { - const now = new Date(); - const dt = coerceDate(date); - const threshold = 302400000; // 3.5 * 24 * 3_600_000 - const diff = Number(dt) - Number(now); // pos: Future, neg: Past - if (Math.abs(diff) > threshold) return `am ${formatDate(date, time)}`; - - const intl = new Intl.RelativeTimeFormat(LOCALE); - - const diffDays = dateDiffInDays(now, dt); - if (diffDays !== 0) { - if (diffDays === 1) return "morgen"; - if (diffDays === -1) return "gestern"; - return intl.format(diffDays, "day"); - } - - if (time) { - const diffHours = Math.round(diff / 3_600_000); - if (diffHours !== 0) return intl.format(diffHours, "hour"); - - const diffMinutes = Math.round(diff / 60_000); - if (diffMinutes !== 0) return intl.format(diffMinutes, "minute"); - } - - return time ? "jetzt gerade" : "heute"; -} - -export function formatBool(val: boolean): string { - return val ? "Ja" : "Nein"; -} - -/** Encode an entity query (search and filter) into an URL */ -export function getQueryUrl(query: EntityQuery, basePath: string): string { - if (Object.values(query).filter((q) => q !== undefined).length === 0) return basePath; - return basePath + "?" + qs.stringify(query); -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function parseQueryUrl(search: string): any { - return qs.parse(search, { ignoreQueryPrefix: true, allowDots: true }); -} - -export function gotoEntityQuery(query: EntityQuery, basePath: string) { - if (window && window.location.pathname.startsWith(`${basePath}/`)) { - if (window.location.search) { - const oldQuery: EntityQuery = parseQueryUrl(window.location.search); - const newQuery: EntityQuery = { - filter: { ...oldQuery.filter, ...query.filter }, - sort: query.sort, - }; - goto(getQueryUrl(newQuery, basePath)); - return; - } - } - goto(getQueryUrl(query, basePath)); -} - -/** Wrap a page load query to handle occuring errors - * - * Converts TRPC errors to SvelteKit ones - */ -export async function loadWrap(f: () => Promise) { - try { - return await f(); - } catch (e) { - if (isRedirect(e)) { - throw e; - } else if (e instanceof TRPCClientError) { - error(e.data?.httpStatus ?? 500, e.message); - } else if (e instanceof ZodError) { - error(400, e.message); - } else if (e instanceof Error) { - error(500, e.message); - } else { - error(500, "unknown error"); - } - } -} - -export function baseUrl(url: URL): string { - return `${url.protocol}//${url.host}`; -} - -export function dateToYMD(date: Date): string { - return date.toISOString().slice(0, 10); -} - -export class Debouncer { - private delay: number; - - private handler: () => unknown; - - private timeout: number | null = null; - - constructor(delay: number, handler: () => unknown) { - this.delay = delay; - this.handler = handler; - } - - clear() { - if (this.timeout) window.clearTimeout(this.timeout); - } - - trigger() { - this.clear(); - this.timeout = window.setTimeout(this.handler, this.delay); - } - - now() { - this.clear(); - this.handler(); - } -} - -export function sanitizeHtml(s: string): string { - return DOMPurify.sanitize(s, { FORBID_TAGS: ["img"] }); -} - -export class DateRange { - start: Date | null; - - end: Date | null; - - constructor(start: Date | null, end: Date | null) { - if (start === null && end == null) throw Error("this is not a range"); - this.start = start; - this.end = end; - } - - /** Construct a new DateRange with the given length in days */ - static withLength(start: Date, nDays: number): DateRange { - const end = new Date(start); - end.setDate(start.getDate() + nDays); - return new DateRange(start, end); - } - - /** Create a date range of the current calendar week */ - static thisWeek(): DateRange { - const dayStart = new Date(); - // Correct for timezone - dayStart.setMinutes(dayStart.getMinutes() - dayStart.getTimezoneOffset()); - - const todayWd = dayStart.getDay(); - // Day starts at Sunday (0) - const daysMinus = todayWd === 0 ? 6 : todayWd - 1; - dayStart.setDate(dayStart.getDate() - daysMinus); - return DateRange.withLength(dayStart, 6); - } - - /** Parse a date range from a string - * - * Accepted formats: - * - Single date `2024-04-15` => `2024-04-15..2024-04-15` - * - Range with 2 ends: `2024-04-13..2024-04-20` - * - Range with 1 end: `2024-04-13..`; `..2024-04-20` - */ - static parse(s: string): DateRange | null { - const parts = s.split("..", 2); - const parsed = parts.map((p) => { - if (p.length === 0) return null; - return new Date(p); - }); - - if (parsed.length === 0 - // @ts-expect-error Parsed dates can be NaN - || parsed.findIndex(isNaN) !== -1 - || parsed.every((e) => e === null) - ) return null; - - if (parsed.length === 2) { - return new DateRange(parsed[0], parsed[1]); - } else { - return new DateRange(parsed[0], parsed[0]); - } - } - - /** Shift the range by the given number of days. This modifies the range in-place */ - addDays(n: number) { - this.start?.setDate(this.start.getDate() + n); - this.end?.setDate(this.end.getDate() + n); - } - - /** Return a parsable string representation */ - toString(): string { - let res = ""; - if (this.start) res += dateToYMD(this.start); - res += ".."; - if (this.end) res += dateToYMD(this.end); - return res; - } - - /** Return a string representation for display purposes */ - format(): string { - let res = ""; - if (this.start) res += formatDate(this.start); - res += " \u2013 "; - if (this.end) res += formatDate(this.end); - return res; - } -} - -export function formatPatientName(patient: RouterOutput["patient"]["list"]["items"][0]): string { - return `${patient.first_name} ${patient.last_name} (${patient.age})`; -} +export * from "./util"; +export * from "./date"; diff --git a/src/lib/shared/util/util.test.ts b/src/lib/shared/util/util.test.ts new file mode 100644 index 0000000..eef4b3d --- /dev/null +++ b/src/lib/shared/util/util.test.ts @@ -0,0 +1,27 @@ +import { expect, it } from "vitest"; + +import type { EntityQuery } from "$lib/shared/model"; +import { ZEntriesQuery } from "$lib/shared/model/validation"; + +import { + getQueryUrl, parseQueryUrl, +} from "."; + +it("getQueryUrl", () => { + const query: EntityQuery = { + filter: { + author: [{ id: 2, name: "Max" }], + category: [{ id: 1, name: "Blutabnahme" }, { id: 2, name: "Labortests" }], + done: true, + search: "Hello World", + }, + pagination: { limit: 10, offset: 20 }, + sort: { field: "room", asc: true }, + }; + + const queryUrl = getQueryUrl(query, ""); + expect(queryUrl).toBe("?filter%5Bauthor%5D%5B0%5D%5Bid%5D=2&filter%5Bauthor%5D%5B0%5D%5Bname%5D=Max&filter%5Bcategory%5D%5B0%5D%5Bid%5D=1&filter%5Bcategory%5D%5B0%5D%5Bname%5D=Blutabnahme&filter%5Bcategory%5D%5B1%5D%5Bid%5D=2&filter%5Bcategory%5D%5B1%5D%5Bname%5D=Labortests&filter%5Bdone%5D=true&filter%5Bsearch%5D=Hello%20World&pagination%5Blimit%5D=10&pagination%5Boffset%5D=20&sort%5Bfield%5D=room&sort%5Basc%5D=true"); + + const decoded = ZEntriesQuery.parse(parseQueryUrl(queryUrl)); + expect(decoded).toStrictEqual(query); +}); diff --git a/src/lib/shared/util/util.ts b/src/lib/shared/util/util.ts new file mode 100644 index 0000000..daead40 --- /dev/null +++ b/src/lib/shared/util/util.ts @@ -0,0 +1,105 @@ +import { goto } from "$app/navigation"; + +import { isRedirect, error } from "@sveltejs/kit"; +import { TRPCClientError } from "@trpc/client"; +import DOMPurify from "isomorphic-dompurify"; +import qs from "qs"; +import { ZodError } from "zod"; + +import type { EntityQuery } from "$lib/shared/model"; +import type { RouterOutput } from "$lib/shared/trpc"; + +export function formatBool(val: boolean): string { + return val ? "Ja" : "Nein"; +} + +/** Encode an entity query (search and filter) into an URL */ +export function getQueryUrl(query: EntityQuery, basePath: string): string { + if (Object.values(query).filter((q) => q !== undefined).length === 0) return basePath; + return basePath + "?" + qs.stringify(query); +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function parseQueryUrl(search: string): any { + return qs.parse(search, { ignoreQueryPrefix: true, allowDots: true }); +} + +export function gotoEntityQuery(query: EntityQuery, basePath: string) { + if (window && window.location.pathname.startsWith(`${basePath}/`)) { + if (window.location.search) { + const oldQuery: EntityQuery = parseQueryUrl(window.location.search); + const newQuery: EntityQuery = { + filter: { ...oldQuery.filter, ...query.filter }, + sort: query.sort, + }; + goto(getQueryUrl(newQuery, basePath)); + return; + } + } + goto(getQueryUrl(query, basePath)); +} + +/** Wrap a page load query to handle occuring errors + * + * Converts TRPC errors to SvelteKit ones + */ +export async function loadWrap(f: () => Promise) { + try { + return await f(); + } catch (e) { + if (isRedirect(e)) { + throw e; + } else if (e instanceof TRPCClientError) { + error(e.data?.httpStatus ?? 500, e.message); + } else if (e instanceof ZodError) { + error(400, e.message); + } else if (e instanceof Error) { + error(500, e.message); + } else { + error(500, "unknown error"); + } + } +} + +export function baseUrl(url: URL): string { + return `${url.protocol}//${url.host}`; +} + +export class Debouncer { + private delay: number; + + private handler: () => unknown; + + private timeout: number | null = null; + + constructor(delay: number, handler: () => unknown) { + this.delay = delay; + this.handler = handler; + } + + clear() { + if (this.timeout) window.clearTimeout(this.timeout); + } + + trigger() { + this.clear(); + this.timeout = window.setTimeout(this.handler, this.delay); + } + + now() { + this.clear(); + this.handler(); + } +} + +export function sanitizeHtml(s: string): string { + return DOMPurify.sanitize(s, { FORBID_TAGS: ["img"] }); +} + +export function formatPatientName(patient: RouterOutput["patient"]["list"]["items"][0]): string { + return `${patient.first_name} ${patient.last_name} (${patient.age})`; +} + +export function divFloor(a: number, b: number): number { + return Math.floor(a / b); +} diff --git a/src/routes/(app)/visit/+page.svelte b/src/routes/(app)/visit/+page.svelte index 1640510..1ff17d6 100644 --- a/src/routes/(app)/visit/+page.svelte +++ b/src/routes/(app)/visit/+page.svelte @@ -53,7 +53,7 @@ filter: { done: false, station: selection ? [selection] : undefined, - date: dateRange ? [{ id: dateRange.toString(), name: dateRange.format() }] : undefined, + date: dateRange ? [{ id: dateRange.toString() }] : undefined, }, }); } diff --git a/src/routes/(app)/visit/+page.ts b/src/routes/(app)/visit/+page.ts index 3bf6689..bd1917b 100644 --- a/src/routes/(app)/visit/+page.ts +++ b/src/routes/(app)/visit/+page.ts @@ -1,10 +1,14 @@ import type { PageLoad } from "./$types"; +import { redirect } from "@sveltejs/kit"; import { z } from "zod"; +import { URL_VISIT } from "$lib/shared/constants"; import { ZEntriesQuery } from "$lib/shared/model/validation"; import { trpc } from "$lib/shared/trpc"; -import { DateRange, loadWrap, parseQueryUrl } from "$lib/shared/util"; +import { + DateRange, getQueryUrl, loadWrap, parseQueryUrl, +} from "$lib/shared/util"; export const load: PageLoad = async (event) => { return loadWrap(async () => { @@ -15,13 +19,17 @@ export const load: PageLoad = async (event) => { query = ZEntriesQuery.parse(decoded); } - // Default filter (current week) - const drange = DateRange.thisWeek(); if (!query.filter) { - query.filter = { - date: [{ id: drange.toString() }], - }; + const url = getQueryUrl({ + filter: { + done: false, + date: [{ id: DateRange.thisWeek().toString() }], + }, + }, URL_VISIT); + redirect(302, url); } + + // Sort entries by date if (!query.sort) { query.sort = { field: "date" }; } From be52e70e8d5abed676c9594f2de0e749b7d2da08 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Sun, 5 May 2024 04:30:35 +0200 Subject: [PATCH 2/3] build: remove docker multistage build, add entrypoint --- .dockerignore | 1 - Dockerfile | 29 +++++------------------------ run/entrypoint.sh | 5 +++++ 3 files changed, 10 insertions(+), 25 deletions(-) create mode 100755 run/entrypoint.sh diff --git a/.dockerignore b/.dockerignore index 6635cf5..91f5648 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,5 @@ .DS_Store node_modules -/build /.svelte-kit /package .env diff --git a/Dockerfile b/Dockerfile index 43b82b3..d845650 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,36 +1,17 @@ -# stage build -FROM node:20-alpine - -WORKDIR /app - -# copy everything to the container -COPY . . - -# clean install all dependencies -RUN corepack enable && pnpm i - -# remove potential security issues -RUN pnpm audit fix - -# build SvelteKit appmakeAuthjsRequest -RUN pnpm run build - - -# stage run FROM node:20-alpine WORKDIR /app # copy dependency list -COPY --from=0 /app/package*.json /app/pnpm-lock.yaml ./ -COPY --from=0 /app/patches ./patches -COPY --from=0 /app/prisma ./prisma +COPY package.json pnpm-lock.yaml run/entrypoint.sh ./ +COPY patches ./patches +COPY prisma ./prisma # Setup pnpm, install Prisma CLI (for generating client) and install dependencies RUN corepack enable && pnpm i --prod && pnpm audit fix && npx prisma generate # copy built SvelteKit app to /app -COPY --from=0 /app/build ./ +COPY build ./ EXPOSE 3000 -CMD ["node", "./index.js"] +CMD ["./entrypoint.sh"] diff --git a/run/entrypoint.sh b/run/entrypoint.sh new file mode 100755 index 0000000..c749cb0 --- /dev/null +++ b/run/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e +# Migrate database before starting server +npx prisma migrate deploy +node ./index.js From e3f7341a0e575a9b0cb922c9b697c21f6f6875c6 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Sun, 5 May 2024 04:30:39 +0200 Subject: [PATCH 3/3] chore: update dependencies --- package.json | 42 +- pnpm-lock.yaml | 1022 ++++++++++++++++++++---------------------------- 2 files changed, 435 insertions(+), 629 deletions(-) diff --git a/package.json b/package.json index 5d3e1eb..9ad9517 100644 --- a/package.json +++ b/package.json @@ -18,56 +18,56 @@ }, "dependencies": { "@auth/core": "^0.30.0", - "@floating-ui/core": "^1.6.0", + "@floating-ui/core": "^1.6.1", "@mdi/js": "^7.4.47", - "@prisma/client": "^5.12.1", + "@prisma/client": "^5.13.0", "carta-md": "4.0.2", "diff": "^5.2.0", - "isomorphic-dompurify": "^2.7.0", - "prisma": "^5.12.1", + "isomorphic-dompurify": "^2.9.0", + "prisma": "^5.13.0", "qs": "^6.12.1", "set-cookie-parser": "^2.6.0", "svelte-floating-ui": "^1.5.8", - "zod": "^3.22.4", + "zod": "^3.23.6", "zod-form-data": "^2.0.2" }, "devDependencies": { "@faker-js/faker": "^8.4.1", "@playwright/test": "^1.43.1", - "@stylistic/eslint-plugin": "^1.7.2", + "@stylistic/eslint-plugin": "^1.8.0", "@sveltejs/adapter-node": "^5.0.1", - "@sveltejs/kit": "^2.5.6", + "@sveltejs/kit": "^2.5.7", "@sveltejs/vite-plugin-svelte": "^3.1.0", - "@tailwindcss/typography": "^0.5.12", + "@tailwindcss/typography": "^0.5.13", "@trpc/client": "^10.45.2", "@trpc/server": "^10.45.2", - "@types/diff": "^5.0.9", - "@types/node": "^20.12.7", + "@types/diff": "^5.2.0", + "@types/node": "^20.12.8", "@types/qs": "^6.9.15", "@types/set-cookie-parser": "^2.4.7", "autoprefixer": "^10.4.19", - "daisyui": "^4.10.2", + "daisyui": "^4.10.5", "dotenv": "^16.4.5", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-no-relative-import-paths": "^1.5.4", - "eslint-plugin-svelte": "^2.37.0", - "eslint-plugin-unused-imports": "^3.1.0", - "globals": "^15.0.0", + "eslint-plugin-svelte": "^2.38.0", + "eslint-plugin-unused-imports": "^3.2.0", + "globals": "^15.1.0", "postcss-import": "^16.1.0", - "postcss-nesting": "^12.1.1", + "postcss-nesting": "^12.1.2", "svelte": "^4.2.15", - "svelte-check": "^3.6.9", - "sveltekit-superforms": "^2.12.5", + "svelte-check": "^3.7.1", + "sveltekit-superforms": "^2.13.0", "tailwindcss": "^3.4.3", "trpc-sveltekit": "^3.6.1", "tslib": "^2.6.2", - "tsx": "^4.7.2", + "tsx": "^4.9.1", "typescript": "^5.4.5", - "typescript-eslint": "^7.7.0", - "vite": "^5.2.9", - "vitest": "^1.5.0" + "typescript-eslint": "^7.8.0", + "vite": "^5.2.11", + "vitest": "^1.6.0" }, "type": "module", "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94c6091..a1c54b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,14 +14,14 @@ dependencies: specifier: ^0.30.0 version: 0.30.0 '@floating-ui/core': - specifier: ^1.6.0 - version: 1.6.0 + specifier: ^1.6.1 + version: 1.6.1 '@mdi/js': specifier: ^7.4.47 version: 7.4.47 '@prisma/client': - specifier: ^5.12.1 - version: 5.12.1(prisma@5.12.1) + specifier: ^5.13.0 + version: 5.13.0(prisma@5.13.0) carta-md: specifier: 4.0.2 version: 4.0.2(patch_hash=i33ea43vfgrg3ziu25cfu7s2zq)(svelte@4.2.15) @@ -29,11 +29,11 @@ dependencies: specifier: ^5.2.0 version: 5.2.0 isomorphic-dompurify: - specifier: ^2.7.0 - version: 2.7.0 + specifier: ^2.9.0 + version: 2.9.0 prisma: - specifier: ^5.12.1 - version: 5.12.1 + specifier: ^5.13.0 + version: 5.13.0 qs: specifier: ^6.12.1 version: 6.12.1 @@ -44,11 +44,11 @@ dependencies: specifier: ^1.5.8 version: 1.5.8 zod: - specifier: ^3.22.4 - version: 3.22.4 + specifier: ^3.23.6 + version: 3.23.6 zod-form-data: specifier: ^2.0.2 - version: 2.0.2(zod@3.22.4) + version: 2.0.2(zod@3.23.6) devDependencies: '@faker-js/faker': @@ -58,20 +58,20 @@ devDependencies: specifier: ^1.43.1 version: 1.43.1 '@stylistic/eslint-plugin': - specifier: ^1.7.2 - version: 1.7.2(eslint@8.57.0)(typescript@5.4.5) + specifier: ^1.8.0 + version: 1.8.0(eslint@8.57.0)(typescript@5.4.5) '@sveltejs/adapter-node': specifier: ^5.0.1 - version: 5.0.1(@sveltejs/kit@2.5.6) + version: 5.0.1(@sveltejs/kit@2.5.7) '@sveltejs/kit': - specifier: ^2.5.6 - version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) + specifier: ^2.5.7 + version: 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.0 - version: 3.1.0(svelte@4.2.15)(vite@5.2.9) + version: 3.1.0(svelte@4.2.15)(vite@5.2.11) '@tailwindcss/typography': - specifier: ^0.5.12 - version: 0.5.12(tailwindcss@3.4.3) + specifier: ^0.5.13 + version: 0.5.13(tailwindcss@3.4.3) '@trpc/client': specifier: ^10.45.2 version: 10.45.2(@trpc/server@10.45.2) @@ -79,11 +79,11 @@ devDependencies: specifier: ^10.45.2 version: 10.45.2 '@types/diff': - specifier: ^5.0.9 - version: 5.0.9 + specifier: ^5.2.0 + version: 5.2.0 '@types/node': - specifier: ^20.12.7 - version: 20.12.7 + specifier: ^20.12.8 + version: 20.12.8 '@types/qs': specifier: ^6.9.15 version: 6.9.15 @@ -94,8 +94,8 @@ devDependencies: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) daisyui: - specifier: ^4.10.2 - version: 4.10.2(postcss@8.4.38) + specifier: ^4.10.5 + version: 4.10.5(postcss@8.4.38) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -107,66 +107,61 @@ devDependencies: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) eslint-plugin-no-relative-import-paths: specifier: ^1.5.4 version: 1.5.4 eslint-plugin-svelte: - specifier: ^2.37.0 - version: 2.37.0(eslint@8.57.0)(svelte@4.2.15) + specifier: ^2.38.0 + version: 2.38.0(eslint@8.57.0)(svelte@4.2.15) eslint-plugin-unused-imports: - specifier: ^3.1.0 - version: 3.1.0(eslint@8.57.0) + specifier: ^3.2.0 + version: 3.2.0(eslint@8.57.0) globals: - specifier: ^15.0.0 - version: 15.0.0 + specifier: ^15.1.0 + version: 15.1.0 postcss-import: specifier: ^16.1.0 version: 16.1.0(postcss@8.4.38) postcss-nesting: - specifier: ^12.1.1 - version: 12.1.1(postcss@8.4.38) + specifier: ^12.1.2 + version: 12.1.2(postcss@8.4.38) svelte: specifier: ^4.2.15 version: 4.2.15 svelte-check: - specifier: ^3.6.9 - version: 3.6.9(postcss@8.4.38)(svelte@4.2.15) + specifier: ^3.7.1 + version: 3.7.1(postcss@8.4.38)(svelte@4.2.15) sveltekit-superforms: - specifier: ^2.12.5 - version: 2.12.5(@sveltejs/kit@2.5.6)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.15) + specifier: ^2.13.0 + version: 2.13.0(@sveltejs/kit@2.5.7)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.15) tailwindcss: specifier: ^3.4.3 version: 3.4.3 trpc-sveltekit: specifier: ^3.6.1 - version: 3.6.1(@sveltejs/adapter-node@5.0.1)(@trpc/client@10.45.2)(@trpc/server@10.45.2)(ws@8.16.0) + version: 3.6.1(@sveltejs/adapter-node@5.0.1)(@trpc/client@10.45.2)(@trpc/server@10.45.2)(ws@8.17.0) tslib: specifier: ^2.6.2 version: 2.6.2 tsx: - specifier: ^4.7.2 - version: 4.7.2 + specifier: ^4.9.1 + version: 4.9.1 typescript: specifier: ^5.4.5 version: 5.4.5 typescript-eslint: - specifier: ^7.7.0 - version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.8.0 + version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) vite: - specifier: ^5.2.9 - version: 5.2.9(@types/node@20.12.7) + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.8) vitest: - specifier: ^1.5.0 - version: 1.5.0(@types/node@20.12.7) + specifier: ^1.6.0 + version: 1.6.0(@types/node@20.12.8) packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -202,6 +197,15 @@ packages: preact-render-to-string: 5.2.3(preact@10.11.3) dev: false + /@babel/runtime@7.24.5: + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + engines: {node: '>=6.9.0'} + requiresBuild: true + dependencies: + regenerator-runtime: 0.14.1 + dev: true + optional: true + /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.16): resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==} engines: {node: ^14 || ^16 || >=18} @@ -220,15 +224,6 @@ packages: postcss-selector-parser: 6.0.16 dev: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/aix-ppc64@0.20.2: resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -238,15 +233,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.20.2: resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} @@ -256,15 +242,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.20.2: resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} @@ -274,15 +251,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.20.2: resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} @@ -292,15 +260,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.20.2: resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} @@ -310,15 +269,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.20.2: resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} @@ -328,15 +278,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.20.2: resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} @@ -346,15 +287,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.20.2: resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} @@ -364,15 +296,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.20.2: resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} @@ -382,15 +305,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.20.2: resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} @@ -400,15 +314,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.20.2: resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} @@ -418,15 +323,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.20.2: resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} @@ -436,15 +332,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.20.2: resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} @@ -454,15 +341,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.20.2: resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} @@ -472,15 +350,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.20.2: resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} @@ -490,15 +359,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.20.2: resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} @@ -508,15 +368,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.20.2: resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} @@ -526,15 +377,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.20.2: resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} @@ -544,15 +386,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.20.2: resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} @@ -562,15 +395,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.20.2: resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} @@ -580,15 +404,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.20.2: resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} @@ -598,15 +413,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.20.2: resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} @@ -616,15 +422,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.20.2: resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} @@ -671,26 +468,32 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@exodus/schemasafe@1.3.0: + resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} + requiresBuild: true + dev: true + optional: true + /@faker-js/faker@8.4.1: resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} dev: true - /@floating-ui/core@1.6.0: - resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} + /@floating-ui/core@1.6.1: + resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==} dependencies: - '@floating-ui/utils': 0.2.1 + '@floating-ui/utils': 0.2.2 dev: false - /@floating-ui/dom@1.6.3: - resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} + /@floating-ui/dom@1.6.5: + resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/utils': 0.2.1 + '@floating-ui/core': 1.6.1 + '@floating-ui/utils': 0.2.2 dev: false - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + /@floating-ui/utils@0.2.2: + resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} dev: false /@gcornut/valibot-json-schema@0.0.27(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(valibot@0.30.0): @@ -843,8 +646,8 @@ packages: dev: true optional: true - /@prisma/client@5.12.1(prisma@5.12.1): - resolution: {integrity: sha512-6/JnizEdlSBxDIdiLbrBdMW5NqDxOmhXAJaNXiPpgzAPr/nLZResT6MMpbOHLo5yAbQ1Vv5UU8PTPRzb0WIxdA==} + /@prisma/client@5.13.0(prisma@5.13.0): + resolution: {integrity: sha512-uYdfpPncbZ/syJyiYBwGZS8Gt1PTNoErNYMuqHDa2r30rNSFtgTA/LXsSk55R7pdRTMi5pHkeP9B14K6nHmwkg==} engines: {node: '>=16.13'} requiresBuild: true peerDependencies: @@ -853,42 +656,42 @@ packages: prisma: optional: true dependencies: - prisma: 5.12.1 + prisma: 5.13.0 dev: false - /@prisma/debug@5.12.1: - resolution: {integrity: sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A==} + /@prisma/debug@5.13.0: + resolution: {integrity: sha512-699iqlEvzyCj9ETrXhs8o8wQc/eVW+FigSsHpiskSFydhjVuwTJEfj/nIYqTaWFYuxiWQRfm3r01meuW97SZaQ==} dev: false - /@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab: - resolution: {integrity: sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==} + /@prisma/engines-version@5.13.0-23.b9a39a7ee606c28e3455d0fd60e78c3ba82b1a2b: + resolution: {integrity: sha512-AyUuhahTINGn8auyqYdmxsN+qn0mw3eg+uhkp8zwknXYIqoT3bChG4RqNY/nfDkPvzWAPBa9mrDyBeOnWSgO6A==} dev: false - /@prisma/engines@5.12.1: - resolution: {integrity: sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA==} + /@prisma/engines@5.13.0: + resolution: {integrity: sha512-hIFLm4H1boj6CBZx55P4xKby9jgDTeDG0Jj3iXtwaaHmlD5JmiDkZhh8+DYWkTGchu+rRF36AVROLnk0oaqhHw==} requiresBuild: true dependencies: - '@prisma/debug': 5.12.1 - '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab - '@prisma/fetch-engine': 5.12.1 - '@prisma/get-platform': 5.12.1 + '@prisma/debug': 5.13.0 + '@prisma/engines-version': 5.13.0-23.b9a39a7ee606c28e3455d0fd60e78c3ba82b1a2b + '@prisma/fetch-engine': 5.13.0 + '@prisma/get-platform': 5.13.0 dev: false - /@prisma/fetch-engine@5.12.1: - resolution: {integrity: sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA==} + /@prisma/fetch-engine@5.13.0: + resolution: {integrity: sha512-Yh4W+t6YKyqgcSEB3odBXt7QyVSm0OQlBSldQF2SNXtmOgMX8D7PF/fvH6E6qBCpjB/yeJLy/FfwfFijoHI6sA==} dependencies: - '@prisma/debug': 5.12.1 - '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab - '@prisma/get-platform': 5.12.1 + '@prisma/debug': 5.13.0 + '@prisma/engines-version': 5.13.0-23.b9a39a7ee606c28e3455d0fd60e78c3ba82b1a2b + '@prisma/get-platform': 5.13.0 dev: false - /@prisma/get-platform@5.12.1: - resolution: {integrity: sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ==} + /@prisma/get-platform@5.13.0: + resolution: {integrity: sha512-B/WrQwYTzwr7qCLifQzYOmQhZcFmIFhR81xC45gweInSUn2hTEbfKUPd2keAog+y5WI5xLAFNJ3wkXplvSVkSw==} dependencies: - '@prisma/debug': 5.12.1 + '@prisma/debug': 5.13.0 dev: false - /@rollup/plugin-commonjs@25.0.7(rollup@4.14.3): + /@rollup/plugin-commonjs@25.0.7(rollup@4.17.2): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -897,16 +700,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.10 - rollup: 4.14.3 + rollup: 4.17.2 dev: true - /@rollup/plugin-json@6.1.0(rollup@4.14.3): + /@rollup/plugin-json@6.1.0(rollup@4.17.2): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -915,11 +718,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) - rollup: 4.14.3 + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + rollup: 4.17.2 dev: true - /@rollup/plugin-node-resolve@15.2.3(rollup@4.14.3): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.17.2): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -928,16 +731,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.14.3 + rollup: 4.17.2 dev: true - /@rollup/pluginutils@5.1.0(rollup@4.14.3): + /@rollup/pluginutils@5.1.0(rollup@4.17.2): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -949,131 +752,131 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.14.3 + rollup: 4.17.2 dev: true - /@rollup/rollup-android-arm-eabi@4.14.3: - resolution: {integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==} + /@rollup/rollup-android-arm-eabi@4.17.2: + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.14.3: - resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==} + /@rollup/rollup-android-arm64@4.17.2: + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.14.3: - resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==} + /@rollup/rollup-darwin-arm64@4.17.2: + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.14.3: - resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==} + /@rollup/rollup-darwin-x64@4.17.2: + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.14.3: - resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==} + /@rollup/rollup-linux-arm-gnueabihf@4.17.2: + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.14.3: - resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==} + /@rollup/rollup-linux-arm-musleabihf@4.17.2: + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.14.3: - resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==} + /@rollup/rollup-linux-arm64-gnu@4.17.2: + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.14.3: - resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==} + /@rollup/rollup-linux-arm64-musl@4.17.2: + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.14.3: - resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==} + /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.14.3: - resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==} + /@rollup/rollup-linux-riscv64-gnu@4.17.2: + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.14.3: - resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==} + /@rollup/rollup-linux-s390x-gnu@4.17.2: + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.14.3: - resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==} + /@rollup/rollup-linux-x64-gnu@4.17.2: + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.14.3: - resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==} + /@rollup/rollup-linux-x64-musl@4.17.2: + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.14.3: - resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==} + /@rollup/rollup-win32-arm64-msvc@4.17.2: + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.14.3: - resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==} + /@rollup/rollup-win32-ia32-msvc@4.17.2: + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.14.3: - resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==} + /@rollup/rollup-win32-x64-msvc@4.17.2: + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} cpu: [x64] os: [win32] requiresBuild: true @@ -1108,8 +911,8 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sinclair/typebox@0.32.20: - resolution: {integrity: sha512-ziK497ILSIYMxD/thl496idIb03IZPlha04itLQu1xAFQbumWZ+Dj4PMMCkDRpAYhvVSdmRlTjGu2B2MA5RplQ==} + /@sinclair/typebox@0.32.29: + resolution: {integrity: sha512-GWKskKPGQV0vVYizqCu0E1YLwGthvlkDqpRxB3iBuqxJ8dN/9n1cnDRSQHF59GMoxDJwzSgmxpU617SidtUnMw==} requiresBuild: true dev: true optional: true @@ -1120,8 +923,8 @@ packages: dev: true optional: true - /@stylistic/eslint-plugin-js@1.7.2(eslint@8.57.0): - resolution: {integrity: sha512-ZYX7C5p7zlHbACwFLU+lISVh6tdcRP/++PWegh2Sy0UgMT5kU0XkPa2tKWEtJYzZmPhJxu9LxbnWcnE/tTwSDQ==} + /@stylistic/eslint-plugin-js@1.8.0(eslint@8.57.0): + resolution: {integrity: sha512-jdvnzt+pZPg8TfclZlTZPiUbbima93ylvQ+wNgHLNmup3obY6heQvgewSu9i2CfS61BnRByv+F9fxQLPoNeHag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' @@ -1134,21 +937,21 @@ packages: espree: 9.6.1 dev: true - /@stylistic/eslint-plugin-jsx@1.7.2(eslint@8.57.0): - resolution: {integrity: sha512-lNZR5PR0HLJPs+kY0y8fy6KroKlYqA5PwsYWpVYWzqZWiL5jgAeUo4s9yLFYjJjzildJ5MsTVMy/xP81Qz6GXg==} + /@stylistic/eslint-plugin-jsx@1.8.0(eslint@8.57.0): + resolution: {integrity: sha512-PC7tYXipF03TTilGJva1amAham7qOAFXT5r5jLTY6iIxkFqyb6H7Ljx5pv8d7n98VyIVidOEKY/AP8vNzAFNKg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.7.2(eslint@8.57.0) + '@stylistic/eslint-plugin-js': 1.8.0(eslint@8.57.0) '@types/eslint': 8.56.10 eslint: 8.57.0 estraverse: 5.3.0 picomatch: 4.0.2 dev: true - /@stylistic/eslint-plugin-plus@1.7.2(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-luUfRVbBVtt0+/FNt8/76BANJEzb/nHWasHD7UUjyMrch2U9xUKpObrkTCzqBuisKek+uFupwGjqXqDP07+fQw==} + /@stylistic/eslint-plugin-plus@1.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-TkrjzzYmTuAaLvFwtxomsgMUD8g8PREOQOQzTfKmiJ6oc4XOyFW4q/L9ES1J3UFSLybNCwbhu36lhXJut1w2Sg==} peerDependencies: eslint: '*' dependencies: @@ -1160,13 +963,13 @@ packages: - typescript dev: true - /@stylistic/eslint-plugin-ts@1.7.2(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-szX89YPocwCe4T0eT3alj7MwEzDHt5+B+kb/vQfSSLIjI9CGgoWrgj50zU8PtaDctTh4ZieFBzU/lRmkSUo0RQ==} + /@stylistic/eslint-plugin-ts@1.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-WuCIhz4JEHxzhAWjrBASMGj6Or1wAjDqTsRIck3DRRrw/FJ8C/8AAuHPk8ECHNSDI5PZ0OT72nF2uSUn0aQq1w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.7.2(eslint@8.57.0) + '@stylistic/eslint-plugin-js': 1.8.0(eslint@8.57.0) '@types/eslint': 8.56.10 '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 @@ -1175,16 +978,16 @@ packages: - typescript dev: true - /@stylistic/eslint-plugin@1.7.2(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-TesaPR4AOCeD4unwu9gZCdTe8SsUpykriICuwXV8GFBgESuVbfVp+S8g6xTWe9ntVR803bNMtnr2UhxHW0iFqg==} + /@stylistic/eslint-plugin@1.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-JRR0lCDU97AiE0X6qTc/uf8Hv0yETUdyJgoNzTLUIWdhVJVe/KGPnFmEsO1iXfNUIS6vhv3JJ5vaZ2qtXhZe1g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.7.2(eslint@8.57.0) - '@stylistic/eslint-plugin-jsx': 1.7.2(eslint@8.57.0) - '@stylistic/eslint-plugin-plus': 1.7.2(eslint@8.57.0)(typescript@5.4.5) - '@stylistic/eslint-plugin-ts': 1.7.2(eslint@8.57.0)(typescript@5.4.5) + '@stylistic/eslint-plugin-js': 1.8.0(eslint@8.57.0) + '@stylistic/eslint-plugin-jsx': 1.8.0(eslint@8.57.0) + '@stylistic/eslint-plugin-plus': 1.8.0(eslint@8.57.0)(typescript@5.4.5) + '@stylistic/eslint-plugin-ts': 1.8.0(eslint@8.57.0)(typescript@5.4.5) '@types/eslint': 8.56.10 eslint: 8.57.0 transitivePeerDependencies: @@ -1192,20 +995,20 @@ packages: - typescript dev: true - /@sveltejs/adapter-node@5.0.1(@sveltejs/kit@2.5.6): + /@sveltejs/adapter-node@5.0.1(@sveltejs/kit@2.5.7): resolution: {integrity: sha512-eYdmxdUWMW+dad1JfMsWBPY2vjXz9eE+52A2AQnXPScPJlIxIVk5mmbaEEzrZivLfO2wEcLTZ5vdC03W69x+iA==} peerDependencies: '@sveltejs/kit': ^2.4.0 dependencies: - '@rollup/plugin-commonjs': 25.0.7(rollup@4.14.3) - '@rollup/plugin-json': 6.1.0(rollup@4.14.3) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.14.3) - '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) - rollup: 4.14.3 + '@rollup/plugin-commonjs': 25.0.7(rollup@4.17.2) + '@rollup/plugin-json': 6.1.0(rollup@4.17.2) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.17.2) + '@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11) + rollup: 4.17.2 dev: true - /@sveltejs/kit@2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9): - resolution: {integrity: sha512-AYb02Jm5MfNqJHc8zrj7ScQAFAKmTUCkpkfoi8EVaZZDdnjkvI7L2GtnTDhpiXSAZRVitZX4qm59sMS1FgL+lQ==} + /@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11): + resolution: {integrity: sha512-6uedTzrb7nQrw6HALxnPrPaXdIN2jJJTzTIl96Z3P5NiG+OAfpdPbrWrvkJ3GN4CfWqrmU4dJqwMMRMTD/C7ow==} engines: {node: '>=18.13'} hasBin: true requiresBuild: true @@ -1214,12 +1017,12 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.9) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.11) '@types/cookie': 0.6.0 cookie: 0.6.0 - devalue: 4.3.2 + devalue: 5.0.0 esm-env: 1.0.0 - import-meta-resolve: 4.0.0 + import-meta-resolve: 4.1.0 kleur: 4.1.5 magic-string: 0.30.10 mrmime: 2.0.0 @@ -1228,10 +1031,10 @@ packages: sirv: 2.0.4 svelte: 4.2.15 tiny-glob: 0.2.9 - vite: 5.2.9(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) dev: true - /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9): + /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11): resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} engines: {node: ^18.0.0 || >=20} peerDependencies: @@ -1239,36 +1042,36 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.9) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.11) debug: 4.3.4 svelte: 4.2.15 - vite: 5.2.9(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.9): + /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11): resolution: {integrity: sha512-sY6ncCvg+O3njnzbZexcVtUqOBE3iYmQPJ9y+yXSkOwG576QI/xJrBnQSRXFLGwJNBa0T78JEKg5cIR0WOAuUw==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.10 svelte: 4.2.15 svelte-hmr: 0.16.0(svelte@4.2.15) - vite: 5.2.9(@types/node@20.12.7) - vitefu: 0.2.5(vite@5.2.9) + vite: 5.2.11(@types/node@20.12.8) + vitefu: 0.2.5(vite@5.2.11) transitivePeerDependencies: - supports-color dev: true - /@tailwindcss/typography@0.5.12(tailwindcss@3.4.3): - resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==} + /@tailwindcss/typography@0.5.13(tailwindcss@3.4.3): + resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: @@ -1300,8 +1103,8 @@ packages: '@types/ms': 0.7.34 dev: false - /@types/diff@5.0.9: - resolution: {integrity: sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ==} + /@types/diff@5.2.0: + resolution: {integrity: sha512-pjJH+02ukgJRW0mViDUA1cdC+wzSgRu0e4cPuogPLAw0i66y62iMP0ZlXoJAmoXrKRZnF3pMDwyKZsgNVlMX4A==} dev: true /@types/dompurify@3.0.5: @@ -1344,8 +1147,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: false - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + /@types/node@20.12.8: + resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} dependencies: undici-types: 5.26.5 dev: true @@ -1369,7 +1172,7 @@ packages: /@types/set-cookie-parser@2.4.7: resolution: {integrity: sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/trusted-types@2.0.7: @@ -1386,8 +1189,8 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + /@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -1398,11 +1201,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 @@ -1415,8 +1218,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + /@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1425,10 +1228,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 eslint: 8.57.0 typescript: 5.4.5 @@ -1444,16 +1247,16 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/scope-manager@7.7.0: - resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + /@typescript-eslint/scope-manager@7.8.0: + resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 dev: true - /@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + /@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1462,8 +1265,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -1477,8 +1280,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/types@7.7.0: - resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + /@typescript-eslint/types@7.8.0: + resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} engines: {node: ^18.18.0 || >=20.0.0} dev: true @@ -1504,8 +1307,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5): - resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + /@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5): + resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -1513,8 +1316,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1545,8 +1348,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + /@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1554,9 +1357,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -1572,11 +1375,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@7.7.0: - resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + /@typescript-eslint/visitor-keys@7.8.0: + resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/types': 7.8.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1599,45 +1402,45 @@ packages: '@types/validator': 13.11.9 '@vinejs/compiler': 2.5.0 camelcase: 8.0.0 - dayjs: 1.11.10 + dayjs: 1.11.11 dlv: 1.1.3 normalize-url: 8.0.1 validator: 13.11.0 dev: true optional: true - /@vitest/expect@1.5.0: - resolution: {integrity: sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA==} + /@vitest/expect@1.6.0: + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} dependencies: - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 chai: 4.4.1 dev: true - /@vitest/runner@1.5.0: - resolution: {integrity: sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ==} + /@vitest/runner@1.6.0: + resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} dependencies: - '@vitest/utils': 1.5.0 + '@vitest/utils': 1.6.0 p-limit: 5.0.0 pathe: 1.1.2 dev: true - /@vitest/snapshot@1.5.0: - resolution: {integrity: sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==} + /@vitest/snapshot@1.6.0: + resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} dependencies: magic-string: 0.30.10 pathe: 1.1.2 pretty-format: 29.7.0 dev: true - /@vitest/spy@1.5.0: - resolution: {integrity: sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==} + /@vitest/spy@1.6.0: + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} dependencies: tinyspy: 2.2.1 dev: true - /@vitest/utils@1.5.0: - resolution: {integrity: sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==} + /@vitest/utils@1.6.0: + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 @@ -1826,7 +1629,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001611 + caniuse-lite: 1.0.30001616 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -1884,10 +1687,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001611 - electron-to-chromium: 1.4.742 + caniuse-lite: 1.0.30001616 + electron-to-chromium: 1.4.756 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + update-browserslist-db: 1.0.15(browserslist@4.23.0) dev: true /buffer-crc32@0.2.13: @@ -1936,8 +1739,8 @@ packages: dev: true optional: true - /caniuse-lite@1.0.30001611: - resolution: {integrity: sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==} + /caniuse-lite@1.0.30001616: + resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} dev: true /carta-md@4.0.2(patch_hash=i33ea43vfgrg3ziu25cfu7s2zq)(svelte@4.2.15): @@ -2108,8 +1911,8 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /daisyui@4.10.2(postcss@8.4.38): - resolution: {integrity: sha512-eCWS1W/JPyxW9IvlgW5m0R6rp9ZhRsBTW37rvEUthckkjsV04u8XipV519OoccSA46ixhSJa3q7XLI1WUFtRCA==} + /daisyui@4.10.5(postcss@8.4.38): + resolution: {integrity: sha512-eOFUo5yEg0WV+3VK2C/+/XN1WH/OhFV4HzrMG5etAzcnB2hPg3aoR7gF1ZUpIv+b5MglLuAVMgub0rv660EgZg==} engines: {node: '>=16.9.0'} dependencies: css-selector-tokenizer: 0.8.0 @@ -2155,8 +1958,8 @@ packages: is-data-view: 1.0.1 dev: true - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + /dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} requiresBuild: true dev: true optional: true @@ -2240,8 +2043,12 @@ packages: engines: {node: '>=8'} dev: true - /devalue@4.3.2: - resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} + /devalue@4.3.3: + resolution: {integrity: sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==} + dev: true + + /devalue@5.0.0: + resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} dev: true /devlop@1.1.0: @@ -2289,8 +2096,8 @@ packages: esutils: 2.0.3 dev: true - /dompurify@3.1.0: - resolution: {integrity: sha512-yoU4rhgPKCo+p5UrWWWNKiIq+ToGqmVVhk0PmMYBK4kRsR3/qhemNFL8f6CFmBd4gMwm3F4T7HBoydP5uY07fA==} + /dompurify@3.1.2: + resolution: {integrity: sha512-hLGGBI1tw5N8qTELr3blKjAML/LY4ANxksbS612UiJyDfyf/2D092Pvm+S7pmeTGJRqvlJkFzBoHBQKgQlOQVg==} dev: false /dotenv@16.4.5: @@ -2302,8 +2109,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.742: - resolution: {integrity: sha512-EhE+z1d5RNytAq/qnGAxPR+ie3UzKbv7qqQc0wnEbOh+KDUplgfzkGSCy9d78B+S+nVNTS42BabHXB6Ni+Ud4w==} + /electron-to-chromium@1.4.756: + resolution: {integrity: sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==} dev: true /emoji-regex@8.0.0: @@ -2338,7 +2145,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -2428,37 +2235,6 @@ packages: dev: true optional: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - dev: true - /esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -2534,7 +2310,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -2555,7 +2331,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -2563,7 +2339,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -2573,7 +2349,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2582,7 +2358,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -2602,12 +2378,12 @@ packages: resolution: {integrity: sha512-2smViH7R3682NR6dwgYr8Vm7emqNP1gEjBku6DbvUy3Ef/2Fz+mhwsFjZGSixzWzazMCj4MAgIWTsHELCCDJKA==} dev: true - /eslint-plugin-svelte@2.37.0(eslint@8.57.0)(svelte@4.2.15): - resolution: {integrity: sha512-H/2Gz7agYHEMEEzRuLYuCmAIdjuBnbhFG9hOK0yCdSBvvJGJMkjo+lR6j67OIvLOavgp4L7zA5LnDKi8WqdPhQ==} + /eslint-plugin-svelte@2.38.0(eslint@8.57.0)(svelte@4.2.15): + resolution: {integrity: sha512-IwwxhHzitx3dr0/xo0z4jjDlb2AAHBPKt+juMyKKGTLlKi1rZfA4qixMwnveU20/JTHyipM6keX4Vr7LZFYc9g==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.95 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.112 peerDependenciesMeta: svelte: optional: true @@ -2625,14 +2401,14 @@ packages: postcss-selector-parser: 6.0.16 semver: 7.6.0 svelte: 4.2.15 - svelte-eslint-parser: 0.34.1(svelte@4.2.15) + svelte-eslint-parser: 0.35.0(svelte@4.2.15) transitivePeerDependencies: - supports-color - ts-node dev: true - /eslint-plugin-unused-imports@3.1.0(eslint@8.57.0): - resolution: {integrity: sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==} + /eslint-plugin-unused-imports@3.2.0(eslint@8.57.0): + resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': 6 - 7 @@ -2703,7 +2479,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -2963,7 +2739,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 + minipass: 7.1.0 path-scurry: 1.10.2 dev: true @@ -2996,16 +2772,17 @@ packages: type-fest: 0.20.2 dev: true - /globals@15.0.0: - resolution: {integrity: sha512-m/C/yR4mjO6pXDTm9/R/SpYTAIyaUB4EOzcaaMEl7mds7Mshct9GfejiJNQGjHHbdMPey13Kpu4TMbYi9ex1pw==} + /globals@15.1.0: + resolution: {integrity: sha512-926gJqg+4mkxwYKiFvoomM4J0kWESfk3qfTvRL2/oc/tK/eTDBbrfcKnSa2KtfdxB5onoL7D3A3qIHQFpd4+UA==} engines: {node: '>=18'} dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: true /globalyzer@0.1.0: @@ -3214,8 +2991,8 @@ packages: resolve-from: 4.0.0 dev: true - /import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + /import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} dev: true /imurmurhash@0.1.4: @@ -3422,12 +3199,12 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isomorphic-dompurify@2.7.0: - resolution: {integrity: sha512-0FTlXP/gEEWW+O/sXaO9yZ4bgegrHnOqzbdCNAMeO2KYIOVMAcqVIo+uTcWYd1+DmI+nV58vUmNW03nauoKn2w==} + /isomorphic-dompurify@2.9.0: + resolution: {integrity: sha512-iVtiFB+4hoU/1mIiOYOxFUE3hAiOSoKtTNQndLQul1aWKV9miVx127duUTk0+q/sqexjg87iFjcQYQPNvmEHgw==} engines: {node: '>=18'} dependencies: '@types/dompurify': 3.0.5 - dompurify: 3.1.0 + dompurify: 3.1.2 jsdom: 24.0.0 transitivePeerDependencies: - bufferutil @@ -3450,8 +3227,8 @@ packages: hasBin: true dev: true - /joi@17.12.3: - resolution: {integrity: sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==} + /joi@17.13.1: + resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} requiresBuild: true dependencies: '@hapi/hoek': 9.3.0 @@ -3494,18 +3271,18 @@ packages: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.9 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + tough-cookie: 4.1.4 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.16.0 + ws: 8.17.0 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -3517,6 +3294,16 @@ packages: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true + /json-schema-to-ts@3.1.0: + resolution: {integrity: sha512-UeVN/ery4/JeXI8h4rM8yZPxsH+KqPi/84qFxHfTGHZnWnK9D0UU9ZGYO+6XAaJLqCWMiks+ARuFOKAiSxJCHA==} + engines: {node: '>=16'} + requiresBuild: true + dependencies: + '@babel/runtime': 7.24.5 + ts-algebra: 2.0.0 + dev: true + optional: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -3577,7 +3364,7 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.6.1 + mlly: 1.7.0 pkg-types: 1.1.0 dev: true @@ -3613,8 +3400,8 @@ packages: get-func-name: 2.0.2 dev: true - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} dev: true @@ -4095,8 +3882,8 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + /minipass@7.1.0: + resolution: {integrity: sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==} engines: {node: '>=16 || 14 >=14.17'} dev: true @@ -4107,8 +3894,8 @@ packages: minimist: 1.2.8 dev: true - /mlly@1.6.1: - resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + /mlly@1.7.0: + resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} dependencies: acorn: 8.11.3 pathe: 1.1.2 @@ -4179,8 +3966,8 @@ packages: path-key: 4.0.0 dev: true - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + /nwsapi@2.2.9: + resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} dev: false /oauth4webapi@2.10.4: @@ -4256,16 +4043,16 @@ packages: mimic-fn: 4.0.0 dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /p-limit@3.1.0: @@ -4330,8 +4117,8 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 + lru-cache: 10.2.2 + minipass: 7.1.0 dev: true /path-type@4.0.0: @@ -4382,7 +4169,7 @@ packages: resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} dependencies: confbox: 0.1.7 - mlly: 1.6.1 + mlly: 1.7.0 pathe: 1.1.2 dev: true @@ -4472,7 +4259,7 @@ packages: dependencies: lilconfig: 3.1.1 postcss: 8.4.38 - yaml: 2.4.1 + yaml: 2.4.2 dev: true /postcss-nested@6.0.1(postcss@8.4.38): @@ -4485,8 +4272,8 @@ packages: postcss-selector-parser: 6.0.16 dev: true - /postcss-nesting@12.1.1(postcss@8.4.38): - resolution: {integrity: sha512-qc74KvIAQNa5ujZKG1UV286dhaDW6basbUy2i9AzNU/T8C9hpvGu9NZzm1SfePe2yP7sPYgpA8d4sPVopn2Hhw==} + /postcss-nesting@12.1.2(postcss@8.4.38): + resolution: {integrity: sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 @@ -4568,20 +4355,20 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 dev: true /pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} dev: false - /prisma@5.12.1: - resolution: {integrity: sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q==} + /prisma@5.13.0: + resolution: {integrity: sha512-kGtcJaElNRAdAGsCNykFSZ7dBKpL14Cbs+VaQ8cECxQlRPDjBlMHNFYeYt0SKovAVy2Y65JXQwB3A5+zIQwnTg==} engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 5.12.1 + '@prisma/engines': 5.13.0 dev: false /property-expr@2.0.6: @@ -4617,8 +4404,8 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: true /read-cache@1.0.0: @@ -4634,6 +4421,12 @@ packages: picomatch: 2.3.1 dev: true + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + requiresBuild: true + dev: true + optional: true + /regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -4735,29 +4528,29 @@ packages: glob: 7.2.3 dev: true - /rollup@4.14.3: - resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} + /rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.14.3 - '@rollup/rollup-android-arm64': 4.14.3 - '@rollup/rollup-darwin-arm64': 4.14.3 - '@rollup/rollup-darwin-x64': 4.14.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.14.3 - '@rollup/rollup-linux-arm-musleabihf': 4.14.3 - '@rollup/rollup-linux-arm64-gnu': 4.14.3 - '@rollup/rollup-linux-arm64-musl': 4.14.3 - '@rollup/rollup-linux-powerpc64le-gnu': 4.14.3 - '@rollup/rollup-linux-riscv64-gnu': 4.14.3 - '@rollup/rollup-linux-s390x-gnu': 4.14.3 - '@rollup/rollup-linux-x64-gnu': 4.14.3 - '@rollup/rollup-linux-x64-musl': 4.14.3 - '@rollup/rollup-win32-arm64-msvc': 4.14.3 - '@rollup/rollup-win32-ia32-msvc': 4.14.3 - '@rollup/rollup-win32-x64-msvc': 4.14.3 + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 fsevents: 2.3.3 dev: true @@ -5071,8 +4864,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.6.9(postcss@8.4.38)(svelte@4.2.15): - resolution: {integrity: sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==} + /svelte-check@3.7.1(postcss@8.4.38)(svelte@4.2.15): + resolution: {integrity: sha512-U4uJoLCzmz2o2U33c7mPDJNhRYX/DNFV11XTUDlFxaKLsO7P+40gvJHMPpoRfa24jqZfST4/G9fGNcUGMO8NAQ==} hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 @@ -5098,11 +4891,11 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.34.1(svelte@4.2.15): - resolution: {integrity: sha512-9+uLA1pqI9AZioKVGJzYYmlOZWxfoCXSbAM9iaNm7H01XlYlzRTtJfZgl9o3StQGN41PfGJIbkKkfk3e/pHFfA==} + /svelte-eslint-parser@0.35.0(svelte@4.2.15): + resolution: {integrity: sha512-CtbPseajW0gjwEvHiuzYJkPDjAcHz2FaHt540j6RVYrZgnE6xWkzUBodQ4I3nV+G5AS0Svt8K6aIA/CIU9xT2Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.94 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.112 peerDependenciesMeta: svelte: optional: true @@ -5118,8 +4911,8 @@ packages: /svelte-floating-ui@1.5.8: resolution: {integrity: sha512-dVvJhZ2bT+kQDHlE4Lep8t+sgEc0XD96fXLzAi2DDI2bsaegBbClxXVNMma0C2WsG+n9GJSYx292dTvA8CYRtw==} dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/dom': 1.6.3 + '@floating-ui/core': 1.6.1 + '@floating-ui/dom': 1.6.5 dev: false /svelte-hmr@0.16.0(svelte@4.2.15): @@ -5198,31 +4991,33 @@ packages: magic-string: 0.30.10 periscopic: 3.1.0 - /sveltekit-superforms@2.12.5(@sveltejs/kit@2.5.6)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.15): - resolution: {integrity: sha512-p8qHNsMcPoB1mgTU8catzID8HJmxIK9ozRbGrv50Jk/XPotOjn5zTvW/stkVDBDL/tPLz0vfw+2PNbkkHCdhlw==} + /sveltekit-superforms@2.13.0(@sveltejs/kit@2.5.7)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(svelte@4.2.15): + resolution: {integrity: sha512-OJguA5oqLKa4H5SIpGjoneQAKDztDL0GepZFQn/Fv4BMvexbN9tFKujX0Ry81zYuJHfwRE5hN13+WLP4ro/WRw==} requiresBuild: true peerDependencies: '@sveltejs/kit': 1.x || 2.x svelte: 3.x || 4.x || >=5.0.0-next.51 dependencies: - '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) - devalue: 4.3.2 + '@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11) + devalue: 4.3.3 just-clone: 6.2.0 memoize-weak: 1.0.2 svelte: 4.2.15 ts-deepmerge: 7.0.0 optionalDependencies: + '@exodus/schemasafe': 1.3.0 '@gcornut/valibot-json-schema': 0.0.27(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.2)(valibot@0.30.0) - '@sinclair/typebox': 0.32.20 + '@sinclair/typebox': 0.32.29 '@sodaru/yup-to-json-schema': 2.0.1 '@vinejs/vine': 1.8.0 arktype: 1.0.29-alpha - joi: 17.12.3 + joi: 17.13.1 + json-schema-to-ts: 3.1.0 superstruct: 1.0.4 valibot: 0.30.0 yup: 1.4.0 - zod: 3.22.4 - zod-to-json-schema: 3.22.5(zod@3.22.4) + zod: 3.23.6 + zod-to-json-schema: 3.23.0(zod@3.23.6) transitivePeerDependencies: - '@types/json-schema' - esbuild @@ -5294,8 +5089,8 @@ packages: globrex: 0.1.2 dev: true - /tinybench@2.7.0: - resolution: {integrity: sha512-Qgayeb106x2o4hNzNjsZEfFziw8IbKqtbXBjVh7VIZfBxfD5M4gWtpyx5+YTae2gJ6Y6Dz/KLepiv16RFeQWNA==} + /tinybench@2.8.0: + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} dev: true /tinypool@0.8.4: @@ -5326,8 +5121,8 @@ packages: engines: {node: '>=6'} dev: true - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -5351,7 +5146,7 @@ packages: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false - /trpc-sveltekit@3.6.1(@sveltejs/adapter-node@5.0.1)(@trpc/client@10.45.2)(@trpc/server@10.45.2)(ws@8.16.0): + /trpc-sveltekit@3.6.1(@sveltejs/adapter-node@5.0.1)(@trpc/client@10.45.2)(@trpc/server@10.45.2)(ws@8.17.0): resolution: {integrity: sha512-5Sfw/xwvyuAdpoMHPgzC5B3m3pjbjcT6d3Vo9ukS1/NP8d2LPj30wWyHP3ploeUQNJRvCffRRkc69mp7csqf/g==} peerDependencies: '@sveltejs/adapter-node': '>=1.2' @@ -5359,12 +5154,18 @@ packages: '@trpc/server': ^10.0.0 ws: '>=8' dependencies: - '@sveltejs/adapter-node': 5.0.1(@sveltejs/kit@2.5.6) + '@sveltejs/adapter-node': 5.0.1(@sveltejs/kit@2.5.7) '@trpc/client': 10.45.2(@trpc/server@10.45.2) '@trpc/server': 10.45.2 - ws: 8.16.0 + ws: 8.17.0 dev: true + /ts-algebra@2.0.0: + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} + requiresBuild: true + dev: true + optional: true + /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -5401,12 +5202,12 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsx@4.7.2: - resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} + /tsx@4.9.1: + resolution: {integrity: sha512-CqSJaYyZ6GEqnGtPuMPQHvUwRGU6VHSVF+RDxoOmRg/XD4aF0pD973tKhoUYGQtdcoCHcSOGk34ioFaP+vYcMQ==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - esbuild: 0.19.12 + esbuild: 0.20.2 get-tsconfig: 4.7.3 optionalDependencies: fsevents: 2.3.3 @@ -5480,8 +5281,8 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typescript-eslint@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw==} + /typescript-eslint@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -5490,9 +5291,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 typescript: 5.4.5 transitivePeerDependencies: @@ -5572,8 +5373,8 @@ packages: engines: {node: '>= 4.0.0'} dev: false - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.0.15(browserslist@4.23.0): + resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -5635,8 +5436,8 @@ packages: vfile-message: 4.0.2 dev: false - /vite-node@1.5.0(@types/node@20.12.7): - resolution: {integrity: sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==} + /vite-node@1.6.0(@types/node@20.12.8): + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: @@ -5644,7 +5445,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.9(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) transitivePeerDependencies: - '@types/node' - less @@ -5656,8 +5457,8 @@ packages: - terser dev: true - /vite@5.2.9(@types/node@20.12.7): - resolution: {integrity: sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw==} + /vite@5.2.11(@types/node@20.12.8): + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -5684,15 +5485,15 @@ packages: terser: optional: true dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.14.3 + rollup: 4.17.2 optionalDependencies: fsevents: 2.3.3 dev: true - /vitefu@0.2.5(vite@5.2.9): + /vitefu@0.2.5(vite@5.2.11): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -5700,18 +5501,18 @@ packages: vite: optional: true dependencies: - vite: 5.2.9(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) dev: true - /vitest@1.5.0(@types/node@20.12.7): - resolution: {integrity: sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==} + /vitest@1.6.0(@types/node@20.12.8): + resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.5.0 - '@vitest/ui': 1.5.0 + '@vitest/browser': 1.6.0 + '@vitest/ui': 1.6.0 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -5728,12 +5529,12 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.12.7 - '@vitest/expect': 1.5.0 - '@vitest/runner': 1.5.0 - '@vitest/snapshot': 1.5.0 - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 + '@types/node': 20.12.8 + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 acorn-walk: 8.3.2 chai: 4.4.1 debug: 4.3.4 @@ -5744,10 +5545,10 @@ packages: picocolors: 1.0.0 std-env: 3.7.0 strip-literal: 2.1.0 - tinybench: 2.7.0 + tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.2.9(@types/node@20.12.7) - vite-node: 1.5.0(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) + vite-node: 1.6.0(@types/node@20.12.8) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -5833,6 +5634,11 @@ packages: stackback: 0.0.2 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5855,8 +5661,8 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + /ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5885,8 +5691,8 @@ packages: engines: {node: '>= 6'} dev: true - /yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + /yaml@2.4.2: + resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} engines: {node: '>= 14'} hasBin: true dev: true @@ -5912,26 +5718,26 @@ packages: dev: true optional: true - /zod-form-data@2.0.2(zod@3.22.4): + /zod-form-data@2.0.2(zod@3.23.6): resolution: {integrity: sha512-sKTi+k0fvkxdakD0V5rq+9WVJA3cuTQUfEmNqvHrTzPLvjfLmkkBLfR0ed3qOi9MScJXTHIDH/jUNnEJ3CBX4g==} peerDependencies: zod: '>= 3.11.0' dependencies: - zod: 3.22.4 + zod: 3.23.6 dev: false - /zod-to-json-schema@3.22.5(zod@3.22.4): - resolution: {integrity: sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==} + /zod-to-json-schema@3.23.0(zod@3.23.6): + resolution: {integrity: sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag==} requiresBuild: true peerDependencies: - zod: ^3.22.4 + zod: ^3.23.3 dependencies: - zod: 3.22.4 + zod: 3.23.6 dev: true optional: true - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + /zod@3.23.6: + resolution: {integrity: sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==} /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}