diff --git a/.vscode/settings.json b/.vscode/settings.json index c13f301f..c8e84b69 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,5 +21,6 @@ ], "i18n-ally.sortKeys": false, "i18n-ally.keepFulfilled": false, - "i18n-ally.keystyle": "nested" + "i18n-ally.keystyle": "nested", + "editor.gotoLocation.multipleDefinitions": "goto" } diff --git a/README.md b/README.md index 55893968..62dc31dc 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ For less common or specific edge-case scenarios, please refer to the detailed in ## License -This project is licensed under the GPL-3.0-only License - see the LICENSE file for details +This project is licensed under the AGPL-3.0-only License - see the LICENSE file for details This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with Jason A. Donenfeld, ZX2C4 or Edge Security diff --git a/package.json b/package.json index 1dc516ef..09863edf 100644 --- a/package.json +++ b/package.json @@ -5,5 +5,5 @@ "dev": "docker compose -f docker-compose.dev.yml up", "build": "docker build -t wg-easy ." }, - "packageManager": "pnpm@9.15.0" + "packageManager": "pnpm@9.15.3" } diff --git a/src/app/app.vue b/src/app/app.vue index d750f00e..025580ad 100644 --- a/src/app/app.vue +++ b/src/app/app.vue @@ -4,14 +4,18 @@ + > + + diff --git a/src/app/components/ClientCard/Config.vue b/src/app/components/ClientCard/Config.vue index 4f0c0f8a..2ce4ec61 100644 --- a/src/app/components/ClientCard/Config.vue +++ b/src/app/components/ClientCard/Config.vue @@ -1,12 +1,12 @@ diff --git a/src/app/components/Clients/DeleteDialog.vue b/src/app/components/Clients/DeleteDialog.vue index 03bba0a7..c02bf5d3 100644 --- a/src/app/components/Clients/DeleteDialog.vue +++ b/src/app/components/Clients/DeleteDialog.vue @@ -1,99 +1,41 @@ - diff --git a/src/app/components/admin/CidrDialog.vue b/src/app/components/admin/CidrDialog.vue new file mode 100644 index 00000000..a78bf180 --- /dev/null +++ b/src/app/components/admin/CidrDialog.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/app/components/base/Avatar.vue b/src/app/components/base/Avatar.vue index a5ba1da7..67ab475d 100644 --- a/src/app/components/base/Avatar.vue +++ b/src/app/components/base/Avatar.vue @@ -3,9 +3,8 @@ class="mr-2 inline-flex select-none items-center justify-center overflow-hidden rounded-full align-middle" > ([]); function publish(e: { title: string; message: string }) { count.push({ title: e.title, message: e.message }); - console.log(count.length); } diff --git a/src/app/components/form/ActionField.vue b/src/app/components/form/ActionField.vue index 4ef42245..9cf599fe 100644 --- a/src/app/components/form/ActionField.vue +++ b/src/app/components/form/ActionField.vue @@ -1,11 +1,16 @@ diff --git a/src/app/components/form/ArrayField.vue b/src/app/components/form/ArrayField.vue index 9481c262..777e6c79 100644 --- a/src/app/components/form/ArrayField.vue +++ b/src/app/components/form/ArrayField.vue @@ -1,28 +1,32 @@ diff --git a/src/app/components/form/Element.vue b/src/app/components/form/Element.vue new file mode 100644 index 00000000..20d8b517 --- /dev/null +++ b/src/app/components/form/Element.vue @@ -0,0 +1,5 @@ + diff --git a/src/app/components/form/NumberField.vue b/src/app/components/form/NumberField.vue index f89d626b..706e7257 100644 --- a/src/app/components/form/NumberField.vue +++ b/src/app/components/form/NumberField.vue @@ -5,6 +5,7 @@ diff --git a/src/app/components/form/TextField.vue b/src/app/components/form/TextField.vue index cba59cde..f3271074 100644 --- a/src/app/components/form/TextField.vue +++ b/src/app/components/form/TextField.vue @@ -5,6 +5,7 @@ diff --git a/src/app/components/header/Update.vue b/src/app/components/header/Update.vue index dfb5bcf5..15ffee6e 100644 --- a/src/app/components/header/Update.vue +++ b/src/app/components/header/Update.vue @@ -23,5 +23,4 @@ diff --git a/src/app/components/ui/ChooseLang.vue b/src/app/components/ui/ChooseLang.vue index bd5cd475..a5df8e67 100644 --- a/src/app/components/ui/ChooseLang.vue +++ b/src/app/components/ui/ChooseLang.vue @@ -2,7 +2,7 @@ @@ -31,16 +31,15 @@ diff --git a/src/app/layouts/default.vue b/src/app/layouts/default.vue index c8432677..179d017d 100644 --- a/src/app/layouts/default.vue +++ b/src/app/layouts/default.vue @@ -4,12 +4,12 @@
- +
@@ -55,13 +55,10 @@ diff --git a/src/app/pages/admin.vue b/src/app/pages/admin.vue index f997b3f7..ba2f4169 100644 --- a/src/app/pages/admin.vue +++ b/src/app/pages/admin.vue @@ -42,8 +42,9 @@ const route = useRoute(); const menuItems = [ { id: '', name: 'General' }, - { id: 'defaults', name: 'Defaults' }, + { id: 'config', name: 'Config' }, { id: 'interface', name: 'Interface' }, + { id: 'hooks', name: 'Hooks' }, { id: 'metrics', name: 'Metrics' }, ]; diff --git a/src/app/pages/admin/config.vue b/src/app/pages/admin/config.vue new file mode 100644 index 00000000..ca399d77 --- /dev/null +++ b/src/app/pages/admin/config.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/app/pages/admin/defaults.vue b/src/app/pages/admin/defaults.vue deleted file mode 100644 index 1baa87a6..00000000 --- a/src/app/pages/admin/defaults.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/src/app/pages/admin/hooks.vue b/src/app/pages/admin/hooks.vue new file mode 100644 index 00000000..1566e8a6 --- /dev/null +++ b/src/app/pages/admin/hooks.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/app/pages/admin/index.vue b/src/app/pages/admin/index.vue index 42df6089..a9979e2c 100644 --- a/src/app/pages/admin/index.vue +++ b/src/app/pages/admin/index.vue @@ -1,9 +1,59 @@ - + diff --git a/src/app/pages/admin/interface.vue b/src/app/pages/admin/interface.vue index 1bdaffe7..def6fc4a 100644 --- a/src/app/pages/admin/interface.vue +++ b/src/app/pages/admin/interface.vue @@ -1,19 +1,58 @@ - + diff --git a/src/app/pages/clients/[id].vue b/src/app/pages/clients/[id].vue index edfd76a3..c7935b19 100644 --- a/src/app/pages/clients/[id].vue +++ b/src/app/pages/clients/[id].vue @@ -5,45 +5,69 @@ - - - {{ $t('me.sectionGeneral') }} - - - - - - Address - - - - - Allowed IPs - - - - Server Allowed IPs - - - - - Advanced - - - - - Actions - - - + + + + {{ $t('me.sectionGeneral') }} + + + + + + + Address + + + + + Allowed IPs + + + + Server Allowed IPs + + + + + Advanced + + + + + Actions + + + + + + + @@ -52,15 +76,69 @@ diff --git a/src/app/pages/index.vue b/src/app/pages/index.vue index c18a2aff..ae61eb14 100644 --- a/src/app/pages/index.vue +++ b/src/app/pages/index.vue @@ -27,7 +27,6 @@ - @@ -37,6 +36,9 @@ authStore.update(); const globalStore = useGlobalStore(); const clientsStore = useClientsStore(); +// TODO?: use hover card to show more detailed info without leaving the page +// or do something like a accordion + const intervalId = ref(null); clientsStore.refresh(); diff --git a/src/app/pages/login.vue b/src/app/pages/login.vue index 9e6af3ad..0317f165 100644 --- a/src/app/pages/login.vue +++ b/src/app/pages/login.vue @@ -74,8 +74,6 @@ :value="$t('signIn')" /> - - @@ -89,7 +87,7 @@ const remember = ref(false); const username = ref(null); const password = ref(null); const authStore = useAuthStore(); -const toast = useTemplateRef('toast'); +const toast = useToast(); async function login(e: Event) { e.preventDefault(); @@ -108,7 +106,8 @@ async function login(e: Event) { } } catch (error) { if (error instanceof FetchError) { - toast.value?.publish({ + toast.showToast({ + type: 'error', title: t('error.login'), message: error.data.message, }); diff --git a/src/app/pages/setup/1.vue b/src/app/pages/setup/1.vue index 14e1a045..decfb2d9 100644 --- a/src/app/pages/setup/1.vue +++ b/src/app/pages/setup/1.vue @@ -4,39 +4,23 @@ {{ $t('setup.messageSetupLanguage') }}

- +
-
Continue
+
Continue
diff --git a/src/app/pages/setup/4.vue b/src/app/pages/setup/4.vue index dddf2cce..44415ea1 100644 --- a/src/app/pages/setup/4.vue +++ b/src/app/pages/setup/4.vue @@ -55,10 +55,13 @@ const username = ref(null); const password = ref(null); const accept = ref(true); +const toast = useToast(); + async function newAccount() { try { if (!username.value || !password.value) { - setupStore.handleError({ + toast.showToast({ + type: 'error', title: t('setup.requirements'), message: t('setup.emptyFields'), }); @@ -69,7 +72,8 @@ async function newAccount() { await router.push('/setup/5'); } catch (error) { if (error instanceof FetchError) { - setupStore.handleError({ + toast.showToast({ + type: 'error', title: t('setup.requirements'), message: error.data.message, }); diff --git a/src/app/pages/setup/5.vue b/src/app/pages/setup/5.vue index c6de732f..9ca57c35 100644 --- a/src/app/pages/setup/5.vue +++ b/src/app/pages/setup/5.vue @@ -43,9 +43,12 @@ const router = useRouter(); const host = ref(null); const port = ref(51820); +const toast = useToast(); + async function updateHostPort() { if (!host.value || !port.value) { - setupStore.handleError({ + toast.showToast({ + type: 'error', title: t('setup.requirements'), message: t('setup.emptyFields'), }); @@ -57,7 +60,8 @@ async function updateHostPort() { await router.push('/setup/success'); } catch (error) { if (error instanceof FetchError) { - setupStore.handleError({ + toast.showToast({ + type: 'error', title: t('setup.requirements'), message: error.data.message, }); diff --git a/src/app/pages/setup/migrate.vue b/src/app/pages/setup/migrate.vue index 9de6762d..77622c81 100644 --- a/src/app/pages/setup/migrate.vue +++ b/src/app/pages/setup/migrate.vue @@ -37,10 +37,12 @@ function onChangeFile(evt: Event) { } const router = useRouter(); +const toast = useToast(); async function sendFile() { if (!backupFile.value) { - setupStore.handleError({ + toast.showToast({ + type: 'error', title: t('setup.requirements'), message: t('setup.emptyFields'), }); @@ -54,7 +56,8 @@ async function sendFile() { await router.push('/setup/success'); } catch (error) { if (error instanceof FetchError) { - setupStore.handleError({ + toast.showToast({ + type: 'error', title: t('setup.requirements'), message: error.data.message, }); diff --git a/src/app/stores/auth.ts b/src/app/stores/auth.ts index fd5fbd9d..e1ed8d93 100644 --- a/src/app/stores/auth.ts +++ b/src/app/stores/auth.ts @@ -1,16 +1,16 @@ export const useAuthStore = defineStore('Auth', () => { - const userData = ref(); + const { data: userData, refresh: update } = useFetch('/api/session', { + method: 'get', + }); /** * @throws if unsuccessful */ async function login(username: string, password: string, remember: boolean) { - await api.createSession({ username, password, remember }); + await $fetch('/api/session', { + method: 'post', + body: { username, password, remember }, + }); return true as const; } @@ -18,15 +18,11 @@ export const useAuthStore = defineStore('Auth', () => { * @throws if unsuccessful */ async function logout() { - const response = await api.deleteSession(); + const response = await $fetch('/api/session', { + method: 'delete', + }); return response.success; } - async function update() { - // store role etc - const { data: response } = await api.getSession(); - userData.value = response.value; - } - return { userData, login, logout, update }; }); diff --git a/src/app/stores/global.ts b/src/app/stores/global.ts index 2e80ac3b..7f515872 100644 --- a/src/app/stores/global.ts +++ b/src/app/stores/global.ts @@ -3,21 +3,6 @@ import { defineStore } from 'pinia'; export const useGlobalStore = defineStore('Global', () => { const sortClient = ref(true); // Sort clients by name, true = asc, false = desc - const { availableLocales, locale } = useI18n(); - - async function setLanguage() { - const { data: lang } = await useFetch('/api/lang', { - method: 'get', - }); - if ( - lang.value !== getItem('lang') && - availableLocales.includes(lang.value!) - ) { - setItem('lang', lang.value!); - locale.value = lang.value!; - } - } - const currentRelease = ref(null); const latestRelease = ref( null @@ -46,20 +31,8 @@ export const useGlobalStore = defineStore('Global', () => { const uiChartType = ref(getItem('uiChartType') ?? 'area'); - /** - * @throws if unsuccessful - */ - async function updateLang(lang: string) { - const response = await $fetch('/api/admin/lang', { - method: 'post', - body: { lang }, - }); - return response.success; - } - return { sortClient, - setLanguage, currentRelease, latestRelease, updateAvailable, @@ -67,6 +40,5 @@ export const useGlobalStore = defineStore('Global', () => { uiShowCharts, toggleCharts, uiChartType, - updateLang, }; }); diff --git a/src/app/stores/modal.ts b/src/app/stores/modal.ts index c44fa7ab..f3a1fd4e 100644 --- a/src/app/stores/modal.ts +++ b/src/app/stores/modal.ts @@ -2,7 +2,6 @@ import { defineStore } from 'pinia'; export const useModalStore = defineStore('Modal', () => { const clientsStore = useClientsStore(); - const clientDelete = ref(null); const clientCreate = ref(null); const clientCreateName = ref(''); const clientExpireDate = ref(''); @@ -19,23 +18,11 @@ export const useModalStore = defineStore('Modal', () => { .finally(() => clientsStore.refresh().catch(console.error)); } - function deleteClient(client: WGClient | null) { - if (client === null) { - return; - } - api - .deleteClient({ clientId: client.id }) - .catch((err) => alert(err.message || err.toString())) - .finally(() => clientsStore.refresh().catch(console.error)); - } - return { - clientDelete, clientCreate, clientCreateName, clientExpireDate, qrcode, createClient, - deleteClient, }; }); diff --git a/src/app/stores/setup.ts b/src/app/stores/setup.ts index 28ca2403..24307e8b 100644 --- a/src/app/stores/setup.ts +++ b/src/app/stores/setup.ts @@ -1,17 +1,6 @@ import { defineStore } from 'pinia'; export const useSetupStore = defineStore('Setup', () => { - /** - * @throws if unsuccessful - */ - async function step1(lang: string) { - const response = await $fetch('/api/setup/1', { - method: 'post', - body: { lang }, - }); - return response.success; - } - /** * @throws if unsuccessful */ @@ -45,25 +34,6 @@ export const useSetupStore = defineStore('Setup', () => { return response.success; } - type SetupError = { - title: string; - message: string; - }; - - type ErrorRef = { - value: { publish: (e: SetupError) => void } | null; - }; - - const errorRef = ref(null); - - function setErrorRef(a: ErrorRef | null) { - errorRef.value = a; - } - - function handleError(e: SetupError) { - errorRef.value?.value?.publish(e); - } - const step = ref(1); const totalSteps = ref(6); function setStep(i: number) { @@ -71,12 +41,9 @@ export const useSetupStore = defineStore('Setup', () => { } return { - step1, step4, step5, runMigration, - setErrorRef, - handleError, step, totalSteps, setStep, diff --git a/src/app/stores/toast.ts b/src/app/stores/toast.ts new file mode 100644 index 00000000..d56588db --- /dev/null +++ b/src/app/stores/toast.ts @@ -0,0 +1,26 @@ +export const useToast = defineStore('Toast', () => { + type ToastInterface = { + publish: (e: { title: string; message: string }) => void; + }; + + type ToastRef = Ref; + + const toast = ref | null>(null); + + function setToast(toastInstance: ToastRef) { + toast.value = toastInstance; + } + + function showToast({ + title, + message, + }: { + type: 'success' | 'error'; + title: string; + message: string; + }) { + toast.value?.value?.publish({ title, message }); + } + + return { setToast, showToast }; +}); diff --git a/src/app/utils/api.ts b/src/app/utils/api.ts index 399c326e..231d533a 100644 --- a/src/app/utils/api.ts +++ b/src/app/utils/api.ts @@ -1,31 +1,4 @@ class API { - async getSession() { - return useFetch('/api/session', { - method: 'get', - }); - } - - async createSession({ - username, - password, - remember, - }: { - username: string; - password: string | null; - remember: boolean; - }) { - return $fetch('/api/session', { - method: 'post', - body: { username, password, remember }, - }); - } - - async deleteSession() { - return $fetch('/api/session', { - method: 'delete', - }); - } - async getClients() { return useFetch('/api/client', { method: 'get', @@ -45,31 +18,12 @@ class API { }); } - async deleteClient({ clientId }: { clientId: string }) { - return $fetch(`/api/client/${clientId}`, { - method: 'delete', - }); - } - async showOneTimeLink({ clientId }: { clientId: string }) { return $fetch(`/api/client/${clientId}/generateOneTimeLink`, { method: 'post', }); } - async updateClientExpireDate({ - clientId, - expireDate, - }: { - clientId: string; - expireDate: string | null; - }) { - return $fetch(`/api/client/${clientId}/expireDate`, { - method: 'put', - body: { expireDate }, - }); - } - async restoreConfiguration(file: string) { return $fetch('/api/wireguard/restore', { method: 'put', diff --git a/src/app/utils/localStorage.ts b/src/app/utils/localStorage.ts index 26d2b5cb..abe5f4cc 100644 --- a/src/app/utils/localStorage.ts +++ b/src/app/utils/localStorage.ts @@ -1,6 +1,5 @@ export type LocalStorage = { uiShowCharts: '1' | '0'; - lang: string; uiChartType: 'area' | 'bar' | 'line'; }; diff --git a/src/app/utils/math.ts b/src/app/utils/math.ts index 9592e333..1755d699 100644 --- a/src/app/utils/math.ts +++ b/src/app/utils/math.ts @@ -20,17 +20,6 @@ export function bytes( return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`; } -export function dateTime(value: Date) { - // TODO: results in mismatch because of different locales - return new Intl.DateTimeFormat(undefined, { - year: 'numeric', - month: 'short', - day: 'numeric', - hour: 'numeric', - minute: 'numeric', - }).format(value); -} - /** * Sorts an array of objects by a specified property in ascending or descending order. * diff --git a/src/i18n/i18n.config.ts b/src/i18n/i18n.config.ts index 1364db9e..4cdcd7cd 100644 --- a/src/i18n/i18n.config.ts +++ b/src/i18n/i18n.config.ts @@ -1,56 +1,9 @@ import en from './locales/en.json'; -import ua from './locales/ua.json'; -import ru from './locales/ru.json'; -import tr from './locales/tr.json'; -import no from './locales/no.json'; -import pl from './locales/pl.json'; -import fr from './locales/fr.json'; -import de from './locales/de.json'; -import ca from './locales/ca.json'; -import es from './locales/es.json'; -import ko from './locales/ko.json'; -import vi from './locales/vi.json'; -import nl from './locales/nl.json'; -import is from './locales/is.json'; -import pt from './locales/pt.json'; -import zhChs from './locales/zh-chs.json'; -import zhCht from './locales/zh-cht.json'; -import it from './locales/it.json'; -import th from './locales/th.json'; -import hi from './locales/hi.json'; export default defineI18nConfig(() => ({ - fallbackLocale: 'en', legacy: false, - locale: 'en', + fallbackLocale: 'en', messages: { en, - ua, - ru, - // Müslüm Barış Korkmazer @babico - tr, - // github.com/digvalley - no, - // github.com/archont94 - pl, - // github.com/clem3109 - fr, - de, - // github.com/guillembonet - ca, - // github.com/amarqz - es, - ko, - // https://github.com/hoangneeee - vi, - nl, - is, - pt, - zhChs, - zhCht, - it, - th, - // github.com/rahilarious - hi, }, })); diff --git a/src/i18n/localeDetector.ts b/src/i18n/localeDetector.ts index c766d486..88482a18 100644 --- a/src/i18n/localeDetector.ts +++ b/src/i18n/localeDetector.ts @@ -4,7 +4,10 @@ export default defineI18nLocaleDetector((event, config) => { return query.toString(); } - const cookie = tryCookieLocale(event, { lang: '', name: 'i18n_locale' }); + const cookie = tryCookieLocale(event, { + lang: '', + name: 'i18n_redirected', + }); if (cookie) { return cookie.toString(); } diff --git a/src/i18n/locales/be.json b/src/i18n/locales/be.json deleted file mode 100644 index 5be819c7..00000000 --- a/src/i18n/locales/be.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "setup": { - "welcome": "Сардэчна запрашаем на старонку пачатковай налады wg-easy!", - "msg": "Калі ласка, увядзіце лагін для адміністратара і прыдумайце бяспечны пароль. Гэтыя дадзеныя будуць выкарыстоўвацца для ўваходу ў панэль адміністравання.", - "newPassword": "Новы пароль", - "accept": "Я згодны з умовай", - "submitBtn": "Стварыць уліковы запіс адміністратара", - "usernameCondition": "Імя карыстальніка павінна быць не менш за 8 сімвалаў.", - "passwordCondition": "Пароль павінен быць не менш за 12 сімвалаў, уключваючы 1 вялікую літару, 1 малую літару, 1 лічбу і 1 спецыяльны сімвал.", - "usernamePlaceholder": "Адміністратар", - "passwordPlaceholder": "Надзейны пароль" - }, - "name": "Імя", - "password": "Пароль", - "signIn": "Увайсці", - "logout": "Выйсці", - "updateAvailable": "Даступна абнаўленне!", - "update": "Абнавіць", - "clients": "Кліенты", - "new": "Стварыць", - "deleteClient": "Выдаліць кліента", - "deleteDialog1": "Вы ўпэўнены, што хочаце выдаліць", - "deleteDialog2": "Гэта дзеянне немагчыма адмяніць.", - "cancel": "Закрыць", - "create": "Стварыць", - "createdOn": "Створана ў ", - "lastSeen": "Апошняе падключэнне ў ", - "totalDownload": "Усяго спампавана: ", - "totalUpload": "Усяго загружана: ", - "newClient": "Стварыць кліента", - "disableClient": "Выключыць кліента", - "enableClient": "Уключыць кліента", - "noClients": "Пакуль няма кліентаў.", - "noPrivKey": "Немагчыма стварыць канфігурацыю: у кліента няма вядомага прыватнага ключа.", - "showQR": "Паказаць QR-код", - "downloadConfig": "Спампаваць канфігурацыю", - "madeBy": "Аўтар", - "donate": "Падзякаваць", - "toggleCharts": "Паказаць/схаваць графікі", - "theme": { - "dark": "Цёмная тэма", - "light": "Светлая тэма", - "system": "Як у сістэме" - }, - "restore": "Аднавіць", - "backup": "Рэзервовая копія", - "titleRestoreConfig": "Аднавіць канфігурацыю", - "titleBackupConfig": "Стварыць рэзервовую копію канфігурацыі", - "rememberMe": "Запомніць мяне", - "titleRememberMe": "Заставацца ў сістэме пасля закрыцця браўзера", - "sort": "Сартыроўка", - "ExpireDate": "Дата заканчэння тэрміну", - "Permanent": "Бестэрмінова", - "OneTimeLink": "Стварыць кароткую аднаразовую спасылку", - "errorInit": "Памылка ініцыялізацыі." -} diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json deleted file mode 100644 index 962bda92..00000000 --- a/src/i18n/locales/ca.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "Nom", - "password": "Contrasenya", - "signIn": "Iniciar sessió", - "logout": "Tanca sessió", - "updateAvailable": "Hi ha una actualització disponible!", - "update": "Actualitza", - "clients": "Clients", - "new": "Nou", - "deleteClient": "Esborra client", - "deleteDialog1": "Estàs segur que vols esborrar aquest client?", - "deleteDialog2": "Aquesta acció no es pot desfer.", - "cancel": "Cancel·la", - "create": "Crea", - "createdOn": "Creat el ", - "lastSeen": "Última connexió el ", - "totalDownload": "Baixada total: ", - "totalUpload": "Pujada total: ", - "newClient": "Nou client", - "disableClient": "Desactiva client", - "enableClient": "Activa client", - "noClients": "Encara no hi ha cap client.", - "showQR": "Mostra codi QR", - "downloadConfig": "Descarrega configuració", - "madeBy": "Fet per", - "donate": "Donatiu" -} diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json deleted file mode 100644 index 8cc64e26..00000000 --- a/src/i18n/locales/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "Name", - "password": "Passwort", - "signIn": "Anmelden", - "logout": "Abmelden", - "updateAvailable": "Eine Aktualisierung steht zur Verfügung!", - "update": "Aktualisieren", - "clients": "Clients", - "new": "Neu", - "deleteClient": "Client löschen", - "deleteDialog1": "Möchtest du wirklich löschen?", - "deleteDialog2": "Diese Aktion kann nicht rückgängig gemacht werden.", - "cancel": "Abbrechen", - "create": "Erstellen", - "createdOn": "Erstellt am ", - "lastSeen": "Zuletzt Online ", - "totalDownload": "Gesamt Download: ", - "totalUpload": "Gesamt Upload: ", - "newClient": "Neuer Client", - "disableClient": "Client deaktivieren", - "enableClient": "Client aktivieren", - "noClients": "Es wurden noch keine Clients konfiguriert.", - "noPrivKey": "Es ist kein Private Key für diesen Client bekannt. Eine Konfiguration kann nicht erstellt werden.", - "showQR": "Zeige den QR Code", - "downloadConfig": "Konfiguration herunterladen", - "madeBy": "Erstellt von", - "donate": "Spenden", - "restore": "Wiederherstellen", - "backup": "Sichern", - "titleRestoreConfig": "Stelle deine Konfiguration wieder her", - "titleBackupConfig": "Sichere deine Konfiguration" -} diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 0eb92043..6ba8c6b5 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -19,7 +19,7 @@ "warning": "First of all, make sure you have a backup of your data if you want to migrate your users to your new wg-easy.", "next": "Click on the arrow button to proceed to the next step." }, - "messageSetupLanguage": "Please choose a default language.", + "messageSetupLanguage": "Please choose a language for the setup.", "messageSetupCreateAdminUser": "Please first enter an admin username and a strong secure password. This information will be used to log in to your administration panel.", "messageSetupHostPort": "Please enter the host and port information. This will be used for the client configuration when setting up WireGuard on their devices.", "messageSetupMigration": "Please provide the backup file if you want to migrate your data from your previous wg-easy version to your new setup.", @@ -39,10 +39,25 @@ "migration": "Restore the backup" }, "zod": { + "stringMalformed": "String is malformed", "id": "Client ID must be a valid UUID", + "address": "IP Address must be a valid string", + "addressMin": "IP Address must be a be at least 1 Character", "address4": "IPv4 Address must be a valid string", + "address4Min": "IPv4 Address must be a be at least 1 Character", + "address6": "IPv6 Address must be a valid string", + "address6Min": "IPv6 Address must be a be at least 1 Character", + "allowedIps": "Allowed IPs must be a valid array of strings", + "allowedIpsMin": "Allowed IPs must have at least 1 item", + "serverAllowedIps": "Allowed IPs must be a valid array of strings", "name": "Name must be a valid string", "nameMin": "Name must be at least 1 Character", + "mtu": "MTU must be a valid number", + "mtuMin": "MTU must be at least 1280", + "mtuMax": "MTU must be at most 9000", + "persistentKeepalive": "Persistent Keepalive must be a valid number", + "persistentKeepaliveMin": "Persistent Keepalive must be at least 0", + "persistentKeepaliveMax": "Persistent Keepalive must be at most 65535", "file": "File must be a valid string", "username": "Username must be a valid string", "usernameMin": "Username must be at least 8 Characters", @@ -70,7 +85,12 @@ "hostMin": "Host must contain at least 1 character", "port": "Port must be a valid number", "portMin": "Port must be at least 1", - "portMax": "Port must be at most 65535" + "portMax": "Port must be at most 65535", + "sessionTimeout": "Session Timeout must be a valid number", + "device": "Device must be a valid string", + "deviceMin": "Device must be at least 1 Character", + "hook": "Hook must be a valid string", + "dns": "DNS must be a valid array of strings" }, "name": "Name", "username": "Username", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json deleted file mode 100644 index 4f69c4d4..00000000 --- a/src/i18n/locales/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "Nombre", - "password": "Contraseña", - "signIn": "Iniciar sesión", - "logout": "Cerrar sesión", - "updateAvailable": "¡Hay una actualización disponible!", - "update": "Actualizar", - "clients": "Clientes", - "new": "Nuevo", - "deleteClient": "Eliminar cliente", - "deleteDialog1": "¿Estás seguro de que quieres borrar este cliente?", - "deleteDialog2": "Esta acción no podrá ser revertida.", - "cancel": "Cancelar", - "create": "Crear", - "createdOn": "Creado el ", - "lastSeen": "Última conexión el ", - "totalDownload": "Total descargado: ", - "totalUpload": "Total subido: ", - "newClient": "Nuevo cliente", - "disableClient": "Desactivar cliente", - "enableClient": "Activar cliente", - "noClients": "Aún no hay ningún cliente.", - "showQR": "Mostrar código QR", - "downloadConfig": "Descargar configuración", - "madeBy": "Hecho por", - "donate": "Donar", - "toggleCharts": "Mostrar/Ocultar gráficos", - "theme": { - "dark": "Modo oscuro", - "light": "Modo claro", - "system": "Modo automático" - }, - "restore": "Restaurar", - "backup": "Realizar copia de seguridad", - "titleRestoreConfig": "Restaurar su configuración", - "titleBackupConfig": "Realizar copia de seguridad de su configuración" -} diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json deleted file mode 100644 index 6dd9acc7..00000000 --- a/src/i18n/locales/fr.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "pages": { - "me": "Compte", - "clients": "Clients" - }, - "me": { - "sectionGeneral": "Général", - "sectionPassword": "Mot de passe" - }, - "email": "E-Mail", - "save": "Enregistrer", - "updatePassword": "Changer le mot de passe", - "currentPassword": "Mot de passe actuel", - "confirmPassword": "Confirmer le mot de passe", - "setup": { - "welcome": "Bienvenue à votre première installation de wg-easy !", - "messageWelcome": { - "whatIs": "Vous avez trouvé le moyen le plus simple d'installer et de gérer WireGuard sur n'importe quel hôte Linux !", - "warning": "Tout d'abord, assurez-vous d'avoir une sauvegarde de vos données si vous voulez migrer vos utilisateurs vers votre nouveau wg-easy.", - "next": "Cliquez sur la flèche pour passer à l'étape suivante." - }, - "messageSetupLanguage": "Sélectionner votre langue.", - "messageSetupCreateAdminUser": "Veuillez renseigner votre nom d'utilisateur et votre mot de passe. Ces informations seront utilisées pour vous connecter à votre page d'administration.", - "messageSetupHostPort": "Veuillez entrer les informations de l'hôte et du port. Cela sera utilisé pour la configuration du client lors de la configuration de WireGuard sur leurs appareils.", - "messageSetupMigration": " Veuillez fournir le fichier de sauvegarde si vous souhaitez migrer vos données de la version précédente de wg-easy vers votre nouvelle installation.", - "messageSetupValidation": "Bienvenue sur wg-easy ! La meilleur application pour administrer son serveur VPN WireGuard.", - "emptyFields": "Des champs sont requis", - "chooseLang": "Choisir une langue...", - "newPassword": "Nouveau mot de passe", - "accept": "J'accepte les conditions d'utilisation", - "submitBtn": "Créer un compte administrateur", - "usernamePlaceholder": "Administrateur", - "passwordPlaceholder": "Mot de passe sapau", - "requirements": "Conditions de configuration", - "host": "Hôte", - "hostPlaceholder": "wg-easy.example.com", - "port": "Port", - "portPlaceholder": "443", - "migration": "Restaurer la sauvegarde" - }, - "zod": { - "id": "L'ID du client doit être un UUID valide", - "address4": "L'adresse IPv4 doit être une chaîne valide", - "name": "Le nom doit être une chaîne valide", - "nameMin": "Le nom doit contenir au moins 1 caractère", - "file": "Le fichier doit être une chaîne valide", - "username": "Le nom d'utilisateur doit être une chaîne valide", - "usernameMin": "Le nom d'utilisateur doit contenir au moins 8 caractères", - "password": "Le mot de passe doit être une chaîne valide", - "passwordMin": "Le mot de passe doit contenir au moins 12 caractères", - "passwordUppercase": "Le mot de passe doit contenir au moins 1 lettre majuscule", - "passwordLowercase": "Le mot de passe doit contenir au moins 1 lettre minuscule", - "passwordNumber": "Le mot de passe doit contenir au moins 1 chiffre", - "passwordSpecial": "Le mot de passe doit contenir au moins 1 caractère spécial", - "accept": "Veuillez accpter les conditions d'utilisation", - "remember": "La case « se souvenir de moi » doit être un booléen valide", - "expireDate": "La date d'expiration doit être une chaîne valide", - "expireDateMin": "La date d'expiration doit contenir au moins 1 caractère", - "otl": "Le lien à usage unique doit être une chaîne valide", - "otlMin": "Le lien à usage unique doit contenir au moins 1 caractère", - "features": "La clé doit être une chaîne valide", - "ftBool": "Le paramètre « activé » doit être un booléen valide", - "ftObj": "La valeur doit être un objet valide", - "ftObj2": "Les fonctionnalités doivent être un enregistrement valide", - "stat": "Les statistiques doivent être un objet valide", - "statBool": "Le paramètre « activé » doit être un booléen valide", - "statNumber": "Le type de graphique doit être un nombre valide", - "body": "Le corps doit être un objet valide", - "host": "L'hôte doit être une chaîne valide", - "hostMin": "L'hôte doit contenir au moins 1 caractère", - "port": "Le port doit être un nombre valide", - "portMin": "Le port doit être au moins 1", - "portMax": "Le port doit être au maximum 65535" - }, - "name": "Nom", - "username": "Nom d'utilisateur", - "password": "Mot de passe", - "signIn": "Se Connecter", - "logout": "Se déconnecter", - "updateAvailable": "Une mise à jour est disponible !", - "update": "Mise à jour", - "new": "Nouveau", - "deleteClient": "Supprimer ce client", - "deleteDialog1": "Êtes-vous sûr de vouloir supprimer", - "deleteDialog2": "Cette action ne peut pas être annulée.", - "cancel": "Annuler", - "create": "Créer", - "createdOn": "Créé le ", - "lastSeen": "Dernière connexion le ", - "totalDownload": "Téléchargement total : ", - "totalUpload": "Téléversement total : ", - "newClient": "Nouveau client", - "disableClient": "Désactiver ce client", - "enableClient": "Activer ce client", - "noClients": "Aucun client pour le moment.", - "noPrivKey": "Ce client n'a pas de clé privée connue. Impossible de créer la configuration.", - "showQR": "Afficher le code QR", - "downloadConfig": "Télécharger la configuration", - "madeBy": "Développé par", - "donate": "Faire un don", - "toggleCharts": "Afficher/masquer les graphiques", - "theme": { - "dark": "Thème sombre", - "light": "Thème clair", - "system": "Thème du système" - }, - "restore": "Restaurer", - "backup": "Sauvegarder", - "titleRestoreConfig": "Restaurer votre configuration", - "titleBackupConfig": "Sauvegarder votre configuration", - "rememberMe": "Se souvenir de moi", - "titleRememberMe": "Restez connecté après la fermeture du navigateur", - "sort": "Trier", - "ExpireDate": "Date d'expiration", - "Permanent": "Permanent", - "OneTimeLink": "Générer un lien court à usage unique", - "errorInit": "Échec de l'initialisation.", - "error": { - "clear": "Effacer", - "login": "Erreur de connexion" - } -} diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json deleted file mode 100644 index df156cd0..00000000 --- a/src/i18n/locales/hi.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "नाम", - "password": "पासवर्ड", - "signIn": "लॉगिन", - "logout": "लॉगआउट", - "updateAvailable": "अपडेट उपलब्ध है!", - "update": "अपडेट", - "clients": "उपयोगकर्ताये", - "new": "नया", - "deleteClient": "उपयोगकर्ता हटाएँ", - "deleteDialog1": "क्या आपको पक्का हटाना है", - "deleteDialog2": "यह निर्णय पलट नहीं सकता।", - "cancel": "कुछ ना करें", - "create": "बनाएं", - "createdOn": "सर्जन तारीख ", - "lastSeen": "पिछली बार देखे गए थे ", - "totalDownload": "कुल डाउनलोड: ", - "totalUpload": "कुल अपलोड: ", - "newClient": "नया उपयोगकर्ता", - "disableClient": "उपयोगकर्ता स्थगित कीजिये", - "enableClient": "उपयोगकर्ता शुरू कीजिये", - "noClients": "अभी तक कोई भी उपयोगकर्ता नहीं है।", - "noPrivKey": "ये उपयोगकर्ता की कोई भी गुप्त चाबी नहीं हे। बना नहीं सकते।", - "showQR": "क्यू आर कोड देखिये", - "downloadConfig": "डाउनलोड कॉन्फीग्यूरेशन", - "madeBy": "सर्जक", - "donate": "दान करें" -} diff --git a/src/i18n/locales/is.json b/src/i18n/locales/is.json deleted file mode 100644 index 30984b32..00000000 --- a/src/i18n/locales/is.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "Nafn", - "password": "Lykilorð", - "signIn": "Skrá inn", - "logout": "Útskráning", - "updateAvailable": "Það er uppfærsla í boði!", - "update": "Uppfæra", - "clients": "Viðskiptavinir", - "new": "Nýtt", - "deleteClient": "Eyða viðskiptavin", - "deleteDialog1": "Ertu viss um að þú viljir eyða", - "deleteDialog2": "Þessi aðgerð getur ekki verið afturkallað.", - "cancel": "Hætta við", - "create": "Búa til", - "createdOn": "Búið til á ", - "lastSeen": "Síðast séð á ", - "totalDownload": "Samtals Niðurhlaða: ", - "totalUpload": "Samtals Upphlaða: ", - "newClient": "Nýr Viðskiptavinur", - "disableClient": "Gera viðskiptavin óvirkan", - "enableClient": "Gera viðskiptavin virkan", - "noClients": "Engir viðskiptavinir ennþá.", - "showQR": "Sýna QR-kóða", - "downloadConfig": "Niðurhal Stillingar", - "madeBy": "Gert af", - "donate": "Gefa" -} diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json deleted file mode 100644 index 283cb253..00000000 --- a/src/i18n/locales/it.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "Nome", - "password": "Password", - "signIn": "Accedi", - "logout": "Esci", - "updateAvailable": "È disponibile un aggiornamento!", - "update": "Aggiorna", - "clients": "Client", - "new": "Nuovo", - "deleteClient": "Elimina Client", - "deleteDialog1": "Sei sicuro di voler eliminare", - "deleteDialog2": "Questa azione non può essere annullata.", - "cancel": "Annulla", - "create": "Crea", - "createdOn": "Creato il ", - "lastSeen": "Visto l'ultima volta il ", - "totalDownload": "Totale Download: ", - "totalUpload": "Totale Upload: ", - "newClient": "Nuovo Client", - "disableClient": "Disabilita Client", - "enableClient": "Abilita Client", - "noClients": "Non ci sono ancora client.", - "showQR": "Mostra codice QR", - "downloadConfig": "Scarica configurazione", - "madeBy": "Realizzato da", - "donate": "Donazione", - "restore": "Ripristina", - "backup": "Backup", - "titleRestoreConfig": "Ripristina la tua configurazione", - "titleBackupConfig": "Esegui il backup della tua configurazione" -} diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json deleted file mode 100644 index a1d2d4c5..00000000 --- a/src/i18n/locales/ko.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "이름", - "password": "암호", - "signIn": "로그인", - "logout": "로그아웃", - "updateAvailable": "업데이트가 있습니다!", - "update": "업데이트", - "clients": "클라이언트", - "new": "추가", - "deleteClient": "클라이언트 삭제", - "deleteDialog1": "삭제 하시겠습니까?", - "deleteDialog2": "이 작업은 취소할 수 없습니다.", - "cancel": "취소", - "create": "생성", - "createdOn": "생성일: ", - "lastSeen": "마지막 사용 날짜: ", - "totalDownload": "총 다운로드: ", - "totalUpload": "총 업로드: ", - "newClient": "새로운 클라이언트", - "disableClient": "클라이언트 비활성화", - "enableClient": "클라이언트 활성화", - "noClients": "아직 클라이언트가 없습니다.", - "showQR": "QR 코드 표시", - "downloadConfig": "구성 다운로드", - "madeBy": "만든 사람", - "donate": "기부", - "toggleCharts": "차트 표시/숨기기", - "theme": { - "dark": "어두운 테마", - "light": "밝은 테마", - "system": "자동 테마" - }, - "restore": "복원", - "backup": "백업", - "titleRestoreConfig": "구성 파일 복원", - "titleBackupConfig": "구성 파일 백업" -} diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json deleted file mode 100644 index 759bd2b1..00000000 --- a/src/i18n/locales/nl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "Naam", - "password": "Wachtwoord", - "signIn": "Inloggen", - "logout": "Uitloggen", - "updateAvailable": "Nieuw update beschikbaar!", - "update": "update", - "clients": "clients", - "new": "Nieuw", - "deleteClient": "client verwijderen", - "deleteDialog1": "Weet je zeker dat je wilt verwijderen", - "deleteDialog2": "Deze actie kan niet ongedaan worden gemaakt.", - "cancel": "Annuleren", - "create": "Creëren", - "createdOn": "Gemaakt op ", - "lastSeen": "Laatst gezien op ", - "totalDownload": "Totaal Gedownload: ", - "totalUpload": "Totaal Geupload: ", - "newClient": "Nieuwe client", - "disableClient": "client uitschakelen", - "enableClient": "client inschakelen", - "noClients": "Er zijn nog geen clients.", - "showQR": "QR-code weergeven", - "downloadConfig": "Configuratie downloaden", - "madeBy": "Gemaakt door", - "donate": "Doneren" -} diff --git a/src/i18n/locales/no.json b/src/i18n/locales/no.json deleted file mode 100644 index b71b54da..00000000 --- a/src/i18n/locales/no.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "Navn", - "password": "Passord", - "signIn": "Logg Inn", - "logout": "Logg Ut", - "updateAvailable": "En ny oppdatering er tilgjengelig!", - "update": "Oppdater", - "clients": "Klienter", - "new": "Ny", - "deleteClient": "Slett Klient", - "deleteDialog1": "Er du sikker på at du vil slette?", - "deleteDialog2": "Denne handlingen kan ikke angres", - "cancel": "Avbryt", - "create": "Opprett", - "createdOn": "Opprettet ", - "lastSeen": "Sist sett ", - "totalDownload": "Total Nedlasting: ", - "totalUpload": "Total Opplasting: ", - "newClient": "Ny Klient", - "disableClient": "Deaktiver Klient", - "enableClient": "Aktiver Klient", - "noClients": "Ingen klienter opprettet enda.", - "showQR": "Vis QR Kode", - "downloadConfig": "Last Ned Konfigurasjon", - "madeBy": "Laget av", - "donate": "Doner" -} diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json deleted file mode 100644 index 6c7cace0..00000000 --- a/src/i18n/locales/pl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "Nazwa", - "password": "Hasło", - "signIn": "Zaloguj się", - "logout": "Wyloguj się", - "updateAvailable": "Dostępna aktualizacja!", - "update": "Aktualizuj", - "clients": "Klienci", - "new": "Stwórz klienta", - "deleteClient": "Usuń klienta", - "deleteDialog1": "Jesteś pewny że chcesz usunąć", - "deleteDialog2": "Tej akcji nie da się cofnąć.", - "cancel": "Anuluj", - "create": "Stwórz", - "createdOn": "Utworzono ", - "lastSeen": "Ostatnio widziany ", - "totalDownload": "Całkowite pobieranie: ", - "totalUpload": "Całkowite wysyłanie: ", - "newClient": "Nowy klient", - "disableClient": "Wyłączenie klienta", - "enableClient": "Włączenie klienta", - "noClients": "Nie ma jeszcze klientów.", - "showQR": "Pokaż kod QR", - "downloadConfig": "Pobierz konfigurację", - "madeBy": "Stworzone przez", - "donate": "Wsparcie autora" -} diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json deleted file mode 100644 index edab62aa..00000000 --- a/src/i18n/locales/pt.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "Nome", - "password": "Palavra Chave", - "signIn": "Entrar", - "logout": "Sair", - "updateAvailable": "Existe uma atualização disponível!", - "update": "Atualizar", - "clients": "Clientes", - "new": "Novo", - "deleteClient": "Apagar Clientes", - "deleteDialog1": "Tem certeza que pretende apagar", - "deleteDialog2": "Esta ação não pode ser revertida.", - "cancel": "Cancelar", - "create": "Criar", - "createdOn": "Criado em ", - "lastSeen": "Último acesso em ", - "totalDownload": "Total Download: ", - "totalUpload": "Total Upload: ", - "newClient": "Novo Cliente", - "disableClient": "Desativar Cliente", - "enableClient": "Ativar Cliente", - "noClients": "Não existem ainda clientes.", - "showQR": "Apresentar o código QR", - "downloadConfig": "Descarregar Configuração", - "madeBy": "Feito por", - "donate": "Doar" -} diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json deleted file mode 100644 index 3d8291fd..00000000 --- a/src/i18n/locales/ru.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "setup": { - "welcome": "Добро пожаловать на страницу начальной настройки wg-easy !", - "msg": "Пожалуйста, введите логин для администратора и придумайте безопасный пароль. Эти данные будут использоваться для входа в панель администрирования.", - "newPassword": "Новый пароль", - "accept": "Я согласен с условием", - "submitBtn": "Создать учетную запись администратора", - "usernameCondition": "Имя пользователя должно быть не менее 8 символов.", - "passwordCondition": "Пароль должен быть не менее 12 символов, включая 1 заглавную букву, 1 прописную букву, 1 цифру и 1 специальный символ.", - "usernamePlaceholder": "Администратор", - "passwordPlaceholder": "Надежный пароль" - }, - "name": "Имя", - "password": "Пароль", - "signIn": "Войти", - "logout": "Выйти", - "updateAvailable": "Доступно обновление!", - "update": "Обновить", - "clients": "Клиенты", - "new": "Создать", - "deleteClient": "Удалить клиента", - "deleteDialog1": "Вы уверены, что хотите удалить", - "deleteDialog2": "Это действие невозможно отменить.", - "cancel": "Закрыть", - "create": "Создать", - "createdOn": "Создано в ", - "lastSeen": "Последнее подключение в ", - "totalDownload": "Всего скачано: ", - "totalUpload": "Всего загружено: ", - "newClient": "Создать клиента", - "disableClient": "Выключить клиента", - "enableClient": "Включить клиента", - "noClients": "Пока нет клиентов.", - "noPrivKey": "Невозможно создать конфигурацию: у клиента нет известного приватного ключа.", - "showQR": "Показать QR-код", - "downloadConfig": "Скачать конфигурацию", - "madeBy": "Автор", - "donate": "Поблагодарить", - "toggleCharts": "Показать/скрыть графики", - "theme": { - "dark": "Тёмная тема", - "light": "Светлая тема", - "system": "Как в системе" - }, - "restore": "Восстановить", - "backup": "Резервная копия", - "titleRestoreConfig": "Восстановить конфигурацию", - "titleBackupConfig": "Создать резервную копию конфигурации", - "rememberMe": "Запомнить меня", - "titleRememberMe": "Оставаться в системе после закрытия браузера", - "sort": "Сортировка", - "ExpireDate": "Дата истечения срока", - "Permanent": "Бессрочно", - "OneTimeLink": "Создать короткую одноразовую ссылку", - "errorInit": "Ошибка инициализации." -} diff --git a/src/i18n/locales/th.json b/src/i18n/locales/th.json deleted file mode 100644 index bff2523b..00000000 --- a/src/i18n/locales/th.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "ชื่อ", - "password": "รหัสผ่าน", - "signIn": "ลงชื่อเข้าใช้", - "logout": "ออกจากระบบ", - "updateAvailable": "มีอัปเดตพร้อมใช้งาน!", - "update": "อัปเดต", - "clients": "Clients", - "new": "ใหม่", - "deleteClient": "ลบ Client", - "deleteDialog1": "คุณแน่ใจหรือไม่ว่าต้องการลบ", - "deleteDialog2": "การกระทำนี้;ไม่สามารถยกเลิกได้", - "cancel": "ยกเลิก", - "create": "สร้าง", - "createdOn": "สร้างเมื่อ ", - "lastSeen": "เห็นครั้งสุดท้ายเมื่อ ", - "totalDownload": "ดาวน์โหลดทั้งหมด: ", - "totalUpload": "อัพโหลดทั้งหมด: ", - "newClient": "Client ใหม่", - "disableClient": "ปิดการใช้งาน Client", - "enableClient": "เปิดการใช้งาน Client", - "noClients": "ยังไม่มี Clients เลย", - "showQR": "แสดงรหัส QR", - "downloadConfig": "ดาวน์โหลดการตั้งค่า", - "madeBy": "สร้างโดย", - "donate": "บริจาค" -} diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json deleted file mode 100644 index ff057498..00000000 --- a/src/i18n/locales/tr.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "İsim", - "password": "Şifre", - "signIn": "Giriş Yap", - "logout": "Çıkış Yap", - "updateAvailable": "Mevcut bir güncelleme var!", - "update": "Güncelle", - "clients": "Kullanıcılar", - "new": "Yeni", - "deleteClient": "Kullanıcı Sil", - "deleteDialog1": "Silmek istediğine emin misin", - "deleteDialog2": "Bu işlem geri alınamaz.", - "cancel": "İptal", - "create": "Oluştur", - "createdOn": "Şu saatte oluşturuldu: ", - "lastSeen": "Son görülme tarihi: ", - "totalDownload": "Toplam İndirme: ", - "totalUpload": "Toplam Yükleme: ", - "newClient": "Yeni Kullanıcı", - "disableClient": "Kullanıcıyı Devre Dışı Bırak", - "enableClient": "Kullanıcıyı Etkinleştir", - "noClients": "Henüz kullanıcı yok.", - "noPrivKey": "Bu istemcinin bilinen bir özel anahtarı yok. Yapılandırma oluşturulamıyor.", - "showQR": "QR Kodunu Göster", - "downloadConfig": "Yapılandırmayı İndir", - "madeBy": "Yapan Kişi: ", - "donate": "Bağış Yap", - "toggleCharts": "Grafiği göster/gizle", - "theme": { - "dark": "Karanlık tema", - "light": "Açık tema", - "system": "Otomatik tema" - }, - "restore": "Geri yükle", - "backup": "Yedekle", - "titleRestoreConfig": "Yapılandırmanızı geri yükleyin", - "titleBackupConfig": "Yapılandırmanızı yedekleyin" -} diff --git a/src/i18n/locales/ua.json b/src/i18n/locales/ua.json deleted file mode 100644 index 2676f8fd..00000000 --- a/src/i18n/locales/ua.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "Ім`я", - "password": "Пароль", - "signIn": "Увійти", - "logout": "Вихід", - "updateAvailable": "Доступне оновлення!", - "update": "Оновити", - "clients": "Клієнти", - "new": "Новий", - "deleteClient": "Видалити клієнта", - "deleteDialog1": "Ви впевнені, що бажаєте видалити", - "deleteDialog2": "Цю дію неможливо скасувати.", - "cancel": "Скасувати", - "create": "Створити", - "createdOn": "Створено ", - "lastSeen": "Останнє підключення в ", - "totalDownload": "Всього завантажено: ", - "totalUpload": "Всього відправлено: ", - "newClient": "Новий клієнт", - "disableClient": "Вимкнути клієнта", - "enableClient": "Увімкнути клієнта", - "noClients": "Ще немає клієнтів.", - "noPrivKey": "У цього клієнта немає відомого приватного ключа. Неможливо створити конфігурацію.", - "showQR": "Показати QR-код", - "downloadConfig": "Завантажити конфігурацію", - "madeBy": "Зроблено", - "donate": "Пожертвувати", - "toggleCharts": "Показати/сховати діаграми", - "theme": { - "dark": "Темна тема", - "light": "Світла тема", - "system": "Автоматична тема" - }, - "restore": "Відновити", - "backup": "Резервна копія", - "titleRestoreConfig": "Відновити конфігурацію", - "titleBackupConfig": "Створити резервну копію конфігурації" -} diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json deleted file mode 100644 index adc6c34c..00000000 --- a/src/i18n/locales/vi.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "Tên", - "password": "Mật khẩu", - "signIn": "Đăng nhập", - "logout": "Đăng xuất", - "updateAvailable": "Có bản cập nhật mới!", - "update": "Cập nhật", - "clients": "Danh sách người dùng", - "new": "Mới", - "deleteClient": "Xóa người dùng", - "deleteDialog1": "Bạn có chắc chắn muốn xóa", - "deleteDialog2": "Thao tác này không thể hoàn tác.", - "cancel": "Huỷ", - "create": "Tạo", - "createdOn": "Được tạo lúc ", - "lastSeen": "Lần xem cuối vào ", - "totalDownload": "Tổng dung lượng tải xuống: ", - "totalUpload": "Tổng dung lượng tải lên: ", - "newClient": "Người dùng mới", - "disableClient": "Vô hiệu hóa người dùng", - "enableClient": "Kích hoạt người dùng", - "noClients": "Hiện chưa có người dùng nào.", - "showQR": "Hiển thị mã QR", - "downloadConfig": "Tải xuống cấu hình", - "madeBy": "Được tạo bởi", - "donate": "Ủng hộ", - "toggleCharts": "Mở/Ẩn Biểu đồ", - "theme": { - "dark": "Dark theme", - "light": "Light theme", - "system": "System theme" - }, - "restore": "Khôi phục", - "backup": "Sao lưu", - "titleRestoreConfig": "Khôi phục cấu hình của bạn", - "titleBackupConfig": "Sao lưu cấu hình của bạn", - "sort": "Sắp xếp" -} diff --git a/src/i18n/locales/zh-chs.json b/src/i18n/locales/zh-chs.json deleted file mode 100644 index 14279ccc..00000000 --- a/src/i18n/locales/zh-chs.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "名称", - "password": "密码", - "signIn": "登录", - "logout": "退出", - "updateAvailable": "有新版本可用!", - "update": "更新", - "clients": "客户端", - "new": "新建", - "deleteClient": "删除客户端", - "deleteDialog1": "您确定要删除", - "deleteDialog2": "此操作无法撤销。", - "cancel": "取消", - "create": "创建", - "createdOn": "创建于 ", - "lastSeen": "最后访问于 ", - "totalDownload": "总下载: ", - "totalUpload": "总上传: ", - "newClient": "新建客户端", - "disableClient": "禁用客户端", - "enableClient": "启用客户端", - "noClients": "目前没有客户端。", - "noPrivKey": "此客户端没有已知的私钥。无法创建配置。", - "showQR": "显示二维码", - "downloadConfig": "下载配置", - "madeBy": "由", - "donate": "捐赠", - "toggleCharts": "显示/隐藏图表", - "theme": { "dark": "暗黑主题", "light": "明亮主题", "system": "自动主题" }, - "restore": "恢复", - "backup": "备份", - "titleRestoreConfig": "恢复您的配置", - "titleBackupConfig": "备份您的配置", - "rememberMe": "记住我", - "titleRememberMe": "关闭浏览器后保持登录", - "sort": "排序", - "ExpireDate": "到期日期", - "Permanent": "永久", - "OneTimeLink": "生成一次性短链接" -} diff --git a/src/i18n/locales/zh-cht.json b/src/i18n/locales/zh-cht.json deleted file mode 100644 index ebb66da0..00000000 --- a/src/i18n/locales/zh-cht.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "名字", - "password": "密碼", - "signIn": "登入", - "logout": "登出", - "updateAvailable": "有新版本可以使用!", - "update": "更新", - "clients": "使用者", - "new": "建立", - "deleteClient": "刪除使用者", - "deleteDialog1": "您確定要刪除", - "deleteDialog2": "此作業無法復原。", - "cancel": "取消", - "create": "建立", - "createdOn": "建立於 ", - "lastSeen": "最後存取於 ", - "totalDownload": "總下載: ", - "totalUpload": "總上傳: ", - "newClient": "新用戶", - "disableClient": "停用使用者", - "enableClient": "啟用使用者", - "noClients": "目前沒有使用者。", - "noPrivKey": "此使用者沒有已知的私鑰。無法創建配置。", - "showQR": "顯示 QR Code", - "downloadConfig": "下載 Config 檔", - "madeBy": "由", - "donate": "抖內", - "toggleCharts": "顯示/隱藏圖表", - "theme": { "dark": "暗黑主題", "light": "明亮主題", "system": "自動主題" }, - "restore": "恢復", - "backup": "備份", - "titleRestoreConfig": "恢復您的配置", - "titleBackupConfig": "備份您的配置", - "rememberMe": "記住我", - "titleRememberMe": "關閉瀏覽器後保持登錄", - "sort": "排序", - "ExpireDate": "到期日期", - "Permanent": "永久", - "OneTimeLink": "生成一次性短鏈接" -} diff --git a/src/nuxt.config.ts b/src/nuxt.config.ts index 2b300d41..25904814 100644 --- a/src/nuxt.config.ts +++ b/src/nuxt.config.ts @@ -23,10 +23,24 @@ export default defineNuxtConfig({ experimental: { localeDetector: './localeDetector.ts', }, + locales: [ + { + code: 'en', + language: 'en-US', + name: 'English', + }, + ], + defaultLocale: 'en', + vueI18n: './i18n.config.ts', + strategy: 'no_prefix', + detectBrowserLanguage: { + useCookie: true, + }, }, nitro: { esbuild: { options: { + // to support big int target: 'es2020', }, }, diff --git a/src/package.json b/src/package.json index 9abf671d..69387ea7 100644 --- a/src/package.json +++ b/src/package.json @@ -14,37 +14,38 @@ "format": "prettier . --write", "format:check": "prettier . --check", "typecheck": "nuxt typecheck", - "check:runall": "nuxt build && nuxt typecheck && eslint . && prettier . --check" + "check:all": "pnpm typecheck && pnpm lint && pnpm format:check && pnpm build" }, "dependencies": { "@eschricht/nuxt-color-mode": "^1.1.5", "@nuxtjs/i18n": "^9.1.1", "@nuxtjs/tailwindcss": "^6.12.2", "@pinia/nuxt": "^0.9.0", - "@tailwindcss/forms": "^0.5.9", - "apexcharts": "^4.2.0", + "@tailwindcss/forms": "^0.5.10", + "apexcharts": "^4.3.0", "argon2": "^0.41.1", "basic-auth": "^2.0.1", "cidr-tools": "^11.0.2", "crc-32": "^1.2.2", "debug": "^4.4.0", "ip-bigint": "^8.2.0", + "is-cidr": "^5.1.0", "is-ip": "^5.0.1", "js-sha256": "^0.11.0", "lowdb": "^7.0.1", - "nuxt": "^3.14.1592", + "nuxt": "^3.15.1", "pinia": "^2.3.0", "qrcode": "^1.5.4", - "radix-vue": "^1.9.11", + "radix-vue": "^1.9.12", "semver": "^7.6.3", - "tailwindcss": "^3.4.16", + "tailwindcss": "^3.4.17", "timeago.js": "^4.0.2", "vue": "latest", "vue3-apexcharts": "^1.8.0", "zod": "^3.24.1" }, "devDependencies": { - "@nuxt/eslint-config": "^0.7.3", + "@nuxt/eslint-config": "^0.7.5", "@types/debug": "^4.1.12", "@types/qrcode": "^1.5.5", "@types/semver": "^7.5.8", @@ -52,8 +53,8 @@ "eslint-config-prettier": "^9.1.0", "prettier": "^3.4.2", "prettier-plugin-tailwindcss": "^0.6.9", - "typescript": "^5.7.2", - "vue-tsc": "^2.1.10" + "typescript": "^5.7.3", + "vue-tsc": "^2.2.0" }, - "packageManager": "pnpm@9.15.0" + "packageManager": "pnpm@9.15.3" } diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index ddbc04dc..1443ce16 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -10,22 +10,22 @@ importers: dependencies: '@eschricht/nuxt-color-mode': specifier: ^1.1.5 - version: 1.1.5(magicast@0.3.5)(rollup@4.28.1) + version: 1.1.5(magicast@0.3.5)(rollup@4.30.1) '@nuxtjs/i18n': specifier: ^9.1.1 - version: 9.1.1(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.1))(magicast@0.3.5)(rollup@4.28.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) + version: 9.1.1(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.2))(magicast@0.3.5)(rollup@4.30.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)) '@nuxtjs/tailwindcss': specifier: ^6.12.2 - version: 6.12.2(magicast@0.3.5)(rollup@4.28.1) + version: 6.12.2(magicast@0.3.5)(rollup@4.30.1) '@pinia/nuxt': specifier: ^0.9.0 - version: 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.28.1) + version: 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)))(rollup@4.30.1) '@tailwindcss/forms': - specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.4.16) + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.4.17) apexcharts: - specifier: ^4.2.0 - version: 4.2.0 + specifier: ^4.3.0 + version: 4.3.0 argon2: specifier: ^0.41.1 version: 0.41.1 @@ -44,6 +44,9 @@ importers: ip-bigint: specifier: ^8.2.0 version: 8.2.0 + is-cidr: + specifier: ^5.1.0 + version: 5.1.0 is-ip: specifier: ^5.0.1 version: 5.0.1 @@ -54,39 +57,39 @@ importers: specifier: ^7.0.1 version: 7.0.1 nuxt: - specifier: ^3.14.1592 - version: 3.14.1592(@parcel/watcher@2.5.0)(@types/node@22.10.2)(eslint@9.17.0(jiti@2.4.1))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.28.1)(terser@5.37.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue-tsc@2.1.10(typescript@5.7.2)) + specifier: ^3.15.1 + version: 3.15.1(@parcel/watcher@2.5.0)(@types/node@22.10.5)(db0@0.2.1)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.4.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.30.1)(terser@5.37.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue-tsc@2.2.0(typescript@5.7.3))(yaml@2.7.0) pinia: specifier: ^2.3.0 - version: 2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) + version: 2.3.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)) qrcode: specifier: ^1.5.4 version: 1.5.4 radix-vue: - specifier: ^1.9.11 - version: 1.9.11(vue@3.5.13(typescript@5.7.2)) + specifier: ^1.9.12 + version: 1.9.12(vue@3.5.13(typescript@5.7.3)) semver: specifier: ^7.6.3 version: 7.6.3 tailwindcss: - specifier: ^3.4.16 - version: 3.4.16 + specifier: ^3.4.17 + version: 3.4.17 timeago.js: specifier: ^4.0.2 version: 4.0.2 vue: specifier: latest - version: 3.5.13(typescript@5.7.2) + version: 3.5.13(typescript@5.7.3) vue3-apexcharts: specifier: ^1.8.0 - version: 1.8.0(apexcharts@4.2.0)(vue@3.5.13(typescript@5.7.2)) + version: 1.8.0(apexcharts@4.3.0)(vue@3.5.13(typescript@5.7.3)) zod: specifier: ^3.24.1 version: 3.24.1 devDependencies: '@nuxt/eslint-config': - specifier: ^0.7.3 - version: 0.7.3(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + specifier: ^0.7.5 + version: 0.7.5(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -98,10 +101,10 @@ importers: version: 7.5.8 eslint: specifier: ^9.17.0 - version: 9.17.0(jiti@2.4.1) + version: 9.17.0(jiti@2.4.2) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.17.0(jiti@2.4.1)) + version: 9.1.0(eslint@9.17.0(jiti@2.4.2)) prettier: specifier: ^3.4.2 version: 3.4.2 @@ -109,11 +112,11 @@ importers: specifier: ^0.6.9 version: 0.6.9(prettier@3.4.2) typescript: - specifier: ^5.7.2 - version: 5.7.2 + specifier: ^5.7.3 + version: 5.7.3 vue-tsc: - specifier: ^2.1.10 - version: 2.1.10(typescript@5.7.2) + specifier: ^2.2.0 + version: 2.2.0(typescript@5.7.3) packages: @@ -125,8 +128,8 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/install-pkg@0.5.0': - resolution: {integrity: sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==} + '@antfu/install-pkg@1.0.0': + resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} @@ -271,11 +274,11 @@ packages: resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} - '@clack/core@0.3.5': - resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} + '@clack/core@0.4.1': + resolution: {integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==} - '@clack/prompts@0.8.2': - resolution: {integrity: sha512-6b9Ab2UiZwJYA9iMyboYyW9yJvAO9V753ZhS+DHKEjZRKAxPPOb7MXXu84lsPFG+vZt6FRFniZ8rXi+zCIw4yQ==} + '@clack/prompts@0.9.1': + resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==} '@cloudflare/kv-asset-handler@0.3.4': resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} @@ -303,8 +306,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.24.0': - resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -315,8 +318,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.24.0': - resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -327,8 +330,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.24.0': - resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -339,8 +342,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.24.0': - resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -351,8 +354,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.24.0': - resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -363,8 +366,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.24.0': - resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -375,8 +378,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.24.0': - resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -387,8 +390,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.0': - resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -399,8 +402,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.24.0': - resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -411,8 +414,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.24.0': - resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -423,8 +426,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.24.0': - resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -435,8 +438,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.24.0': - resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -447,8 +450,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.24.0': - resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -459,8 +462,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.24.0': - resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -471,8 +474,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.24.0': - resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -483,8 +486,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.24.0': - resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -495,26 +498,32 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.24.0': - resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.24.0': - resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.24.0': - resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -525,8 +534,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.0': - resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -537,8 +546,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.24.0': - resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -549,8 +558,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.24.0': - resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -561,8 +570,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.24.0': - resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -573,8 +582,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.24.0': - resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -625,17 +634,17 @@ packages: resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.12': - resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@floating-ui/vue@1.1.5': - resolution: {integrity: sha512-ynL1p5Z+woPVSwgMGqeDrx6HrJfGIDzFyESFkyqJKilGW1+h/8yVY29Khn0LaU6wHBRwZ13ntG6reiHWK6jyzw==} + '@floating-ui/vue@1.1.6': + resolution: {integrity: sha512-XFlUzGHGv12zbgHNk5FN2mUB7ROul3oG2ENdTpWdE+qMFxyNxWSRmsoyhiEnpmabNm6WnUvR1OvJfUfN4ojC1A==} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -691,20 +700,24 @@ packages: resolution: {integrity: sha512-6GT1BJ852gZ0gItNZN2krX5QAmea+cmdjMvsWohArAZ3GmHdnNANEcF9JjPXAMRtQ6Ux5E269ymamg/+WU6tQA==} engines: {node: '>= 16'} - '@intlify/message-compiler@11.0.0-beta.2': - resolution: {integrity: sha512-/cJHP1n45Zlf9tbm/hudLrUwXzJZngR9OMTQk32H1S4lBjM2996wzKTHuLbaJJlJZNTTjnfWZUHPb+F6sE6p1Q==} + '@intlify/message-compiler@11.0.0-rc.1': + resolution: {integrity: sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==} engines: {node: '>= 16'} '@intlify/shared@10.0.5': resolution: {integrity: sha512-bmsP4L2HqBF6i6uaMqJMcFBONVjKt+siGluRq4Ca4C0q7W2eMaVZr8iCgF9dKbcVXutftkC7D6z2SaSMmLiDyA==} engines: {node: '>= 16'} - '@intlify/shared@11.0.0-beta.2': - resolution: {integrity: sha512-N6ngJfFaVA0l2iLtx/SymgHOBW4wiS5Pyue7YmY/G+mrGjesi+S+U+u/Xlv6pZa/YIBfeM4QB07lI7rz1YqKLg==} + '@intlify/shared@11.0.0-rc.1': + resolution: {integrity: sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==} + engines: {node: '>= 16'} + + '@intlify/shared@11.0.1': + resolution: {integrity: sha512-lH164+aDDptHZ3dBDbIhRa1dOPQUp+83iugpc+1upTOWCnwyC1PVis6rSWNMMJ8VQxvtHQB9JMib48K55y0PvQ==} engines: {node: '>= 16'} - '@intlify/unplugin-vue-i18n@6.0.1': - resolution: {integrity: sha512-zDcGLNoaIP15JM4TGwgTHF01Y1Drwcv7pm9C2mHrGAZ3CugqyP2QEG0Vf82QVSNqgEwgB6prcAyDmjIDK1HlRQ==} + '@intlify/unplugin-vue-i18n@6.0.3': + resolution: {integrity: sha512-9ZDjBlhUHtgjRl23TVcgfJttgu8cNepwVhWvOv3mUMRDAhjW0pur1mWKEUKr1I8PNwE4Gvv2IQ1xcl4RL0nG0g==} engines: {node: '>= 18'} peerDependencies: petite-vue-i18n: '*' @@ -720,14 +733,14 @@ packages: resolution: {integrity: sha512-8i3uRdAxCGzuHwfmHcVjeLQBtysQB2aXl/ojoagDut5/gY5lvWCQ2+cnl2TiqE/fXj/D8EhWG/SLKA7qz4a3QA==} engines: {node: '>= 18'} - '@intlify/vue-i18n-extensions@7.0.0': - resolution: {integrity: sha512-MtvfJnb4aklpCU5Q/dkWkBT/vGsp3qERiPIwtTq5lX4PCLHtUprAJZp8wQj5ZcwDaFCU7+yVMjYbeXpIf927cA==} + '@intlify/vue-i18n-extensions@8.0.0': + resolution: {integrity: sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==} engines: {node: '>= 18'} peerDependencies: - '@intlify/shared': ^9.0.0 || ^10.0.0 + '@intlify/shared': ^9.0.0 || ^10.0.0 || ^11.0.0 '@vue/compiler-dom': ^3.0.0 vue: ^3.0.0 - vue-i18n: ^9.0.0 || ^10.0.0 + vue-i18n: ^9.0.0 || ^10.0.0 || ^11.0.0 peerDependenciesMeta: '@intlify/shared': optional: true @@ -817,23 +830,23 @@ packages: '@nuxt/devalue@2.0.2': resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} - '@nuxt/devtools-kit@1.6.4': - resolution: {integrity: sha512-jpLYrXFm8T74j8ZjU6lheghe3gdr7PcNluvh/KOl+t6l7AtsQilkTmCZ4YoaiaWLM+5c5mkc72qd7ECgZb0tCw==} + '@nuxt/devtools-kit@1.7.0': + resolution: {integrity: sha512-+NgZ2uP5BuneqvQbe7EdOEaFEDy8762c99pLABtn7/Ur0ExEsQJMP7pYjjoTfKubhBqecr5Vo9yHkPBj1eHulQ==} peerDependencies: vite: '*' - '@nuxt/devtools-wizard@1.6.4': - resolution: {integrity: sha512-YTInHKL3SnRjczZDIhN8kXaiYf8+ddBMU5nwShPxmutcaVQZ8FMiJHRIzyWnS10AxayPKGVzJh3fLF/BiUwgcg==} + '@nuxt/devtools-wizard@1.7.0': + resolution: {integrity: sha512-86Gd92uEw0Dh2ErIYT9TMIrMOISE96fCRN4rxeryTvyiowQOsyrbkCeMNYrEehoRL+lohoyK6iDmFajadPNwWQ==} hasBin: true - '@nuxt/devtools@1.6.4': - resolution: {integrity: sha512-uzHFXVEQnmxcbtbcpXjDEyILMp/jJNF1DN2/wSBm0r7UD82qaD2Aa66gX7dTY2+E0HG6aSNkZky3Ck8ehSk8nQ==} + '@nuxt/devtools@1.7.0': + resolution: {integrity: sha512-uvnjt5Zowkz7tZmnks2cGreg1XZIiSyVzQ2MYiRXACodlXcwJ0dpUS3WTxu8BR562K+772oRdvKie9AQlyZUgg==} hasBin: true peerDependencies: vite: '*' - '@nuxt/eslint-config@0.7.3': - resolution: {integrity: sha512-8udO5d+AUhKdn+CkJ5EO9gRvG8a3qwjXqBFnhExW/VE9vSyLTtjxopCgWvAngtkdotCM0zr9vkVp2Eg+VqBLag==} + '@nuxt/eslint-config@0.7.5': + resolution: {integrity: sha512-nUMMiVNZ7qk7FP5Uev/zuTZoTwBnlfr0qSt355aw21SoUkXw0YFRFsImdzkjnEN7kQjgZj0PcCJs/ejv8mRROg==} peerDependencies: eslint: ^8.57.0 || ^9.0.0 eslint-plugin-format: '*' @@ -841,26 +854,27 @@ packages: eslint-plugin-format: optional: true - '@nuxt/eslint-plugin@0.7.3': - resolution: {integrity: sha512-yKaZGitmjAJ3peXZXDT8bDUT1wyC+VlaPuj6gm1GGBGyZP4cBnZVZmqMtR9YPT+rfcWkRt3T2628xYtv/hWNcQ==} + '@nuxt/eslint-plugin@0.7.5': + resolution: {integrity: sha512-EBb9KiUbnGK6yJnOmGAaURS8NTfNaMXHiAyRtEmLTtj/IwNqFUtgoDLFqBDBCGIjd8my2WA1m9HjQK/+la9Z0Q==} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@nuxt/kit@3.14.1592': - resolution: {integrity: sha512-r9r8bISBBisvfcNgNL3dSIQHSBe0v5YkX5zwNblIC2T0CIEgxEVoM5rq9O5wqgb5OEydsHTtT2hL57vdv6VT2w==} - engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/kit@3.15.1': + resolution: {integrity: sha512-7cVWjzfz3L6CsZrg6ppDZa7zGrZxCSfZjEQDIvVFn4mFKtJlK9k2izf5EewL6luzWwIQojkZAC3iq/1wtgI0Xw==} + engines: {node: '>=18.20.5'} - '@nuxt/schema@3.14.1592': - resolution: {integrity: sha512-A1d/08ueX8stTXNkvGqnr1eEXZgvKn+vj6s7jXhZNWApUSqMgItU4VK28vrrdpKbjIPwq2SwhnGOHUYvN9HwCQ==} + '@nuxt/schema@3.15.1': + resolution: {integrity: sha512-n5kOHt8uUyUM9z4Wu/8tIZkBYh3KTCGvyruG6oD9bfeT4OaS21+X3M7XsTXFMe+eYBZA70IFFlWn1JJZIPsKeA==} engines: {node: ^14.18.0 || >=16.10.0} - '@nuxt/telemetry@2.6.0': - resolution: {integrity: sha512-h4YJ1d32cU7tDKjjhjtIIEck4WF/w3DTQBT348E9Pz85YLttnLqktLM0Ez9Xc2LzCeUgBDQv1el7Ob/zT3KUqg==} + '@nuxt/telemetry@2.6.4': + resolution: {integrity: sha512-2Lgdn07Suraly5dSfVQ4ttBQBMtmjvCTGKGUHpc1UyH87HT9xCm3KLFO0UcVQ8+LNYCgoOaK7lq9qDJOfBfZ5A==} + engines: {node: '>=18.20.5'} hasBin: true - '@nuxt/vite-builder@3.14.1592': - resolution: {integrity: sha512-GVS7vkBJAGv13ghmjgGrS2QVyzoqxQ5+cAUrMeMjKbY7GnRY7/uOkoLmznYx8E/U9HBUyHQa+wSN2ZfcSiEytQ==} - engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/vite-builder@3.15.1': + resolution: {integrity: sha512-b9uvLuRSgZy+pvU0rwHOpYo9XmAPibNGFEn0MeG6rUWVee9didV0Q5voAr+/1kq9bIbf6V0QFh9TE+4pCxZuMQ==} + engines: {node: ^18.20.5 || ^20.9.0 || >=22.0.0} peerDependencies: vue: ^3.3.4 @@ -985,8 +999,8 @@ packages: '@redocly/config@0.17.1': resolution: {integrity: sha512-CEmvaJuG7pm2ylQg53emPmtgm4nW2nxBgwXzbVEHpGas/lGnMyN8Zlkgiz6rPw0unASg6VW3wlz27SOL5XFHYQ==} - '@redocly/openapi-core@1.26.0': - resolution: {integrity: sha512-8Ofu6WpBp7eoLmf1qQ4+T0W4LRr8es+4Drw/RJG+acPXmaT2TmHk2B2v+3+1R9GqSIj6kx3N7JmQkxAPCnvDLw==} + '@redocly/openapi-core@1.27.1': + resolution: {integrity: sha512-zQ47/A+Drk2Y75/af69MD3Oad4H9LxkUDzcm7XBkyLNDKIWQrDKDnS5476oDq77+zciymNxgMVtxxVXlnGS8kw==} engines: {node: '>=14.19.0', npm: '>=7.0.0'} '@rollup/plugin-alias@5.1.1': @@ -1070,98 +1084,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.28.1': - resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} + '@rollup/rollup-android-arm-eabi@4.30.1': + resolution: {integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.28.1': - resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} + '@rollup/rollup-android-arm64@4.30.1': + resolution: {integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.28.1': - resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} + '@rollup/rollup-darwin-arm64@4.30.1': + resolution: {integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.28.1': - resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} + '@rollup/rollup-darwin-x64@4.30.1': + resolution: {integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.28.1': - resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} + '@rollup/rollup-freebsd-arm64@4.30.1': + resolution: {integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.28.1': - resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} + '@rollup/rollup-freebsd-x64@4.30.1': + resolution: {integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.28.1': - resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + resolution: {integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.28.1': - resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} + '@rollup/rollup-linux-arm-musleabihf@4.30.1': + resolution: {integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.28.1': - resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} + '@rollup/rollup-linux-arm64-gnu@4.30.1': + resolution: {integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.28.1': - resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} + '@rollup/rollup-linux-arm64-musl@4.30.1': + resolution: {integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.28.1': - resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + resolution: {integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': - resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + resolution: {integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.28.1': - resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} + '@rollup/rollup-linux-riscv64-gnu@4.30.1': + resolution: {integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.28.1': - resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} + '@rollup/rollup-linux-s390x-gnu@4.30.1': + resolution: {integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.28.1': - resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} + '@rollup/rollup-linux-x64-gnu@4.30.1': + resolution: {integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.28.1': - resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} + '@rollup/rollup-linux-x64-musl@4.30.1': + resolution: {integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.28.1': - resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} + '@rollup/rollup-win32-arm64-msvc@4.30.1': + resolution: {integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.28.1': - resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} + '@rollup/rollup-win32-ia32-msvc@4.30.1': + resolution: {integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.28.1': - resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} + '@rollup/rollup-win32-x64-msvc@4.30.1': + resolution: {integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==} cpu: [x64] os: [win32] @@ -1203,10 +1217,10 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tailwindcss/forms@0.5.9': - resolution: {integrity: sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==} + '@tailwindcss/forms@0.5.10': + resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==} peerDependencies: - tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20' + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' '@tanstack/virtual-core@3.11.2': resolution: {integrity: sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==} @@ -1223,6 +1237,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -1235,12 +1252,15 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.10.2': - resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/parse-path@7.0.3': + resolution: {integrity: sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==} + '@types/qrcode@1.5.5': resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} @@ -1253,72 +1273,72 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@typescript-eslint/eslint-plugin@8.18.1': - resolution: {integrity: sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==} + '@typescript-eslint/eslint-plugin@8.19.1': + resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.18.1': - resolution: {integrity: sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==} + '@typescript-eslint/parser@8.19.1': + resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.18.1': - resolution: {integrity: sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==} + '@typescript-eslint/scope-manager@8.19.1': + resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.18.1': - resolution: {integrity: sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==} + '@typescript-eslint/type-utils@8.19.1': + resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.18.1': - resolution: {integrity: sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==} + '@typescript-eslint/types@8.19.1': + resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.18.1': - resolution: {integrity: sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==} + '@typescript-eslint/typescript-estree@8.19.1': + resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.18.1': - resolution: {integrity: sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==} + '@typescript-eslint/utils@8.19.1': + resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.18.1': - resolution: {integrity: sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==} + '@typescript-eslint/visitor-keys@8.19.1': + resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unhead/dom@1.11.14': - resolution: {integrity: sha512-FaHCWo9JR4h7PCpSRaXuMC6ifXOuBzlI0PD1MmUcxND2ayDl1d6DauIbN8TUf9TDRxNkrK1Ehb0OCXjC1ZJtrg==} + '@unhead/dom@1.11.15': + resolution: {integrity: sha512-2OZ7zvZQLqlqkhvsKsNOhxxoO3vgjygzzrmtooQR9QNKY+3HjwJ3+QfjGswXI976YV7VJem57ydQSMk1ijB7yg==} - '@unhead/schema@1.11.14': - resolution: {integrity: sha512-V9W9u5tF1/+TiLqxu+Qvh1ShoMDkPEwHoEo4DKdDG6ko7YlbzFfDxV6el9JwCren45U/4Vy/4Xi7j8OH02wsiA==} + '@unhead/schema@1.11.15': + resolution: {integrity: sha512-UkLz1dqw4yoh4jELEyLsgSG7yrXc+gv68GkQeTv8LysEPa8sXtFqhfuqTBLhY3sHqSnP8RkDknhtFhG2S3fuKQ==} - '@unhead/shared@1.11.14': - resolution: {integrity: sha512-41Qt4PJKYVrEGOTXgBJLRYrEu3S7n5stoB4TFC6312CIBVedXqg7voHQurn32LVDjpfJftjLa2ggCjpqdqoRDw==} + '@unhead/shared@1.11.15': + resolution: {integrity: sha512-VT42ssmwpFGfixfXqAZ+Rn7KyNG0yFqWGsvLOXIgahiTzh3N1k2st1tPvuYFZU22dtWBNxG7cvy8yxUd1vunMQ==} - '@unhead/ssr@1.11.14': - resolution: {integrity: sha512-JBF2f5PWPtpqBx/dan+4vL/dartSp8Nmd011zkT9qPYmizxO+/fsB1WQalbis1KszkfFatb6c4rO+hm0d6acOA==} + '@unhead/ssr@1.11.15': + resolution: {integrity: sha512-btoJ7huldVdxOJOr9yx8DpDiUELzdlX3LB0k5cBub+CI4nZoPC/8ovuaYzKBriAIkEtQp9g9ytHRUJYDvim/1g==} - '@unhead/vue@1.11.14': - resolution: {integrity: sha512-6nfi7FsZ936gscmj+1nUB1pybiFMFbnuEFo7B/OY2klpLWsYDUOVvpsJhbu7C3u7wkTlJXglmAk6jdd8I7WgZA==} + '@unhead/vue@1.11.15': + resolution: {integrity: sha512-2NT8Kph5AvB/qO+C8UKAc7cudbFRZTJk0eRpn8o1nG3yk2+mWvN0vsTTjnKvXixNF193I/R+zqo/NkcjgaWG9A==} peerDependencies: vue: '>=2.7 || >=3' - '@vercel/nft@0.27.9': - resolution: {integrity: sha512-pTs7OchHQmSYJPR0puVQCWw/NqzuvAtnAhBurz21lq4Y4KqWoMpYKqmikkETG5r1bHNCM/hQMZ5JiRr9mhOkyg==} + '@vercel/nft@0.27.10': + resolution: {integrity: sha512-zbaF9Wp/NsZtKLE4uVmL3FyfFwlpDyuymQM1kPbeT0mVOHKDQQNjnnfslB3REg3oZprmNFJuh3pkHBk2qAaizg==} engines: {node: '>=16'} hasBin: true @@ -1396,11 +1416,11 @@ packages: '@vue/devtools-kit@7.6.8': resolution: {integrity: sha512-JhJ8M3sPU+v0P2iZBF2DkdmR9L0dnT5RXJabJqX6o8KtFs3tebdvfoXV2Dm3BFuqeECuMJIfF1aCzSt+WQ4wrw==} - '@vue/devtools-shared@7.6.8': - resolution: {integrity: sha512-9MBPO5Z3X1nYGFqTJyohl6Gmf/J7UNN1oicHdyzBVZP4jnhZ4c20MgtaHDIzWmHDHCMYVS5bwKxT3jxh7gOOKA==} + '@vue/devtools-shared@7.7.0': + resolution: {integrity: sha512-jtlQY26R5thQxW9YQTpXbI0HoK0Wf9Rd4ekidOkRvSy7ChfK0kIU6vvcBtjj87/EcpeOSK49fZAicaFNJcoTcQ==} - '@vue/language-core@2.1.10': - resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==} + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1470,8 +1490,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - alien-signals@0.2.2: - resolution: {integrity: sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==} + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -1504,8 +1524,8 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - apexcharts@4.2.0: - resolution: {integrity: sha512-MQ5o8KnwMGcAlo+LhXlAjWGk8wBNBK2O1gFv+JiB6w3oJeuDJUFqa6FLTDlXvdhtObNQ3vIfAtv0AbMSkDv0DQ==} + apexcharts@4.3.0: + resolution: {integrity: sha512-PfvZQpv91T68hzry9l5zP3Gip7sQvF0nFK91uCBrswIKX7rbIdbVNS4fOks9m9yP3Ppgs6LHgU2M/mjoG4NM0A==} archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} @@ -1567,8 +1587,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.0: - resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + bare-events@2.5.3: + resolution: {integrity: sha512-pCO3aoRJ0MBiRMu8B7vUga0qL3L7gO1+SW7ku6qlSsMLwuhaawnuvZDyzJY/kyC63Un0XAB0OPUcfF1eTO/V+Q==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1600,8 +1620,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.3: - resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1639,6 +1659,14 @@ packages: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1654,8 +1682,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001689: - resolution: {integrity: sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==} + caniuse-lite@1.0.30001692: + resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1668,8 +1696,8 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chokidar@4.0.2: - resolution: {integrity: sha512-/b57FK+bblSU+dfewfFe0rT1YjVDfOmeLQwCAuC+vwvgLkXboATqqmy+Ipux6JrF6L5joe5CBnFOw+gLWH6yKg==} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} chownr@2.0.0: @@ -1684,6 +1712,10 @@ packages: resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} engines: {node: '>=8'} + cidr-regex@4.1.1: + resolution: {integrity: sha512-ekKcVp+iRB9zlKFXyx7io7nINgb0oRjgRdXNEodp1OuxRui8FXr/CA40Tz1voWUp9DPPrMyQKy01vJhDo4N1lw==} + engines: {node: '>=14'} + cidr-tools@11.0.2: resolution: {integrity: sha512-OLeM9EOXybbhMsGGBNRLCMjn8e+wFOXARIShF/sZwmJLsxWywqfE0By4BMftT6BFWpbcETWpW7TfM2KGCtrZDg==} engines: {node: '>=18'} @@ -1695,9 +1727,6 @@ packages: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} - clear@0.1.0: - resolution: {integrity: sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==} - clipboardy@4.0.0: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} @@ -1773,8 +1802,8 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + consola@3.3.3: + resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} engines: {node: ^14.18.0 || >=16.10.0} content-disposition@0.5.4: @@ -1803,8 +1832,8 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} - core-js-compat@3.39.0: - resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} + core-js-compat@3.40.0: + resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -1818,9 +1847,6 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - croner@9.0.0: resolution: {integrity: sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==} engines: {node: '>=18.0'} @@ -2029,8 +2055,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dot-prop@9.0.0: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} @@ -2040,6 +2066,10 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -2049,8 +2079,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.74: - resolution: {integrity: sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==} + electron-to-chromium@1.5.79: + resolution: {integrity: sha512-nYOxJNxQ9Om4EC88BE4pPoNI8xwSFf8pU/BAeOl4Hh/b/i6V4biTAzwV7pXi3ARKeoYO5JZKMIXTryXSVer5RA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2066,8 +2096,8 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + enhanced-resolve@5.18.0: + resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -2083,16 +2113,28 @@ packages: errx@0.1.0: resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true - esbuild@0.24.0: - resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} hasBin: true @@ -2129,19 +2171,19 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-flat-config-utils@0.4.0: - resolution: {integrity: sha512-kfd5kQZC+BMO0YwTol6zxjKX1zAsk8JfSAopbKjKqmENTJcew+yBejuvccAg37cvOrN0Mh+DVbeyznuNWEjt4A==} + eslint-flat-config-utils@1.0.0: + resolution: {integrity: sha512-tmzcXeCsa24/u3glyw1Mo7KfC/r9a5Vsu1nPCkX7uefD7C5Z4x922Q2KP/drhTLbOI5lcFHYpfXjKhqqnUWObw==} eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-merge-processors@0.1.0: - resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} + eslint-merge-processors@1.0.0: + resolution: {integrity: sha512-4GybyHmhXtT7/W8RAouQzNM0791sYasJCTYHIAYjuiJvbNFY0jMKkoESREhX+mjX37dxiN6v4EqhZ1nc0tJF7A==} peerDependencies: eslint: '*' - eslint-plugin-import-x@4.5.0: - resolution: {integrity: sha512-l0OTfnPF8RwmSXfjT75N8d6ZYLVrVYWpaGlgvVkVqFERCI5SyBfDP7QEMr3kt0zWi2sOa9EQ47clbdFsHkF83Q==} + eslint-plugin-import-x@4.6.1: + resolution: {integrity: sha512-wluSUifMIb7UfwWXqx7Yx0lE/SGCcGXECLx/9bCmbY2nneLwvAZ4vkd1IXDjPKFvdcdUgr1BaRnaRpx3k2+Pfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2266,8 +2308,8 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -2279,8 +2321,8 @@ packages: fast-npm-meta@0.2.2: resolution: {integrity: sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.18.0: + resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} fdir@6.4.2: resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} @@ -2366,9 +2408,17 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + get-port-please@3.1.2: resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -2388,11 +2438,11 @@ packages: resolution: {integrity: sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==} engines: {node: '>=4'} - git-up@7.0.0: - resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + git-up@8.0.0: + resolution: {integrity: sha512-uBI8Zdt1OZlrYfGcSVroLJKgyNNXlgusYFzHk614lTasz35yg2PVpL1RMy0LOO2dcvF9msYW3pRfUSmafZNrjg==} - git-url-parse@15.0.0: - resolution: {integrity: sha512-5reeBufLi+i4QD3ZFftcJs9jC26aULFLBU23FeKM/b1rI0K6ofIeAblmDVO7Ht22zTDE9+CkJ3ZVb0CgJmz3UQ==} + git-url-parse@16.0.0: + resolution: {integrity: sha512-Y8iAF0AmCaqXc6a5GYgPQW9ESbncNLOL+CeQAJRhmWUOmnPkKpBYeWYp4mFd3LA5j53CdGDdslzX12yEBVHQQg==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -2426,14 +2476,18 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.13.0: - resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} engines: {node: '>=18'} globby@14.0.2: resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} engines: {node: '>=18'} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2459,9 +2513,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hash-sum@2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2522,8 +2573,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@6.0.2: - resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + ignore@7.0.0: + resolution: {integrity: sha512-lcX8PNQygAa22u/0BysEY8VhaFRzlOkvdlKczDPnJvrkJD1EuqzEky5VYYKM2iySIuaVIDv9N190DfSreSLw2A==} engines: {node: '>= 4'} image-meta@0.2.1: @@ -2565,8 +2616,8 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ioredis@5.4.1: - resolution: {integrity: sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==} + ioredis@5.4.2: + resolution: {integrity: sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==} engines: {node: '>=12.22.0'} ip-bigint@8.2.0: @@ -2591,8 +2642,12 @@ packages: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} - is-core-module@2.16.0: - resolution: {integrity: sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==} + is-cidr@5.1.0: + resolution: {integrity: sha512-OkVS+Ht2ssF27d48gZdB+ho1yND1VbkJRKKS6Pc1/Cw7uqkd9IOJg8/bTwBDQL6tfBhSdguPRnlGiE8pU/X5NQ==} + engines: {node: '>=14'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} is-docker@2.2.1: @@ -2613,8 +2668,8 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -2651,6 +2706,10 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + is-regexp@3.1.0: resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} engines: {node: '>=12'} @@ -2691,12 +2750,12 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.4.1: - resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true js-levenshtein@1.1.6: @@ -2836,9 +2895,6 @@ packages: lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -2871,6 +2927,10 @@ packages: magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -2914,8 +2974,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - mime@4.0.4: - resolution: {integrity: sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==} + mime@4.0.6: + resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} engines: {node: '>=16'} hasBin: true @@ -2985,10 +3045,6 @@ packages: mlly@1.7.3: resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} @@ -3092,18 +3148,18 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nuxi@3.16.0: - resolution: {integrity: sha512-t9m4zTq44R0/icuzQXJHEyPRM3YbgTPMpytyb6YW2LOL/3mwZ3Bmte1FIlCoigzDvxBJRbcchZGc689+Syyu8w==} + nuxi@3.19.1: + resolution: {integrity: sha512-yjJggqwSkymaWM/f4+1nPBTW1Hg7tZ0ZQax69zlqq+Ftc6rfAnJSgGUwhAuoo7E7x3JGQ0Uzzokz11Y7PuRj6g==} engines: {node: ^16.10.0 || >=18.0.0} hasBin: true - nuxt@3.14.1592: - resolution: {integrity: sha512-roWAQH4Mb6WY72cNos+YVw0DgTCNAhNygiAMCedM7hbX6ESTR2n3VH7tU0yIWDPe/hfFdii4M4wWTTNHOtS44g==} - engines: {node: ^14.18.0 || >=16.10.0} + nuxt@3.15.1: + resolution: {integrity: sha512-8sKgqjhu5JoaVv89TnBW5S0jvsXRrEWGF+CguYUPK+6sRAtNcJAwcWxd4pEmURYQ2D0jjdfgr/VyH0i9CdhkBQ==} + engines: {node: ^18.20.5 || ^20.9.0 || >=22.0.0} hasBin: true peerDependencies: '@parcel/watcher': ^2.1.0 - '@types/node': ^14.18.0 || >=16.10.0 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 peerDependenciesMeta: '@parcel/watcher': optional: true @@ -3160,8 +3216,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openapi-typescript@7.4.4: - resolution: {integrity: sha512-7j3nktnRzlQdlHnHsrcr6Gqz8f80/RhfA2I8s1clPI+jkY0hLNmnYVKBfuUEli5EEgK1B6M+ibdS5REasPlsUw==} + openapi-typescript@7.5.2: + resolution: {integrity: sha512-W/QXuQz0Fa3bGY6LKoqTCgrSX+xI/ST+E5RXo2WBmp3WwgXCWKDJPHv5GZmElF4yLCccnqYsakBDOJikHZYGRw==} hasBin: true peerDependencies: typescript: ^5.x @@ -3193,8 +3249,11 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.7: - resolution: {integrity: sha512-g4+387DXDKlZzHkP+9FLt8yKj8+/3tOkPv7DVTJGGRm00RkEWgqbFstX1mXJ4M0VDYhUqsTOiISqNOJnhAu3PQ==} + package-manager-detector@0.2.8: + resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} + + packrup@0.1.2: + resolution: {integrity: sha512-ZcKU7zrr5GlonoS9cxxrb5HVswGnyj6jQvwFBa6p5VFw7G71VAHcUKL5wyZSU/ECtPM/9gacWxy2KFQKt1gMNA==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -3219,8 +3278,9 @@ packages: parse-path@7.0.0: resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} - parse-url@8.1.0: - resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse-url@9.2.0: + resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} + engines: {node: '>=14.13.0'} parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} @@ -3262,6 +3322,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.0: + resolution: {integrity: sha512-G7n4uhtk9qJt2hlD+UFfsIGY854wpF+zs2bUbQ3CQEUTcn7v25LRsrmurOxTo4bJgjE4qkyshd9ldsEuY9M6xg==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -3293,8 +3356,8 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - pkg-types@1.2.1: - resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + pkg-types@1.3.0: + resolution: {integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==} pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} @@ -3308,8 +3371,8 @@ packages: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} - postcss-calc@10.0.2: - resolution: {integrity: sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==} + postcss-calc@10.1.0: + resolution: {integrity: sha512-uQ/LDGsf3mgsSUEXmAt3VsCSHR3aKqtEIkmB+4PhzYwRYOW5MZs/GhCCFpsOtJJkP6EC6uGipbrnaTjqaJZcJw==} engines: {node: ^18.12 || ^20.9 || >=22.0} peerDependencies: postcss: ^8.4.38 @@ -3618,8 +3681,8 @@ packages: queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - radix-vue@1.9.11: - resolution: {integrity: sha512-C+MtJ66jf8J28DO5bKgNwhGCi6WQYuEosD/tY/Orry9BTDcuF/Mps4HlFd2Tq4YlXF44BEPLQ2Paz89Mz70ZgA==} + radix-vue@1.9.12: + resolution: {integrity: sha512-zkr66Jqxbej4+oR6O/pZRzyM/VZi66ndbyIBZQjJKAXa1lIoYReZJse6W1EEDZKXknD7rXhpS+jM9Sr23lIqfg==} peerDependencies: vue: '>= 3.2.0' @@ -3650,8 +3713,8 @@ packages: readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@4.5.2: - resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} readdir-glob@1.1.3: @@ -3720,8 +3783,9 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.9: - resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true reusify@1.0.4: @@ -3735,18 +3799,21 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rollup-plugin-visualizer@5.12.0: - resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} - engines: {node: '>=14'} + rollup-plugin-visualizer@5.14.0: + resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + engines: {node: '>=18'} hasBin: true peerDependencies: + rolldown: 1.x rollup: 2.x || 3.x || 4.x peerDependenciesMeta: + rolldown: + optional: true rollup: optional: true - rollup@4.28.1: - resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} + rollup@4.30.1: + resolution: {integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3763,6 +3830,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + scslre@0.3.0: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} @@ -3994,8 +4065,8 @@ packages: peerDependencies: tailwindcss: 1 || 2 || 2.0.1-compat || 3 - tailwindcss@3.4.16: - resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} hasBin: true @@ -4039,8 +4110,8 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinyglobby@0.2.10: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} @@ -4065,11 +4136,11 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -4101,16 +4172,16 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@4.30.2: - resolution: {integrity: sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==} + type-fest@4.32.0: + resolution: {integrity: sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==} engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -4123,8 +4194,8 @@ packages: uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - unctx@2.4.0: - resolution: {integrity: sha512-VSwGlVn3teRLkFS9OH4JoZ25ky133vVPQkS6qHv/itYVrqHBa+7SO46Yh07Zve1WEi9A1X135g9DR6KMv6ZsJg==} + unctx@2.4.1: + resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -4132,8 +4203,8 @@ packages: unenv@1.10.0: resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} - unhead@1.11.14: - resolution: {integrity: sha512-XmXW0aZyX9kGk9ejCKCSvv/J4T3Rt4hoAe2EofM+nhG+zwZ7AArUMK/0F/fj6FTkfgY0u0/JryE00qUDULgygA==} + unhead@1.11.15: + resolution: {integrity: sha512-fA0rYB7qMHKY4sg0yzEXhi0cqiF/nl/OUKNaXOS9ChJwCjJxabpZvmQIUOiGS+1ckoFbZc3qZnhDLpdeNhOQwg==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -4154,34 +4225,39 @@ packages: vue-router: optional: true - unplugin@1.16.0: - resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} unplugin@2.0.0-beta.1: resolution: {integrity: sha512-2qzQo5LN2DmUZXkWDHvGKLF5BP0WN+KthD6aPnPJ8plRBIjv4lh5O07eYcSxgO2znNw9s4MNhEO1sB+JDllDbQ==} engines: {node: '>=18.12.0'} - unplugin@2.1.0: - resolution: {integrity: sha512-us4j03/499KhbGP8BU7Hrzrgseo+KdfJYWcbcajCOqsAyb8Gk0Yn2kiUIcZISYCb1JFaZfIuG3b42HmguVOKCQ==} + unplugin@2.1.2: + resolution: {integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==} engines: {node: '>=18.12.0'} - unstorage@1.13.1: - resolution: {integrity: sha512-ELexQHUrG05QVIM/iUeQNdl9FXDZhqLJ4yP59fnmn2jGUh0TEulwOgov1ubOb3Gt2ZGK/VMchJwPDNVEGWQpRg==} + unstorage@1.14.4: + resolution: {integrity: sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==} peerDependencies: - '@azure/app-configuration': ^1.7.0 - '@azure/cosmos': ^4.1.1 - '@azure/data-tables': ^13.2.2 + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 '@azure/identity': ^4.5.0 '@azure/keyvault-secrets': ^4.9.0 - '@azure/storage-blob': ^12.25.0 - '@capacitor/preferences': ^6.0.2 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 + '@deno/kv': '>=0.8.4' '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 '@planetscale/database': ^1.19.0 '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.0' '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' idb-keyval: ^6.2.1 - ioredis: ^5.4.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.1 peerDependenciesMeta: '@azure/app-configuration': optional: true @@ -4197,18 +4273,28 @@ packages: optional: true '@capacitor/preferences': optional: true + '@deno/kv': + optional: true '@netlify/blobs': optional: true '@planetscale/database': optional: true '@upstash/redis': optional: true + '@vercel/blob': + optional: true '@vercel/kv': optional: true + aws4fetch: + optional: true + db0: + optional: true idb-keyval: optional: true ioredis: optional: true + uploadthing: + optional: true untun@0.1.3: resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} @@ -4221,8 +4307,8 @@ packages: unwasm@0.3.9: resolution: {integrity: sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4303,10 +4389,10 @@ packages: '@nuxt/kit': optional: true - vite-plugin-vue-inspector@5.1.3: - resolution: {integrity: sha512-pMrseXIDP1Gb38mOevY+BvtNGNqiqmqa2pKB99lnLsADQww9w9xMbAfT4GB6RUoaOkSPrtlXqpq2Fq+Dj2AgFg==} + vite-plugin-vue-inspector@5.3.1: + resolution: {integrity: sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==} peerDependencies: - vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 vite@5.4.11: resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} @@ -4339,6 +4425,46 @@ packages: terser: optional: true + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vscode-jsonrpc@6.0.0: resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} engines: {node: '>=8.0.0 || >=10.0.0'} @@ -4397,8 +4523,8 @@ packages: peerDependencies: vue: ^3.2.0 - vue-tsc@2.1.10: - resolution: {integrity: sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==} + vue-tsc@2.2.0: + resolution: {integrity: sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -4498,8 +4624,8 @@ packages: resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -4546,10 +4672,10 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/install-pkg@0.5.0': + '@antfu/install-pkg@1.0.0': dependencies: - package-manager-detector: 0.2.7 - tinyexec: 0.3.1 + package-manager-detector: 0.2.8 + tinyexec: 0.3.2 '@antfu/utils@0.7.10': {} @@ -4597,7 +4723,7 @@ snapshots: dependencies: '@babel/compat-data': 7.26.3 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.3 + browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 @@ -4744,14 +4870,14 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@clack/core@0.3.5': + '@clack/core@0.4.1': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@0.8.2': + '@clack/prompts@0.9.1': dependencies: - '@clack/core': 0.3.5 + '@clack/core': 0.4.1 picocolors: 1.1.1 sisteransi: 1.0.5 @@ -4776,162 +4902,165 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.24.0': + '@esbuild/aix-ppc64@0.24.2': optional: true '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.24.0': + '@esbuild/android-arm64@0.24.2': optional: true '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.24.0': + '@esbuild/android-arm@0.24.2': optional: true '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.24.0': + '@esbuild/android-x64@0.24.2': optional: true '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.24.0': + '@esbuild/darwin-arm64@0.24.2': optional: true '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.24.0': + '@esbuild/darwin-x64@0.24.2': optional: true '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.24.0': + '@esbuild/freebsd-arm64@0.24.2': optional: true '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.24.0': + '@esbuild/freebsd-x64@0.24.2': optional: true '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.24.0': + '@esbuild/linux-arm64@0.24.2': optional: true '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.24.0': + '@esbuild/linux-arm@0.24.2': optional: true '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.24.0': + '@esbuild/linux-ia32@0.24.2': optional: true '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.24.0': + '@esbuild/linux-loong64@0.24.2': optional: true '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.24.0': + '@esbuild/linux-mips64el@0.24.2': optional: true '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.24.0': + '@esbuild/linux-ppc64@0.24.2': optional: true '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.24.0': + '@esbuild/linux-riscv64@0.24.2': optional: true '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.24.0': + '@esbuild/linux-s390x@0.24.2': optional: true '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.24.0': + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': optional: true '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.24.0': + '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/openbsd-arm64@0.24.0': + '@esbuild/openbsd-arm64@0.24.2': optional: true '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.24.0': + '@esbuild/openbsd-x64@0.24.2': optional: true '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.24.0': + '@esbuild/sunos-x64@0.24.2': optional: true '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.24.0': + '@esbuild/win32-arm64@0.24.2': optional: true '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.24.0': + '@esbuild/win32-ia32@0.24.2': optional: true '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.24.0': + '@esbuild/win32-x64@0.24.2': optional: true - '@eschricht/nuxt-color-mode@1.1.5(magicast@0.3.5)(rollup@4.28.1)': + '@eschricht/nuxt-color-mode@1.1.5(magicast@0.3.5)(rollup@4.30.1)': dependencies: - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) transitivePeerDependencies: - magicast - rollup - supports-color - '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.1))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.2))': dependencies: - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.4(eslint@9.17.0(jiti@2.4.1))': + '@eslint/compat@1.2.4(eslint@9.17.0(jiti@2.4.2))': optionalDependencies: - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) '@eslint/config-array@0.19.1': dependencies: @@ -4967,22 +5096,22 @@ snapshots: dependencies: levn: 0.4.1 - '@floating-ui/core@1.6.8': + '@floating-ui/core@1.6.9': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.12': + '@floating-ui/dom@1.6.13': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 - '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} - '@floating-ui/vue@1.1.5(vue@3.5.13(typescript@5.7.2))': + '@floating-ui/vue@1.1.6(vue@3.5.13(typescript@5.7.3))': dependencies: - '@floating-ui/dom': 1.6.12 - '@floating-ui/utils': 0.2.8 - vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) + '@floating-ui/dom': 1.6.13 + '@floating-ui/utils': 0.2.9 + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5008,10 +5137,10 @@ snapshots: dependencies: '@swc/helpers': 0.5.15 - '@intlify/bundle-utils@10.0.0(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))': + '@intlify/bundle-utils@10.0.0(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.3)))': dependencies: - '@intlify/message-compiler': 11.0.0-beta.2 - '@intlify/shared': 11.0.0-beta.2 + '@intlify/message-compiler': 11.0.0-rc.1 + '@intlify/shared': 11.0.0-rc.1 acorn: 8.14.0 escodegen: 2.1.0 estree-walker: 2.0.2 @@ -5020,7 +5149,7 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.2.3 optionalDependencies: - vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.2)) + vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.3)) '@intlify/core-base@10.0.5': dependencies: @@ -5042,35 +5171,37 @@ snapshots: '@intlify/shared': 10.0.5 source-map-js: 1.2.1 - '@intlify/message-compiler@11.0.0-beta.2': + '@intlify/message-compiler@11.0.0-rc.1': dependencies: - '@intlify/shared': 11.0.0-beta.2 + '@intlify/shared': 11.0.0-rc.1 source-map-js: 1.2.1 '@intlify/shared@10.0.5': {} - '@intlify/shared@11.0.0-beta.2': {} + '@intlify/shared@11.0.0-rc.1': {} + + '@intlify/shared@11.0.1': {} - '@intlify/unplugin-vue-i18n@6.0.1(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.1))(rollup@4.28.1)(typescript@5.7.2)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))': + '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.2))(rollup@4.30.1)(typescript@5.7.3)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1)) - '@intlify/bundle-utils': 10.0.0(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2))) - '@intlify/shared': 10.0.5 - '@intlify/vue-i18n-extensions': 7.0.0(@intlify/shared@10.0.5)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) - '@typescript-eslint/scope-manager': 8.18.1 - '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@intlify/bundle-utils': 10.0.0(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.3))) + '@intlify/shared': 11.0.1 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.0.1)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) debug: 4.4.0(supports-color@9.4.0) - fast-glob: 3.3.2 + fast-glob: 3.3.3 js-yaml: 4.1.0 json5: 2.2.3 pathe: 1.1.2 picocolors: 1.1.1 source-map-js: 1.2.1 - unplugin: 1.16.0 - vue: 3.5.13(typescript@5.7.2) + unplugin: 1.16.1 + vue: 3.5.13(typescript@5.7.3) optionalDependencies: - vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.2)) + vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -5080,14 +5211,14 @@ snapshots: '@intlify/utils@0.13.0': {} - '@intlify/vue-i18n-extensions@7.0.0(@intlify/shared@10.0.5)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))': + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.0.1)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))': dependencies: '@babel/parser': 7.26.3 optionalDependencies: - '@intlify/shared': 10.0.5 + '@intlify/shared': 11.0.1 '@vue/compiler-dom': 3.5.13 - vue: 3.5.13(typescript@5.7.2) - vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.2)) + vue: 3.5.13(typescript@5.7.3) + vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.3)) '@ioredis/commands@1.2.0': {} @@ -5146,7 +5277,7 @@ snapshots: '@mapbox/node-pre-gyp@2.0.0-rc.0': dependencies: - consola: 3.2.3 + consola: 3.3.3 detect-libc: 2.0.3 https-proxy-agent: 7.0.6(supports-color@9.4.0) node-fetch: 2.7.0 @@ -5157,11 +5288,11 @@ snapshots: - encoding - supports-color - '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.28.1)': + '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) json5: 2.2.3 - rollup: 4.28.1 + rollup: 4.30.1 '@netlify/functions@2.8.2': dependencies: @@ -5184,44 +5315,44 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.18.0 '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@1.6.4(magicast@0.3.5)(rollup@4.28.1)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))': + '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))': dependencies: - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) + '@nuxt/schema': 3.15.1 execa: 7.2.0 - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) transitivePeerDependencies: - magicast - rollup - supports-color - '@nuxt/devtools-wizard@1.6.4': + '@nuxt/devtools-wizard@1.7.0': dependencies: - consola: 3.2.3 + consola: 3.3.3 diff: 7.0.0 execa: 7.2.0 global-directory: 4.0.1 magicast: 0.3.5 pathe: 1.1.2 - pkg-types: 1.2.1 + pkg-types: 1.3.0 prompts: 2.4.2 rc9: 2.1.2 semver: 7.6.3 - '@nuxt/devtools@1.6.4(rollup@4.28.1)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2))': + '@nuxt/devtools@1.7.0(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@antfu/utils': 0.7.10 - '@nuxt/devtools-kit': 1.6.4(magicast@0.3.5)(rollup@4.28.1)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0)) - '@nuxt/devtools-wizard': 1.6.4 - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - '@vue/devtools-core': 7.6.8(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2)) + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)) + '@nuxt/devtools-wizard': 1.7.0 + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) + '@vue/devtools-core': 7.6.8(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) '@vue/devtools-kit': 7.6.8 birpc: 0.2.19 - consola: 3.2.3 + consola: 3.3.3 cronstrue: 2.52.0 destr: 2.0.3 error-stack-parser-es: 0.1.5 @@ -5239,17 +5370,17 @@ snapshots: ohash: 1.1.4 pathe: 1.1.2 perfect-debounce: 1.0.0 - pkg-types: 1.2.1 + pkg-types: 1.3.0 rc9: 2.1.2 scule: 1.3.0 semver: 7.6.3 simple-git: 3.27.0 sirv: 3.0.0 tinyglobby: 0.2.10 - unimport: 3.14.5(rollup@4.28.1) - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.28.1))(rollup@4.28.1)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0)) - vite-plugin-vue-inspector: 5.1.3(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0)) + unimport: 3.14.5(rollup@4.30.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.1(magicast@0.3.5)(rollup@4.30.1))(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)) + vite-plugin-vue-inspector: 5.3.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)) which: 3.0.1 ws: 8.18.0 transitivePeerDependencies: @@ -5259,108 +5390,90 @@ snapshots: - utf-8-validate - vue - '@nuxt/eslint-config@0.7.3(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + '@nuxt/eslint-config@0.7.5(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@antfu/install-pkg': 0.5.0 - '@clack/prompts': 0.8.2 + '@antfu/install-pkg': 1.0.0 + '@clack/prompts': 0.9.1 '@eslint/js': 9.17.0 - '@nuxt/eslint-plugin': 0.7.3(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - '@stylistic/eslint-plugin': 2.12.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/eslint-plugin': 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.1) - eslint-config-flat-gitignore: 0.2.0(eslint@9.17.0(jiti@2.4.1)) - eslint-flat-config-utils: 0.4.0 - eslint-merge-processors: 0.1.0(eslint@9.17.0(jiti@2.4.1)) - eslint-plugin-import-x: 4.5.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - eslint-plugin-jsdoc: 50.6.1(eslint@9.17.0(jiti@2.4.1)) - eslint-plugin-regexp: 2.7.0(eslint@9.17.0(jiti@2.4.1)) - eslint-plugin-unicorn: 56.0.1(eslint@9.17.0(jiti@2.4.1)) - eslint-plugin-vue: 9.32.0(eslint@9.17.0(jiti@2.4.1)) - eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.1)) - globals: 15.13.0 + '@nuxt/eslint-plugin': 0.7.5(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + '@stylistic/eslint-plugin': 2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.17.0(jiti@2.4.2) + eslint-config-flat-gitignore: 0.2.0(eslint@9.17.0(jiti@2.4.2)) + eslint-flat-config-utils: 1.0.0 + eslint-merge-processors: 1.0.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.6.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + eslint-plugin-jsdoc: 50.6.1(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-regexp: 2.7.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-unicorn: 56.0.1(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-vue: 9.32.0(eslint@9.17.0(jiti@2.4.2)) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2)) + globals: 15.14.0 local-pkg: 0.5.1 - pathe: 1.1.2 - vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.1)) + pathe: 2.0.0 + vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - '@vue/compiler-sfc' - supports-color - typescript - '@nuxt/eslint-plugin@0.7.3(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + '@nuxt/eslint-plugin@0.7.5(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.18.1 - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.1) + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.17.0(jiti@2.4.2) transitivePeerDependencies: - supports-color - typescript - '@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.28.1)': + '@nuxt/kit@3.15.1(magicast@0.3.5)(rollup@4.30.1)': dependencies: - '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) + '@nuxt/schema': 3.15.1 c12: 2.0.1(magicast@0.3.5) - consola: 3.2.3 + consola: 3.3.3 defu: 6.1.4 destr: 2.0.3 globby: 14.0.2 - hash-sum: 2.0.0 - ignore: 6.0.2 - jiti: 2.4.1 + ignore: 7.0.0 + jiti: 2.4.2 klona: 2.0.6 knitwork: 1.2.0 mlly: 1.7.3 - pathe: 1.1.2 - pkg-types: 1.2.1 + ohash: 1.1.4 + pathe: 2.0.0 + pkg-types: 1.3.0 scule: 1.3.0 semver: 7.6.3 ufo: 1.5.4 - unctx: 2.4.0 - unimport: 3.14.5(rollup@4.28.1) + unctx: 2.4.1 + unimport: 3.14.5(rollup@4.30.1) untyped: 1.5.2 transitivePeerDependencies: - magicast - rollup - supports-color - '@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.28.1)': + '@nuxt/schema@3.15.1': dependencies: - c12: 2.0.1(magicast@0.3.5) - compatx: 0.1.8 - consola: 3.2.3 + consola: 3.3.3 defu: 6.1.4 - hookable: 5.5.3 - pathe: 1.1.2 - pkg-types: 1.2.1 - scule: 1.3.0 + pathe: 2.0.0 std-env: 3.8.0 - ufo: 1.5.4 - uncrypto: 0.1.3 - unimport: 3.14.5(rollup@4.28.1) - untyped: 1.5.2 - transitivePeerDependencies: - - magicast - - rollup - - supports-color - '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@4.28.1)': + '@nuxt/telemetry@2.6.4(magicast@0.3.5)(rollup@4.30.1)': dependencies: - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - ci-info: 4.1.0 - consola: 3.2.3 - create-require: 1.1.1 - defu: 6.1.4 + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) + citty: 0.1.6 + consola: 3.3.3 destr: 2.0.3 dotenv: 16.4.7 - git-url-parse: 15.0.0 + git-url-parse: 16.0.0 is-docker: 3.0.0 - jiti: 1.21.6 - mri: 1.2.0 - nanoid: 5.0.9 ofetch: 1.4.1 - package-manager-detector: 0.2.7 + package-manager-detector: 0.2.8 parse-git-config: 3.0.0 - pathe: 1.1.2 + pathe: 2.0.0 rc9: 2.1.2 std-env: 3.8.0 transitivePeerDependencies: @@ -5368,42 +5481,39 @@ snapshots: - rollup - supports-color - '@nuxt/vite-builder@3.14.1592(@types/node@22.10.2)(eslint@9.17.0(jiti@2.4.1))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.28.1)(terser@5.37.0)(typescript@5.7.2)(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2))': + '@nuxt/vite-builder@3.15.1(@types/node@22.10.5)(eslint@9.17.0(jiti@2.4.2))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.30.1)(terser@5.37.0)(typescript@5.7.3)(vue-tsc@2.2.0(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))(yaml@2.7.0)': dependencies: - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - '@rollup/plugin-replace': 6.0.2(rollup@4.28.1) - '@vitejs/plugin-vue': 5.2.1(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2)) - '@vitejs/plugin-vue-jsx': 4.1.1(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2)) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) + '@rollup/plugin-replace': 6.0.2(rollup@4.30.1) + '@vitejs/plugin-vue': 5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) + '@vitejs/plugin-vue-jsx': 4.1.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) autoprefixer: 10.4.20(postcss@8.4.49) - clear: 0.1.0 - consola: 3.2.3 + consola: 3.3.3 cssnano: 7.0.6(postcss@8.4.49) defu: 6.1.4 - esbuild: 0.24.0 + esbuild: 0.24.2 escape-string-regexp: 5.0.0 - estree-walker: 3.0.3 externality: 1.0.2 get-port-please: 3.1.2 h3: 1.13.0 - jiti: 2.4.1 + jiti: 2.4.2 knitwork: 1.2.0 magic-string: 0.30.17 mlly: 1.7.3 ohash: 1.1.4 - pathe: 1.1.2 + pathe: 2.0.0 perfect-debounce: 1.0.0 - pkg-types: 1.2.1 + pkg-types: 1.3.0 postcss: 8.4.49 - rollup-plugin-visualizer: 5.12.0(rollup@4.28.1) + rollup-plugin-visualizer: 5.14.0(rollup@4.30.1) std-env: 3.8.0 - strip-literal: 2.1.1 ufo: 1.5.4 unenv: 1.10.0 - unplugin: 1.16.0 - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) - vite-node: 2.1.8(@types/node@22.10.2)(terser@5.37.0) - vite-plugin-checker: 0.8.0(eslint@9.17.0(jiti@2.4.1))(optionator@0.9.4)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue-tsc@2.1.10(typescript@5.7.2)) - vue: 3.5.13(typescript@5.7.2) + unplugin: 2.1.2 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) + vite-node: 2.1.8(@types/node@22.10.5)(terser@5.37.0) + vite-plugin-checker: 0.8.0(eslint@9.17.0(jiti@2.4.2))(optionator@0.9.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue-tsc@2.2.0(typescript@5.7.3)) + vue: 3.5.13(typescript@5.7.3) vue-bundle-renderer: 2.1.1 transitivePeerDependencies: - '@biomejs/biome' @@ -5414,6 +5524,7 @@ snapshots: - magicast - meow - optionator + - rolldown - rollup - sass - sass-embedded @@ -5422,20 +5533,22 @@ snapshots: - sugarss - supports-color - terser + - tsx - typescript - vls - vti - vue-tsc + - yaml - '@nuxtjs/i18n@9.1.1(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.1))(magicast@0.3.5)(rollup@4.28.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))': + '@nuxtjs/i18n@9.1.1(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.2))(magicast@0.3.5)(rollup@4.30.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))': dependencies: '@intlify/h3': 0.6.1 '@intlify/shared': 10.0.5 - '@intlify/unplugin-vue-i18n': 6.0.1(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.1))(rollup@4.28.1)(typescript@5.7.2)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) + '@intlify/unplugin-vue-i18n': 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.2))(rollup@4.30.1)(typescript@5.7.3)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) '@intlify/utils': 0.13.0 - '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.28.1) - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - '@rollup/plugin-yaml': 4.1.2(rollup@4.28.1) + '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.30.1) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) + '@rollup/plugin-yaml': 4.1.2(rollup@4.30.1) '@vue/compiler-sfc': 3.5.13 debug: 4.4.0(supports-color@9.4.0) defu: 6.1.4 @@ -5448,10 +5561,10 @@ snapshots: scule: 1.3.0 sucrase: 3.35.0 ufo: 1.5.4 - unplugin: 1.16.0 - unplugin-vue-router: 0.10.9(rollup@4.28.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) - vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.2)) - vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2)) + unplugin: 1.16.1 + unplugin-vue-router: 0.10.9(rollup@4.30.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) + vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.3)) + vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -5462,21 +5575,21 @@ snapshots: - typescript - vue - '@nuxtjs/tailwindcss@6.12.2(magicast@0.3.5)(rollup@4.28.1)': + '@nuxtjs/tailwindcss@6.12.2(magicast@0.3.5)(rollup@4.30.1)': dependencies: - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) autoprefixer: 10.4.20(postcss@8.4.49) - consola: 3.2.3 + consola: 3.3.3 defu: 6.1.4 h3: 1.13.0 klona: 2.0.6 pathe: 1.1.2 postcss: 8.4.49 postcss-nesting: 13.0.1(postcss@8.4.49) - tailwind-config-viewer: 2.0.4(tailwindcss@3.4.16) - tailwindcss: 3.4.16 + tailwind-config-viewer: 2.0.4(tailwindcss@3.4.17) + tailwindcss: 3.4.17 ufo: 1.5.4 - unctx: 2.4.0 + unctx: 2.4.1 transitivePeerDependencies: - magicast - rollup @@ -5550,10 +5663,10 @@ snapshots: '@phc/format@1.0.0': {} - '@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.28.1)': + '@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)))(rollup@4.30.1)': dependencies: - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - pinia: 2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) + pinia: 2.3.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - magicast - rollup @@ -5575,7 +5688,7 @@ snapshots: '@redocly/config@0.17.1': {} - '@redocly/openapi-core@1.26.0(supports-color@9.4.0)': + '@redocly/openapi-core@1.27.1(supports-color@9.4.0)': dependencies: '@redocly/ajv': 8.11.2 '@redocly/config': 0.17.1 @@ -5583,7 +5696,6 @@ snapshots: https-proxy-agent: 7.0.6(supports-color@9.4.0) js-levenshtein: 1.1.6 js-yaml: 4.1.0 - lodash.isequal: 4.5.0 minimatch: 5.1.6 node-fetch: 2.7.0 pluralize: 8.0.0 @@ -5592,13 +5704,13 @@ snapshots: - encoding - supports-color - '@rollup/plugin-alias@5.1.1(rollup@4.28.1)': + '@rollup/plugin-alias@5.1.1(rollup@4.30.1)': optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/plugin-commonjs@28.0.2(rollup@4.28.1)': + '@rollup/plugin-commonjs@28.0.2(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.2(picomatch@4.0.2) @@ -5606,126 +5718,126 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/plugin-inject@5.0.5(rollup@4.28.1)': + '@rollup/plugin-inject@5.0.5(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) estree-walker: 2.0.2 magic-string: 0.30.17 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/plugin-json@6.1.0(rollup@4.28.1)': + '@rollup/plugin-json@6.1.0(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/plugin-node-resolve@15.3.1(rollup@4.28.1)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.9 + resolve: 1.22.10 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/plugin-replace@6.0.2(rollup@4.28.1)': + '@rollup/plugin-replace@6.0.2(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) magic-string: 0.30.17 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/plugin-terser@0.4.4(rollup@4.28.1)': + '@rollup/plugin-terser@0.4.4(rollup@4.30.1)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.37.0 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/plugin-yaml@4.1.2(rollup@4.28.1)': + '@rollup/plugin-yaml@4.1.2(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) js-yaml: 4.1.0 tosource: 2.0.0-alpha.3 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/pluginutils@5.1.4(rollup@4.28.1)': + '@rollup/pluginutils@5.1.4(rollup@4.30.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - '@rollup/rollup-android-arm-eabi@4.28.1': + '@rollup/rollup-android-arm-eabi@4.30.1': optional: true - '@rollup/rollup-android-arm64@4.28.1': + '@rollup/rollup-android-arm64@4.30.1': optional: true - '@rollup/rollup-darwin-arm64@4.28.1': + '@rollup/rollup-darwin-arm64@4.30.1': optional: true - '@rollup/rollup-darwin-x64@4.28.1': + '@rollup/rollup-darwin-x64@4.30.1': optional: true - '@rollup/rollup-freebsd-arm64@4.28.1': + '@rollup/rollup-freebsd-arm64@4.30.1': optional: true - '@rollup/rollup-freebsd-x64@4.28.1': + '@rollup/rollup-freebsd-x64@4.30.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.28.1': + '@rollup/rollup-linux-arm-musleabihf@4.30.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.28.1': + '@rollup/rollup-linux-arm64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.28.1': + '@rollup/rollup-linux-arm64-musl@4.30.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.28.1': + '@rollup/rollup-linux-riscv64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.28.1': + '@rollup/rollup-linux-s390x-gnu@4.30.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.28.1': + '@rollup/rollup-linux-x64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-x64-musl@4.28.1': + '@rollup/rollup-linux-x64-musl@4.30.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.28.1': + '@rollup/rollup-win32-arm64-msvc@4.30.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.28.1': + '@rollup/rollup-win32-ia32-msvc@4.30.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.28.1': + '@rollup/rollup-win32-x64-msvc@4.30.1': optional: true '@sindresorhus/merge-streams@2.3.0': {} - '@stylistic/eslint-plugin@2.12.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + '@stylistic/eslint-plugin@2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.1) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.17.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 estraverse: 5.3.0 @@ -5757,17 +5869,17 @@ snapshots: dependencies: tslib: 2.8.1 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.16)': + '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.16 + tailwindcss: 3.4.17 '@tanstack/virtual-core@3.11.2': {} - '@tanstack/vue-virtual@3.11.2(vue@3.5.13(typescript@5.7.2))': + '@tanstack/vue-virtual@3.11.2(vue@3.5.13(typescript@5.7.3))': dependencies: '@tanstack/virtual-core': 3.11.2 - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) '@trysound/sax@0.2.0': {} @@ -5775,25 +5887,29 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/doctrine@0.0.9': {} + '@types/estree@1.0.6': {} '@types/http-proxy@1.17.15': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 '@types/json-schema@7.0.15': {} '@types/ms@0.7.34': {} - '@types/node@22.10.2': + '@types/node@22.10.5': dependencies: undici-types: 6.20.0 '@types/normalize-package-data@2.4.4': {} + '@types/parse-path@7.0.3': {} + '@types/qrcode@1.5.5': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 '@types/resolve@1.20.2': {} @@ -5801,115 +5917,115 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.18.1 - '@typescript-eslint/type-utils': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.1 - eslint: 9.17.0(jiti@2.4.1) + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/type-utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.19.1 + eslint: 9.17.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.7.2) - typescript: 5.7.2 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.18.1 - '@typescript-eslint/types': 8.18.1 - '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.1 + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0(supports-color@9.4.0) - eslint: 9.17.0(jiti@2.4.1) - typescript: 5.7.2 + eslint: 9.17.0(jiti@2.4.2) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.18.1': + '@typescript-eslint/scope-manager@8.19.1': dependencies: - '@typescript-eslint/types': 8.18.1 - '@typescript-eslint/visitor-keys': 8.18.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 - '@typescript-eslint/type-utils@8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0(supports-color@9.4.0) - eslint: 9.17.0(jiti@2.4.1) - ts-api-utils: 1.4.3(typescript@5.7.2) - typescript: 5.7.2 + eslint: 9.17.0(jiti@2.4.2) + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.18.1': {} + '@typescript-eslint/types@8.19.1': {} - '@typescript-eslint/typescript-estree@8.18.1(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.18.1 - '@typescript-eslint/visitor-keys': 8.18.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0(supports-color@9.4.0) - fast-glob: 3.3.2 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.7.2) - typescript: 5.7.2 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/utils@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1)) - '@typescript-eslint/scope-manager': 8.18.1 - '@typescript-eslint/types': 8.18.1 - '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.1) - typescript: 5.7.2 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) + eslint: 9.17.0(jiti@2.4.2) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.18.1': + '@typescript-eslint/visitor-keys@8.19.1': dependencies: - '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/types': 8.19.1 eslint-visitor-keys: 4.2.0 - '@unhead/dom@1.11.14': + '@unhead/dom@1.11.15': dependencies: - '@unhead/schema': 1.11.14 - '@unhead/shared': 1.11.14 + '@unhead/schema': 1.11.15 + '@unhead/shared': 1.11.15 - '@unhead/schema@1.11.14': + '@unhead/schema@1.11.15': dependencies: hookable: 5.5.3 zhead: 2.2.4 - '@unhead/shared@1.11.14': + '@unhead/shared@1.11.15': dependencies: - '@unhead/schema': 1.11.14 + '@unhead/schema': 1.11.15 + packrup: 0.1.2 - '@unhead/ssr@1.11.14': + '@unhead/ssr@1.11.15': dependencies: - '@unhead/schema': 1.11.14 - '@unhead/shared': 1.11.14 + '@unhead/schema': 1.11.15 + '@unhead/shared': 1.11.15 - '@unhead/vue@1.11.14(vue@3.5.13(typescript@5.7.2))': + '@unhead/vue@1.11.15(vue@3.5.13(typescript@5.7.3))': dependencies: - '@unhead/schema': 1.11.14 - '@unhead/shared': 1.11.14 - defu: 6.1.4 + '@unhead/schema': 1.11.15 + '@unhead/shared': 1.11.15 hookable: 5.5.3 - unhead: 1.11.14 - vue: 3.5.13(typescript@5.7.2) + unhead: 1.11.15 + vue: 3.5.13(typescript@5.7.3) - '@vercel/nft@0.27.9(rollup@4.28.1)': + '@vercel/nft@0.27.10(rollup@4.30.1)': dependencies: '@mapbox/node-pre-gyp': 2.0.0-rc.0 - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) acorn: 8.14.0 acorn-import-attributes: 1.9.5(acorn@8.14.0) async-sema: 3.1.1 @@ -5925,20 +6041,20 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@4.1.1(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2))': + '@vitejs/plugin-vue-jsx@4.1.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) - vue: 3.5.13(typescript@5.7.2) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) + vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.1(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': dependencies: - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) - vue: 3.5.13(typescript@5.7.2) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) + vue: 3.5.13(typescript@5.7.3) '@volar/language-core@2.4.11': dependencies: @@ -5952,16 +6068,16 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.0.8 - '@vue-macros/common@1.15.1(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))': + '@vue-macros/common@1.15.1(rollup@4.30.1)(vue@3.5.13(typescript@5.7.3))': dependencies: '@babel/types': 7.26.3 - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) '@vue/compiler-sfc': 3.5.13 ast-kit: 1.3.2 local-pkg: 0.5.1 magic-string-ast: 0.6.3 optionalDependencies: - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - rollup @@ -6032,21 +6148,21 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-core@7.6.8(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2))': + '@vue/devtools-core@7.6.8(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@vue/devtools-kit': 7.6.8 - '@vue/devtools-shared': 7.6.8 + '@vue/devtools-shared': 7.7.0 mitt: 3.0.1 nanoid: 5.0.9 pathe: 1.1.2 - vite-hot-client: 0.2.4(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0)) - vue: 3.5.13(typescript@5.7.2) + vite-hot-client: 0.2.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)) + vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - vite '@vue/devtools-kit@7.6.8': dependencies: - '@vue/devtools-shared': 7.6.8 + '@vue/devtools-shared': 7.7.0 birpc: 0.2.19 hookable: 5.5.3 mitt: 3.0.1 @@ -6054,22 +6170,22 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.2 - '@vue/devtools-shared@7.6.8': + '@vue/devtools-shared@7.7.0': dependencies: rfdc: 1.4.1 - '@vue/language-core@2.1.10(typescript@5.7.2)': + '@vue/language-core@2.2.0(typescript@5.7.3)': dependencies: '@volar/language-core': 2.4.11 '@vue/compiler-dom': 3.5.13 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.13 - alien-signals: 0.2.2 + alien-signals: 0.4.14 minimatch: 9.0.5 muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.7.2 + typescript: 5.7.3 '@vue/reactivity@3.5.13': dependencies: @@ -6087,29 +6203,29 @@ snapshots: '@vue/shared': 3.5.13 csstype: 3.1.3 - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.2))': + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.3))': dependencies: '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) '@vue/shared@3.5.13': {} - '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.2))': + '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.2)) - vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.11.1': {} - '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.2))': + '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -6146,7 +6262,7 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - alien-signals@0.2.2: {} + alien-signals@0.4.14: {} ansi-colors@4.1.3: {} @@ -6171,7 +6287,7 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - apexcharts@4.2.0: + apexcharts@4.3.0: dependencies: '@svgdotjs/svg.draggable.js': 3.0.4(@svgdotjs/svg.js@3.2.4) '@svgdotjs/svg.filter.js': 3.0.8 @@ -6188,14 +6304,14 @@ snapshots: lazystream: 1.0.1 lodash: 4.17.21 normalize-path: 3.0.0 - readable-stream: 4.5.2 + readable-stream: 4.7.0 archiver@7.0.1: dependencies: archiver-utils: 5.0.2 async: 3.2.6 buffer-crc32: 1.0.0 - readable-stream: 4.5.2 + readable-stream: 4.7.0 readdir-glob: 1.1.3 tar-stream: 3.1.7 zip-stream: 6.0.1 @@ -6238,8 +6354,8 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.49): dependencies: - browserslist: 4.24.3 - caniuse-lite: 1.0.30001689 + browserslist: 4.24.4 + caniuse-lite: 1.0.30001692 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -6250,7 +6366,7 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.5.0: + bare-events@2.5.3: optional: true base64-js@1.5.1: {} @@ -6282,12 +6398,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.3: + browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001689 - electron-to-chromium: 1.5.74 + caniuse-lite: 1.0.30001692 + electron-to-chromium: 1.5.79 node-releases: 2.0.19 - update-browserslist-db: 1.1.1(browserslist@4.24.3) + update-browserslist-db: 1.1.2(browserslist@4.24.4) buffer-crc32@1.0.0: {} @@ -6306,17 +6422,17 @@ snapshots: c12@2.0.1(magicast@0.3.5): dependencies: - chokidar: 4.0.2 + chokidar: 4.0.3 confbox: 0.1.8 defu: 6.1.4 dotenv: 16.4.7 giget: 1.2.3 - jiti: 2.4.1 + jiti: 2.4.2 mlly: 1.7.3 ohash: 1.1.4 pathe: 1.1.2 perfect-debounce: 1.0.0 - pkg-types: 1.2.1 + pkg-types: 1.3.0 rc9: 2.1.2 optionalDependencies: magicast: 0.3.5 @@ -6328,6 +6444,16 @@ snapshots: mime-types: 2.1.35 ylru: 1.4.0 + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -6336,12 +6462,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.24.3 - caniuse-lite: 1.0.30001689 + browserslist: 4.24.4 + caniuse-lite: 1.0.30001692 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001689: {} + caniuse-lite@1.0.30001692: {} chalk@4.1.2: dependencies: @@ -6362,7 +6488,7 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chokidar@4.0.2: + chokidar@4.0.3: dependencies: readdirp: 4.0.2 @@ -6372,20 +6498,22 @@ snapshots: ci-info@4.1.0: {} + cidr-regex@4.1.1: + dependencies: + ip-regex: 5.0.0 + cidr-tools@11.0.2: dependencies: ip-bigint: 8.2.0 citty@0.1.6: dependencies: - consola: 3.2.3 + consola: 3.3.3 clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 - clear@0.1.0: {} - clipboardy@4.0.0: dependencies: execa: 8.0.1 @@ -6444,13 +6572,13 @@ snapshots: crc32-stream: 6.0.0 is-stream: 2.0.1 normalize-path: 3.0.0 - readable-stream: 4.5.2 + readable-stream: 4.7.0 concat-map@0.0.1: {} confbox@0.1.8: {} - consola@3.2.3: {} + consola@3.3.3: {} content-disposition@0.5.4: dependencies: @@ -6473,9 +6601,9 @@ snapshots: dependencies: is-what: 4.1.16 - core-js-compat@3.39.0: + core-js-compat@3.40.0: dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 core-util-is@1.0.3: {} @@ -6484,9 +6612,7 @@ snapshots: crc32-stream@6.0.0: dependencies: crc-32: 1.2.2 - readable-stream: 4.5.2 - - create-require@1.1.1: {} + readable-stream: 4.7.0 croner@9.0.0: {} @@ -6511,7 +6637,7 @@ snapshots: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 css-tree@2.2.1: @@ -6530,11 +6656,11 @@ snapshots: cssnano-preset-default@7.0.6(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 css-declaration-sorter: 7.2.0(postcss@8.4.49) cssnano-utils: 5.0.0(postcss@8.4.49) postcss: 8.4.49 - postcss-calc: 10.0.2(postcss@8.4.49) + postcss-calc: 10.1.0(postcss@8.4.49) postcss-colormin: 7.0.2(postcss@8.4.49) postcss-convert-values: 7.0.4(postcss@8.4.49) postcss-discard-comments: 7.0.3(postcss@8.4.49) @@ -6659,7 +6785,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -6667,17 +6793,23 @@ snapshots: dot-prop@9.0.0: dependencies: - type-fest: 4.30.2 + type-fest: 4.32.0 dotenv@16.4.7: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer@0.1.2: {} eastasianwidth@0.2.0: {} ee-first@1.1.1: {} - electron-to-chromium@1.5.74: {} + electron-to-chromium@1.5.79: {} emoji-regex@8.0.0: {} @@ -6687,7 +6819,7 @@ snapshots: encodeurl@2.0.0: {} - enhanced-resolve@5.17.1: + enhanced-resolve@5.18.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -6702,7 +6834,15 @@ snapshots: errx@0.1.0: {} - es-module-lexer@1.5.4: {} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 esbuild@0.21.5: optionalDependencies: @@ -6730,32 +6870,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.24.0: + esbuild@0.24.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.24.0 - '@esbuild/android-arm': 0.24.0 - '@esbuild/android-arm64': 0.24.0 - '@esbuild/android-x64': 0.24.0 - '@esbuild/darwin-arm64': 0.24.0 - '@esbuild/darwin-x64': 0.24.0 - '@esbuild/freebsd-arm64': 0.24.0 - '@esbuild/freebsd-x64': 0.24.0 - '@esbuild/linux-arm': 0.24.0 - '@esbuild/linux-arm64': 0.24.0 - '@esbuild/linux-ia32': 0.24.0 - '@esbuild/linux-loong64': 0.24.0 - '@esbuild/linux-mips64el': 0.24.0 - '@esbuild/linux-ppc64': 0.24.0 - '@esbuild/linux-riscv64': 0.24.0 - '@esbuild/linux-s390x': 0.24.0 - '@esbuild/linux-x64': 0.24.0 - '@esbuild/netbsd-x64': 0.24.0 - '@esbuild/openbsd-arm64': 0.24.0 - '@esbuild/openbsd-x64': 0.24.0 - '@esbuild/sunos-x64': 0.24.0 - '@esbuild/win32-arm64': 0.24.0 - '@esbuild/win32-ia32': 0.24.0 - '@esbuild/win32-x64': 0.24.0 + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 escalade@3.2.0: {} @@ -6775,40 +6916,42 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-flat-gitignore@0.2.0(eslint@9.17.0(jiti@2.4.1)): + eslint-config-flat-gitignore@0.2.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint/compat': 1.2.4(eslint@9.17.0(jiti@2.4.1)) + '@eslint/compat': 1.2.4(eslint@9.17.0(jiti@2.4.2)) find-up-simple: 1.0.0 transitivePeerDependencies: - eslint - eslint-config-prettier@9.1.0(eslint@9.17.0(jiti@2.4.1)): + eslint-config-prettier@9.1.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) - eslint-flat-config-utils@0.4.0: + eslint-flat-config-utils@1.0.0: dependencies: - pathe: 1.1.2 + pathe: 2.0.0 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.16.0 - resolve: 1.22.9 + is-core-module: 2.16.1 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - eslint-merge-processors@0.1.0(eslint@9.17.0(jiti@2.4.1)): + eslint-merge-processors@1.0.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) - eslint-plugin-import-x@4.5.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2): + eslint-plugin-import-x@4.6.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/scope-manager': 8.18.1 - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + '@types/doctrine': 0.0.9 + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0(supports-color@9.4.0) doctrine: 3.0.0 - eslint: 9.17.0(jiti@2.4.1) + enhanced-resolve: 5.18.0 + eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.8.1 is-glob: 4.0.3 @@ -6820,14 +6963,14 @@ snapshots: - supports-color - typescript - eslint-plugin-jsdoc@50.6.1(eslint@9.17.0(jiti@2.4.1)): + eslint-plugin-jsdoc@50.6.1(eslint@9.17.0(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.0(supports-color@9.4.0) escape-string-regexp: 4.0.0 - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 @@ -6837,27 +6980,27 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-regexp@2.7.0(eslint@9.17.0(jiti@2.4.1)): + eslint-plugin-regexp@2.7.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@56.0.1(eslint@9.17.0(jiti@2.4.1)): + eslint-plugin-unicorn@56.0.1(eslint@9.17.0(jiti@2.4.2)): dependencies: '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) ci-info: 4.1.0 clean-regexp: 1.0.0 - core-js-compat: 3.39.0 - eslint: 9.17.0(jiti@2.4.1) + core-js-compat: 3.40.0 + eslint: 9.17.0(jiti@2.4.2) esquery: 1.6.0 - globals: 15.13.0 + globals: 15.14.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.1.0 @@ -6868,24 +7011,24 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-vue@9.32.0(eslint@9.17.0(jiti@2.4.1)): + eslint-plugin-vue@9.32.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1)) - eslint: 9.17.0(jiti@2.4.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + eslint: 9.17.0(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.1)) + vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.1)): + eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2)): dependencies: '@vue/compiler-sfc': 3.5.13 - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-scope@7.2.2: dependencies: @@ -6901,9 +7044,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.17.0(jiti@2.4.1): + eslint@9.17.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.1 '@eslint/core': 0.9.1 @@ -6938,7 +7081,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.1 + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -7006,7 +7149,7 @@ snapshots: externality@1.0.2: dependencies: - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.0 mlly: 1.7.3 pathe: 1.1.2 ufo: 1.5.4 @@ -7015,7 +7158,7 @@ snapshots: fast-fifo@1.3.2: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -7029,7 +7172,7 @@ snapshots: fast-npm-meta@0.2.2: {} - fastq@1.17.1: + fastq@1.18.0: dependencies: reusify: 1.0.4 @@ -7105,8 +7248,26 @@ snapshots: get-caller-file@2.0.5: {} + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-port-please@3.1.2: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.0.0 + get-stream@6.0.1: {} get-stream@8.0.1: {} @@ -7118,7 +7279,7 @@ snapshots: giget@1.2.3: dependencies: citty: 0.1.6 - consola: 3.2.3 + consola: 3.3.3 defu: 6.1.4 node-fetch-native: 1.6.4 nypm: 0.3.12 @@ -7128,14 +7289,14 @@ snapshots: git-config-path@2.0.0: {} - git-up@7.0.0: + git-up@8.0.0: dependencies: is-ssh: 1.4.0 - parse-url: 8.1.0 + parse-url: 9.2.0 - git-url-parse@15.0.0: + git-url-parse@16.0.0: dependencies: - git-up: 7.0.0 + git-up: 8.0.0 glob-parent@5.1.2: dependencies: @@ -7175,17 +7336,19 @@ snapshots: globals@14.0.0: {} - globals@15.13.0: {} + globals@15.14.0: {} globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -7215,8 +7378,6 @@ snapshots: dependencies: has-symbols: 1.1.0 - hash-sum@2.0.0: {} - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -7276,7 +7437,7 @@ snapshots: ignore@5.3.2: {} - ignore@6.0.2: {} + ignore@7.0.0: {} image-meta@0.2.1: {} @@ -7285,13 +7446,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - impound@0.2.0(rollup@4.28.1): + impound@0.2.0(rollup@4.30.1): dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) mlly: 1.7.3 pathe: 1.1.2 unenv: 1.10.0 - unplugin: 1.16.0 + unplugin: 1.16.1 transitivePeerDependencies: - rollup @@ -7314,7 +7475,7 @@ snapshots: ini@4.1.1: {} - ioredis@5.4.1: + ioredis@5.4.2: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 @@ -7344,7 +7505,11 @@ snapshots: dependencies: builtin-modules: 3.3.0 - is-core-module@2.16.0: + is-cidr@5.1.0: + dependencies: + cidr-regex: 4.1.1 + + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -7356,9 +7521,12 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.0.10: + is-generator-function@1.1.0: dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -7390,6 +7558,13 @@ snapshots: dependencies: '@types/estree': 1.0.6 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + is-regexp@3.1.0: {} is-ssh@1.4.0: @@ -7424,9 +7599,9 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.6: {} + jiti@1.21.7: {} - jiti@2.4.1: {} + jiti@2.4.2: {} js-levenshtein@1.1.6: {} @@ -7523,7 +7698,7 @@ snapshots: fresh: 0.5.2 http-assert: 1.5.0 http-errors: 1.8.1 - is-generator-function: 1.0.10 + is-generator-function: 1.1.0 koa-compose: 4.1.0 koa-convert: 2.0.0 on-finished: 2.4.1 @@ -7561,13 +7736,13 @@ snapshots: '@parcel/watcher-wasm': 2.5.0 citty: 0.1.6 clipboardy: 4.0.0 - consola: 3.2.3 + consola: 3.3.3 crossws: 0.3.1 defu: 6.1.4 get-port-please: 3.1.2 h3: 1.13.0 http-shutdown: 1.2.2 - jiti: 2.4.1 + jiti: 2.4.2 mlly: 1.7.3 node-forge: 1.3.1 pathe: 1.1.2 @@ -7579,7 +7754,7 @@ snapshots: local-pkg@0.5.1: dependencies: mlly: 1.7.3 - pkg-types: 1.2.1 + pkg-types: 1.3.0 locate-path@5.0.0: dependencies: @@ -7593,8 +7768,6 @@ snapshots: lodash.isarguments@3.1.0: {} - lodash.isequal@4.5.0: {} - lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} @@ -7627,6 +7800,8 @@ snapshots: '@babel/types': 7.26.3 source-map-js: 1.2.1 + math-intrinsics@1.1.0: {} + mdn-data@2.0.28: {} mdn-data@2.0.30: {} @@ -7654,7 +7829,7 @@ snapshots: mime@3.0.0: {} - mime@4.0.4: {} + mime@4.0.6: {} mimic-fn@4.0.0: {} @@ -7708,11 +7883,9 @@ snapshots: dependencies: acorn: 8.14.0 pathe: 1.1.2 - pkg-types: 1.2.1 + pkg-types: 1.3.0 ufo: 1.5.4 - mri@1.2.0: {} - mrmime@2.0.0: {} ms@2.0.0: {} @@ -7737,27 +7910,27 @@ snapshots: negotiator@0.6.3: {} - nitropack@2.10.4(typescript@5.7.2): + nitropack@2.10.4(typescript@5.7.3): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@netlify/functions': 2.8.2 - '@rollup/plugin-alias': 5.1.1(rollup@4.28.1) - '@rollup/plugin-commonjs': 28.0.2(rollup@4.28.1) - '@rollup/plugin-inject': 5.0.5(rollup@4.28.1) - '@rollup/plugin-json': 6.1.0(rollup@4.28.1) - '@rollup/plugin-node-resolve': 15.3.1(rollup@4.28.1) - '@rollup/plugin-replace': 6.0.2(rollup@4.28.1) - '@rollup/plugin-terser': 0.4.4(rollup@4.28.1) - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/plugin-alias': 5.1.1(rollup@4.30.1) + '@rollup/plugin-commonjs': 28.0.2(rollup@4.30.1) + '@rollup/plugin-inject': 5.0.5(rollup@4.30.1) + '@rollup/plugin-json': 6.1.0(rollup@4.30.1) + '@rollup/plugin-node-resolve': 15.3.1(rollup@4.30.1) + '@rollup/plugin-replace': 6.0.2(rollup@4.30.1) + '@rollup/plugin-terser': 0.4.4(rollup@4.30.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) '@types/http-proxy': 1.17.15 - '@vercel/nft': 0.27.9(rollup@4.28.1) + '@vercel/nft': 0.27.10(rollup@4.30.1) archiver: 7.0.1 c12: 2.0.1(magicast@0.3.5) chokidar: 3.6.0 citty: 0.1.6 compatx: 0.1.8 confbox: 0.1.8 - consola: 3.2.3 + consola: 3.3.3 cookie-es: 1.2.2 croner: 9.0.0 crossws: 0.3.1 @@ -7765,7 +7938,7 @@ snapshots: defu: 6.1.4 destr: 2.0.3 dot-prop: 9.0.0 - esbuild: 0.24.0 + esbuild: 0.24.2 escape-string-regexp: 5.0.0 etag: 1.8.1 fs-extra: 11.2.0 @@ -7774,26 +7947,26 @@ snapshots: h3: 1.13.0 hookable: 5.5.3 httpxy: 0.1.5 - ioredis: 5.4.1 - jiti: 2.4.1 + ioredis: 5.4.2 + jiti: 2.4.2 klona: 2.0.6 knitwork: 1.2.0 listhen: 1.9.0 magic-string: 0.30.17 magicast: 0.3.5 - mime: 4.0.4 + mime: 4.0.6 mlly: 1.7.3 node-fetch-native: 1.6.4 ofetch: 1.4.1 ohash: 1.1.4 - openapi-typescript: 7.4.4(typescript@5.7.2) + openapi-typescript: 7.5.2(typescript@5.7.3) pathe: 1.1.2 perfect-debounce: 1.0.0 - pkg-types: 1.2.1 + pkg-types: 1.3.0 pretty-bytes: 6.1.1 radix3: 1.1.2 - rollup: 4.28.1 - rollup-plugin-visualizer: 5.12.0(rollup@4.28.1) + rollup: 4.30.1 + rollup-plugin-visualizer: 5.14.0(rollup@4.30.1) scule: 1.3.0 semver: 7.6.3 serve-placeholder: 2.0.2 @@ -7801,10 +7974,10 @@ snapshots: std-env: 3.8.0 ufo: 1.5.4 uncrypto: 0.1.3 - unctx: 2.4.0 + unctx: 2.4.1 unenv: 1.10.0 - unimport: 3.14.5(rollup@4.28.1) - unstorage: 1.13.1(ioredis@5.4.1) + unimport: 3.14.5(rollup@4.30.1) + unstorage: 1.14.4(db0@0.2.1)(ioredis@5.4.2) untyped: 1.5.2 unwasm: 0.3.9 transitivePeerDependencies: @@ -7815,19 +7988,24 @@ snapshots: - '@azure/keyvault-secrets' - '@azure/storage-blob' - '@capacitor/preferences' + - '@deno/kv' - '@electric-sql/pglite' - '@libsql/client' - '@netlify/blobs' - '@planetscale/database' - '@upstash/redis' + - '@vercel/blob' - '@vercel/kv' + - aws4fetch - better-sqlite3 - drizzle-orm - encoding - idb-keyval - mysql2 + - rolldown - supports-color - typescript + - uploadthing node-addon-api@7.1.1: {} @@ -7852,7 +8030,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.9 + resolve: 1.22.10 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -7872,53 +8050,53 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxi@3.16.0: {} + nuxi@3.19.1: {} - nuxt@3.14.1592(@parcel/watcher@2.5.0)(@types/node@22.10.2)(eslint@9.17.0(jiti@2.4.1))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.28.1)(terser@5.37.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue-tsc@2.1.10(typescript@5.7.2)): + nuxt@3.15.1(@parcel/watcher@2.5.0)(@types/node@22.10.5)(db0@0.2.1)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.4.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.30.1)(terser@5.37.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue-tsc@2.2.0(typescript@5.7.3))(yaml@2.7.0): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 1.6.4(rollup@4.28.1)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue@3.5.13(typescript@5.7.2)) - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) - '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.28.1) - '@nuxt/vite-builder': 3.14.1592(@types/node@22.10.2)(eslint@9.17.0(jiti@2.4.1))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.28.1)(terser@5.37.0)(typescript@5.7.2)(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2)) - '@unhead/dom': 1.11.14 - '@unhead/shared': 1.11.14 - '@unhead/ssr': 1.11.14 - '@unhead/vue': 1.11.14(vue@3.5.13(typescript@5.7.2)) + '@nuxt/devtools': 1.7.0(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) + '@nuxt/schema': 3.15.1 + '@nuxt/telemetry': 2.6.4(magicast@0.3.5)(rollup@4.30.1) + '@nuxt/vite-builder': 3.15.1(@types/node@22.10.5)(eslint@9.17.0(jiti@2.4.2))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.30.1)(terser@5.37.0)(typescript@5.7.3)(vue-tsc@2.2.0(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))(yaml@2.7.0) + '@unhead/dom': 1.11.15 + '@unhead/shared': 1.11.15 + '@unhead/ssr': 1.11.15 + '@unhead/vue': 1.11.15(vue@3.5.13(typescript@5.7.3)) '@vue/shared': 3.5.13 acorn: 8.14.0 c12: 2.0.1(magicast@0.3.5) - chokidar: 4.0.2 + chokidar: 4.0.3 compatx: 0.1.8 - consola: 3.2.3 + consola: 3.3.3 cookie-es: 1.2.2 defu: 6.1.4 destr: 2.0.3 devalue: 5.1.1 errx: 0.1.0 - esbuild: 0.24.0 + esbuild: 0.24.2 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 globby: 14.0.2 h3: 1.13.0 hookable: 5.5.3 - ignore: 6.0.2 - impound: 0.2.0(rollup@4.28.1) - jiti: 2.4.1 + ignore: 7.0.0 + impound: 0.2.0(rollup@4.30.1) + jiti: 2.4.2 klona: 2.0.6 knitwork: 1.2.0 magic-string: 0.30.17 mlly: 1.7.3 nanotar: 0.1.1 - nitropack: 2.10.4(typescript@5.7.2) - nuxi: 3.16.0 - nypm: 0.3.12 + nitropack: 2.10.4(typescript@5.7.3) + nuxi: 3.19.1 + nypm: 0.4.1 ofetch: 1.4.1 ohash: 1.1.4 - pathe: 1.1.2 + pathe: 2.0.0 perfect-debounce: 1.0.0 - pkg-types: 1.2.1 + pkg-types: 1.3.0 radix3: 1.1.2 scule: 1.3.0 semver: 7.6.3 @@ -7928,21 +8106,21 @@ snapshots: ufo: 1.5.4 ultrahtml: 1.5.3 uncrypto: 0.1.3 - unctx: 2.4.0 + unctx: 2.4.1 unenv: 1.10.0 - unhead: 1.11.14 - unimport: 3.14.5(rollup@4.28.1) - unplugin: 1.16.0 - unplugin-vue-router: 0.10.9(rollup@4.28.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) - unstorage: 1.13.1(ioredis@5.4.1) + unhead: 1.11.15 + unimport: 3.14.5(rollup@4.30.1) + unplugin: 2.1.2 + unplugin-vue-router: 0.10.9(rollup@4.30.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) + unstorage: 1.14.4(db0@0.2.1)(ioredis@5.4.2) untyped: 1.5.2 - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) vue-bundle-renderer: 2.1.1 vue-devtools-stub: 0.1.0 - vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2)) + vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3)) optionalDependencies: '@parcel/watcher': 2.5.0 - '@types/node': 22.10.2 + '@types/node': 22.10.5 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -7952,14 +8130,18 @@ snapshots: - '@azure/storage-blob' - '@biomejs/biome' - '@capacitor/preferences' + - '@deno/kv' - '@electric-sql/pglite' - '@libsql/client' - '@netlify/blobs' - '@planetscale/database' - '@upstash/redis' + - '@vercel/blob' - '@vercel/kv' + - aws4fetch - better-sqlite3 - bufferutil + - db0 - drizzle-orm - encoding - eslint @@ -7971,6 +8153,7 @@ snapshots: - meow - mysql2 - optionator + - rolldown - rollup - sass - sass-embedded @@ -7979,30 +8162,33 @@ snapshots: - sugarss - supports-color - terser + - tsx - typescript + - uploadthing - utf-8-validate - vite - vls - vti - vue-tsc - xml2js + - yaml nypm@0.3.12: dependencies: citty: 0.1.6 - consola: 3.2.3 + consola: 3.3.3 execa: 8.0.1 pathe: 1.1.2 - pkg-types: 1.2.1 + pkg-types: 1.3.0 ufo: 1.5.4 nypm@0.4.1: dependencies: citty: 0.1.6 - consola: 3.2.3 + consola: 3.3.3 pathe: 1.1.2 - pkg-types: 1.2.1 - tinyexec: 0.3.1 + pkg-types: 1.3.0 + tinyexec: 0.3.2 ufo: 1.5.4 object-assign@4.1.1: {} @@ -8049,14 +8235,14 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openapi-typescript@7.4.4(typescript@5.7.2): + openapi-typescript@7.5.2(typescript@5.7.3): dependencies: - '@redocly/openapi-core': 1.26.0(supports-color@9.4.0) + '@redocly/openapi-core': 1.27.1(supports-color@9.4.0) ansi-colors: 4.1.3 change-case: 5.4.4 parse-json: 8.1.0 supports-color: 9.4.0 - typescript: 5.7.2 + typescript: 5.7.3 yargs-parser: 21.1.1 transitivePeerDependencies: - encoding @@ -8090,7 +8276,9 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.7: {} + package-manager-detector@0.2.8: {} + + packrup@0.1.2: {} parent-module@1.0.1: dependencies: @@ -8103,7 +8291,7 @@ snapshots: parse-imports@2.2.1: dependencies: - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 slashes: 3.0.12 parse-json@5.2.0: @@ -8117,14 +8305,15 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 - type-fest: 4.30.2 + type-fest: 4.32.0 parse-path@7.0.0: dependencies: protocols: 2.0.1 - parse-url@8.1.0: + parse-url@9.2.0: dependencies: + '@types/parse-path': 7.0.3 parse-path: 7.0.0 parseurl@1.3.3: {} @@ -8152,6 +8341,8 @@ snapshots: pathe@1.1.2: {} + pathe@2.0.0: {} + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -8162,19 +8353,19 @@ snapshots: pify@2.3.0: {} - pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)): + pinia@2.3.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.13(typescript@5.7.2) - vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) + vue: 3.5.13(typescript@5.7.3) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) optionalDependencies: - typescript: 5.7.2 + typescript: 5.7.3 transitivePeerDependencies: - '@vue/composition-api' pirates@4.0.6: {} - pkg-types@1.2.1: + pkg-types@1.3.0: dependencies: confbox: 0.1.8 mlly: 1.7.3 @@ -8192,15 +8383,15 @@ snapshots: transitivePeerDependencies: - supports-color - postcss-calc@10.0.2(postcss@8.4.49): + postcss-calc@10.1.0(postcss@8.4.49): dependencies: postcss: 8.4.49 - postcss-selector-parser: 6.1.2 + postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 postcss-colormin@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.49 @@ -8208,7 +8399,7 @@ snapshots: postcss-convert-values@7.0.4(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 postcss: 8.4.49 postcss-value-parser: 4.2.0 @@ -8234,7 +8425,7 @@ snapshots: postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.9 + resolve: 1.22.10 postcss-js@4.0.1(postcss@8.4.49): dependencies: @@ -8244,7 +8435,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.49): dependencies: lilconfig: 3.1.3 - yaml: 2.6.1 + yaml: 2.7.0 optionalDependencies: postcss: 8.4.49 @@ -8256,7 +8447,7 @@ snapshots: postcss-merge-rules@7.0.4(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 caniuse-api: 3.0.0 cssnano-utils: 5.0.0(postcss@8.4.49) postcss: 8.4.49 @@ -8276,7 +8467,7 @@ snapshots: postcss-minify-params@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 cssnano-utils: 5.0.0(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 @@ -8330,7 +8521,7 @@ snapshots: postcss-normalize-unicode@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 postcss: 8.4.49 postcss-value-parser: 4.2.0 @@ -8352,7 +8543,7 @@ snapshots: postcss-reduce-initial@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 caniuse-api: 3.0.0 postcss: 8.4.49 @@ -8423,20 +8614,20 @@ snapshots: queue-tick@1.0.1: {} - radix-vue@1.9.11(vue@3.5.13(typescript@5.7.2)): + radix-vue@1.9.12(vue@3.5.13(typescript@5.7.3)): dependencies: - '@floating-ui/dom': 1.6.12 - '@floating-ui/vue': 1.1.5(vue@3.5.13(typescript@5.7.2)) + '@floating-ui/dom': 1.6.13 + '@floating-ui/vue': 1.1.6(vue@3.5.13(typescript@5.7.3)) '@internationalized/date': 3.6.0 '@internationalized/number': 3.6.0 - '@tanstack/vue-virtual': 3.11.2(vue@3.5.13(typescript@5.7.2)) - '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.2)) - '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.2)) + '@tanstack/vue-virtual': 3.11.2(vue@3.5.13(typescript@5.7.3)) + '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3)) aria-hidden: 1.2.4 defu: 6.1.4 fast-deep-equal: 3.1.3 nanoid: 5.0.9 - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - '@vue/composition-api' @@ -8480,7 +8671,7 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@4.5.2: + readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 @@ -8542,9 +8733,9 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.9: + resolve@1.22.10: dependencies: - is-core-module: 2.16.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -8556,38 +8747,38 @@ snapshots: dependencies: glob: 10.4.5 - rollup-plugin-visualizer@5.12.0(rollup@4.28.1): + rollup-plugin-visualizer@5.14.0(rollup@4.30.1): dependencies: open: 8.4.2 - picomatch: 2.3.1 + picomatch: 4.0.2 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.28.1 + rollup: 4.30.1 - rollup@4.28.1: + rollup@4.30.1: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.28.1 - '@rollup/rollup-android-arm64': 4.28.1 - '@rollup/rollup-darwin-arm64': 4.28.1 - '@rollup/rollup-darwin-x64': 4.28.1 - '@rollup/rollup-freebsd-arm64': 4.28.1 - '@rollup/rollup-freebsd-x64': 4.28.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 - '@rollup/rollup-linux-arm-musleabihf': 4.28.1 - '@rollup/rollup-linux-arm64-gnu': 4.28.1 - '@rollup/rollup-linux-arm64-musl': 4.28.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 - '@rollup/rollup-linux-riscv64-gnu': 4.28.1 - '@rollup/rollup-linux-s390x-gnu': 4.28.1 - '@rollup/rollup-linux-x64-gnu': 4.28.1 - '@rollup/rollup-linux-x64-musl': 4.28.1 - '@rollup/rollup-win32-arm64-msvc': 4.28.1 - '@rollup/rollup-win32-ia32-msvc': 4.28.1 - '@rollup/rollup-win32-x64-msvc': 4.28.1 + '@rollup/rollup-android-arm-eabi': 4.30.1 + '@rollup/rollup-android-arm64': 4.30.1 + '@rollup/rollup-darwin-arm64': 4.30.1 + '@rollup/rollup-darwin-x64': 4.30.1 + '@rollup/rollup-freebsd-arm64': 4.30.1 + '@rollup/rollup-freebsd-x64': 4.30.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 + '@rollup/rollup-linux-arm-musleabihf': 4.30.1 + '@rollup/rollup-linux-arm64-gnu': 4.30.1 + '@rollup/rollup-linux-arm64-musl': 4.30.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 + '@rollup/rollup-linux-riscv64-gnu': 4.30.1 + '@rollup/rollup-linux-s390x-gnu': 4.30.1 + '@rollup/rollup-linux-x64-gnu': 4.30.1 + '@rollup/rollup-linux-x64-musl': 4.30.1 + '@rollup/rollup-win32-arm64-msvc': 4.30.1 + '@rollup/rollup-win32-ia32-msvc': 4.30.1 + '@rollup/rollup-win32-x64-msvc': 4.30.1 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -8600,6 +8791,12 @@ snapshots: safe-buffer@5.2.1: {} + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 + scslre@0.3.0: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -8739,7 +8936,7 @@ snapshots: queue-tick: 1.0.1 text-decoder: 1.2.3 optionalDependencies: - bare-events: 2.5.0 + bare-events: 2.5.3 string-width@4.2.3: dependencies: @@ -8783,7 +8980,7 @@ snapshots: stylehacks@7.0.4(postcss@8.4.49): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 postcss: 8.4.49 postcss-selector-parser: 6.1.2 @@ -8834,7 +9031,7 @@ snapshots: system-architecture@0.1.0: {} - tailwind-config-viewer@2.0.4(tailwindcss@3.4.16): + tailwind-config-viewer@2.0.4(tailwindcss@3.4.17): dependencies: '@koa/router': 12.0.2 commander: 6.2.1 @@ -8844,21 +9041,21 @@ snapshots: open: 7.4.2 portfinder: 1.0.32 replace-in-file: 6.3.5 - tailwindcss: 3.4.16 + tailwindcss: 3.4.17 transitivePeerDependencies: - supports-color - tailwindcss@3.4.16: + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.6 + jiti: 1.21.7 lilconfig: 3.1.3 micromatch: 4.0.8 normalize-path: 3.0.0 @@ -8870,7 +9067,7 @@ snapshots: postcss-load-config: 4.0.2(postcss@8.4.49) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 - resolve: 1.22.9 + resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - ts-node @@ -8928,7 +9125,7 @@ snapshots: tiny-invariant@1.3.3: {} - tinyexec@0.3.1: {} + tinyexec@0.3.2: {} tinyglobby@0.2.10: dependencies: @@ -8947,9 +9144,9 @@ snapshots: tr46@0.0.3: {} - ts-api-utils@1.4.3(typescript@5.7.2): + ts-api-utils@2.0.0(typescript@5.7.3): dependencies: - typescript: 5.7.2 + typescript: 5.7.3 ts-interface-checker@0.1.13: {} @@ -8969,14 +9166,14 @@ snapshots: type-fest@0.8.1: {} - type-fest@4.30.2: {} + type-fest@4.32.0: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typescript@5.7.2: {} + typescript@5.7.3: {} ufo@1.5.4: {} @@ -8984,61 +9181,61 @@ snapshots: uncrypto@0.1.3: {} - unctx@2.4.0: + unctx@2.4.1: dependencies: acorn: 8.14.0 estree-walker: 3.0.3 magic-string: 0.30.17 - unplugin: 2.1.0 + unplugin: 2.1.2 undici-types@6.20.0: {} unenv@1.10.0: dependencies: - consola: 3.2.3 + consola: 3.3.3 defu: 6.1.4 mime: 3.0.0 node-fetch-native: 1.6.4 pathe: 1.1.2 - unhead@1.11.14: + unhead@1.11.15: dependencies: - '@unhead/dom': 1.11.14 - '@unhead/schema': 1.11.14 - '@unhead/shared': 1.11.14 + '@unhead/dom': 1.11.15 + '@unhead/schema': 1.11.15 + '@unhead/shared': 1.11.15 hookable: 5.5.3 unicorn-magic@0.1.0: {} - unimport@3.14.5(rollup@4.28.1): + unimport@3.14.5(rollup@4.30.1): dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) acorn: 8.14.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 - fast-glob: 3.3.2 + fast-glob: 3.3.3 local-pkg: 0.5.1 magic-string: 0.30.17 mlly: 1.7.3 pathe: 1.1.2 picomatch: 4.0.2 - pkg-types: 1.2.1 + pkg-types: 1.3.0 scule: 1.3.0 strip-literal: 2.1.1 - unplugin: 1.16.0 + unplugin: 1.16.1 transitivePeerDependencies: - rollup universalify@2.0.1: {} - unplugin-vue-router@0.10.9(rollup@4.28.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)): + unplugin-vue-router@0.10.9(rollup@4.30.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)): dependencies: '@babel/types': 7.26.3 - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) - '@vue-macros/common': 1.15.1(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2)) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + '@vue-macros/common': 1.15.1(rollup@4.30.1)(vue@3.5.13(typescript@5.7.3)) ast-walker-scope: 0.6.2 chokidar: 3.6.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 json5: 2.2.3 local-pkg: 0.5.1 magic-string: 0.30.17 @@ -9046,14 +9243,14 @@ snapshots: pathe: 1.1.2 scule: 1.3.0 unplugin: 2.0.0-beta.1 - yaml: 2.6.1 + yaml: 2.7.0 optionalDependencies: - vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2)) + vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - rollup - vue - unplugin@1.16.0: + unplugin@1.16.1: dependencies: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 @@ -9063,30 +9260,29 @@ snapshots: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 - unplugin@2.1.0: + unplugin@2.1.2: dependencies: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 - unstorage@1.13.1(ioredis@5.4.1): + unstorage@1.14.4(db0@0.2.1)(ioredis@5.4.2): dependencies: anymatch: 3.1.3 chokidar: 3.6.0 - citty: 0.1.6 destr: 2.0.3 h3: 1.13.0 - listhen: 1.9.0 lru-cache: 10.4.3 node-fetch-native: 1.6.4 ofetch: 1.4.1 ufo: 1.5.4 optionalDependencies: - ioredis: 5.4.1 + db0: 0.2.1 + ioredis: 5.4.2 untun@0.1.3: dependencies: citty: 0.1.6 - consola: 3.2.3 + consola: 3.3.3 pathe: 1.1.2 untyped@1.5.2: @@ -9096,7 +9292,7 @@ snapshots: '@babel/types': 7.26.3 citty: 0.1.6 defu: 6.1.4 - jiti: 2.4.1 + jiti: 2.4.2 knitwork: 1.2.0 scule: 1.3.0 transitivePeerDependencies: @@ -9108,12 +9304,12 @@ snapshots: magic-string: 0.30.17 mlly: 1.7.3 pathe: 1.1.2 - pkg-types: 1.2.1 - unplugin: 1.16.0 + pkg-types: 1.3.0 + unplugin: 1.16.1 - update-browserslist-db@1.1.1(browserslist@4.24.3): + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -9136,17 +9332,17 @@ snapshots: vary@1.1.2: {} - vite-hot-client@0.2.4(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0)): + vite-hot-client@0.2.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)): dependencies: - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) - vite-node@2.1.8(@types/node@22.10.2)(terser@5.37.0): + vite-node@2.1.8(@types/node@22.10.5)(terser@5.37.0): dependencies: cac: 6.7.14 debug: 4.4.0(supports-color@9.4.0) - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 pathe: 1.1.2 - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) + vite: 5.4.11(@types/node@22.10.5)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -9158,33 +9354,33 @@ snapshots: - supports-color - terser - vite-plugin-checker@0.8.0(eslint@9.17.0(jiti@2.4.1))(optionator@0.9.4)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))(vue-tsc@2.1.10(typescript@5.7.2)): + vite-plugin-checker@0.8.0(eslint@9.17.0(jiti@2.4.2))(optionator@0.9.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0))(vue-tsc@2.2.0(typescript@5.7.3)): dependencies: '@babel/code-frame': 7.26.2 ansi-escapes: 4.3.2 chalk: 4.1.2 chokidar: 3.6.0 commander: 8.3.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 fs-extra: 11.2.0 npm-run-path: 4.0.1 strip-ansi: 6.0.1 tiny-invariant: 1.3.3 - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 optionalDependencies: - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) optionator: 0.9.4 - typescript: 5.7.2 - vue-tsc: 2.1.10(typescript@5.7.2) + typescript: 5.7.3 + vue-tsc: 2.2.0(typescript@5.7.3) - vite-plugin-inspect@0.8.9(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.28.1))(rollup@4.28.1)(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0)): + vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.1(magicast@0.3.5)(rollup@4.30.1))(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.4(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) debug: 4.4.0(supports-color@9.4.0) error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 @@ -9192,14 +9388,14 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.0 - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) optionalDependencies: - '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.28.1) + '@nuxt/kit': 3.15.1(magicast@0.3.5)(rollup@4.30.1) transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-inspector@5.1.3(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0)): + vite-plugin-vue-inspector@5.3.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)): dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -9210,19 +9406,31 @@ snapshots: '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 magic-string: 0.30.17 - vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - vite@5.4.11(@types/node@22.10.2)(terser@5.37.0): + vite@5.4.11(@types/node@22.10.5)(terser@5.37.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 - rollup: 4.28.1 + rollup: 4.30.1 + optionalDependencies: + '@types/node': 22.10.5 + fsevents: 2.3.3 + terser: 5.37.0 + + vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0): + dependencies: + esbuild: 0.24.2 + postcss: 8.4.49 + rollup: 4.30.1 optionalDependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 fsevents: 2.3.3 + jiti: 2.4.2 terser: 5.37.0 + yaml: 2.7.0 vscode-jsonrpc@6.0.0: {} @@ -9251,16 +9459,16 @@ snapshots: dependencies: ufo: 1.5.4 - vue-demi@0.14.10(vue@3.5.13(typescript@5.7.2)): + vue-demi@0.14.10(vue@3.5.13(typescript@5.7.3)): dependencies: - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) vue-devtools-stub@0.1.0: {} - vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.1)): + vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 4.4.0(supports-color@9.4.0) - eslint: 9.17.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -9270,39 +9478,38 @@ snapshots: transitivePeerDependencies: - supports-color - vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)): + vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.3)): dependencies: '@intlify/core-base': 10.0.5 '@intlify/shared': 10.0.5 '@vue/devtools-api': 6.6.4 - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) - vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)): + vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.13(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.3) - vue-tsc@2.1.10(typescript@5.7.2): + vue-tsc@2.2.0(typescript@5.7.3): dependencies: '@volar/typescript': 2.4.11 - '@vue/language-core': 2.1.10(typescript@5.7.2) - semver: 7.6.3 - typescript: 5.7.2 + '@vue/language-core': 2.2.0(typescript@5.7.3) + typescript: 5.7.3 - vue3-apexcharts@1.8.0(apexcharts@4.2.0)(vue@3.5.13(typescript@5.7.2)): + vue3-apexcharts@1.8.0(apexcharts@4.3.0)(vue@3.5.13(typescript@5.7.3)): dependencies: - apexcharts: 4.2.0 - vue: 3.5.13(typescript@5.7.2) + apexcharts: 4.3.0 + vue: 3.5.13(typescript@5.7.3) - vue@3.5.13(typescript@5.7.2): + vue@3.5.13(typescript@5.7.3): dependencies: '@vue/compiler-dom': 3.5.13 '@vue/compiler-sfc': 3.5.13 '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.2)) + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.3)) '@vue/shared': 3.5.13 optionalDependencies: - typescript: 5.7.2 + typescript: 5.7.3 webidl-conversions@3.0.1: {} @@ -9365,9 +9572,9 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 lodash: 4.17.21 - yaml: 2.6.1 + yaml: 2.7.0 - yaml@2.6.1: {} + yaml@2.7.0: {} yargs-parser@18.1.3: dependencies: @@ -9410,6 +9617,6 @@ snapshots: dependencies: archiver-utils: 5.0.2 compress-commons: 6.0.2 - readable-stream: 4.5.2 + readable-stream: 4.7.0 zod@3.24.1: {} diff --git a/src/server/api/admin/general.get.ts b/src/server/api/admin/general.get.ts new file mode 100644 index 00000000..47037145 --- /dev/null +++ b/src/server/api/admin/general.get.ts @@ -0,0 +1,4 @@ +export default defineEventHandler(async () => { + const system = await Database.system.get(); + return system.general; +}); diff --git a/src/server/api/admin/general.post.ts b/src/server/api/admin/general.post.ts new file mode 100644 index 00000000..738c1c41 --- /dev/null +++ b/src/server/api/admin/general.post.ts @@ -0,0 +1,8 @@ +export default defineEventHandler(async (event) => { + const data = await readValidatedBody( + event, + validateZod(generalUpdateType, event) + ); + await Database.system.updateGeneral(data); + return { success: true }; +}); diff --git a/src/server/api/admin/hooks.get.ts b/src/server/api/admin/hooks.get.ts new file mode 100644 index 00000000..1ff81337 --- /dev/null +++ b/src/server/api/admin/hooks.get.ts @@ -0,0 +1,4 @@ +export default defineEventHandler(async () => { + const system = await Database.system.get(); + return system.hooks; +}); diff --git a/src/server/api/admin/hooks.post.ts b/src/server/api/admin/hooks.post.ts new file mode 100644 index 00000000..7a0702fd --- /dev/null +++ b/src/server/api/admin/hooks.post.ts @@ -0,0 +1,9 @@ +export default defineEventHandler(async (event) => { + const data = await readValidatedBody( + event, + validateZod(hooksUpdateType, event) + ); + await Database.system.updateHooks(data); + await WireGuard.saveConfig(); + return { success: true }; +}); diff --git a/src/server/api/admin/interface.get.ts b/src/server/api/admin/interface.get.ts new file mode 100644 index 00000000..0f7a3f09 --- /dev/null +++ b/src/server/api/admin/interface.get.ts @@ -0,0 +1,4 @@ +export default defineEventHandler(async () => { + const system = await Database.system.get(); + return system.interface; +}); diff --git a/src/server/api/admin/interface.post.ts b/src/server/api/admin/interface.post.ts new file mode 100644 index 00000000..92986561 --- /dev/null +++ b/src/server/api/admin/interface.post.ts @@ -0,0 +1,9 @@ +export default defineEventHandler(async (event) => { + const data = await readValidatedBody( + event, + validateZod(interfaceUpdateType, event) + ); + await Database.system.updateInterface(data); + await WireGuard.saveConfig(); + return { success: true }; +}); diff --git a/src/server/api/admin/lang.post.ts b/src/server/api/admin/lang.post.ts deleted file mode 100644 index 6048fbad..00000000 --- a/src/server/api/admin/lang.post.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default defineEventHandler(async (event) => { - const { lang } = await readValidatedBody(event, validateZod(langType)); - await Database.system.updateLang(lang); - return { success: true }; -}); diff --git a/src/server/api/admin/userconfig/cidr.post.ts b/src/server/api/admin/userconfig/cidr.post.ts new file mode 100644 index 00000000..5b845aa1 --- /dev/null +++ b/src/server/api/admin/userconfig/cidr.post.ts @@ -0,0 +1,9 @@ +export default defineEventHandler(async (event) => { + const data = await readValidatedBody( + event, + validateZod(cidrUpdateType, event) + ); + + await WireGuard.updateAddressRange(data); + return { success: true }; +}); diff --git a/src/server/api/admin/userconfig/index.get.ts b/src/server/api/admin/userconfig/index.get.ts new file mode 100644 index 00000000..b7683045 --- /dev/null +++ b/src/server/api/admin/userconfig/index.get.ts @@ -0,0 +1,4 @@ +export default defineEventHandler(async () => { + const system = await Database.system.get(); + return system.userConfig; +}); diff --git a/src/server/api/admin/userconfig/index.post.ts b/src/server/api/admin/userconfig/index.post.ts new file mode 100644 index 00000000..a6146db8 --- /dev/null +++ b/src/server/api/admin/userconfig/index.post.ts @@ -0,0 +1,9 @@ +export default defineEventHandler(async (event) => { + const data = await readValidatedBody( + event, + validateZod(userConfigUpdateType, event) + ); + await Database.system.updateUserConfig(data); + await WireGuard.saveConfig(); + return { success: true }; +}); diff --git a/src/server/api/client/[clientId]/address4.put.ts b/src/server/api/client/[clientId]/address4.put.ts deleted file mode 100644 index b646d4fe..00000000 --- a/src/server/api/client/[clientId]/address4.put.ts +++ /dev/null @@ -1,12 +0,0 @@ -export default defineEventHandler(async (event) => { - const { clientId } = await getValidatedRouterParams( - event, - validateZod(clientIdType) - ); - const { address4 } = await readValidatedBody( - event, - validateZod(address4Type) - ); - await WireGuard.updateClientAddress({ clientId, address4 }); - return { success: true }; -}); diff --git a/src/server/api/client/[clientId]/expireDate.put.ts b/src/server/api/client/[clientId]/index.post.ts similarity index 61% rename from src/server/api/client/[clientId]/expireDate.put.ts rename to src/server/api/client/[clientId]/index.post.ts index fc4e9fb3..764afdc0 100644 --- a/src/server/api/client/[clientId]/expireDate.put.ts +++ b/src/server/api/client/[clientId]/index.post.ts @@ -3,13 +3,16 @@ export default defineEventHandler(async (event) => { event, validateZod(clientIdType) ); - const { expireDate } = await readValidatedBody( + + const data = await readValidatedBody( event, - validateZod(expireDateType) + validateZod(clientUpdateType, event) ); - await WireGuard.updateClientExpireDate({ + + await WireGuard.updateClient({ clientId, - expireDate, + client: data, }); + return { success: true }; }); diff --git a/src/server/api/client/[clientId]/name.put.ts b/src/server/api/client/[clientId]/name.put.ts deleted file mode 100644 index 0cbffd3b..00000000 --- a/src/server/api/client/[clientId]/name.put.ts +++ /dev/null @@ -1,9 +0,0 @@ -export default defineEventHandler(async (event) => { - const { clientId } = await getValidatedRouterParams( - event, - validateZod(clientIdType) - ); - const { name } = await readValidatedBody(event, validateZod(nameType)); - await WireGuard.updateClientName({ clientId, name }); - return { success: true }; -}); diff --git a/src/server/api/lang.get.ts b/src/server/api/lang.get.ts deleted file mode 100644 index a42620de..00000000 --- a/src/server/api/lang.get.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default defineEventHandler(async (event) => { - setHeader(event, 'Content-Type', 'application/json'); - const system = await Database.system.get(); - return system.general.lang; -}); diff --git a/src/server/api/session.post.ts b/src/server/api/session.post.ts index 11a900ab..b4e7e9f8 100644 --- a/src/server/api/session.post.ts +++ b/src/server/api/session.post.ts @@ -40,5 +40,5 @@ export default defineEventHandler(async (event) => { SERVER_DEBUG(`New Session: ${data.id}`); - return { success: true, requiresPassword: true }; + return { success: true }; }); diff --git a/src/server/api/setup/1.post.ts b/src/server/api/setup/1.post.ts deleted file mode 100644 index 6202ec91..00000000 --- a/src/server/api/setup/1.post.ts +++ /dev/null @@ -1,14 +0,0 @@ -export default defineEventHandler(async (event) => { - const setupDone = await Database.setup.done(); - if (setupDone) { - throw createError({ - statusCode: 400, - statusMessage: 'Invalid state', - }); - } - - const { lang } = await readValidatedBody(event, validateZod(langType)); - await Database.system.updateLang(lang); - await Database.setup.set(2); - return { success: true }; -}); diff --git a/src/server/api/setup/migrate.post.ts b/src/server/api/setup/migrate.post.ts index ab5c8742..082dfad6 100644 --- a/src/server/api/setup/migrate.post.ts +++ b/src/server/api/setup/migrate.post.ts @@ -61,11 +61,10 @@ export default defineEventHandler(async (event) => { clients: {} as Database['clients'], }; - for (const [oldId, oldClient] of Object.entries(oldConfig.clients)) { + for (const oldClient of Object.values(oldConfig.clients)) { const address6 = nextIPv6(db.system, db.clients); await Database.client.create({ - id: oldId, address4: oldClient.address, enabled: oldClient.enabled, name: oldClient.name, @@ -74,7 +73,7 @@ export default defineEventHandler(async (event) => { publicKey: oldClient.publicKey, expiresAt: null, oneTimeLink: null, - allowedIPs: [...db.system.userConfig.allowedIps], + allowedIps: [...db.system.userConfig.allowedIps], serverAllowedIPs: [], persistentKeepalive: 0, address6: address6, diff --git a/src/server/middleware/session.ts b/src/server/middleware/session.ts index c926851e..92286515 100644 --- a/src/server/middleware/session.ts +++ b/src/server/middleware/session.ts @@ -8,7 +8,6 @@ export default defineEventHandler(async (event) => { !url.pathname.startsWith('/api/') || url.pathname.startsWith('/api/setup/') || url.pathname === '/api/session' || - url.pathname === '/api/lang' || url.pathname === '/api/release' ) { return; diff --git a/src/server/api/cnf/[oneTimeLink].ts b/src/server/routes/cnf/[oneTimeLink].ts similarity index 100% rename from src/server/api/cnf/[oneTimeLink].ts rename to src/server/routes/cnf/[oneTimeLink].ts diff --git a/src/server/routes/metrics/index.get.ts b/src/server/routes/metrics/index.get.ts new file mode 100644 index 00000000..6cd0d46d --- /dev/null +++ b/src/server/routes/metrics/index.get.ts @@ -0,0 +1,14 @@ +export default defineEventHandler(async (event) => { + // TODO: check password + + const system = await Database.system.get(); + if (!system.metrics.prometheus.enabled) { + throw createError({ + statusCode: 400, + message: 'Prometheus metrics are not enabled', + }); + } + + setHeader(event, 'Content-Type', 'text/plain'); + return WireGuard.getMetrics(); +}); diff --git a/src/server/routes/metrics/json.get.ts b/src/server/routes/metrics/json.get.ts new file mode 100644 index 00000000..eaef7024 --- /dev/null +++ b/src/server/routes/metrics/json.get.ts @@ -0,0 +1,13 @@ +export default defineEventHandler(async () => { + // TODO: check password + + const system = await Database.system.get(); + if (!system.metrics.prometheus.enabled) { + throw createError({ + statusCode: 400, + message: 'Prometheus metrics are not enabled', + }); + } + + return WireGuard.getMetricsJSON(); +}); diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts index c45a90c5..02427ad5 100644 --- a/src/server/utils/WireGuard.ts +++ b/src/server/utils/WireGuard.ts @@ -1,11 +1,13 @@ import fs from 'node:fs/promises'; import debug from 'debug'; -import crypto from 'node:crypto'; import QRCode from 'qrcode'; import CRC32 from 'crc-32'; +import isCidr from 'is-cidr'; -import type { NewClient } from '~~/services/database/repositories/client'; -import { isIPv4 } from 'is-ip'; +import type { + CreateClient, + UpdateClient, +} from '~~/services/database/repositories/client'; const DEBUG = debug('WireGuard'); @@ -59,7 +61,7 @@ class WireGuard { createdAt: new Date(client.createdAt), updatedAt: new Date(client.updatedAt), expiresAt: client.expiresAt, - allowedIPs: client.allowedIPs, + allowedIps: client.allowedIps, oneTimeLink: client.oneTimeLink, persistentKeepalive: null as string | null, latestHandshakeAt: null as Date | null, @@ -140,11 +142,7 @@ class WireGuard { const address6 = nextIPv6(system, clients); - // Create Client - const id = crypto.randomUUID(); - - const client: NewClient = { - id, + const client: CreateClient = { name, address4, address6, @@ -154,8 +152,8 @@ class WireGuard { oneTimeLink: null, expiresAt: null, enabled: true, - allowedIPs: [...system.userConfig.allowedIps], - serverAllowedIPs: null, + allowedIps: [...system.userConfig.allowedIps], + serverAllowedIPs: [], persistentKeepalive: system.userConfig.persistentKeepalive, mtu: system.userConfig.mtu, }; @@ -208,55 +206,48 @@ class WireGuard { await this.saveConfig(); } - async updateClientName({ + async updateClient({ clientId, - name, + client, }: { clientId: string; - name: string; + client: UpdateClient; }) { - await Database.client.updateName(clientId, name); - + // TODO: validate ipv4, v6, expire date etc + await Database.client.update(clientId, client); await this.saveConfig(); } - async updateClientAddress({ - clientId, + async updateAddressRange({ address4, + address6, }: { - clientId: string; address4: string; + address6: string; }) { - if (!isIPv4(address4)) { - throw createError({ - statusCode: 400, - statusMessage: `Invalid Address: ${address4}`, - }); + // TODO: be able to revert if error + + if (!isCidr(address4) || !isCidr(address6)) { + throw new Error('Invalid CIDR'); } - await Database.client.updateAddress4(clientId, address4); + await Database.system.updateAddressRange(address4, address6); - await this.saveConfig(); - } + const systems = await Database.system.get(); + const clients = await Database.client.findAll(); - async updateClientExpireDate({ - clientId, - expireDate, - }: { - clientId: string; - expireDate: string | null; - }) { - let updatedDate: string | null = null; + for (const _client of Object.values(clients)) { + const clients = await Database.client.findAll(); - if (expireDate) { - const date = new Date(expireDate); - date.setHours(23); - date.setMinutes(59); - date.setSeconds(59); - updatedDate = date.toISOString(); - } + const client = structuredClone(_client) as DeepWriteable; - await Database.client.updateExpirationDate(clientId, updatedDate); + client.address4 = nextIPv4(systems, clients); + client.address6 = nextIPv6(systems, clients); + + await Database.client.update(client.id, { + ...client, + }); + } await this.saveConfig(); } diff --git a/src/server/utils/release.ts b/src/server/utils/release.ts index 7d2f3e5c..29fe762c 100644 --- a/src/server/utils/release.ts +++ b/src/server/utils/release.ts @@ -30,7 +30,7 @@ async function fetchLatestRelease() { try { const response = await $fetch( 'https://api.github.com/repos/wg-easy/wg-easy/releases/latest', - { method: 'get' } + { method: 'get', timeout: 5000 } ); if (!response) { throw new Error('Empty Response'); diff --git a/src/server/utils/template.ts b/src/server/utils/template.ts new file mode 100644 index 00000000..fb5e06ac --- /dev/null +++ b/src/server/utils/template.ts @@ -0,0 +1,27 @@ +import type { DeepReadonly } from 'vue'; +import type { System } from '~~/services/database/repositories/system'; + +/** + * Replace all {{key}} in the template with the values[key] + */ +export function template(templ: string, values: Record) { + return templ.replace(/\{\{(\w+)\}\}/g, (match, key) => { + return values[key] !== undefined ? values[key] : match; + }); +} + +/** + * Available keys: + * - address4: IPv4 address range + * - address6: IPv6 address range + * - device: Network device + * - port: Port number + */ +export function iptablesTemplate(templ: string, system: DeepReadonly) { + return template(templ, { + address4: system.userConfig.address4Range, + address6: system.userConfig.address6Range, + device: system.interface.device, + port: system.interface.port.toString(), + }); +} diff --git a/src/server/utils/types.ts b/src/server/utils/types.ts index 2a398ed0..00474854 100644 --- a/src/server/utils/types.ts +++ b/src/server/utils/types.ts @@ -1,68 +1,16 @@ -import type { ZodSchema } from 'zod'; +import type { ZodSchema, ZodTypeDef } from 'zod'; import { z, ZodError } from 'zod'; import type { H3Event, EventHandlerRequest } from 'h3'; -import { LOCALES } from '#shared/locales'; -// TODO: use i18n for messages +const objectMessage = 'zod.body'; const safeStringRefine = z .string() .refine( (v) => v !== '__proto__' && v !== 'constructor' && v !== 'prototype', - { message: 'String is malformed' } + { message: 'zod.stringMalformed' } ); -const id = z.string().uuid('zod.id').pipe(safeStringRefine); - -const address4 = z.string({ message: 'zod.address4' }).pipe(safeStringRefine); - -const name = z - .string({ message: 'zod.name' }) - .min(1, 'zod.nameMin') - .pipe(safeStringRefine); - -const file = z.string({ message: 'zod.file' }).pipe(safeStringRefine); -const file_ = z.instanceof(File, { message: 'zod.file' }); - -const username = z - .string({ message: 'zod.username' }) - .min(8, 'zod.usernameMin') // i18n key - .pipe(safeStringRefine); - -const password = z - .string({ message: 'zod.password' }) - .min(12, 'zod.passwordMin') // i18n key - .regex(/[A-Z]/, 'zod.passwordUppercase') // i18n key - .regex(/[a-z]/, 'zod.passwordLowercase') // i18n key - .regex(/\d/, 'zod.passwordNumber') // i18n key - .regex(/[!@#$%^&*(),.?":{}|<>]/, 'zod.passwordSpecial') // i18n key - .pipe(safeStringRefine); - -const accept = z.boolean().refine((val) => val === true, { - message: 'zod.accept', -}); // i18n key - -const remember = z.boolean({ message: 'zod.remember' }); // i18n key - -const expireDate = z - .string({ message: 'zod.expireDate' }) // i18n key - .min(1, 'zod.expireDateMin') // i18n key - .pipe(safeStringRefine) - .nullable(); - -const oneTimeLink = z - .string({ message: 'zod.otl' }) // i18n key - .min(1, 'zod.otlMin') // i18n key - .pipe(safeStringRefine); - -const statistics = z.object( - { - enabled: z.boolean({ message: 'zod.statBool' }), // i18n key - chartType: z.number({ message: 'zod.statNumber' }), // i18n key - }, - { message: 'zod.stat' } // i18n key -); - const host = z .string({ message: 'zod.host' }) .min(1, 'zod.hostMin') @@ -73,47 +21,24 @@ const port = z .min(1, 'zod.portMin') .max(65535, 'zod.portMax'); -const objectMessage = 'zod.body'; // i18n key - -const langs = LOCALES.map((lang) => lang.code); -const lang = z.enum(['', ...langs]); - -export const langType = z.object({ - lang: lang, -}); - export const hostPortType = z.object({ host: host, port: port, }); +const id = z.string().uuid('zod.id').pipe(safeStringRefine); + export const clientIdType = z.object( { clientId: id, }, - { message: "This shouldn't happen" } -); - -export const address4Type = z.object( - { - address4: address4, - }, - { message: objectMessage } -); - -export const nameType = z.object( - { - name: name, - }, { message: objectMessage } ); -export const expireDateType = z.object( - { - expireDate: expireDate, - }, - { message: objectMessage } -); +const oneTimeLink = z + .string({ message: 'zod.otl' }) + .min(1, 'zod.otlMin') + .pipe(safeStringRefine); export const oneTimeLinkType = z.object( { @@ -122,6 +47,17 @@ export const oneTimeLinkType = z.object( { message: objectMessage } ); +const name = z + .string({ message: 'zod.name' }) + .min(1, 'zod.nameMin') + .pipe(safeStringRefine); + +const expireDate = z + .string({ message: 'zod.expireDate' }) + .min(1, 'zod.expireDateMin') + .pipe(safeStringRefine) + .nullable(); + export const createType = z.object( { name: name, @@ -130,6 +66,9 @@ export const createType = z.object( { message: objectMessage } ); +const file = z.string({ message: 'zod.file' }).pipe(safeStringRefine); +const file_ = z.instanceof(File, { message: 'zod.file' }); + export const fileType = z.object( { file: file, @@ -143,6 +82,22 @@ export const fileType_ = z.object( { message: objectMessage } ); +const username = z + .string({ message: 'zod.username' }) + .min(8, 'zod.usernameMin') + .pipe(safeStringRefine); + +const password = z + .string({ message: 'zod.password' }) + .min(12, 'zod.passwordMin') + .regex(/[A-Z]/, 'zod.passwordUppercase') + .regex(/[a-z]/, 'zod.passwordLowercase') + .regex(/\d/, 'zod.passwordNumber') + .regex(/[!@#$%^&*(),.?":{}|<>]/, 'zod.passwordSpecial') + .pipe(safeStringRefine); + +const remember = z.boolean({ message: 'zod.remember' }); + export const credentialsType = z.object( { username: username, @@ -160,6 +115,10 @@ export const passwordType = z.object( { message: objectMessage } ); +const accept = z.boolean().refine((val) => val === true, { + message: 'zod.accept', +}); + export const passwordSetupType = z.object( { username: username, @@ -169,15 +128,93 @@ export const passwordSetupType = z.object( { message: objectMessage } ); -export const statisticsType = z.object( - { - statistics: statistics, - }, - { message: objectMessage } -); +const address = z + .string({ message: 'zod.address' }) + .min(1, { message: 'zod.addressMin' }) + .pipe(safeStringRefine); + +const address4 = z + .string({ message: 'zod.address4' }) + .min(1, { message: 'zod.address4Min' }) + .pipe(safeStringRefine); + +const address6 = z + .string({ message: 'zod.address6' }) + .min(1, { message: 'zod.address6Min' }) + .pipe(safeStringRefine); + +const allowedIps = z + .array(address, { message: 'zod.allowedIps' }) + .min(1, { message: 'zod.allowedIpsMin' }); + +const mtu = z + .number({ message: 'zod.mtu' }) + .min(1280, { message: 'zod.mtuMin' }) + .max(9000, { message: 'zod.mtuMax' }); + +const persistentKeepalive = z + .number({ message: 'zod.persistentKeepalive' }) + .min(0, 'zod.persistentKeepaliveMin') + .max(65535, 'zod.persistentKeepaliveMax'); + +export const clientUpdateType = z.object({ + name: name, + enabled: z.boolean(), + expiresAt: expireDate, + address4: address4, + address6: address6, + allowedIps: allowedIps, + serverAllowedIPs: z.array(address, { message: 'zod.serverAllowedIPs' }), + mtu: mtu, + persistentKeepalive: persistentKeepalive, +}); + +export const generalUpdateType = z.object({ + sessionTimeout: z.number({ message: 'zod.sessionTimeout' }), +}); + +const device = z + .string({ message: 'zod.device' }) + .min(1, 'zod.deviceMin') + .pipe(safeStringRefine); + +export const interfaceUpdateType = z.object({ + mtu: mtu, + port: port, + device: device, +}); + +export const userConfigUpdateType = z.object({ + host: host, + port: port, + allowedIps: allowedIps, + defaultDns: z.array(address, { message: 'zod.dns' }), + mtu: mtu, + persistentKeepalive: persistentKeepalive, +}); + +const hook = z.string({ message: 'zod.hook' }).pipe(safeStringRefine); + +export const hooksUpdateType = z.object({ + PreUp: hook, + PostUp: hook, + PreDown: hook, + PostDown: hook, +}); + +export const cidrUpdateType = z.object({ + address4: address, + address6: address, +}); + +// from https://github.com/airjp73/rvf/blob/7e7c35d98015ea5ecff5affaf89f78296e84e8b9/packages/zod-form-data/src/helpers.ts#L117 +type FormDataLikeInput = { + [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>; + entries(): IterableIterator<[string, FormDataEntryValue]>; +}; export function validateZod( - schema: ZodSchema, + schema: ZodSchema | ZodSchema, event?: H3Event ) { return async (data: unknown) => { @@ -197,7 +234,7 @@ export function validateZod( let m = v.message; if (t) { - m = t(m); // m key else v.message + m = t(m); } return m; @@ -208,3 +245,7 @@ export function validateZod( } }; } + +export type DeepWriteable = { + -readonly [P in keyof T]: DeepWriteable; +}; diff --git a/src/server/utils/wgHelper.ts b/src/server/utils/wgHelper.ts index 5d69e0c9..76e3f049 100644 --- a/src/server/utils/wgHelper.ts +++ b/src/server/utils/wgHelper.ts @@ -33,10 +33,10 @@ PrivateKey = ${system.interface.privateKey} Address = ${system.interface.address4}/${cidr4Block}, ${system.interface.address6}/${cidr6Block} ListenPort = ${system.interface.port} MTU = ${system.interface.mtu} -PreUp = ${system.iptables.PreUp} -PostUp = ${system.iptables.PostUp} -PreDown = ${system.iptables.PreDown} -PostDown = ${system.iptables.PostDown}`; +PreUp = ${iptablesTemplate(system.hooks.PreUp, system)} +PostUp = ${iptablesTemplate(system.hooks.PostUp, system)} +PreDown = ${iptablesTemplate(system.hooks.PreDown, system)} +PostDown = ${iptablesTemplate(system.hooks.PostDown, system)}`; }, generateClientConfig: ( @@ -55,7 +55,7 @@ MTU = ${client.mtu} [Peer] PublicKey = ${system.interface.publicKey} PresharedKey = ${client.preSharedKey} -AllowedIPs = ${client.allowedIPs.join(', ')} +AllowedIPs = ${client.allowedIps.join(', ')} PersistentKeepalive = ${client.persistentKeepalive} Endpoint = ${system.userConfig.host}:${system.userConfig.port}`; }, @@ -112,7 +112,7 @@ Endpoint = ${system.userConfig.host}:${system.userConfig.port}`; publicKey, preSharedKey, endpoint, - allowedIPs, + allowedIps, latestHandshakeAt, transferRx, transferTx, @@ -123,7 +123,7 @@ Endpoint = ${system.userConfig.host}:${system.userConfig.port}`; publicKey, preSharedKey, endpoint: endpoint === '(none)' ? null : endpoint, - allowedIPs, + allowedIps, latestHandshakeAt: latestHandshakeAt === '0' ? null diff --git a/src/services/database/lowdb.ts b/src/services/database/lowdb.ts index 24294544..77bcd344 100644 --- a/src/services/database/lowdb.ts +++ b/src/services/database/lowdb.ts @@ -1,26 +1,33 @@ import crypto from 'node:crypto'; import debug from 'debug'; +import { JSONFilePreset } from 'lowdb/node'; +import type { Low } from 'lowdb'; +import type { DeepReadonly } from 'vue'; +import { parseCidr } from 'cidr-tools'; +import { stringifyIp } from 'ip-bigint'; import { DatabaseProvider, DatabaseError, DEFAULT_DATABASE, } from './repositories/database'; -import { JSONFilePreset } from 'lowdb/node'; - -import type { Low } from 'lowdb'; import { UserRepository, type User } from './repositories/user'; import type { Database } from './repositories/database'; import { migrationRunner } from './migrations'; import { ClientRepository, - type Client, - type NewClient, + type UpdateClient, + type CreateClient, type OneTimeLink, } from './repositories/client'; -import { SystemRepository, type Lang } from './repositories/system'; +import { + SystemRepository, + type General, + type UpdateWGConfig, + type UpdateWGInterface, + type WGHooks, +} from './repositories/system'; import { SetupRepository, type Steps } from './repositories/setup'; -import type { DeepReadonly } from 'vue'; const DEBUG = debug('LowDB'); @@ -73,13 +80,6 @@ class LowDBSystem extends SystemRepository { return makeReadonly(system); } - async updateLang(lang: Lang): Promise { - DEBUG('Update Language'); - this.#db.update((v) => { - v.system.general.lang = lang; - }); - } - async updateClientsHostPort(host: string, port: number): Promise { DEBUG('Update Clients Host and Port endpoint'); this.#db.update((v) => { @@ -87,6 +87,63 @@ class LowDBSystem extends SystemRepository { v.system.userConfig.port = port; }); } + + async updateGeneral(general: General) { + DEBUG('Update General'); + this.#db.update((v) => { + v.system.general = general; + }); + } + + async updateInterface(wgInterface: UpdateWGInterface) { + DEBUG('Update Interface'); + this.#db.update((v) => { + const oldInterface = v.system.interface; + v.system.interface = { + ...oldInterface, + ...wgInterface, + }; + }); + } + + async updateUserConfig(userConfig: UpdateWGConfig) { + DEBUG('Update User Config'); + this.#db.update((v) => { + const oldUserConfig = v.system.userConfig; + v.system.userConfig = { + ...oldUserConfig, + ...userConfig, + }; + }); + } + + async updateHooks(hooks: WGHooks) { + DEBUG('Update Hooks'); + this.#db.update((v) => { + v.system.hooks = hooks; + }); + } + + /** + * updates the address range and the interface address + */ + async updateAddressRange(address4Range: string, address6Range: string) { + DEBUG('Update Address Range'); + const cidr4 = parseCidr(address4Range); + const cidr6 = parseCidr(address6Range); + this.#db.update((v) => { + v.system.userConfig.address4Range = address4Range; + v.system.userConfig.address6Range = address6Range; + v.system.interface.address4 = stringifyIp({ + number: cidr4.start + 1n, + version: 4, + }); + v.system.interface.address6 = stringifyIp({ + number: cidr6.start + 1n, + version: 6, + }); + }); + } } class LowDBUser extends UserRepository { @@ -173,12 +230,13 @@ class LowDBClient extends ClientRepository { return makeReadonly(this.#db.data.clients[id]); } - async create(client: NewClient) { + async create(client: CreateClient) { DEBUG('Create Client'); + const id = crypto.randomUUID(); const now = new Date().toISOString(); - const newClient: Client = { ...client, createdAt: now, updatedAt: now }; + const newClient = { ...client, createdAt: now, updatedAt: now, id }; await this.#db.update((data) => { - data.clients[client.id] = newClient; + data.clients[id] = newClient; }); } @@ -200,24 +258,6 @@ class LowDBClient extends ClientRepository { }); } - async updateName(id: string, name: string) { - DEBUG('Update Client Name'); - await this.#db.update((data) => { - if (data.clients[id]) { - data.clients[id].name = name; - } - }); - } - - async updateAddress4(id: string, address4: string) { - DEBUG('Update Client Address4'); - await this.#db.update((data) => { - if (data.clients[id]) { - data.clients[id].address4 = address4; - } - }); - } - async updateExpirationDate(id: string, expirationDate: string | null) { DEBUG('Update Client Expiration Date'); await this.#db.update((data) => { @@ -249,6 +289,22 @@ class LowDBClient extends ClientRepository { } }); } + + async update(id: string, client: UpdateClient) { + DEBUG('Create Client'); + const now = new Date().toISOString(); + await this.#db.update((data) => { + const oldClient = data.clients[id]; + if (!oldClient) { + return; + } + data.clients[id] = { + ...oldClient, + ...client, + updatedAt: now, + }; + }); + } } export default class LowDB extends DatabaseProvider { diff --git a/src/services/database/migrations/1.ts b/src/services/database/migrations/1.ts index a02886fb..63df5a43 100644 --- a/src/services/database/migrations/1.ts +++ b/src/services/database/migrations/1.ts @@ -18,7 +18,6 @@ export async function run1(db: Low) { system: { general: { sessionTimeout: 3600, // 1 hour - lang: 'en', }, // Config to configure Server interface: { @@ -41,12 +40,30 @@ export async function run1(db: Low) { host: '', port: 51820, }, - // Config to configure Firewall - iptables: { + // Config to configure Firewall or general hooks + hooks: { PreUp: '', - PostUp: '', + PostUp: [ + 'iptables -t nat -A POSTROUTING -s {{address4}} -o {{device}} -j MASQUERADE;', + 'iptables -A INPUT -p udp -m udp --dport {{port}} -j ACCEPT;', + 'iptables -A FORWARD -i wg0 -j ACCEPT;', + 'iptables -A FORWARD -o wg0 -j ACCEPT;', + 'ip6tables -t nat -A POSTROUTING -s {{address6}} -o {{device}} -j MASQUERADE;', + 'ip6tables -A INPUT -p udp -m udp --dport {{port}} -j ACCEPT;', + 'ip6tables -A FORWARD -i wg0 -j ACCEPT;', + 'ip6tables -A FORWARD -o wg0 -j ACCEPT;', + ].join(' '), PreDown: '', - PostDown: '', + PostDown: [ + 'iptables -t nat -D POSTROUTING -s {{address4}} -o {{device}} -j MASQUERADE;', + 'iptables -D INPUT -p udp -m udp --dport {{port}} -j ACCEPT;', + 'iptables -D FORWARD -i wg0 -j ACCEPT;', + 'iptables -D FORWARD -o wg0 -j ACCEPT;', + 'ip6tables -t nat -D POSTROUTING -s {{address6}} -o {{device}} -j MASQUERADE;', + 'ip6tables -D INPUT -p udp -m udp --dport {{port}} -j ACCEPT;', + 'ip6tables -D FORWARD -i wg0 -j ACCEPT;', + 'ip6tables -D FORWARD -o wg0 -j ACCEPT;', + ].join(' '), }, metrics: { prometheus: { @@ -65,30 +82,6 @@ export async function run1(db: Low) { clients: {}, }; - database.system.iptables.PostUp = - `iptables -t nat -A POSTROUTING -s ${database.system.userConfig.address4Range} -o ${database.system.interface.device} -j MASQUERADE; -iptables -A INPUT -p udp -m udp --dport ${database.system.interface.port} -j ACCEPT; -iptables -A FORWARD -i wg0 -j ACCEPT; -iptables -A FORWARD -o wg0 -j ACCEPT; -ip6tables -t nat -A POSTROUTING -s ${database.system.userConfig.address6Range} -o ${database.system.interface.device} -j MASQUERADE; -ip6tables -A INPUT -p udp -m udp --dport ${database.system.interface.port} -j ACCEPT; -ip6tables -A FORWARD -i wg0 -j ACCEPT; -ip6tables -A FORWARD -o wg0 -j ACCEPT;` - .split('\n') - .join(' '); - - database.system.iptables.PostDown = - `iptables -t nat -D POSTROUTING -s ${database.system.userConfig.address4Range} -o ${database.system.interface.device} -j MASQUERADE; -iptables -D INPUT -p udp -m udp --dport ${database.system.interface.port} -j ACCEPT; -iptables -D FORWARD -i wg0 -j ACCEPT; -iptables -D FORWARD -o wg0 -j ACCEPT; -ip6tables -t nat -D POSTROUTING -s ${database.system.userConfig.address6Range} -o ${database.system.interface.device} -j MASQUERADE; -ip6tables -D INPUT -p udp -m udp --dport ${database.system.interface.port} -j ACCEPT; -ip6tables -D FORWARD -i wg0 -j ACCEPT; -ip6tables -D FORWARD -o wg0 -j ACCEPT;` - .split('\n') - .join(' '); - db.data = database; db.write(); } diff --git a/src/services/database/migrations/index.ts b/src/services/database/migrations/index.ts index 18406292..f1ef433e 100644 --- a/src/services/database/migrations/index.ts +++ b/src/services/database/migrations/index.ts @@ -4,10 +4,10 @@ import { run1 } from './1'; export type MIGRATION_FN = (db: Low) => Promise; -const MIGRATION_LIST = { +const MIGRATION_LIST = [ // Adds Initial Database Structure - '1': run1, -} satisfies Record; + { id: '1', fn: run1 }, +] satisfies { id: string; fn: MIGRATION_FN }[]; /** * Runs all migrations @@ -15,18 +15,15 @@ const MIGRATION_LIST = { */ export async function migrationRunner(db: Low) { const ranMigrations = db.data.migrations; - const runMigrations = Object.keys( - MIGRATION_LIST - ) as (keyof typeof MIGRATION_LIST)[]; - for (const migrationId of runMigrations) { - if (ranMigrations.includes(migrationId)) { + for (const migration of MIGRATION_LIST) { + if (ranMigrations.includes(migration.id)) { continue; } try { - await MIGRATION_LIST[migrationId](db); - db.data.migrations.push(migrationId); + await migration.fn(db); + db.data.migrations.push(migration.id); } catch (e) { - throw new Error(`Failed to run Migration ${migrationId}: ${e}`); + throw new Error(`Failed to run Migration ${migration.id}: ${e}`); } } await db.write(); diff --git a/src/services/database/repositories/client.ts b/src/services/database/repositories/client.ts index 0ef096fe..e6876c81 100644 --- a/src/services/database/repositories/client.ts +++ b/src/services/database/repositories/client.ts @@ -16,8 +16,8 @@ export type Client = { preSharedKey: string; /** ISO String */ expiresAt: string | null; - allowedIPs: string[]; - serverAllowedIPs: string[] | null; + allowedIps: string[]; + serverAllowedIPs: string[]; oneTimeLink: OneTimeLink | null; /** ISO String */ createdAt: string; @@ -28,7 +28,18 @@ export type Client = { mtu: number; }; -export type NewClient = Omit; +export type CreateClient = Omit; + +export type UpdateClient = Omit< + Client, + | 'createdAt' + | 'updatedAt' + | 'id' + | 'oneTimeLink' + | 'privateKey' + | 'publicKey' + | 'preSharedKey' +>; /** * Interface for client-related database operations. @@ -38,18 +49,14 @@ export abstract class ClientRepository { abstract findAll(): Promise>>; abstract findById(id: string): Promise>; - abstract create(client: NewClient): Promise; + abstract create(client: CreateClient): Promise; abstract delete(id: string): Promise; abstract toggle(id: string, enable: boolean): Promise; - abstract updateName(id: string, name: string): Promise; - abstract updateAddress4(id: string, address4: string): Promise; - abstract updateExpirationDate( - id: string, - expirationDate: string | null - ): Promise; abstract deleteOneTimeLink(id: string): Promise; abstract createOneTimeLink( id: string, oneTimeLink: OneTimeLink ): Promise; + + abstract update(id: string, client: UpdateClient): Promise; } diff --git a/src/services/database/repositories/system.ts b/src/services/database/repositories/system.ts index a28cd0cf..3cc9eba2 100644 --- a/src/services/database/repositories/system.ts +++ b/src/services/database/repositories/system.ts @@ -1,10 +1,7 @@ import type { SessionConfig } from 'h3'; import type { DeepReadonly } from 'vue'; -import type { LOCALES } from '#shared/locales'; -export type Lang = (typeof LOCALES)[number]['code']; - -export type IpTables = { +export type WGHooks = { PreUp: string; PostUp: string; PreDown: string; @@ -50,7 +47,6 @@ export type Metrics = { export type General = { sessionTimeout: number; - lang: Lang; }; export type System = { @@ -60,13 +56,20 @@ export type System = { userConfig: WGConfig; - iptables: IpTables; + hooks: WGHooks; metrics: Metrics; sessionConfig: SessionConfig; }; +export type UpdateWGInterface = Omit< + WGInterface, + 'privateKey' | 'publicKey' | 'address4' | 'address6' +>; + +export type UpdateWGConfig = Omit; + /** * Interface for system-related database operations. * This interface provides methods for retrieving system configuration data @@ -75,6 +78,13 @@ export type System = { export abstract class SystemRepository { abstract get(): Promise>; - abstract updateLang(lang: Lang): Promise; abstract updateClientsHostPort(host: string, port: number): Promise; + + abstract updateGeneral(general: General): Promise; + + abstract updateInterface(wgInterface: UpdateWGInterface): Promise; + + abstract updateUserConfig(userConfig: UpdateWGConfig): Promise; + + abstract updateHooks(hooks: WGHooks): Promise; } diff --git a/src/shared/locales.ts b/src/shared/locales.ts deleted file mode 100644 index 7f8780ec..00000000 --- a/src/shared/locales.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const LOCALES = [ - { code: 'en', name: 'English' }, - { code: 'ua', name: 'Українська' }, - { code: 'ru', name: 'Русский' }, - { code: 'tr', name: 'Türkçe' }, - { code: 'no', name: 'Norsk' }, - { code: 'pl', name: 'Polski' }, - { code: 'fr', name: 'Français' }, - { code: 'de', name: 'Deutsch' }, - { code: 'ca', name: 'Català' }, - { code: 'es', name: 'Español' }, - { code: 'ko', name: '한국어' }, - { code: 'vi', name: 'Tiếng Việt' }, - { code: 'nl', name: 'Nederlands' }, - { code: 'is', name: 'Íslenska' }, - { code: 'pt', name: 'Português' }, - { code: 'zh-chs', name: '简体中文' }, - { code: 'zh-cht', name: '繁體中文' }, - { code: 'it', name: 'Italiano' }, - { code: 'th', name: 'ไทย' }, - { code: 'hi', name: 'हिन्दी' }, -];