@@ -236,14 +317,14 @@
{{ $t("common.noResults") }}
0,
);
-const libraryGames = ref<
- Array<
- LibraryStateGame & {
- status: "online" | "offline";
- hasNotifications?: boolean;
- notifications: {
- noVersions?: boolean;
- toImport?: boolean;
- offline?: boolean;
- };
- }
- >
->(
- libraryState.games.map((e) => {
+// Potentially make a server-side transformation to make the client lighter
+function clientSideTransformation(
+ values: Array,
+ expand: V,
+ type: K,
+): Array<
+ T[V] & {
+ status: "online" | "offline";
+ type: K;
+ hasNotifications?: boolean;
+ notifications: {
+ noVersions?: boolean;
+ toImport?: boolean;
+ offline?: boolean;
+ };
+ urlPrefix: string,
+ }
+> {
+ return values.map((e) => {
if (e.status == "offline") {
return {
- ...e.game,
+ ...e[expand],
+ type: type,
status: "offline" as const,
hasNotifications: true,
notifications: {
offline: true,
},
+ urlPrefix: type[0],
};
}
@@ -340,21 +427,28 @@ const libraryGames = ref<
const toImport = e.status.unimportedVersions.length > 0;
return {
- ...e.game,
+ ...e[expand],
+ type: type,
notifications: {
noVersions,
toImport,
},
hasNotifications: noVersions || toImport,
status: "online" as const,
+ urlPrefix: type[0],
};
- }),
+ });
+}
+
+const libraryGames = ref(
+ clientSideTransformation(libraryState.games, "value", "game"),
+);
+const libraryRedists = ref(
+ clientSideTransformation(libraryState.redists, "value", "redist"),
);
-const filteredLibraryGames = computed(() =>
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore excessively deep ts
- libraryGames.value.filter((e) => {
+const filteredLibrary = computed(() =>
+ [...libraryGames.value, ...libraryRedists.value].filter((e) => {
if (!searchQuery.value) return true;
const searchQueryLower = searchQuery.value.toLowerCase();
if (e.mName.toLowerCase().includes(searchQueryLower)) return true;
@@ -374,6 +468,16 @@ async function deleteGame(id: string) {
toImport.value = true;
}
+async function deleteRedist(id: string) {
+ await $dropFetch(`/api/v1/admin/redist/${id}`, {
+ method: "DELETE",
+ failTitle: "Failed to delete game",
+ });
+ const index = libraryRedists.value.findIndex((e) => e.id === id);
+ libraryRedists.value.splice(index, 1);
+ toImport.value = true;
+}
+
const gameFeatureLoading = ref<{ [key: string]: boolean }>({});
async function featureGame(id: string) {
const gameIndex = libraryGames.value.findIndex((e) => e.id === id);
diff --git a/app/pages/admin/library/r/[id]/import.vue b/app/pages/admin/library/r/[id]/import.vue
new file mode 100644
index 0000000..22b7d6b
--- /dev/null
+++ b/app/pages/admin/library/r/[id]/import.vue
@@ -0,0 +1,478 @@
+
+
+
updateCurrentlySelectedVersion(value)"
+ >
+ {{
+ $t("library.admin.import.version.version")
+ }}
+
+
+ {{
+ versions[currentlySelectedVersion]
+ }}
+ {{
+ $t("library.admin.import.selectDir")
+ }}
+
+
+
+
+
+
+
+
+
+ {{ version }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Version name
+
+ Shown to users when selecting what version to install.
+
+
+
+
+
+
+
+
+
{{ $t("library.admin.import.version.setupCmd") }}
+
+ {{ $t("library.admin.import.version.setupDesc") }}
+
+
+
+
+
+
{{ $t("library.admin.import.version.launchCmd") }}
+
+ {{ $t("library.admin.import.version.launchDesc") }}
+
+
+
+
+
+
+
versionSettings.launches!.splice(launchIdx, 1)"
+ >
+
+
+
+
+
+ No launch commands
+
+
+
+ versionSettings.launches!.push({
+ name: '',
+ description: '',
+ launchCommand: '',
+ launchArgs: '',
+ })
+ "
+ >
+ Add new
+
+
+
+
+
+
Uninstall command
+
+ Executable to be run on uninstalling a game. Useful for installer-only
+ games.
+
+
+
+
+
+ {{ $t("library.admin.import.version.platform") }}
+
+
+
+
+ {{ $t("library.admin.import.version.updateMode") }}
+
+
+ {{ $t("library.admin.import.version.updateModeDesc") }}
+
+
+ (versionSettings.delta = v)"
+ >
+
+
+
+
+
+
+
+ {{ $t("library.admin.import.version.advancedOptions") }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("library.admin.import.version.noAdv") }}
+
+
+
+
+
+ {{ $t("library.admin.import.import") }}
+
+
+
+
+
+
+
+
+ {{ importError }}
+
+
+
+
+
+
+ {{ $t("library.admin.import.version.loadingVersion") }}
+
+
+
+
+
+
+
+
+
diff --git a/app/pages/admin/library/r/[id]/index.vue b/app/pages/admin/library/r/[id]/index.vue
new file mode 100644
index 0000000..9d3a87b
--- /dev/null
+++ b/app/pages/admin/library/r/[id]/index.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+ (currentMode = value as RedistEditorMode)"
+ >
+
+ {{ value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/library/sources/index.vue b/app/pages/admin/library/sources/index.vue
similarity index 94%
rename from pages/admin/library/sources/index.vue
rename to app/pages/admin/library/sources/index.vue
index 6523158..34f2848 100644
--- a/pages/admin/library/sources/index.vue
+++ b/app/pages/admin/library/sources/index.vue
@@ -111,8 +111,8 @@
>{{ metadata.title }}
{{
source
- }}
+ }}
+
{
- actionSourceOpen.value = false;
- sourceConfig.value = {};
- sourceName.value = "";
- })
- .catch((e) => {
- if (e instanceof FetchError) {
- modalError.value = e.statusMessage ?? e.message;
- } else {
- modalError.value = e as string;
- }
- })
+ .then(
+ () => {
+ actionSourceOpen.value = false;
+ sourceConfig.value = {};
+ sourceName.value = "";
+ },
+ (e) => {
+ if (e instanceof FetchError) {
+ console.log(e.data.message);
+ modalError.value = e.message;
+ } else {
+ modalError.value = e as string;
+ }
+ },
+ )
.finally(() => {
modalLoading.value = false;
});
@@ -362,8 +365,8 @@ async function deleteSource(index: number) {
{
title: t("errors.library.source.delete.title"),
description: t("errors.library.source.delete.desc", [
- // @ts-expect-error attempt to display statusMessage on error
- e?.statusMessage ?? t("errors.unknown"),
+ // @ts-expect-error attempt to display message on error
+ e?.message ?? t("errors.unknown"),
]),
},
(_, c) => c(),
diff --git a/pages/admin/metadata/companies/[id]/index.vue b/app/pages/admin/metadata/companies/[id]/index.vue
similarity index 99%
rename from pages/admin/metadata/companies/[id]/index.vue
rename to app/pages/admin/metadata/companies/[id]/index.vue
index db7e414..67580ba 100644
--- a/pages/admin/metadata/companies/[id]/index.vue
+++ b/app/pages/admin/metadata/companies/[id]/index.vue
@@ -238,7 +238,7 @@
import { MagnifyingGlassIcon } from "@heroicons/vue/24/outline";
import { ArrowUpTrayIcon, PencilIcon, PlusIcon } from "@heroicons/vue/24/solid";
import type { SerializeObject } from "nitropack";
-import type { GameModel } from "~/prisma/client/models";
+import type { GameModel } from "~~/prisma/client/models";
definePageMeta({
layout: "admin",
diff --git a/pages/admin/metadata/companies/index.vue b/app/pages/admin/metadata/companies/index.vue
similarity index 98%
rename from pages/admin/metadata/companies/index.vue
rename to app/pages/admin/metadata/companies/index.vue
index 44ac5dd..2233c48 100644
--- a/pages/admin/metadata/companies/index.vue
+++ b/app/pages/admin/metadata/companies/index.vue
@@ -106,7 +106,7 @@
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a085607..6e87564 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,9 +4,6 @@ settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
-overrides:
- droplet: link:../../.local/share/pnpm/global/5/node_modules/@drop-oss/droplet
-
importers:
.:
@@ -19,40 +16,37 @@ importers:
version: 3.2.0
'@headlessui/vue':
specifier: ^1.7.23
- version: 1.7.23(vue@3.5.22(typescript@5.8.3))
+ version: 1.7.23(vue@3.5.21(typescript@5.9.2))
'@heroicons/vue':
specifier: ^2.1.5
- version: 2.2.0(vue@3.5.22(typescript@5.8.3))
- '@lobomfz/prismark':
- specifier: 0.0.3
- version: 0.0.3
+ version: 2.2.0(vue@3.5.21(typescript@5.9.2))
'@nuxt/fonts':
specifier: ^0.11.0
- version: 0.11.4(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
+ version: 0.11.4(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
'@nuxt/image':
specifier: ^1.10.0
- version: 1.10.0(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)
+ version: 1.11.0(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)
'@nuxtjs/i18n':
specifier: ^9.5.5
- version: 9.5.6(@vue/compiler-dom@3.5.22)(eslint@9.31.0(jiti@2.5.1))(magicast@0.3.5)(rollup@4.46.2)(vue@3.5.22(typescript@5.8.3))
+ version: 9.5.6(@vue/compiler-dom@3.5.21)(eslint@9.36.0(jiti@2.5.1))(magicast@0.3.5)(rollup@4.52.0)(vue@3.5.21(typescript@5.9.2))
'@prisma/client':
specifier: ^6.11.1
- version: 6.12.0(prisma@6.12.0(typescript@5.8.3))(typescript@5.8.3)
+ version: 6.16.2(prisma@6.16.2(magicast@0.3.5)(typescript@5.9.2))(typescript@5.9.2)
'@tailwindcss/vite':
specifier: ^4.0.6
- version: 4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
+ version: 4.1.13(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
'@vueuse/nuxt':
specifier: 13.6.0
- version: 13.6.0(magicast@0.3.5)(nuxt@3.17.7(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.16.5)(@vue/compiler-sfc@3.5.22)(db0@0.3.2)(eslint@9.31.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@3.0.4(typescript@5.8.3))(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))
+ version: 13.6.0(magicast@0.3.5)(nuxt@4.1.2(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.0)(sass@1.93.0)(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.0.7(typescript@5.9.2))(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))
argon2:
specifier: ^0.43.0
version: 0.43.1
arktype:
specifier: ^2.1.10
- version: 2.1.20
+ version: 2.1.22
axios:
specifier: ^1.12.0
- version: 1.12.0
+ version: 1.12.2
bcryptjs:
specifier: ^3.0.2
version: 3.0.2
@@ -71,30 +65,33 @@ importers:
jdenticon:
specifier: ^3.3.0
version: 3.3.0
+ jsdom:
+ specifier: ^27.0.0
+ version: 27.0.0(postcss@8.5.6)
luxon:
specifier: ^3.6.1
- version: 3.7.1
+ version: 3.7.2
micromark:
specifier: ^4.0.1
version: 4.0.2
normalize-url:
specifier: ^8.0.2
- version: 8.0.2
+ version: 8.1.0
nuxt:
- specifier: ^3.17.4
- version: 3.17.7(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.16.5)(@vue/compiler-sfc@3.5.22)(db0@0.3.2)(eslint@9.31.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@3.0.4(typescript@5.8.3))(yaml@2.8.0)
+ specifier: ^4.1.2
+ version: 4.1.2(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.0)(sass@1.93.0)(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.0.7(typescript@5.9.2))(yaml@2.8.1)
nuxt-security:
specifier: 2.2.0
- version: 2.2.0(magicast@0.3.5)(rollup@4.46.2)
+ version: 2.2.0(magicast@0.3.5)(rollup@4.52.0)
pino:
specifier: ^9.7.0
- version: 9.7.0
+ version: 9.10.0
pino-pretty:
specifier: ^13.0.0
- version: 13.0.0
+ version: 13.1.1
prisma:
specifier: ^6.11.1
- version: 6.12.0(typescript@5.8.3)
+ version: 6.16.2(magicast@0.3.5)(typescript@5.9.2)
sanitize-filename:
specifier: ^1.6.3
version: 1.6.3
@@ -106,53 +103,53 @@ importers:
version: 2.0.0
turndown:
specifier: ^7.2.0
- version: 7.2.0
+ version: 7.2.1
unstorage:
specifier: ^1.15.0
- version: 1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)
+ version: 1.17.1(db0@0.3.2)(ioredis@5.7.0)
vite-plugin-static-copy:
specifier: ^3.1.2
- version: 3.1.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
+ version: 3.1.2(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
vue:
specifier: latest
- version: 3.5.22(typescript@5.8.3)
+ version: 3.5.21(typescript@5.9.2)
vue-router:
specifier: latest
- version: 4.5.1(vue@3.5.22(typescript@5.8.3))
+ version: 4.5.1(vue@3.5.21(typescript@5.9.2))
vue3-carousel:
specifier: ^0.16.0
- version: 0.16.0(vue@3.5.22(typescript@5.8.3))
+ version: 0.16.0(vue@3.5.21(typescript@5.9.2))
vue3-carousel-nuxt:
specifier: ^1.1.5
- version: 1.1.6(magicast@0.3.5)(vue@3.5.22(typescript@5.8.3))
+ version: 1.1.6(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2))
vuedraggable:
specifier: ^4.1.0
- version: 4.1.0(vue@3.5.22(typescript@5.8.3))
+ version: 4.1.0(vue@3.5.21(typescript@5.9.2))
devDependencies:
'@intlify/eslint-plugin-vue-i18n':
specifier: ^4.0.1
- version: 4.0.1(eslint@9.31.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0)(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.5.1)))(yaml-eslint-parser@1.3.0)
+ version: 4.1.0(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0)(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1)))(yaml-eslint-parser@1.3.0)
'@nuxt/eslint':
specifier: ^1.3.0
- version: 1.7.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(@vue/compiler-sfc@3.5.22)(eslint@9.31.0(jiti@2.5.1))(magicast@0.3.5)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
+ version: 1.9.0(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
'@tailwindcss/forms':
specifier: ^0.5.9
- version: 0.5.10(tailwindcss@4.1.11)
+ version: 0.5.10(tailwindcss@4.1.13)
'@tailwindcss/typography':
specifier: ^0.5.15
- version: 0.5.16(tailwindcss@4.1.11)
- '@types/bcryptjs':
- specifier: ^3.0.0
- version: 3.0.0
+ version: 0.5.18(tailwindcss@4.1.13)
+ '@types/jsdom':
+ specifier: ^21.1.7
+ version: 21.1.7
'@types/luxon':
specifier: ^3.6.2
- version: 3.6.2
+ version: 3.7.1
'@types/node':
specifier: ^22.13.16
- version: 22.16.5
+ version: 22.18.6
'@types/semver':
specifier: ^7.7.0
- version: 7.7.0
+ version: 7.7.1
'@types/turndown':
specifier: ^5.0.5
version: 5.0.5
@@ -161,16 +158,16 @@ importers:
version: 10.4.21(postcss@8.5.6)
eslint:
specifier: ^9.24.0
- version: 9.31.0(jiti@2.5.1)
+ version: 9.36.0(jiti@2.5.1)
eslint-config-prettier:
specifier: ^10.1.1
- version: 10.1.8(eslint@9.31.0(jiti@2.5.1))
+ version: 10.1.8(eslint@9.36.0(jiti@2.5.1))
h3:
specifier: ^1.15.3
- version: 1.15.3
+ version: 1.15.4
nitropack:
specifier: ^2.11.12
- version: 2.12.4(@netlify/blobs@9.1.2)
+ version: 2.12.6
ofetch:
specifier: ^1.4.1
version: 1.4.1
@@ -179,50 +176,57 @@ importers:
version: 3.6.2
sass:
specifier: ^1.79.4
- version: 1.89.2
+ version: 1.93.0
tailwindcss:
specifier: ^4.0.0
- version: 4.1.11
+ version: 4.1.13
typescript:
specifier: ^5.8.3
- version: 5.8.3
+ version: 5.9.2
vue-tsc:
specifier: ^3.0.1
- version: 3.0.4(typescript@5.8.3)
+ version: 3.0.7(typescript@5.9.2)
packages:
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
-
'@antfu/install-pkg@1.1.0':
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
- '@apidevtools/json-schema-ref-parser@14.1.1':
- resolution: {integrity: sha512-uGF1YGOzzD50L7HLNWclXmsEhQflw8/zZHIz0/AzkJrKL5r9PceUipZxR/cp/8veTk4TVfdDJLyIwXLjaP5ePg==}
+ '@apidevtools/json-schema-ref-parser@14.2.1':
+ resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==}
engines: {node: '>= 20'}
+ peerDependencies:
+ '@types/json-schema': ^7.0.15
- '@ark/schema@0.46.0':
- resolution: {integrity: sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ==}
+ '@ark/schema@0.49.0':
+ resolution: {integrity: sha512-GphZBLpW72iS0v4YkeUtV3YIno35Gimd7+ezbPO9GwEi9kzdUrPVjvf6aXSBAfHikaFc/9pqZOpv3pOXnC71tw==}
- '@ark/util@0.46.0':
- resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==}
+ '@ark/util@0.49.0':
+ resolution: {integrity: sha512-/BtnX7oCjNkxi2vi6y1399b+9xd1jnCrDYhZ61f0a+3X8x8DxlK52VgEEzyuC2UQMPACIfYrmHkhD3lGt2GaMA==}
+
+ '@asamuzakjp/css-color@4.0.4':
+ resolution: {integrity: sha512-cKjSKvWGmAziQWbCouOsFwb14mp1betm8Y7Fn+yglDMUUu3r9DCbJ9iJbeFDenLMqFbIMC0pQP8K+B8LAxX3OQ==}
+
+ '@asamuzakjp/dom-selector@6.5.5':
+ resolution: {integrity: sha512-kI2MX9pmImjxWT8nxDZY+MuN6r1jJGe7WxizEbsAEPB/zxfW5wYLIiPG1v3UKgEOOP8EsDkp0ZL99oRFAdPM8g==}
+
+ '@asamuzakjp/nwsapi@2.3.9':
+ resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.28.0':
- resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
+ '@babel/compat-data@7.28.4':
+ resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.28.0':
- resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
+ '@babel/core@7.28.4':
+ resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.28.0':
- resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
+ '@babel/generator@7.28.3':
+ resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.27.3':
@@ -233,8 +237,8 @@ packages:
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-create-class-features-plugin@7.27.1':
- resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==}
+ '@babel/helper-create-class-features-plugin@7.28.3':
+ resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -251,8 +255,8 @@ packages:
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.27.3':
- resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
+ '@babel/helper-module-transforms@7.28.3':
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -287,15 +291,10 @@ packages:
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.28.2':
- resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==}
+ '@babel/helpers@7.28.4':
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.0':
- resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
'@babel/parser@7.28.4':
resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
engines: {node: '>=6.0.0'}
@@ -319,24 +318,16 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/runtime@7.28.2':
- resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==}
+ '@babel/runtime@7.28.4':
+ resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
engines: {node: '>=6.9.0'}
'@babel/template@7.27.2':
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.28.0':
- resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.28.0':
- resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.28.2':
- resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
+ '@babel/traverse@7.28.4':
+ resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
engines: {node: '>=6.9.0'}
'@babel/types@7.28.4':
@@ -359,15 +350,38 @@ packages:
resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==}
engines: {node: '>=18.0.0'}
- '@colors/colors@1.6.0':
- resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
- engines: {node: '>=0.1.90'}
+ '@csstools/color-helpers@5.1.0':
+ resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
+ engines: {node: '>=18'}
- '@dabh/diagnostics@2.0.3':
- resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
+ '@csstools/css-calc@2.1.4':
+ resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- '@dependents/detective-less@5.0.1':
- resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==}
+ '@csstools/css-color-parser@3.1.0':
+ resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-syntax-patches-for-csstree@1.0.14':
+ resolution: {integrity: sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ postcss: ^8.4
+
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
'@discordapp/twemoji@16.0.1':
@@ -439,324 +453,183 @@ packages:
'@emnapi/core@1.4.5':
resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
+ '@emnapi/core@1.6.0':
+ resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==}
+
'@emnapi/runtime@1.4.5':
resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
+ '@emnapi/runtime@1.6.0':
+ resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==}
+
'@emnapi/wasi-threads@1.0.4':
resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
- '@es-joy/jsdoccomment@0.52.0':
- resolution: {integrity: sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==}
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
+ '@es-joy/jsdoccomment@0.56.0':
+ resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==}
engines: {node: '>=20.11.0'}
- '@esbuild/aix-ppc64@0.25.5':
- resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
+ '@esbuild/aix-ppc64@0.25.10':
+ resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.25.8':
- resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.25.5':
- resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
+ '@esbuild/android-arm64@0.25.10':
+ resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.25.8':
- resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.25.5':
- resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
+ '@esbuild/android-arm@0.25.10':
+ resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.25.8':
- resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.25.5':
- resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
+ '@esbuild/android-x64@0.25.10':
+ resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.25.8':
- resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.25.5':
- resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
+ '@esbuild/darwin-arm64@0.25.10':
+ resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.25.8':
- resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.25.5':
- resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
+ '@esbuild/darwin-x64@0.25.10':
+ resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.8':
- resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.25.5':
- resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
+ '@esbuild/freebsd-arm64@0.25.10':
+ resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.25.8':
- resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.25.5':
- resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
+ '@esbuild/freebsd-x64@0.25.10':
+ resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.8':
- resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.25.5':
- resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
+ '@esbuild/linux-arm64@0.25.10':
+ resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.25.8':
- resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.25.5':
- resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
+ '@esbuild/linux-arm@0.25.10':
+ resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.25.8':
- resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.25.5':
- resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
+ '@esbuild/linux-ia32@0.25.10':
+ resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.25.8':
- resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.25.5':
- resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
+ '@esbuild/linux-loong64@0.25.10':
+ resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.25.8':
- resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.25.5':
- resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
+ '@esbuild/linux-mips64el@0.25.10':
+ resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.25.8':
- resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.25.5':
- resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
+ '@esbuild/linux-ppc64@0.25.10':
+ resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.25.8':
- resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.25.5':
- resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
+ '@esbuild/linux-riscv64@0.25.10':
+ resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.8':
- resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.25.5':
- resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
+ '@esbuild/linux-s390x@0.25.10':
+ resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.25.8':
- resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.25.5':
- resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
+ '@esbuild/linux-x64@0.25.10':
+ resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.25.8':
- resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.25.5':
- resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
+ '@esbuild/netbsd-arm64@0.25.10':
+ resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-arm64@0.25.8':
- resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.25.5':
- resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
+ '@esbuild/netbsd-x64@0.25.10':
+ resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.8':
- resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-arm64@0.25.5':
- resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
+ '@esbuild/openbsd-arm64@0.25.10':
+ resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-arm64@0.25.8':
- resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.25.5':
- resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
+ '@esbuild/openbsd-x64@0.25.10':
+ resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.8':
- resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openharmony-arm64@0.25.8':
- resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==}
+ '@esbuild/openharmony-arm64@0.25.10':
+ resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.25.5':
- resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
+ '@esbuild/sunos-x64@0.25.10':
+ resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.25.8':
- resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.25.5':
- resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
+ '@esbuild/win32-arm64@0.25.10':
+ resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.25.8':
- resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.25.5':
- resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
+ '@esbuild/win32-ia32@0.25.10':
+ resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.25.8':
- resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.25.5':
- resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
+ '@esbuild/win32-x64@0.25.10':
+ resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.25.8':
- resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
- '@eslint-community/eslint-utils@4.7.0':
- resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
+ '@eslint-community/eslint-utils@4.9.0':
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -765,8 +638,8 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/compat@1.3.1':
- resolution: {integrity: sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==}
+ '@eslint/compat@1.3.2':
+ resolution: {integrity: sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.40 || 9
@@ -778,47 +651,40 @@ packages:
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.3.0':
- resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
+ '@eslint/config-helpers@0.3.1':
+ resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-inspector@1.1.0':
- resolution: {integrity: sha512-DQGzRGV6jKujyxxCPlhwwyzq3HTW/NbFX9A4npPjW0+0A3KemxYJWZdwqJn4rauPsRUpJ8yuh5uOyMCChrnFsg==}
+ '@eslint/config-inspector@1.3.0':
+ resolution: {integrity: sha512-t+5Pra/8VX9Ue8V2p6skCeEMw9vm6HjwNF/n7l5nx78f3lUqLjzSTdMisFeo9AeYOj1hwEBiFYYGZ/Xn88cmHw==}
hasBin: true
peerDependencies:
eslint: ^8.50.0 || ^9.0.0
- '@eslint/core@0.15.1':
- resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
+ '@eslint/core@0.15.2':
+ resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.31.0':
- resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/js@9.32.0':
- resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==}
+ '@eslint/js@9.36.0':
+ resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.3.4':
- resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==}
+ '@eslint/plugin-kit@0.3.5':
+ resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fastify/accept-negotiator@1.1.0':
resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==}
engines: {node: '>=14'}
- '@fastify/busboy@3.1.1':
- resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==}
-
'@headlessui/vue@1.7.23':
resolution: {integrity: sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==}
engines: {node: '>=10'}
@@ -834,18 +700,14 @@ packages:
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
- '@humanfs/node@0.16.6':
- resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
- '@humanwhocodes/retry@0.3.1':
- resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
- engines: {node: '>=18.18'}
-
'@humanwhocodes/retry@0.4.3':
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
@@ -866,16 +728,16 @@ packages:
resolution: {integrity: sha512-FoHslNWSoHjdUBLy35bpm9PV/0LVI/DSv9L6Km6J2ad8r/mm0VaGg06C40FqlE8u2ADcGUM60lyoU7Myo4WNZQ==}
engines: {node: '>= 16'}
- '@intlify/core-base@11.1.11':
- resolution: {integrity: sha512-1Z0N8jTfkcD2Luq9HNZt+GmjpFe4/4PpZF3AOzoO1u5PTtSuXZcfhwBatywbfE2ieB/B5QHIoOFmCXY2jqVKEQ==}
+ '@intlify/core-base@11.1.12':
+ resolution: {integrity: sha512-whh0trqRsSqVLNEUCwU59pyJZYpU8AmSWl8M3Jz2Mv5ESPP6kFh4juas2NpZ1iCvy7GlNRffUD1xr84gceimjg==}
engines: {node: '>= 16'}
'@intlify/core@10.0.8':
resolution: {integrity: sha512-2BbgN0aeuYHOHe7kVlTr2XxyrnLQZ/4/Y0Pw8luU67723+AqVYqxB7ZG1FzLCVNwAmzdVZMjKzFpgOzdUSdBfw==}
engines: {node: '>= 16'}
- '@intlify/eslint-plugin-vue-i18n@4.0.1':
- resolution: {integrity: sha512-xZKG7EvMvvumK9sdpnt6Dxa/dxV6/05/hRXIgJc0XI4l0+QUnyfdz5qXEvDm21T+OQsFN0CK/C+p0Fpra2wscQ==}
+ '@intlify/eslint-plugin-vue-i18n@4.1.0':
+ resolution: {integrity: sha512-MPAr3LGTrkB5CZBHN5eUf4kASUEiSaDM371jADmxNbTL1Ew7IAyCIBGm3+/1sWcvsfVHe4wz8RFoo6FpeQZ4Nw==}
engines: {node: '>=18.0.0'}
peerDependencies:
eslint: ^8.0.0 || ^9.0.0-0
@@ -891,16 +753,16 @@ packages:
resolution: {integrity: sha512-DV+sYXIkHVd5yVb2mL7br/NEUwzUoLBsMkV3H0InefWgmYa34NLZUvMCGi5oWX+Hqr2Y2qUxnVrnOWF4aBlgWg==}
engines: {node: '>= 16'}
- '@intlify/message-compiler@11.1.11':
- resolution: {integrity: sha512-7PC6neomoc/z7a8JRjPBbu0T2TzR2MQuY5kn2e049MP7+o32Ve7O8husylkA7K9fQRe4iNXZWTPnDJ6vZdtS1Q==}
+ '@intlify/message-compiler@11.1.12':
+ resolution: {integrity: sha512-Fv9iQSJoJaXl4ZGkOCN1LDM3trzze0AS2zRz2EHLiwenwL6t0Ki9KySYlyr27yVOj5aVz0e55JePO+kELIvfdQ==}
engines: {node: '>= 16'}
'@intlify/shared@10.0.8':
resolution: {integrity: sha512-BcmHpb5bQyeVNrptC3UhzpBZB/YHHDoEREOUERrmF2BRxsyOEuRrq+Z96C/D4+2KJb8kuHiouzAei7BXlG0YYw==}
engines: {node: '>= 16'}
- '@intlify/shared@11.1.11':
- resolution: {integrity: sha512-RIBFTIqxZSsxUqlcyoR7iiC632bq7kkOwYvZlvcVObHfrF4NhuKc4FKvu8iPCrEO+e3XsY7/UVpfgzg+M7ETzA==}
+ '@intlify/shared@11.1.12':
+ resolution: {integrity: sha512-Om86EjuQtA69hdNj3GQec9ZC0L0vPSAnXzB3gP/gyJ7+mA7t06d9aOAiqMZ+xEOsumGP4eEBlfl8zF2LOTzf2A==}
engines: {node: '>= 16'}
'@intlify/unplugin-vue-i18n@6.0.8':
@@ -938,8 +800,8 @@ packages:
vue-i18n:
optional: true
- '@ioredis/commands@1.3.0':
- resolution: {integrity: sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==}
+ '@ioredis/commands@1.4.0':
+ resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==}
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
@@ -957,24 +819,24 @@ packages:
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'}
- '@jridgewell/gen-mapping@0.3.12':
- resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- '@jridgewell/source-map@0.3.10':
- resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==}
-
- '@jridgewell/sourcemap-codec@1.5.4':
- resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- '@jridgewell/trace-mapping@0.3.29':
- resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@kwsites/file-exists@1.1.1':
resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
@@ -982,10 +844,6 @@ packages:
'@kwsites/promise-deferred@1.1.1':
resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
- '@lobomfz/prismark@0.0.3':
- resolution: {integrity: sha512-g2xfR/F+sRBRUhWYlpUkafqZjqsQBetjfzdWvQndRU4wdoavn3zblM3OQwb7vrsrKB6Wmbs+DtLGaD5XBQ2v8A==}
- hasBin: true
-
'@mapbox/node-pre-gyp@2.0.0':
resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==}
engines: {node: '>=18'}
@@ -1002,41 +860,8 @@ packages:
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
- '@netlify/binary-info@1.0.0':
- resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==}
-
- '@netlify/blobs@9.1.2':
- resolution: {integrity: sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw==}
- engines: {node: ^14.16.0 || >=16.0.0}
-
- '@netlify/dev-utils@2.2.0':
- resolution: {integrity: sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==}
- engines: {node: ^14.16.0 || >=16.0.0}
-
- '@netlify/functions@3.1.10':
- resolution: {integrity: sha512-sI93kcJ2cUoMgDRPnrEm0lZhuiDVDqM6ngS/UbHTApIH3+eg3yZM5p/0SDFQQq9Bad0/srFmgBmTdXushzY5kg==}
- engines: {node: '>=14.0.0'}
-
- '@netlify/open-api@2.37.0':
- resolution: {integrity: sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==}
- engines: {node: '>=14.8.0'}
-
- '@netlify/runtime-utils@1.3.1':
- resolution: {integrity: sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==}
- engines: {node: '>=16.0.0'}
-
- '@netlify/serverless-functions-api@1.41.2':
- resolution: {integrity: sha512-pfCkH50JV06SGMNsNPjn8t17hOcId4fA881HeYQgMBOrewjsw4csaYgHEnCxCEu24Y5x75E2ULbFpqm9CvRCqw==}
- engines: {node: '>=18.0.0'}
-
- '@netlify/serverless-functions-api@2.1.3':
- resolution: {integrity: sha512-bNlN/hpND8xFQzpjyKxm6vJayD+bPBlOvs4lWihE7WULrphuH1UuFsoVE5386bNNGH8Rs1IH01AFsl7ALQgOlQ==}
- engines: {node: '>=18.0.0'}
-
- '@netlify/zip-it-and-ship-it@12.2.1':
- resolution: {integrity: sha512-zAr+8Tg80y/sUbhdUkZsq4Uy1IMzkSB6H/sKRMrDQ2NJx4uPgf5X5jMdg9g2FljNcxzpfJwc1Gg4OXQrjD0Z4A==}
- engines: {node: '>=18.14.0'}
- hasBin: true
+ '@napi-rs/wasm-runtime@1.0.7':
+ resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -1062,31 +887,31 @@ packages:
resolution: {integrity: sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw==}
engines: {node: '>=18.18.0'}
- '@nuxt/cli@3.27.0':
- resolution: {integrity: sha512-lOdzEvEbGaV06ebKKYgpumLLzbOZMFQzZfT4ZE7foa8/8aXG+GR3g8w9RX2IUyomTdSfapa3UcHDC8srQKRIEw==}
+ '@nuxt/cli@3.28.0':
+ resolution: {integrity: sha512-WQ751WxWLBIeH3TDFt/LWQ2znyAKxpR5+gpv80oerwnVQs4GKajAfR6dIgExXZkjaPUHEFv2lVD9vM+frbprzw==}
engines: {node: ^16.10.0 || >=18.0.0}
hasBin: true
'@nuxt/devalue@2.0.2':
resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
- '@nuxt/devtools-kit@2.6.2':
- resolution: {integrity: sha512-esErdMQ0u3wXXogKQ3IE2m0fxv52w6CzPsfsXF4o5ZVrUQrQaH58ygupDAQTYdlGTgtqmEA6KkHTGG5cM6yxeg==}
+ '@nuxt/devtools-kit@2.6.4':
+ resolution: {integrity: sha512-UWP4F4K9DA6vkv8DIClimgLrzKdpqQo0K7Gtj8bVSWBlrN+jk5jr//KYQ4NXhky/Y0C2nnYrW6DPGi4EXiFTTQ==}
peerDependencies:
vite: '>=6.0'
- '@nuxt/devtools-wizard@2.6.2':
- resolution: {integrity: sha512-s1eYYKi2eZu2ZUPQrf22C0SceWs5/C3c3uow/DVunD304Um/Tj062xM9E4p1B9L8yjaq8t0Gtyu/YvZdo/reyg==}
+ '@nuxt/devtools-wizard@2.6.4':
+ resolution: {integrity: sha512-BIBg4/FxrQtRRqSzDwakqNxSLC7e7bMSawE+X8Tq2sbz9vv+gA1aATdNcjF7g7BoZ8E/RreZB6Jy3pOxFPLEWA==}
hasBin: true
- '@nuxt/devtools@2.6.2':
- resolution: {integrity: sha512-pqcSDPv1I+8fxa6FvhAxVrfcN/sXYLOBe9scTLbRQOVLTO0pHzryayho678qNKiwWGgj/rcjEDr6IZCgwqOCfA==}
+ '@nuxt/devtools@2.6.4':
+ resolution: {integrity: sha512-ymqRjlShXCfUfTc+fnADG7XOV13toMiPc5loi+6lYjCmu1+rOI8K3i8R/8DWgGxr8MK7d5L4szl1xZlMQ4WzlA==}
hasBin: true
peerDependencies:
vite: '>=6.0'
- '@nuxt/eslint-config@1.7.1':
- resolution: {integrity: sha512-xY9CNA24LGiauNw2h1L76iw/SFChEIojqQQM5UgGU+nfRfAZaitfumsmqhMXa6tTdnbF+uf6EpumaMdk3LNRpg==}
+ '@nuxt/eslint-config@1.9.0':
+ resolution: {integrity: sha512-KLiYlX/MmWR9dhC0u7GSZQl6wyVLGAHme5aAL5fAUT1PLYgcFiJIUg1Z+b296LmwHGTa+oGPRBIk3yoDmX9/9Q==}
peerDependencies:
eslint: ^9.0.0
eslint-plugin-format: '*'
@@ -1094,13 +919,13 @@ packages:
eslint-plugin-format:
optional: true
- '@nuxt/eslint-plugin@1.7.1':
- resolution: {integrity: sha512-az7qM8g95JPI8SO4c7lcbab3DVQPsNxCVik+b4XwtpEhxtkW0BEq3VFCmM5aZbFhmV4qE5TOCl7LA4Saq4lhGQ==}
+ '@nuxt/eslint-plugin@1.9.0':
+ resolution: {integrity: sha512-DY4ZSavgFyKQxI/NCOpSCUHg3dpS2O4lAdic5UmvP2NWj1xwtvmA9UwEZQ2nW2/f/Km6N+Q53UsgFSIBjz8jDQ==}
peerDependencies:
eslint: ^9.0.0
- '@nuxt/eslint@1.7.1':
- resolution: {integrity: sha512-/kbtRE6+kSDR+WxR/aL64E7ov58VUSsbwwOdS55R7f8ZjIReF+hfVBGA8CxXHo0LgIGTmoQbz7km4Nx+sGhxQw==}
+ '@nuxt/eslint@1.9.0':
+ resolution: {integrity: sha512-8Wm2fDD9za+vJOOhRS2jj+MzyjCNvDhS+04Y55q9W1Ai5hFjTZ1a94jlgSwaqI1B3Zt7y5fqFoEb4wKpZ3ycWg==}
peerDependencies:
eslint: ^9.0.0
eslint-webpack-plugin: ^4.1.0
@@ -1114,24 +939,20 @@ packages:
'@nuxt/fonts@0.11.4':
resolution: {integrity: sha512-GbLavsC+9FejVwY+KU4/wonJsKhcwOZx/eo4EuV57C4osnF/AtEmev8xqI0DNlebMEhEGZbu1MGwDDDYbeR7Bw==}
- '@nuxt/image@1.10.0':
- resolution: {integrity: sha512-/B58GeEmme7bkmQUrXzEw8P9sJb9BkMaYZqLDtq8ZdDLEddE3P4nVya8RQPB+p4b7EdqWajpPqdy1A2ZPLev/A==}
+ '@nuxt/image@1.11.0':
+ resolution: {integrity: sha512-4kzhvb2tJfxMsa/JZeYn1sMiGbx2J/S6BQrQSdXNsHgSvywGVkFhTiQGjoP6O49EsXyAouJrer47hMeBcTcfXQ==}
engines: {node: '>=18.20.6'}
- '@nuxt/kit@3.17.7':
- resolution: {integrity: sha512-JLno3ur7Pix2o/StxIMlEHRkMawA6h7uzjZBDgxdeKXRWTYY8ID9YekSkN4PBlEFGXBfCBOcPd5+YqcyBUAMkw==}
+ '@nuxt/kit@3.19.2':
+ resolution: {integrity: sha512-+QiqO0WcIxsKLUqXdVn3m4rzTRm2fO9MZgd330utCAaagGmHsgiMJp67kE14boJEPutnikfz3qOmrzBnDIHUUg==}
engines: {node: '>=18.12.0'}
- '@nuxt/kit@3.18.0':
- resolution: {integrity: sha512-svS1CBEx7gMgEIaNYrQt26J/t5bDSUdIf7GQWr5M6yszOzLw+IVzyfH7TBmuxZEbjovhLaJEG379mgKp82H/lA==}
+ '@nuxt/kit@4.1.2':
+ resolution: {integrity: sha512-P5q41xeEOa6ZQC0PvIP7TSBmOAMxXK4qihDcCbYIJq8RcVsEPbGZVlidmxE6EOw1ucSyodq9nbV31FAKwoL4NQ==}
engines: {node: '>=18.12.0'}
- '@nuxt/kit@4.0.2':
- resolution: {integrity: sha512-OtLkVYHpfrm1FzGSGxl0H3QXLgO41yxOgni5S6zzLG4gblG71Fy82B2QTdqJLzTLKWObiILKDhrysBtmDkp3LA==}
- engines: {node: '>=18.12.0'}
-
- '@nuxt/schema@3.17.7':
- resolution: {integrity: sha512-c22IE/ECvjUScFyOJH/0VnSf5izDLmwkrCRlZKNhHzcNZUBFe5mCE5BM28QSVRSLGcC/mqg5POyNjf2tRwf+/w==}
+ '@nuxt/schema@4.1.2':
+ resolution: {integrity: sha512-uFr13C6c52OFbF3hZVIV65KvhQRyrwp1GlAm7EVNGjebY8279QEel57T4R9UA1dn2Et6CBynBFhWoFwwo97Pig==}
engines: {node: ^14.18.0 || >=16.10.0}
'@nuxt/telemetry@2.6.6':
@@ -1139,9 +960,9 @@ packages:
engines: {node: '>=18.12.0'}
hasBin: true
- '@nuxt/vite-builder@3.17.7':
- resolution: {integrity: sha512-XZEte9SMgONWsChKXOrK9/X8TqcSToXy6S9GzxJF199QKUpfsOJy+gZrjOWHS+WrIWdkBmiKBl11kvh8lCIpzA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0.0}
+ '@nuxt/vite-builder@4.1.2':
+ resolution: {integrity: sha512-to9NKVtzMBtyuhIIVgwo/ph5UCONcxkVsoAjm8HnSkDi0o9nDPhHOAg1AUMlvPnHpdXOzwnSrXo/t8E7W+UZ/A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
vue: ^3.3.4
@@ -1149,8 +970,97 @@ packages:
resolution: {integrity: sha512-PhrQtJT6Di9uoslL5BTrBFqntFlfCaUKlO3T9ORJwmWFdowPqQeFjQ9OjVbKA6TNWr3kQhDqLbIcGlhbuG1USQ==}
engines: {node: '>=18.12.0'}
- '@oxc-parser/binding-android-arm64@0.76.0':
- resolution: {integrity: sha512-1XJW/16CDmF5bHE7LAyPPmEEVnxSadDgdJz+xiLqBrmC4lfAeuAfRw3HlOygcPGr+AJsbD4Z5sFJMkwjbSZlQg==}
+ '@oxc-minify/binding-android-arm64@0.87.0':
+ resolution: {integrity: sha512-ZbJmAfXvNAamOSnXId3BiM3DiuzlD1isqKjtmRFb/hpvChHHA23FSPrFcO16w+ugZKg33sZ93FinFkKtlC4hww==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-minify/binding-darwin-arm64@0.87.0':
+ resolution: {integrity: sha512-ewmNsTY8YbjWOI8+EOWKTVATOYvG4Qq4zQHH5VFBeqhQPVusY1ORD6Ei+BijVKrnlbpjibLlkTl8IWqXCGK89A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-minify/binding-darwin-x64@0.87.0':
+ resolution: {integrity: sha512-qDH4w4EYttSC3Cs2VCh+CiMYKrcL2SNmnguBZXoUXe/RNk3csM+RhgcwdpX687xGvOhTFhH5PCIA84qh3ZpIbQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-minify/binding-freebsd-x64@0.87.0':
+ resolution: {integrity: sha512-5kxjHlSev2A09rDeITk+LMHxSrU3Iu8pUb0Zp4m+ul8FKlB9FrvFkAYwbctin6g47O98s3Win7Ewhy0w8JaiUA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.87.0':
+ resolution: {integrity: sha512-NjbGXnNaAl5EgyonaDg2cPyH2pTf5a/+AP/5SRCJ0KetpXV22ZSUCvcy04Yt4QqjMcDs+WnJaGVxwx15Ofr6Gw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm-musleabihf@0.87.0':
+ resolution: {integrity: sha512-llAjfCA0iV2LMMl+LTR3JhqAc2iQmj+DTKd0VWOrbNOuNczeE9D5kJFkqYplD73LrkuqxrX9oDeUjjeLdVBPXw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm64-gnu@0.87.0':
+ resolution: {integrity: sha512-tf2Shom09AaSmu7U1hYYcEFF/cd+20HtmQ8eyGsRkqD5bqUj6lDu8TNSU9FWZ9tcZ83NzyFMwXZWHyeeIIbpxw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm64-musl@0.87.0':
+ resolution: {integrity: sha512-pgWeYfSprtpnJVea9Q5eI6Eo80lDGlMw2JdcSMXmShtBjEhBl6bvDNHlV+6kNfh7iT65y/uC6FR8utFrRghu8A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.87.0':
+ resolution: {integrity: sha512-O1QPczlT+lqNZVeKOdFxxL+s1RIlnixaJYFLrcqDcRyn82MGKLz7sAenBTFRQoIfLnSxtMGL6dqHOefYkQx7Cg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.87.0':
+ resolution: {integrity: sha512-tcwt3ZUWOKfNLXN2edxFVHMlIuPvbuyMaKmRopgljSCfFcNHWhfTNlxlvmECRNhuQ91EcGwte6F1dwoeMCNd7A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-x64-gnu@0.87.0':
+ resolution: {integrity: sha512-Xf4AXF14KXUzSnfgTcFLFSM0TykJhFw14+xwNvlAb6WdqXAKlMrz9joIAezc8dkW1NNscCVTsqBUPJ4RhvCM1Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-x64-musl@0.87.0':
+ resolution: {integrity: sha512-LIqvpx9UihEW4n9QbEljDnfUdAWqhr6dRqmzSFwVAeLZRUECluLCDdsdwemrC/aZkvnisA4w0LFcFr3HmeTLJg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxc-minify/binding-wasm32-wasi@0.87.0':
+ resolution: {integrity: sha512-h0xluvc+YryfH5G5dndjGHuA/D4Kp85EkPMxqoOjNudOKDCtdobEaC9horhCqnOOQ0lgn+PGFl3w8u4ToOuRrA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.87.0':
+ resolution: {integrity: sha512-fgxSx+TUc7e2rNtRAMnhHrjqh1e8p/JKmWxRZXtkILveMr/TOHGiDis7U3JJbwycmTZ+HSsJ/PNFQl+tKzmDxw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-minify/binding-win32-x64-msvc@0.87.0':
+ resolution: {integrity: sha512-K6TTrlitEJgD0FGIW2r0t3CIJNqBkzHT97h49gZLS24ey2UG1zKt27iSHkpXMJYDiG97ZD2yv3pSph1ctMlFXw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-parser/binding-android-arm64@0.87.0':
+ resolution: {integrity: sha512-3APxTyYaAjpW5zifjzfsPgoIa4YHwA5GBjtgLRQpGVXCykXBIEbUTokoAs411ZuOwS3sdTVXBTGAdziXRd8rUg==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [android]
@@ -1161,8 +1071,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@oxc-parser/binding-darwin-arm64@0.76.0':
- resolution: {integrity: sha512-yoQwSom8xsB+JdGsPUU0xxmxLKiF2kdlrK7I56WtGKZilixuBf/TmOwNYJYLRWkBoW5l2/pDZOhBm2luwmLiLw==}
+ '@oxc-parser/binding-darwin-arm64@0.87.0':
+ resolution: {integrity: sha512-99e8E76M+k3Gtwvs5EU3VTs2hQkJmvnrl/eu7HkBUc9jLFHA4nVjYSgukMuqahWe270udUYEPRfcWKmoE1Nukg==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [darwin]
@@ -1173,8 +1083,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@oxc-parser/binding-darwin-x64@0.76.0':
- resolution: {integrity: sha512-uRIopPLvr3pf2Xj7f5LKyCuqzIU6zOS+zEIR8UDYhcgJyZHnvBkfrYnfcztyIcrGdQehrFUi3uplmI09E7RdiQ==}
+ '@oxc-parser/binding-darwin-x64@0.87.0':
+ resolution: {integrity: sha512-2rRo6Dz560/4ot5Q0KPUTEunEObkP8mDC9mMiH0RJk1FiOb9c+xpPbkYoUHNKuVMm8uIoiBCxIAbPtBhs9QaXQ==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [darwin]
@@ -1185,8 +1095,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@oxc-parser/binding-freebsd-x64@0.76.0':
- resolution: {integrity: sha512-a0EOFvnOd2FqmDSvH6uWLROSlU6KV/JDKbsYDA/zRLyKcG6HCsmFnPsp8iV7/xr9WMbNgyJi6R5IMpePQlUq7Q==}
+ '@oxc-parser/binding-freebsd-x64@0.87.0':
+ resolution: {integrity: sha512-uR+WZAvWkFQPVoeqXgQFr7iy+3hEI295qTbQ4ujmklgM5eTX3YgMFoIV00Stloxfd1irSDDSaK7ySnnzF6mRJg==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [freebsd]
@@ -1197,8 +1107,8 @@ packages:
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm-gnueabihf@0.76.0':
- resolution: {integrity: sha512-ikRYDHL3fOdZwfJKmcdqjlLgkeNZ3Ez0qM8wAev5zlHZ+lY/Ig7qG5SCqPlvuTu+nNQ6zrFFaKvvt69EBKXU/g==}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.87.0':
+ resolution: {integrity: sha512-Emm1NpVGKbwzQOIZJI8ZuZu0z8FAd5xscqdS6qpDFpDdEMxk6ab7o3nM8V09RhNCORAzeUlk4TBHQ2Crzjd50A==}
engines: {node: '>=20.0.0'}
cpu: [arm]
os: [linux]
@@ -1209,8 +1119,8 @@ packages:
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm-musleabihf@0.76.0':
- resolution: {integrity: sha512-dtRv5J5MRCLR7x39K8ufIIW4svIc7gYFUaI0YFXmmeOBhK/K2t/CkguPnDroKtsmXIPHDRtmJ1JJYzNcgJl6Wg==}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.87.0':
+ resolution: {integrity: sha512-1PPCxRZSJXzQaqc8y+wH7EqPgSfQ/JU3pK6WTN/1SUe/8paNVSKKqk175a8BbRVxGUtPnwEG89pi+xfPTSE7GA==}
engines: {node: '>=20.0.0'}
cpu: [arm]
os: [linux]
@@ -1221,8 +1131,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@oxc-parser/binding-linux-arm64-gnu@0.76.0':
- resolution: {integrity: sha512-IE4iiiggFH2snagQxHrY5bv6dDpRMMat+vdlMN/ibonA65eOmRLp8VLTXnDiNrcla/itJ1L9qGABHNKU+SnE8g==}
+ '@oxc-parser/binding-linux-arm64-gnu@0.87.0':
+ resolution: {integrity: sha512-fcnnsfcyLamJOMVKq+BQ8dasb8gRnZtNpCUfZhaEFAdXQ7J2RmZreFzlygcn80iti0V7c5LejcjHbF4IdK3GAw==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [linux]
@@ -1233,8 +1143,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@oxc-parser/binding-linux-arm64-musl@0.76.0':
- resolution: {integrity: sha512-wi9zQPMDHrBuRuT7Iurfidc9qlZh7cKa5vfYzOWNBCaqJdgxmNOFzvYen02wVUxSWGKhpiPHxrPX0jdRyJ8Npg==}
+ '@oxc-parser/binding-linux-arm64-musl@0.87.0':
+ resolution: {integrity: sha512-tBPkSPgRSSbmrje8CUovISi/Hj/tWjZJ3n/qnrjx2B+u86hWtwLsngtPDQa5d4seSyDaHSx6tNEUcH7+g5Ee0Q==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [linux]
@@ -1245,8 +1155,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@oxc-parser/binding-linux-riscv64-gnu@0.76.0':
- resolution: {integrity: sha512-0tqqu1pqPee2lLGY8vtYlX1L415fFn89e0a3yp4q5N9f03j1rRs0R31qesTm3bt/UK8HYjECZ+56FCVPs2MEMQ==}
+ '@oxc-parser/binding-linux-riscv64-gnu@0.87.0':
+ resolution: {integrity: sha512-z4UKGM4wv2wEAQAlx2pBq6+pDJw5J/5oDEXqW6yBSLbWLjLDo4oagmRSE3+giOWteUa+0FVJ+ypq4iYxBkYSWg==}
engines: {node: '>=20.0.0'}
cpu: [riscv64]
os: [linux]
@@ -1257,8 +1167,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@oxc-parser/binding-linux-s390x-gnu@0.76.0':
- resolution: {integrity: sha512-y36Hh1a5TA+oIGtlc8lT7N9vdHXBlhBetQJW0p457KbiVQ7jF7AZkaPWhESkjHWAsTVKD2OjCa9ZqfaqhSI0FQ==}
+ '@oxc-parser/binding-linux-s390x-gnu@0.87.0':
+ resolution: {integrity: sha512-6W1ENe/nZtr2TBnrEzmdGEraEAdZOiH3YoUNNeQWuqwLkmpoHTJJdclieToPe/l2IKJ4WL3FsSLSGHE8yt/OEg==}
engines: {node: '>=20.0.0'}
cpu: [s390x]
os: [linux]
@@ -1269,8 +1179,8 @@ packages:
cpu: [x64]
os: [linux]
- '@oxc-parser/binding-linux-x64-gnu@0.76.0':
- resolution: {integrity: sha512-7/acaG9htovp3gp/J0kHgbItQTuHctl+rbqPPqZ9DRBYTz8iV8kv3QN8t8Or8i/hOmOjfZp9McDoSU1duoR4/A==}
+ '@oxc-parser/binding-linux-x64-gnu@0.87.0':
+ resolution: {integrity: sha512-s3kB/Ii3X3IOZ27Iu7wx2zYkIcDO22Emu32SNC6kkUSy09dPBc1yaW14TnAkPMe/rvtuzR512JPWj3iGpl+Dng==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [linux]
@@ -1281,8 +1191,8 @@ packages:
cpu: [x64]
os: [linux]
- '@oxc-parser/binding-linux-x64-musl@0.76.0':
- resolution: {integrity: sha512-AxFt0reY6Q2rfudABmMTFGR8tFFr58NlH2rRBQgcj+F+iEwgJ+jMwAPhXd2y1I2zaI8GspuahedUYQinqxWqjA==}
+ '@oxc-parser/binding-linux-x64-musl@0.87.0':
+ resolution: {integrity: sha512-3+M9hfrZSDi4+Uy4Ll3rtOuVG3IHDQlj027jgtmAAHJK1eqp4CQfC7rrwE+LFUqUwX+KD2GwlxR+eHyyEf5Gbg==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [linux]
@@ -1292,8 +1202,8 @@ packages:
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-parser/binding-wasm32-wasi@0.76.0':
- resolution: {integrity: sha512-wHdkHdhf6AWBoO8vs5cpoR6zEFY1rB+fXWtq6j/xb9j/lu1evlujRVMkh8IM/M/pOUIrNkna3nzST/mRImiveQ==}
+ '@oxc-parser/binding-wasm32-wasi@0.87.0':
+ resolution: {integrity: sha512-2jgeEeOa4GbQQg2Et/gFTgs5wKS/+CxIg+CN2mMOJ4EqbmvUVeGiumO01oFOWTYnJy1oONwIocBzrnMuvOcItA==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
@@ -1303,8 +1213,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@oxc-parser/binding-win32-arm64-msvc@0.76.0':
- resolution: {integrity: sha512-G7ZlEWcb2hNwCK3qalzqJoyB6HaTigQ/GEa7CU8sAJ/WwMdG/NnPqiC9IqpEAEy1ARSo4XMALfKbKNuqbSs5mg==}
+ '@oxc-parser/binding-win32-arm64-msvc@0.87.0':
+ resolution: {integrity: sha512-KZp9poaBaVvuFM0TrsHCDOjPQK5eMDXblz21boMhKHGW5/bOlkMlg3CYn5j0f67FkK68NSdNKREMxmibBeXllQ==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [win32]
@@ -1315,8 +1225,8 @@ packages:
cpu: [x64]
os: [win32]
- '@oxc-parser/binding-win32-x64-msvc@0.76.0':
- resolution: {integrity: sha512-0jLzzmnu8/mqNhKBnNS2lFUbPEzRdj5ReiZwHGHpjma0+ullmmwP2AqSEqx3ssHDK9CpcEMdKOK2LsbCfhHKIA==}
+ '@oxc-parser/binding-win32-x64-msvc@0.87.0':
+ resolution: {integrity: sha512-86uisngtp/8XdcerIKxMyJTqgDSTJatkfpylpUH0d96W8Bb9E+bVvM2fIIhLWB0Eb03PeY2BdIT7DNIln9TnHg==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [win32]
@@ -1331,8 +1241,97 @@ packages:
'@oxc-project/types@0.70.0':
resolution: {integrity: sha512-ngyLUpUjO3dpqygSRQDx7nMx8+BmXbWOU4oIwTJFV2MVIDG7knIZwgdwXlQWLg3C3oxg1lS7ppMtPKqKFb7wzw==}
- '@oxc-project/types@0.76.0':
- resolution: {integrity: sha512-CH3THIrSViKal8yV/Wh3FK0pFhp40nzW1MUDCik9fNuid2D/7JJXKJnfFOAvMxInGXDlvmgT6ACAzrl47TqzkQ==}
+ '@oxc-project/types@0.87.0':
+ resolution: {integrity: sha512-ipZFWVGE9fADBVXXWJWY/cxpysc41Gt5upKDeb32F6WMgFyO7XETUMVq8UuREKCih+Km5E6p2VhEvf6Fuhey6g==}
+
+ '@oxc-transform/binding-android-arm64@0.87.0':
+ resolution: {integrity: sha512-B7W6J8T9cS054LUGLfYkYz8bz5+t+4yPftZ67Bn6MJ03okMLnbbEfm1bID1tqcP5tJwMurTILVy/dQfDYDcMgQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-transform/binding-darwin-arm64@0.87.0':
+ resolution: {integrity: sha512-HImW3xOPx7FHKqfC5WfE82onhRfnWQUiB7R+JgYrk+7NR404h3zANSPzu3V/W9lbDxlmHTcqoD2LKbNC5j0TQA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-transform/binding-darwin-x64@0.87.0':
+ resolution: {integrity: sha512-MDbgugi6mvuPTfS78E2jyozm7493Kuqmpc5r406CsUdEsXlnsF+xvmKlrW9ZIkisO74dD+HWouSiDtNyPQHjlw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-transform/binding-freebsd-x64@0.87.0':
+ resolution: {integrity: sha512-N0M5D/4haJw7BMn2WZ3CWz0WkdLyoK1+3KxOyCv2CPedMCxx6eQay2AtJxSzj9tjVU1+ukbSb2fDO24JIJGsVA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.87.0':
+ resolution: {integrity: sha512-PubObCNOUOzm1S+P0yn7S+/6xRLbSPMqhgrb73L3p+J1Z20fv/FYVg0kFd36Yho24TSC/byOkebEZWAtxCasWw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-arm-musleabihf@0.87.0':
+ resolution: {integrity: sha512-Nk2d/FS7sMCmCl99vHojzigakjDPamkjOXs2i+H71o/NqytS0pk3M+tXat8M3IGpeLJIEszA5Mv+dcq731nlYA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-arm64-gnu@0.87.0':
+ resolution: {integrity: sha512-BxFkIcso2V1+FCDoU+KctxvJzSQVSnEZ5EEQ8O3Up9EoFVQRnZ8ktXvqYj2Oqvc4IYPskLPsKUgc9gdK8wGhUg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-arm64-musl@0.87.0':
+ resolution: {integrity: sha512-MZ1/TNaebhXK73j1UDfwyBFnAy0tT3n6otOkhlt1vlJwqboUS/D7E/XrCZmAuHIfVPxAXRPovkl7kfxLB43SKw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-riscv64-gnu@0.87.0':
+ resolution: {integrity: sha512-JCWE6n4Hicu0FVbvmLdH/dS8V6JykOUsbrbDYm6JwFlHr4eFTTlS2B+mh5KPOxcdeOlv/D/XRnvMJ6WGYs25EA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-s390x-gnu@0.87.0':
+ resolution: {integrity: sha512-n2NTgM+3PqFagJV9UXRDNOmYesF+TO9SF9FeHqwVmW893ayef9KK+vfWAAhvOYHXYaKWT5XoHd87ODD7nruyhw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-x64-gnu@0.87.0':
+ resolution: {integrity: sha512-ZOKW3wx0bW2O7jGdOzr8DyLZqX2C36sXvJdsHj3IueZZ//d/NjLZqEiUKz+q0JlERHtCVKShQ5PLaCx7NpuqNg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-x64-musl@0.87.0':
+ resolution: {integrity: sha512-eIspx/JqkVMPK1CAYEOo2J8o49s4ZTf+32MSMUknIN2ZS1fvRmWS0D/xFFaLP/9UGhdrXRIPbn/iSYEA8JnV/g==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxc-transform/binding-wasm32-wasi@0.87.0':
+ resolution: {integrity: sha512-4uRjJQnt/+kmJUIC6Iwzn+MqqZhLP1zInPtDwgL37KI4VuUewUQWoL+sggMssMEgm7ZJwOPoZ6piuSWwMgOqgQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.87.0':
+ resolution: {integrity: sha512-l/qSi4/N5W1yXKU9+1gWGo0tBoRpp4zvHYrpsbq3zbefPL4VYdA0gKF7O10/ZQVkYylzxiVh2zpYO34/FbZdIg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-transform/binding-win32-x64-msvc@0.87.0':
+ resolution: {integrity: sha512-jG/MhMjfSdyj5KyhnwNWr4mnAlAsz+gNUYpjQ+UXWsfsoB3f8HqbsTkG02RBtNa/IuVQYvYYVf1eIimNN3gBEQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [win32]
'@parcel/watcher-android-arm64@2.5.1':
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
@@ -1446,8 +1445,8 @@ packages:
'@poppinss/exception@1.2.2':
resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==}
- '@prisma/client@6.12.0':
- resolution: {integrity: sha512-wn98bJ3Cj6edlF4jjpgXwbnQIo/fQLqqQHPk2POrZPxTlhY3+n90SSIF3LMRVa8VzRFC/Gec3YKJRxRu+AIGVA==}
+ '@prisma/client@6.16.2':
+ resolution: {integrity: sha512-E00PxBcalMfYO/TWnXobBVUai6eW/g5OsifWQsQDzJYm7yaY+IRLo7ZLsaefi0QkTpxfuhFcQ/w180i6kX3iJw==}
engines: {node: '>=18.18'}
peerDependencies:
prisma: '*'
@@ -1458,39 +1457,30 @@ packages:
typescript:
optional: true
- '@prisma/config@6.12.0':
- resolution: {integrity: sha512-HovZWzhWEMedHxmjefQBRZa40P81N7/+74khKFz9e1AFjakcIQdXgMWKgt20HaACzY+d1LRBC+L4tiz71t9fkg==}
+ '@prisma/config@6.16.2':
+ resolution: {integrity: sha512-mKXSUrcqXj0LXWPmJsK2s3p9PN+aoAbyMx7m5E1v1FufofR1ZpPoIArjjzOIm+bJRLLvYftoNYLx1tbHgF9/yg==}
- '@prisma/debug@6.12.0':
- resolution: {integrity: sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ==}
+ '@prisma/debug@6.16.2':
+ resolution: {integrity: sha512-bo4/gA/HVV6u8YK2uY6glhNsJ7r+k/i5iQ9ny/3q5bt9ijCj7WMPUwfTKPvtEgLP+/r26Z686ly11hhcLiQ8zA==}
- '@prisma/debug@6.13.0':
- resolution: {integrity: sha512-um+9pfKJW0ihmM83id9FXGi5qEbVJ0Vxi1Gm0xpYsjwUBnw6s2LdPBbrsG9QXRX46K4CLWCTNvskXBup4i9hlw==}
+ '@prisma/engines-version@6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43':
+ resolution: {integrity: sha512-ThvlDaKIVrnrv97ujNFDYiQbeMQpLa0O86HFA2mNoip4mtFqM7U5GSz2ie1i2xByZtvPztJlNRgPsXGeM/kqAA==}
- '@prisma/dmmf@6.13.0':
- resolution: {integrity: sha512-69qWP2ddIpI2L3VyQkwGjhtyj1CNXUJ0qZPLa1VmZ27h20rUXBPflLAel9EtOyct/GSTjSq8qjBbhW5ohrfbSw==}
+ '@prisma/engines@6.16.2':
+ resolution: {integrity: sha512-7yf3AjfPUgsg/l7JSu1iEhsmZZ/YE00yURPjTikqm2z4btM0bCl2coFtTGfeSOWbQMmq45Jab+53yGUIAT1sjA==}
- '@prisma/engines-version@6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc':
- resolution: {integrity: sha512-70vhecxBJlRr06VfahDzk9ow4k1HIaSfVUT3X0/kZoHCMl9zbabut4gEXAyzJZxaCGi5igAA7SyyfBI//mmkbQ==}
+ '@prisma/fetch-engine@6.16.2':
+ resolution: {integrity: sha512-wPnZ8DMRqpgzye758ZvfAMiNJRuYpz+rhgEBZi60ZqDIgOU2694oJxiuu3GKFeYeR/hXxso4/2oBC243t/whxQ==}
- '@prisma/engines@6.12.0':
- resolution: {integrity: sha512-4BRZZUaAuB4p0XhTauxelvFs7IllhPmNLvmla0bO1nkECs8n/o1pUvAVbQ/VOrZR5DnF4HED0PrGai+rIOVePA==}
-
- '@prisma/fetch-engine@6.12.0':
- resolution: {integrity: sha512-EamoiwrK46rpWaEbLX9aqKDPOd8IyLnZAkiYXFNuq0YsU0Z8K09/rH8S7feOWAVJ3xzeSgcEJtBlVDrajM9Sag==}
-
- '@prisma/generator-helper@6.13.0':
- resolution: {integrity: sha512-6v5k9sGMhRDAnWxVfIo7QlewgVyOhr2NykyNh/PaH55g0LDswiTSYDfPPKyCPLxjDG0eA7FFX+gDyf94QkLT1A==}
-
- '@prisma/generator@6.13.0':
- resolution: {integrity: sha512-vlV1qiEEb1w7D1J0h5/rz3ppgM/BRcJP5xz2QqHBlbjcAWzJjHkHsxeuC/OmkO4uHZXe9T2dGtf/nTw29UsBzA==}
-
- '@prisma/get-platform@6.12.0':
- resolution: {integrity: sha512-nRerTGhTlgyvcBlyWgt8OLNIV7QgJS2XYXMJD1hysorMCuLAjuDDuoxmVt7C2nLxbuxbWPp7OuFRHC23HqD9dA==}
+ '@prisma/get-platform@6.16.2':
+ resolution: {integrity: sha512-U/P36Uke5wS7r1+omtAgJpEB94tlT4SdlgaeTc6HVTTT93pXj7zZ+B/cZnmnvjcNPfWddgoDx8RLjmQwqGDYyA==}
'@rolldown/pluginutils@1.0.0-beta.29':
resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
+ '@rolldown/pluginutils@1.0.0-beta.38':
+ resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==}
+
'@rollup/plugin-alias@5.1.1':
resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
engines: {node: '>=14.0.0'}
@@ -1563,8 +1553,8 @@ packages:
rollup:
optional: true
- '@rollup/pluginutils@5.2.0':
- resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -1572,108 +1562,118 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.46.2':
- resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==}
+ '@rollup/rollup-android-arm-eabi@4.52.0':
+ resolution: {integrity: sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.46.2':
- resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==}
+ '@rollup/rollup-android-arm64@4.52.0':
+ resolution: {integrity: sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.46.2':
- resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==}
+ '@rollup/rollup-darwin-arm64@4.52.0':
+ resolution: {integrity: sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.46.2':
- resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==}
+ '@rollup/rollup-darwin-x64@4.52.0':
+ resolution: {integrity: sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.46.2':
- resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==}
+ '@rollup/rollup-freebsd-arm64@4.52.0':
+ resolution: {integrity: sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.46.2':
- resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==}
+ '@rollup/rollup-freebsd-x64@4.52.0':
+ resolution: {integrity: sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.46.2':
- resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.0':
+ resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.46.2':
- resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==}
+ '@rollup/rollup-linux-arm-musleabihf@4.52.0':
+ resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.46.2':
- resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==}
+ '@rollup/rollup-linux-arm64-gnu@4.52.0':
+ resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.46.2':
- resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==}
+ '@rollup/rollup-linux-arm64-musl@4.52.0':
+ resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loongarch64-gnu@4.46.2':
- resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==}
+ '@rollup/rollup-linux-loong64-gnu@4.52.0':
+ resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.46.2':
- resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==}
+ '@rollup/rollup-linux-ppc64-gnu@4.52.0':
+ resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.46.2':
- resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==}
+ '@rollup/rollup-linux-riscv64-gnu@4.52.0':
+ resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.46.2':
- resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==}
+ '@rollup/rollup-linux-riscv64-musl@4.52.0':
+ resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.46.2':
- resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==}
+ '@rollup/rollup-linux-s390x-gnu@4.52.0':
+ resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.46.2':
- resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==}
+ '@rollup/rollup-linux-x64-gnu@4.52.0':
+ resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.46.2':
- resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==}
+ '@rollup/rollup-linux-x64-musl@4.52.0':
+ resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.46.2':
- resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==}
+ '@rollup/rollup-openharmony-arm64@4.52.0':
+ resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.52.0':
+ resolution: {integrity: sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.46.2':
- resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==}
+ '@rollup/rollup-win32-ia32-msvc@4.52.0':
+ resolution: {integrity: sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.46.2':
- resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==}
+ '@rollup/rollup-win32-x64-gnu@4.52.0':
+ resolution: {integrity: sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==}
cpu: [x64]
os: [win32]
- '@sindresorhus/is@7.0.2':
- resolution: {integrity: sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==}
+ '@rollup/rollup-win32-x64-msvc@4.52.0':
+ resolution: {integrity: sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@sindresorhus/is@7.1.0':
+ resolution: {integrity: sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==}
engines: {node: '>=18'}
'@sindresorhus/merge-streams@2.3.0':
@@ -1683,8 +1683,11 @@ packages:
'@speed-highlight/core@1.2.7':
resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==}
- '@stylistic/eslint-plugin@5.2.2':
- resolution: {integrity: sha512-bE2DUjruqXlHYP3Q2Gpqiuj2bHq7/88FnuaS0FjeGGLCy+X6a07bGVuwtiOYnPSLHR6jmx5Bwdv+j7l8H+G97A==}
+ '@standard-schema/spec@1.0.0':
+ resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
+
+ '@stylistic/eslint-plugin@5.4.0':
+ resolution: {integrity: sha512-UG8hdElzuBDzIbjG1QDwnYH0MQ73YLXDFHgZzB4Zh/YJfnw8XNsloVtytqzx0I2Qky9THSdpTmi8Vjn/pf/Lew==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=9.0.0'
@@ -1697,65 +1700,65 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1'
- '@tailwindcss/node@4.1.11':
- resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==}
+ '@tailwindcss/node@4.1.13':
+ resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==}
- '@tailwindcss/oxide-android-arm64@4.1.11':
- resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==}
+ '@tailwindcss/oxide-android-arm64@4.1.13':
+ resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
- '@tailwindcss/oxide-darwin-arm64@4.1.11':
- resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==}
+ '@tailwindcss/oxide-darwin-arm64@4.1.13':
+ resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.1.11':
- resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==}
+ '@tailwindcss/oxide-darwin-x64@4.1.13':
+ resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.1.11':
- resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==}
+ '@tailwindcss/oxide-freebsd-x64@4.1.13':
+ resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11':
- resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
+ resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.11':
- resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
+ resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-musl@4.1.11':
- resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==}
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.13':
+ resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-gnu@4.1.11':
- resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==}
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.13':
+ resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-musl@4.1.11':
- resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==}
+ '@tailwindcss/oxide-linux-x64-musl@4.1.13':
+ resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-wasm32-wasi@4.1.11':
- resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==}
+ '@tailwindcss/oxide-wasm32-wasi@4.1.13':
+ resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
@@ -1766,29 +1769,29 @@ packages:
- '@emnapi/wasi-threads'
- tslib
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.11':
- resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
+ resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.1.11':
- resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==}
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.13':
+ resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@tailwindcss/oxide@4.1.11':
- resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==}
+ '@tailwindcss/oxide@4.1.13':
+ resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==}
engines: {node: '>= 10'}
- '@tailwindcss/typography@0.5.16':
- resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
+ '@tailwindcss/typography@0.5.18':
+ resolution: {integrity: sha512-dDIgwZOlf+tVkZ7A029VvQ1+ngKATENDjMEx2N35s2yPjfTS05RWSM8ilhEWSa5DMJ6ci2Ha9WNZEd2GQjrdQg==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
- '@tailwindcss/vite@4.1.11':
- resolution: {integrity: sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==}
+ '@tailwindcss/vite@4.1.13':
+ resolution: {integrity: sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==}
peerDependencies:
vite: ^5.2.0 || ^6 || ^7
@@ -1813,9 +1816,8 @@ packages:
'@tybys/wasm-util@0.10.0':
resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
- '@types/bcryptjs@3.0.0':
- resolution: {integrity: sha512-WRZOuCuaz8UcZZE4R5HXTco2goQSI2XxjGY3hbM/xDvwmqFWd4ivooImsMx65OKM6CtNKbnZ5YL+YwAwK7c1dg==}
- deprecated: This is a stub types definition. bcryptjs provides its own type definitions, so you do not need this installed.
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
@@ -1823,20 +1825,20 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/jsdom@21.1.7':
+ resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
+
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/luxon@3.6.2':
- resolution: {integrity: sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==}
+ '@types/luxon@3.7.1':
+ resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==}
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/node@22.16.5':
- resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==}
-
- '@types/normalize-package-data@2.4.4':
- resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+ '@types/node@22.18.6':
+ resolution: {integrity: sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==}
'@types/parse-path@7.1.0':
resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==}
@@ -1845,11 +1847,11 @@ packages:
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
- '@types/semver@7.7.0':
- resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==}
+ '@types/semver@7.7.1':
+ resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
- '@types/triple-beam@1.3.5':
- resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==}
+ '@types/tough-cookie@4.0.5':
+ resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
'@types/turndown@5.0.5':
resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==}
@@ -1857,70 +1859,67 @@ packages:
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
- '@types/yauzl@2.10.3':
- resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
-
- '@typescript-eslint/eslint-plugin@8.38.0':
- resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==}
+ '@typescript-eslint/eslint-plugin@8.44.0':
+ resolution: {integrity: sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.38.0
+ '@typescript-eslint/parser': ^8.44.0
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.38.0':
- resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==}
+ '@typescript-eslint/parser@8.44.0':
+ resolution: {integrity: sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.38.0':
- resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==}
+ '@typescript-eslint/project-service@8.44.0':
+ resolution: {integrity: sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.38.0':
- resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==}
+ '@typescript-eslint/scope-manager@8.44.0':
+ resolution: {integrity: sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.38.0':
- resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==}
+ '@typescript-eslint/tsconfig-utils@8.44.0':
+ resolution: {integrity: sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.38.0':
- resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==}
+ '@typescript-eslint/type-utils@8.44.0':
+ resolution: {integrity: sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.38.0':
- resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==}
+ '@typescript-eslint/types@8.44.0':
+ resolution: {integrity: sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.38.0':
- resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==}
+ '@typescript-eslint/typescript-estree@8.44.0':
+ resolution: {integrity: sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.38.0':
- resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==}
+ '@typescript-eslint/utils@8.44.0':
+ resolution: {integrity: sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.38.0':
- resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==}
+ '@typescript-eslint/visitor-keys@8.44.0':
+ resolution: {integrity: sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@unhead/vue@2.0.13':
- resolution: {integrity: sha512-+Oxzj4Rb1IJolLd6RAAYPDisKVGSnp2WC0KpFog0t3ZliiuZufRGwk8AWf2ntdn93x7WM9afnDAVNCipnPFxFg==}
+ '@unhead/vue@2.0.17':
+ resolution: {integrity: sha512-jzmGZYeMAhETV6qfetmLbZzUjjx1TjdNvFSobeFZb73D7dwD9wl/nOAx36qq+TvjZsLJdF5PQWToz2oDGAUqCg==}
peerDependencies:
vue: '>=3.5.18'
@@ -2019,33 +2018,33 @@ packages:
cpu: [x64]
os: [win32]
- '@vercel/nft@0.29.4':
- resolution: {integrity: sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==}
+ '@vercel/nft@0.30.1':
+ resolution: {integrity: sha512-2mgJZv4AYBFkD/nJ4QmiX5Ymxi+AisPLPcS/KPXVqniyQNqKXX+wjieAbDXQP3HcogfEbpHoRMs49Cd4pfkk8g==}
engines: {node: '>=18'}
hasBin: true
- '@vitejs/plugin-vue-jsx@4.2.0':
- resolution: {integrity: sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==}
- engines: {node: ^18.0.0 || >=20.0.0}
+ '@vitejs/plugin-vue-jsx@5.1.1':
+ resolution: {integrity: sha512-uQkfxzlF8SGHJJVH966lFTdjM/lGcwJGzwAHpVqAPDD/QcsqoUGa+q31ox1BrUfi+FLP2ChVp7uLXE3DkHyDdQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: ^5.0.0 || ^6.0.0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.0.0
- '@vitejs/plugin-vue@5.2.4':
- resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
- engines: {node: ^18.0.0 || >=20.0.0}
+ '@vitejs/plugin-vue@6.0.1':
+ resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: ^5.0.0 || ^6.0.0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
- '@volar/language-core@2.4.20':
- resolution: {integrity: sha512-dRDF1G33xaAIDqR6+mXUIjXYdu9vzSxlMGfMEwBxQsfY/JMUEXSpLTR057oTKlUQ2nIvCmP9k94A8h8z2VrNSA==}
+ '@volar/language-core@2.4.23':
+ resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
- '@volar/source-map@2.4.20':
- resolution: {integrity: sha512-mVjmFQH8mC+nUaVwmbxoYUy8cww+abaO8dWzqPUjilsavjxH0jCJ3Mp8HFuHsdewZs2c+SP+EO7hCd8Z92whJg==}
+ '@volar/source-map@2.4.23':
+ resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==}
- '@volar/typescript@2.4.20':
- resolution: {integrity: sha512-Oc4DczPwQyXcVbd+5RsNEqX6ia0+w3p+klwdZQ6ZKhFjWoBP9PCPQYlKYRi/tDemWphW93P/Vv13vcE9I9D2GQ==}
+ '@volar/typescript@2.4.23':
+ resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
'@vue-macros/common@1.16.1':
resolution: {integrity: sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==}
@@ -2056,8 +2055,8 @@ packages:
vue:
optional: true
- '@vue-macros/common@3.0.0-beta.15':
- resolution: {integrity: sha512-DMgq/rIh1H20WYNWU7krIbEfJRYDDhy7ix64GlT4AVUJZZWCZ5pxiYVJR3A3GmWQPkn7Pg7i3oIiGqu4JGC65w==}
+ '@vue-macros/common@3.0.0-beta.16':
+ resolution: {integrity: sha512-8O2gWxWFiaoNkk7PGi0+p7NPGe/f8xJ3/INUufvje/RZOs7sJvlI1jnR4lydtRFa/mU0ylMXUXXjSK0fHDEYTA==}
engines: {node: '>=20.18.0'}
peerDependencies:
vue: ^2.7.0 || ^3.2.25
@@ -2065,45 +2064,33 @@ packages:
vue:
optional: true
- '@vue/babel-helper-vue-transform-on@1.4.0':
- resolution: {integrity: sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==}
+ '@vue/babel-helper-vue-transform-on@1.5.0':
+ resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==}
- '@vue/babel-plugin-jsx@1.4.0':
- resolution: {integrity: sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==}
+ '@vue/babel-plugin-jsx@1.5.0':
+ resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==}
peerDependencies:
'@babel/core': ^7.0.0-0
peerDependenciesMeta:
'@babel/core':
optional: true
- '@vue/babel-plugin-resolve-type@1.4.0':
- resolution: {integrity: sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==}
+ '@vue/babel-plugin-resolve-type@1.5.0':
+ resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@vue/compiler-core@3.5.18':
- resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==}
+ '@vue/compiler-core@3.5.21':
+ resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==}
- '@vue/compiler-core@3.5.22':
- resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==}
+ '@vue/compiler-dom@3.5.21':
+ resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==}
- '@vue/compiler-dom@3.5.18':
- resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==}
+ '@vue/compiler-sfc@3.5.21':
+ resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==}
- '@vue/compiler-dom@3.5.22':
- resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==}
-
- '@vue/compiler-sfc@3.5.18':
- resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==}
-
- '@vue/compiler-sfc@3.5.22':
- resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==}
-
- '@vue/compiler-ssr@3.5.18':
- resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==}
-
- '@vue/compiler-ssr@3.5.22':
- resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==}
+ '@vue/compiler-ssr@3.5.21':
+ resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==}
'@vue/compiler-vue2@2.7.16':
resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
@@ -2122,33 +2109,30 @@ packages:
'@vue/devtools-shared@7.7.7':
resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==}
- '@vue/language-core@3.0.4':
- resolution: {integrity: sha512-BvueED4LfBCSNH66eeUQk37MQCb7hjdezzGgxniM0LbriW53AJIyLorgshAtStmjfsAuOCcTl/c1b+nz/ye8xQ==}
+ '@vue/language-core@3.0.7':
+ resolution: {integrity: sha512-0sqqyqJ0Gn33JH3TdIsZLCZZ8Gr4kwlg8iYOnOrDDkJKSjFurlQY/bEFQx5zs7SX2C/bjMkmPYq/NiyY1fTOkw==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- '@vue/reactivity@3.5.22':
- resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==}
+ '@vue/reactivity@3.5.21':
+ resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==}
- '@vue/runtime-core@3.5.22':
- resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==}
+ '@vue/runtime-core@3.5.21':
+ resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==}
- '@vue/runtime-dom@3.5.22':
- resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==}
+ '@vue/runtime-dom@3.5.21':
+ resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==}
- '@vue/server-renderer@3.5.22':
- resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==}
+ '@vue/server-renderer@3.5.21':
+ resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==}
peerDependencies:
- vue: 3.5.22
+ vue: 3.5.21
- '@vue/shared@3.5.18':
- resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==}
-
- '@vue/shared@3.5.22':
- resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==}
+ '@vue/shared@3.5.21':
+ resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==}
'@vueuse/core@13.6.0':
resolution: {integrity: sha512-DJbD5fV86muVmBgS9QQPddVX7d9hWYswzlf4bIyUD2dj8GC46R1uNClZhVAmsdVts4xb2jwp1PbpuiA50Qee1A==}
@@ -2169,26 +2153,6 @@ packages:
peerDependencies:
vue: ^3.5.0
- '@whatwg-node/disposablestack@0.0.6':
- resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==}
- engines: {node: '>=18.0.0'}
-
- '@whatwg-node/fetch@0.10.10':
- resolution: {integrity: sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w==}
- engines: {node: '>=18.0.0'}
-
- '@whatwg-node/node-fetch@0.7.25':
- resolution: {integrity: sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg==}
- engines: {node: '>=18.0.0'}
-
- '@whatwg-node/promise-helpers@1.3.2':
- resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==}
- engines: {node: '>=16.0.0'}
-
- '@whatwg-node/server@0.9.71':
- resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==}
- engines: {node: '>=18.0.0'}
-
abbrev@3.0.1:
resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -2219,23 +2183,23 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- alien-signals@2.0.5:
- resolution: {integrity: sha512-PdJB6+06nUNAClInE3Dweq7/2xVAYM64vvvS1IHVHSJmgeOtEdrAGyp7Z2oJtYm0B342/Exd2NT0uMJaThcjLQ==}
+ alien-signals@2.0.7:
+ resolution: {integrity: sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
ansis@4.1.0:
@@ -2265,27 +2229,23 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- arktype@2.1.20:
- resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==}
+ arktype@2.1.22:
+ resolution: {integrity: sha512-xdzl6WcAhrdahvRRnXaNwsipCgHuNoLobRqhiP8RjnfL9Gp947abGlo68GAIyLtxbD+MLzNyH2YR4kEqioMmYQ==}
ast-kit@1.4.3:
resolution: {integrity: sha512-MdJqjpodkS5J149zN0Po+HPshkTdUyrvF7CKTafUgv69vBSPtncrj+3IiUgqdd7ElIEkbeXCsEouBUwLrw9Ilg==}
engines: {node: '>=16.14.0'}
- ast-kit@2.1.1:
- resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==}
+ ast-kit@2.1.2:
+ resolution: {integrity: sha512-cl76xfBQM6pztbrFWRnxbrDm9EOqDr1BF6+qQnnDZG2Co2LjyUktkN9GTJfBAfdae+DbT2nJf2nCGAdDDN7W2g==}
engines: {node: '>=20.18.0'}
- ast-module-types@6.0.1:
- resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==}
- engines: {node: '>=18'}
-
ast-walker-scope@0.6.2:
resolution: {integrity: sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==}
engines: {node: '>=16.14.0'}
- ast-walker-scope@0.8.1:
- resolution: {integrity: sha512-72XOdbzQCMKERvFrxAykatn2pu7osPNq/sNUzwcHdWzwPvOsNpPqkawfDXVvQbA2RT+ivtsMNjYdojTUZitt1A==}
+ ast-walker-scope@0.8.2:
+ resolution: {integrity: sha512-3pYeLyDZ6nJew9QeBhS4Nly02269Dkdk32+zdbbKmL6n4ZuaGorwwA+xx12xgOciA8BF1w9x+dlH7oUkFTW91w==}
engines: {node: '>=20.18.0'}
async-sema@3.1.1:
@@ -2308,20 +2268,25 @@ packages:
peerDependencies:
postcss: ^8.1.0
- axios@1.12.0:
- resolution: {integrity: sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==}
+ axios@1.12.2:
+ resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==}
- b4a@1.6.7:
- resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
+ b4a@1.7.1:
+ resolution: {integrity: sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==}
+ peerDependencies:
+ react-native-b4a: '*'
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- bare-events@2.6.0:
- resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==}
+ bare-events@2.7.0:
+ resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==}
- bare-fs@4.1.6:
- resolution: {integrity: sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==}
+ bare-fs@4.4.4:
+ resolution: {integrity: sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==}
engines: {bare: '>=1.16.0'}
peerDependencies:
bare-buffer: '*'
@@ -2329,15 +2294,15 @@ packages:
bare-buffer:
optional: true
- bare-os@3.6.1:
- resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==}
+ bare-os@3.6.2:
+ resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==}
engines: {bare: '>=1.14.0'}
bare-path@3.0.0:
resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
- bare-stream@2.6.5:
- resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==}
+ bare-stream@2.7.0:
+ resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==}
peerDependencies:
bare-buffer: '*'
bare-events: '*'
@@ -2347,9 +2312,16 @@ packages:
bare-events:
optional: true
+ bare-url@2.2.2:
+ resolution: {integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==}
+
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ baseline-browser-mapping@2.8.6:
+ resolution: {integrity: sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==}
+ hasBin: true
+
basic-auth@2.0.1:
resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==}
engines: {node: '>= 0.8'}
@@ -2358,6 +2330,9 @@ packages:
resolution: {integrity: sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==}
hasBin: true
+ bidi-js@1.0.3:
+ resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
+
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
@@ -2390,14 +2365,11 @@ packages:
brotli@1.3.3:
resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==}
- browserslist@4.25.1:
- resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
+ browserslist@4.26.2:
+ resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- buffer-crc32@0.2.13:
- resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
-
buffer-crc32@1.0.0:
resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
engines: {node: '>=8.0.0'}
@@ -2411,10 +2383,6 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- builtin-modules@3.3.0:
- resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
- engines: {node: '>=6'}
-
builtin-modules@5.0.0:
resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==}
engines: {node: '>=18.20'}
@@ -2429,8 +2397,16 @@ packages:
peerDependencies:
esbuild: '>=0.18'
- c12@3.2.0:
- resolution: {integrity: sha512-ixkEtbYafL56E6HiFuonMm1ZjoKtIo7TH68/uiEq4DAwv9NcUX2nJ95F8TrbMeNjqIkZpruo3ojXQJ+MGG5gcQ==}
+ c12@3.1.0:
+ resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==}
+ peerDependencies:
+ magicast: ^0.3.5
+ peerDependenciesMeta:
+ magicast:
+ optional: true
+
+ c12@3.3.0:
+ resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==}
peerDependencies:
magicast: ^0.3.5
peerDependenciesMeta:
@@ -2445,13 +2421,6 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
- call-bound@1.0.4:
- resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
- engines: {node: '>= 0.4'}
-
- callsite@1.0.0:
- resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==}
-
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@@ -2459,8 +2428,8 @@ packages:
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
- caniuse-lite@1.0.30001731:
- resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==}
+ caniuse-lite@1.0.30001743:
+ resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==}
canvas-renderer@2.2.1:
resolution: {integrity: sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg==}
@@ -2524,25 +2493,16 @@ packages:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'}
- color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
-
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
- color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
-
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
color-string@1.9.1:
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
- color@3.2.1:
- resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
-
color@4.2.3:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
@@ -2553,25 +2513,14 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- colorspace@1.1.4:
- resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==}
-
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
- commander@10.0.1:
- resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
- engines: {node: '>=14'}
-
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
- commander@12.1.0:
- resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
- engines: {node: '>=18'}
-
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -2583,9 +2532,6 @@ packages:
resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
engines: {node: '>= 12.0.0'}
- common-path-prefix@3.0.0:
- resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
-
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
@@ -2626,12 +2572,8 @@ packages:
resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
engines: {node: '>=12.13'}
- copy-file@11.0.0:
- resolution: {integrity: sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==}
- engines: {node: '>=18'}
-
- core-js-compat@3.44.0:
- resolution: {integrity: sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==}
+ core-js-compat@3.45.1:
+ resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -2645,10 +2587,6 @@ packages:
resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
engines: {node: '>= 14'}
- cron-parser@4.9.0:
- resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
- engines: {node: '>=12.0.0'}
-
croner@9.1.0:
resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==}
engines: {node: '>=18.0'}
@@ -2663,8 +2601,8 @@ packages:
crossws@0.3.5:
resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
- css-declaration-sorter@7.2.0:
- resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
+ css-declaration-sorter@7.3.0:
+ resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.0.9
@@ -2696,8 +2634,8 @@ packages:
cssfilter@0.0.10:
resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==}
- cssnano-preset-default@7.0.8:
- resolution: {integrity: sha512-d+3R2qwrUV3g4LEMOjnndognKirBZISylDZAF/TPeCWVjEwlXS2e4eN4ICkoobRe7pD3H6lltinKVyS1AJhdjQ==}
+ cssnano-preset-default@7.0.9:
+ resolution: {integrity: sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -2708,8 +2646,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- cssnano@7.1.0:
- resolution: {integrity: sha512-Pu3rlKkd0ZtlCUzBrKL1Z4YmhKppjC1H9jo7u1o4qaKqyhvixFgu5qLyNIAOjSTg9DjVPtUqdROq2EfpVMEe+w==}
+ cssnano@7.1.1:
+ resolution: {integrity: sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -2718,12 +2656,16 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ cssstyle@5.3.0:
+ resolution: {integrity: sha512-RveJPnk3m7aarYQ2bJ6iw+Urh55S6FzUiqtBq+TihnTDP4cI8y/TYDqGOyqgnG1J1a6BxJXZsV9JFSTulm9Z7g==}
+ engines: {node: '>=20'}
+
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
- data-uri-to-buffer@4.0.1:
- resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
- engines: {node: '>= 12'}
+ data-urls@6.0.0:
+ resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==}
+ engines: {node: '>=20'}
dateformat@4.6.3:
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
@@ -2754,8 +2696,8 @@ packages:
de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
- debug@4.4.1:
- resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -2763,8 +2705,8 @@ packages:
supports-color:
optional: true
- decache@4.6.2:
- resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==}
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
decode-named-character-reference@1.2.0:
resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
@@ -2780,6 +2722,10 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ deepmerge-ts@7.1.5:
+ resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==}
+ engines: {node: '>=16.0.0'}
+
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -2827,55 +2773,12 @@ packages:
engines: {node: '>=0.10'}
hasBin: true
- detect-libc@2.0.4:
- resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
+ detect-libc@2.1.0:
+ resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==}
engines: {node: '>=8'}
- detective-amd@6.0.1:
- resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==}
- engines: {node: '>=18'}
- hasBin: true
-
- detective-cjs@6.0.1:
- resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==}
- engines: {node: '>=18'}
-
- detective-es6@5.0.1:
- resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==}
- engines: {node: '>=18'}
-
- detective-postcss@7.0.1:
- resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==}
- engines: {node: ^14.0.0 || >=16.0.0}
- peerDependencies:
- postcss: ^8.4.47
-
- detective-sass@6.0.1:
- resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==}
- engines: {node: '>=18'}
-
- detective-scss@5.0.1:
- resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==}
- engines: {node: '>=18'}
-
- detective-stylus@5.0.1:
- resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==}
- engines: {node: '>=18'}
-
- detective-typescript@14.0.0:
- resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==}
- engines: {node: '>=18'}
- peerDependencies:
- typescript: ^5.4.4
-
- detective-vue2@2.2.0:
- resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==}
- engines: {node: '>=18'}
- peerDependencies:
- typescript: ^5.4.4
-
- devalue@5.1.1:
- resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
+ devalue@5.3.2:
+ resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
@@ -2908,8 +2811,8 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
- dotenv@17.2.1:
- resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==}
+ dotenv@17.2.2:
+ resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==}
engines: {node: '>=12'}
dunder-proto@1.0.1:
@@ -2925,8 +2828,11 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.194:
- resolution: {integrity: sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==}
+ effect@3.16.12:
+ resolution: {integrity: sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==}
+
+ electron-to-chromium@1.5.222:
+ resolution: {integrity: sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2934,8 +2840,9 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- enabled@2.0.0:
- resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==}
+ empathic@2.0.0:
+ resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
+ engines: {node: '>=14'}
encodeurl@2.0.0:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
@@ -2947,8 +2854,8 @@ packages:
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
- enhanced-resolve@5.18.2:
- resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==}
+ enhanced-resolve@5.18.3:
+ resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
entities@4.5.0:
@@ -2959,10 +2866,6 @@ packages:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
- env-paths@3.0.0:
- resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
error-stack-parser-es@1.0.5:
resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
@@ -2988,13 +2891,8 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- esbuild@0.25.5:
- resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
- engines: {node: '>=18'}
- hasBin: true
-
- esbuild@0.25.8:
- resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==}
+ esbuild@0.25.10:
+ resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
engines: {node: '>=18'}
hasBin: true
@@ -3039,8 +2937,8 @@ packages:
peerDependencies:
eslint: '>=7.0.0'
- eslint-flat-config-utils@2.1.1:
- resolution: {integrity: sha512-K8eaPkBemHkfbYsZH7z4lZ/tt6gNSsVh535Wh9W9gQBS2WjvfUbbVr2NZR3L1yiRCLuOEimYfPxCxODczD4Opg==}
+ eslint-flat-config-utils@2.1.4:
+ resolution: {integrity: sha512-bEnmU5gqzS+4O+id9vrbP43vByjF+8KOs+QuuV4OlqAuXmnRW2zfI/Rza1fQvdihQ5h4DUo0NqFAiViD4mSrzQ==}
eslint-import-context@0.1.9:
resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==}
@@ -3079,14 +2977,14 @@ packages:
eslint-import-resolver-node:
optional: true
- eslint-plugin-jsdoc@51.4.1:
- resolution: {integrity: sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==}
+ eslint-plugin-jsdoc@54.7.0:
+ resolution: {integrity: sha512-u5Na4he2+6kY1rWqxzbQaAwJL3/tDCuT5ElDRc5UJ9stOeQeQ5L1JJ1kRRu7ldYMlOHMCJLsY8Mg/Tu3ExdZiQ==}
engines: {node: '>=20.11.0'}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
- eslint-plugin-regexp@2.9.0:
- resolution: {integrity: sha512-9WqJMnOq8VlE/cK+YAo9C9YHhkOtcEtEk9d12a+H7OSZFwlpI6stiHmYPGa2VE0QhTzodJyhlyprUaXDZLgHBw==}
+ eslint-plugin-regexp@2.10.0:
+ resolution: {integrity: sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==}
engines: {node: ^18 || >=20}
peerDependencies:
eslint: '>=8.44.0'
@@ -3131,8 +3029,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.31.0:
- resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==}
+ eslint@9.36.0:
+ resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -3199,13 +3097,9 @@ packages:
exsolve@1.0.7:
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
- externality@1.0.2:
- resolution: {integrity: sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==}
-
- extract-zip@2.0.1:
- resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
- engines: {node: '>= 10.17.0'}
- hasBin: true
+ fast-check@3.23.2:
+ resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==}
+ engines: {node: '>=8.0.0'}
fast-copy@3.0.2:
resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==}
@@ -3229,8 +3123,8 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fast-npm-meta@0.4.4:
- resolution: {integrity: sha512-cq8EVW3jpX1U3dO1AYanz2BJ6n9ITQgCwE1xjNwI5jO2a9erE369OZNO8Wt/Wbw8YHhCD/dimH9BxRsY+6DinA==}
+ fast-npm-meta@0.4.6:
+ resolution: {integrity: sha512-zbBBOAOlzxfrU4WSnbCHk/nR6Vf32lSEPxDEvNOR08Z5DSZ/A6qJu0rqrHVcexBTd1hc2gim998xnqF/R1PuEw==}
fast-redact@3.5.0:
resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
@@ -3242,24 +3136,15 @@ packages:
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
- fd-slicer@1.1.0:
- resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
-
- fdir@6.4.6:
- resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
- fecha@4.2.3:
- resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
-
- fetch-blob@3.2.0:
- resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
- engines: {node: ^12.20 || >= 14.13}
-
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
@@ -3278,10 +3163,6 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- filter-obj@6.1.0:
- resolution: {integrity: sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==}
- engines: {node: '>=18'}
-
find-up-simple@1.0.1:
resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
engines: {node: '>=18'}
@@ -3301,9 +3182,6 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- fn.name@1.1.0:
- resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
-
follow-redirects@1.15.11:
resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
engines: {node: '>=4.0'}
@@ -3327,10 +3205,6 @@ packages:
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
engines: {node: '>= 6'}
- formdata-polyfill@4.0.10:
- resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
- engines: {node: '>=12.20.0'}
-
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
@@ -3341,8 +3215,8 @@ packages:
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
- fs-extra@11.3.0:
- resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
+ fs-extra@11.3.2:
+ resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
engines: {node: '>=14.14'}
fs-extra@8.1.0:
@@ -3365,10 +3239,6 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- get-amd-module-type@6.0.1:
- resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==}
- engines: {node: '>=18'}
-
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -3384,10 +3254,6 @@ packages:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
- get-stream@5.2.0:
- resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
- engines: {node: '>=8'}
-
get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
@@ -3428,19 +3294,14 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
- globals@16.3.0:
- resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
+ globals@16.4.0:
+ resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
engines: {node: '>=18'}
globby@14.1.0:
resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==}
engines: {node: '>=18'}
- gonzales-pe@4.3.0:
- resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==}
- engines: {node: '>=0.6.0'}
- hasBin: true
-
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -3458,8 +3319,8 @@ packages:
resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- h3@1.15.3:
- resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==}
+ h3@1.15.4:
+ resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==}
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -3487,9 +3348,9 @@ packages:
hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
- hosted-git-info@7.0.2:
- resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
- engines: {node: ^16.14.0 || >=18.0.0}
+ html-encoding-sniffer@4.0.0:
+ resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
+ engines: {node: '>=18'}
htmlparser2@10.0.0:
resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
@@ -3498,6 +3359,10 @@ packages:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
http-shutdown@1.2.2:
resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==}
engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
@@ -3549,10 +3414,6 @@ packages:
resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
engines: {node: '>=12'}
- index-to-position@1.1.0:
- resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==}
- engines: {node: '>=18'}
-
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -3574,17 +3435,13 @@ packages:
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
- is-arrayish@0.3.2:
- resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+ is-arrayish@0.3.4:
+ resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
- is-builtin-module@3.2.1:
- resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
- engines: {node: '>=6'}
-
is-builtin-module@5.0.0:
resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
engines: {node: '>=18.20'}
@@ -3638,9 +3495,8 @@ packages:
resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
engines: {node: '>=12'}
- is-plain-obj@2.1.0:
- resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
- engines: {node: '>=8'}
+ is-potential-custom-element-name@1.0.1:
+ resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
is-reference@1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
@@ -3656,17 +3512,6 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- is-stream@4.0.1:
- resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
- engines: {node: '>=18'}
-
- is-url-superb@4.0.0:
- resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==}
- engines: {node: '>=10'}
-
- is-url@1.2.4:
- resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
-
is-what@4.1.16:
resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
engines: {node: '>=12.13'}
@@ -3701,10 +3546,6 @@ packages:
engines: {node: '>=6.4.0'}
hasBin: true
- jiti@2.4.2:
- resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
- hasBin: true
-
jiti@2.5.1:
resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
hasBin: true
@@ -3713,8 +3554,8 @@ packages:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
- js-base64@3.7.7:
- resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==}
+ js-base64@3.7.8:
+ resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -3726,10 +3567,23 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
- jsdoc-type-pratt-parser@4.1.0:
- resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==}
+ jsdoc-type-pratt-parser@4.8.0:
+ resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==}
engines: {node: '>=12.0.0'}
+ jsdoc-type-pratt-parser@5.1.1:
+ resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==}
+ engines: {node: '>=12.0.0'}
+
+ jsdom@27.0.0:
+ resolution: {integrity: sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ canvas: ^3.0.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
jsesc@3.0.2:
resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
engines: {node: '>=6'}
@@ -3767,16 +3621,8 @@ packages:
jsonfile@5.0.0:
resolution: {integrity: sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==}
- jsonfile@6.1.0:
- resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
-
- junk@4.0.1:
- resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==}
- engines: {node: '>=12.20'}
-
- jwt-decode@4.0.0:
- resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
- engines: {node: '>=18'}
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -3796,16 +3642,8 @@ packages:
knitwork@1.2.0:
resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==}
- kuler@2.0.0:
- resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
-
- lambda-local@2.2.0:
- resolution: {integrity: sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==}
- engines: {node: '>=8'}
- hasBin: true
-
- launch-editor@2.11.0:
- resolution: {integrity: sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ==}
+ launch-editor@2.11.1:
+ resolution: {integrity: sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==}
lazystream@1.0.1:
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
@@ -3891,8 +3729,8 @@ packages:
resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- local-pkg@1.1.1:
- resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
+ local-pkg@1.1.2:
+ resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
engines: {node: '>=14'}
locate-path@6.0.0:
@@ -3903,24 +3741,12 @@ packages:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- lodash-es@4.17.21:
- resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
-
- lodash.castarray@4.4.0:
- resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
-
- lodash.debounce@4.0.8:
- resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-
lodash.defaults@4.2.0:
resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
lodash.isarguments@3.1.0:
resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
- lodash.isplainobject@4.0.6:
- resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
-
lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
@@ -3933,18 +3759,18 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- logform@2.7.0:
- resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==}
- engines: {node: '>= 12.0.0'}
-
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ lru-cache@11.2.1:
+ resolution: {integrity: sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==}
+ engines: {node: 20 || >=22}
+
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- luxon@3.7.1:
- resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==}
+ luxon@3.7.2:
+ resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines: {node: '>=12'}
magic-regexp@0.10.0:
@@ -3954,13 +3780,10 @@ packages:
resolution: {integrity: sha512-ub9iytsEbT7Yw/Pd29mSo/cNQpaEu67zR1VVcXDiYjSFwzeBxNdTd0FMnSslLQXiRj8uGPzwsaoefrMD5XAmdw==}
engines: {node: '>=16.14.0'}
- magic-string-ast@1.0.0:
- resolution: {integrity: sha512-8rbuNizut2gW94kv7pqgt0dvk+AHLPVIm0iJtpSgQJ9dx21eWx5SBel8z3jp1xtC0j6/iyK3AWGhAR1H61s7LA==}
+ magic-string-ast@1.0.2:
+ resolution: {integrity: sha512-8ngQgLhcT0t3YBdn9CGkZqCYlvwW9pm7aWJwd7AxseVWf1RU8ZHCQvG1mt3N5vvUme+pXTcHB8G/7fE666U8Vw==}
engines: {node: '>=20.18.0'}
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
-
magic-string@0.30.19:
resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
@@ -3980,10 +3803,6 @@ packages:
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
- merge-options@3.0.4:
- resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==}
- engines: {node: '>=10'}
-
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -3991,9 +3810,6 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- micro-api-client@3.3.0:
- resolution: {integrity: sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==}
-
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -4079,8 +3895,8 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
- mime@4.0.7:
- resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==}
+ mime@4.1.0:
+ resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==}
engines: {node: '>=16'}
hasBin: true
@@ -4092,10 +3908,6 @@ packages:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
- min-indent@1.0.1:
- resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
- engines: {node: '>=4'}
-
mini-svg-data-uri@1.4.4:
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
hasBin: true
@@ -4137,17 +3949,12 @@ packages:
engines: {node: '>=10'}
hasBin: true
- mlly@1.7.4:
- resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
mocked-exports@0.1.1:
resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==}
- module-definition@6.0.1:
- resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==}
- engines: {node: '>=18'}
- hasBin: true
-
mrmime@2.0.1:
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
engines: {node: '>=10'}
@@ -4174,21 +3981,17 @@ packages:
napi-build-utils@2.0.0:
resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
- napi-postinstall@0.3.2:
- resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==}
+ napi-postinstall@0.3.3:
+ resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
hasBin: true
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- netlify@13.3.5:
- resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==}
- engines: {node: ^14.16.0 || >=16.0.0}
-
- nitropack@2.12.4:
- resolution: {integrity: sha512-MPmPRJWTeH03f/NmpN4q3iI3Woik4uaaWIoX34W3gMJiW06Vm1te/lPzuu5EXpXOK7Q2m3FymGMPXcExqih96Q==}
- engines: {node: ^16.11.0 || >=17.0.0}
+ nitropack@2.12.6:
+ resolution: {integrity: sha512-DEq31s0SP4/Z5DIoVBRo9DbWFPWwIoYD4cQMEz7eE+iJMiAP+1k9A3B9kcc6Ihc0jDJmfUcHYyh6h2XlynCx6g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
xml2js: ^0.6.2
@@ -4196,8 +3999,8 @@ packages:
xml2js:
optional: true
- node-abi@3.75.0:
- resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==}
+ node-abi@3.77.0:
+ resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==}
engines: {node: '>=10'}
node-addon-api@6.1.0:
@@ -4210,13 +4013,8 @@ packages:
resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==}
engines: {node: ^18 || ^20 || >= 21}
- node-domexception@1.0.0:
- resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
- engines: {node: '>=10.5.0'}
- deprecated: Use your platform's native DOMException instead
-
- node-fetch-native@1.6.6:
- resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
+ node-fetch-native@1.6.7:
+ resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
@@ -4227,10 +4025,6 @@ packages:
encoding:
optional: true
- node-fetch@3.3.2:
- resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
node-forge@1.3.1:
resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
engines: {node: '>= 6.13.0'}
@@ -4239,29 +4033,17 @@ packages:
resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
hasBin: true
- node-mock-http@1.0.2:
- resolution: {integrity: sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==}
+ node-mock-http@1.0.3:
+ resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==}
- node-releases@2.0.19:
- resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
-
- node-source-walk@7.0.1:
- resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==}
- engines: {node: '>=18'}
+ node-releases@2.0.21:
+ resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
nopt@8.1.0:
resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
engines: {node: ^18.17.0 || >=20.5.0}
hasBin: true
- normalize-package-data@6.0.2:
- resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==}
- engines: {node: ^16.14.0 || >=18.0.0}
-
- normalize-path@2.1.1:
- resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
- engines: {node: '>=0.10.0'}
-
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
@@ -4270,8 +4052,8 @@ packages:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
- normalize-url@8.0.2:
- resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==}
+ normalize-url@8.1.0:
+ resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==}
engines: {node: '>=14.16'}
npm-run-path@5.3.0:
@@ -4292,28 +4074,24 @@ packages:
resolution: {integrity: sha512-bTdgAAAdnvM1R1wAX3zQBbYJh6YNFyvsKJwbT9oVv+0U9J/9+k+mufQlJMFO8AdTefi/EDFHG75in9RTnCpngQ==}
engines: {node: '>=18.0.0'}
- nuxt@3.17.7:
- resolution: {integrity: sha512-1xl1HcKIbDHpNMW6pXhVhSM5Po51FW14mooyw5ZK5G+wMb0P+uzI/f7xmlaRkBv5Q8ZzUIH6gVUh3KyiucLn+w==}
- engines: {node: ^20.9.0 || >=22.0.0}
+ nuxt@4.1.2:
+ resolution: {integrity: sha512-g5mwszCZT4ZeGJm83nxoZvtvZoAEaY65VDdn7p7UgznePbRaEJJ1KS1OIld4FPVkoDZ8TEVuDNqI9gUn12Exvg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@parcel/watcher': ^2.1.0
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@types/node': '>=18.12.0'
peerDependenciesMeta:
'@parcel/watcher':
optional: true
'@types/node':
optional: true
- nypm@0.6.1:
- resolution: {integrity: sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==}
+ nypm@0.6.2:
+ resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==}
engines: {node: ^14.16.0 || >=16.10.0}
hasBin: true
- object-inspect@1.13.4:
- resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
- engines: {node: '>= 0.4'}
-
ofetch@1.4.1:
resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
@@ -4335,9 +4113,6 @@ packages:
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- one-time@1.0.0:
- resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==}
-
onetime@6.0.0:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'}
@@ -4354,17 +4129,26 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
+ oxc-minify@0.87.0:
+ resolution: {integrity: sha512-+UHWp6+0mdq0S2rEsZx9mqgL6JnG9ogO+CU17XccVrPUFtISFcZzk/biTn1JdBYFQ3kztof19pv8blMtgStQ2g==}
+ engines: {node: '>=14.0.0'}
+
oxc-parser@0.70.0:
resolution: {integrity: sha512-YbqTuQDDIYwQF/li0VFK5uTbmHV4jWFeQQONkPdf77vz+JMiq7SusmcSVZ4hBrGM+3WyLdKH5S7spnvz4XVVzQ==}
engines: {node: '>=14.0.0'}
- oxc-parser@0.76.0:
- resolution: {integrity: sha512-l98B2e9evuhES7zN99rb1QGhbzx25829TJFaKi2j0ib3/K/G5z1FdGYz6HZkrU3U8jdH7v2FC8mX1j2l9JrOUg==}
+ oxc-parser@0.87.0:
+ resolution: {integrity: sha512-uc47XrtHwkBoES4HFgwgfH9sqwAtJXgAIBq4fFBMZ4hWmgVZoExyn+L4g4VuaecVKXkz1bvlaHcfwHAJPQb5Gw==}
engines: {node: '>=20.0.0'}
- p-event@6.0.1:
- resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==}
- engines: {node: '>=16.17'}
+ oxc-transform@0.87.0:
+ resolution: {integrity: sha512-dt6INKWY2DKbSc8yR9VQoqBsCjPQ3z/SKv882UqlwFve+K38xtpi2avDlvNd35SpHUwDLDFoV3hMX0U3qOSaaQ==}
+ engines: {node: '>=14.0.0'}
+
+ oxc-walker@0.5.2:
+ resolution: {integrity: sha512-XYoZqWwApSKUmSDEFeOKdy3Cdh95cOcSU8f7yskFWE4Rl3cfL5uwyY+EV7Brk9mdNLy+t5SseJajd6g7KncvlA==}
+ peerDependencies:
+ oxc-parser: '>=0.72.0'
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
@@ -4386,14 +4170,6 @@ packages:
resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==}
engines: {node: '>=18'}
- p-timeout@6.1.4:
- resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==}
- engines: {node: '>=14.16'}
-
- p-wait-for@5.0.2:
- resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==}
- engines: {node: '>=12'}
-
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
@@ -4407,17 +4183,9 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
- parse-gitignore@2.0.0:
- resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==}
- engines: {node: '>=14'}
-
parse-imports-exports@0.2.4:
resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
- parse-json@8.3.0:
- resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==}
- engines: {node: '>=18'}
-
parse-path@7.1.0:
resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==}
@@ -4481,12 +4249,12 @@ packages:
resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==}
engines: {node: '>=14.16'}
- pend@1.2.0:
- resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
-
perfect-debounce@1.0.0:
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+ perfect-debounce@2.0.0:
+ resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -4501,22 +4269,22 @@ packages:
pino-abstract-transport@2.0.0:
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
- pino-pretty@13.0.0:
- resolution: {integrity: sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==}
+ pino-pretty@13.1.1:
+ resolution: {integrity: sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA==}
hasBin: true
pino-std-serializers@7.0.0:
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
- pino@9.7.0:
- resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==}
+ pino@9.10.0:
+ resolution: {integrity: sha512-VOFxoNnxICtxaN8S3E73pR66c5MTFC+rwRcNRyHV/bV/c90dXvJqMfjkeRFsGBDXmlUN3LccJQPqGIufnaJePA==}
hasBin: true
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
- pkg-types@2.2.0:
- resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==}
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
@@ -4534,8 +4302,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-convert-values@7.0.6:
- resolution: {integrity: sha512-MD/eb39Mr60hvgrqpXsgbiqluawYg/8K4nKsqRsuDX9f+xN1j6awZCUv/5tLH8ak3vYp/EMXwdcnXvfZYiejCQ==}
+ postcss-convert-values@7.0.7:
+ resolution: {integrity: sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -4699,12 +4467,6 @@ packages:
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss-values-parser@6.0.2:
- resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==}
- engines: {node: '>=10'}
- peerDependencies:
- postcss: ^8.2.9
-
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
@@ -4714,11 +4476,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
- precinct@12.2.0:
- resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==}
- engines: {node: '>=18'}
- hasBin: true
-
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -4728,12 +4485,12 @@ packages:
engines: {node: '>=14'}
hasBin: true
- pretty-bytes@6.1.1:
- resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
- engines: {node: ^14.13.1 || >=16.0.0}
+ pretty-bytes@7.0.1:
+ resolution: {integrity: sha512-285/jRCYIbMGDciDdrw0KPNC4LKEEwz/bwErcYNxSJOi4CpGUuLpb9gQpg3XJP0XYj9ldSRluXxih4lX2YN8Xw==}
+ engines: {node: '>=20'}
- prisma@6.12.0:
- resolution: {integrity: sha512-pmV7NEqQej9WjizN6RSNIwf7Y+jeh9mY1JEX2WjGxJi4YZWexClhde1yz/FuvAM+cTwzchcMytu2m4I6wPkIzg==}
+ prisma@6.16.2:
+ resolution: {integrity: sha512-aRvldGE5UUJTtVmFiH3WfNFNiqFlAtePUxcI0UEGlnXCX7DqhiMT5TRYwncHFeA/Reca5W6ToXXyCMTeFPdSXA==}
engines: {node: '>=18.18'}
hasBin: true
peerDependencies:
@@ -4769,12 +4526,11 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- qs@6.14.0:
- resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
- engines: {node: '>=0.6'}
+ pure-rand@6.1.0:
+ resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
- quansync@0.2.10:
- resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
+ quansync@0.2.11:
+ resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -4782,9 +4538,6 @@ packages:
quick-format-unescaped@4.0.4:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
- quote-unquote@1.0.0:
- resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==}
-
radix3@1.1.2:
resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
@@ -4802,14 +4555,6 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
- read-package-up@11.0.0:
- resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==}
- engines: {node: '>=18'}
-
- read-pkg@9.0.1:
- resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==}
- engines: {node: '>=18'}
-
readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
@@ -4864,15 +4609,13 @@ packages:
resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==}
hasBin: true
- remove-trailing-separator@1.1.0:
- resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
-
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
- require-package-name@2.0.1:
- resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==}
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
@@ -4890,10 +4633,6 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
- resolve@2.0.0-next.5:
- resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
- hasBin: true
-
restructure@3.0.2:
resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==}
@@ -4917,13 +4656,16 @@ packages:
rollup:
optional: true
- rollup@4.46.2:
- resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==}
+ rollup@4.52.0:
+ resolution: {integrity: sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- run-applescript@7.0.0:
- resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
+ rrweb-cssom@0.8.0:
+ resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
+
+ run-applescript@7.1.0:
+ resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
engines: {node: '>=18'}
run-parallel@1.2.0:
@@ -4945,14 +4687,18 @@ packages:
sanitize-filename@1.6.3:
resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==}
- sass@1.89.2:
- resolution: {integrity: sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==}
+ sass@1.93.0:
+ resolution: {integrity: sha512-CQi5/AzCwiubU3dSqRDJ93RfOfg/hhpW1l6wCIvolmehfwgCI35R/0QDs1+R+Ygrl8jFawwwIojE2w47/mf94A==}
engines: {node: '>=14.0.0'}
hasBin: true
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+ saxes@6.0.0:
+ resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
+ engines: {node: '>=v12.22.7'}
+
scslre@0.3.0:
resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
engines: {node: ^14.0.0 || >=16.0.0}
@@ -4960,8 +4706,8 @@ packages:
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
- secure-json-parse@2.7.0:
- resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
+ secure-json-parse@4.0.0:
+ resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
@@ -5005,22 +4751,6 @@ packages:
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines: {node: '>= 0.4'}
- side-channel-list@1.0.0:
- resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
- engines: {node: '>= 0.4'}
-
- side-channel-map@1.0.1:
- resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
- engines: {node: '>= 0.4'}
-
- side-channel-weakmap@1.0.2:
- resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
- engines: {node: '>= 0.4'}
-
- side-channel@1.1.0:
- resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
- engines: {node: '>= 0.4'}
-
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
@@ -5034,11 +4764,11 @@ packages:
simple-git@3.28.0:
resolution: {integrity: sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==}
- simple-swizzle@0.2.2:
- resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+ simple-swizzle@0.2.4:
+ resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
- sirv@3.0.1:
- resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
+ sirv@3.0.2:
+ resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
engines: {node: '>=18'}
sisteransi@1.0.5:
@@ -5072,20 +4802,14 @@ packages:
resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
engines: {node: '>= 12'}
- spdx-correct@3.2.0:
- resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
-
spdx-exceptions@2.5.0:
resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
- spdx-expression-parse@3.0.1:
- resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
-
spdx-expression-parse@4.0.0:
resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
- spdx-license-ids@3.0.21:
- resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
+ spdx-license-ids@3.0.22:
+ resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
speakingurl@14.0.1:
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
@@ -5099,9 +4823,6 @@ packages:
resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
engines: {node: '>=12.0.0'}
- stack-trace@0.0.10:
- resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
-
standard-as-callback@2.1.0:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
@@ -5145,16 +4866,16 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
strip-final-newline@3.0.0:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
- strip-indent@4.0.0:
- resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
+ strip-indent@4.1.0:
+ resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==}
engines: {node: '>=12'}
strip-json-comments@2.0.1:
@@ -5165,6 +4886,10 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ strip-json-comments@5.0.3:
+ resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==}
+ engines: {node: '>=14.16'}
+
strip-literal@3.0.0:
resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
@@ -5185,8 +4910,8 @@ packages:
resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
engines: {node: '>=16'}
- supports-color@10.0.0:
- resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==}
+ supports-color@10.2.2:
+ resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
engines: {node: '>=18'}
supports-color@7.2.0:
@@ -5207,6 +4932,9 @@ packages:
engines: {node: '>=16'}
hasBin: true
+ symbol-tree@3.2.4:
+ resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+
synckit@0.10.4:
resolution: {integrity: sha512-2SG1TnJGjMkD4+gblONMGYSrwAzYi+ymOitD+Jb/iMYm57nH20PlkVeMQRah3yDMKEa0QQYUF/QPWpdW7C6zNg==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -5215,18 +4943,18 @@ packages:
resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==}
engines: {node: '>=18'}
- tailwindcss@4.1.11:
- resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==}
+ tailwindcss@4.1.13:
+ resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==}
- tapable@2.2.2:
- resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
+ tapable@2.2.3:
+ resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
engines: {node: '>=6'}
- tar-fs@2.1.3:
- resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==}
+ tar-fs@2.1.4:
+ resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==}
- tar-fs@3.1.0:
- resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==}
+ tar-fs@3.1.1:
+ resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==}
tar-stream@2.2.0:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
@@ -5239,17 +4967,14 @@ packages:
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
engines: {node: '>=18'}
- terser@5.43.1:
- resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==}
+ terser@5.44.0:
+ resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==}
engines: {node: '>=10'}
hasBin: true
text-decoder@1.2.3:
resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
- text-hex@1.0.0:
- resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==}
-
thread-stream@3.1.0:
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
@@ -5265,16 +4990,16 @@ packages:
tinyexec@1.0.1:
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
- tinyglobby@0.2.14:
- resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
- tmp-promise@3.0.3:
- resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==}
+ tldts-core@7.0.14:
+ resolution: {integrity: sha512-viZGNK6+NdluOJWwTO9olaugx0bkKhscIdriQQ+lNNhwitIKvb+SvhbYgnCz6j9p7dX3cJntt4agQAKMXLjJ5g==}
- tmp@0.2.3:
- resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
- engines: {node: '>=14.14'}
+ tldts@7.0.14:
+ resolution: {integrity: sha512-lMNHE4aSI3LlkMUMicTmAG3tkkitjOQGDTFboPJwAg2kJXKP1ryWEyqujktg5qhrFZOkk5YFzgkxg3jErE+i5w==}
+ hasBin: true
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -5288,9 +5013,6 @@ packages:
resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==}
engines: {node: '>=14.16'}
- toml@3.0.0:
- resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
-
tosource@2.0.0-alpha.3:
resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==}
engines: {node: '>=10'}
@@ -5299,12 +5021,16 @@ packages:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
+ tough-cookie@6.0.0:
+ resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
+ engines: {node: '>=16'}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- triple-beam@1.4.1:
- resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==}
- engines: {node: '>= 14.0.0'}
+ tr46@6.0.0:
+ resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==}
+ engines: {node: '>=20'}
truncate-utf8-bytes@1.0.2:
resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==}
@@ -5321,8 +5047,8 @@ packages:
tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
- turndown@7.2.0:
- resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==}
+ turndown@7.2.1:
+ resolution: {integrity: sha512-7YiPJw6rLClQL3oUKN3KgMaXeJJ2lAyZItclgKDurqnH61so4k4IH/qwmMva0zpuJc/FhRExBBnk7EbeFANlgQ==}
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
@@ -5335,8 +5061,8 @@ packages:
type-level-regexp@0.1.17:
resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==}
- typescript@5.8.3:
- resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ typescript@5.9.2:
+ resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
engines: {node: '>=14.17'}
hasBin: true
@@ -5358,15 +5084,15 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
- undici@7.13.0:
- resolution: {integrity: sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA==}
+ undici@7.16.0:
+ resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==}
engines: {node: '>=20.18.1'}
- unenv@2.0.0-rc.19:
- resolution: {integrity: sha512-t/OMHBNAkknVCI7bVB9OWjUUAwhVv9vsPIAGnNUxnu3FxPQN11rjh0sksLMzc3g7IlTgvHmOTl4JM7JHpcv5wA==}
+ unenv@2.0.0-rc.21:
+ resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==}
- unhead@2.0.13:
- resolution: {integrity: sha512-Q3lMTJnoGj8zNsqP/GWIIAd8W/hKKeOgErbsMSXDWdkIICUeIg9p7J5/0uDFREa684cReRz1NFxbrDaS+5rGMw==}
+ unhead@2.0.17:
+ resolution: {integrity: sha512-xX3PCtxaE80khRZobyWCVxeFF88/Tg9eJDcJWY9us727nsTC7C449B8BUfVBmiF2+3LjPcmqeoB2iuMs0U4oJQ==}
unicode-properties@1.4.1:
resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==}
@@ -5385,8 +5111,8 @@ packages:
unifont@0.4.1:
resolution: {integrity: sha512-zKSY9qO8svWYns+FGKjyVdLvpGPwqmsCjeJLN1xndMiqxHWBAhoWDMYMG960MxeV48clBmG+fDP59dHY1VoZvg==}
- unimport@5.2.0:
- resolution: {integrity: sha512-bTuAMMOOqIAyjV4i4UH7P07pO+EsVxmhOzQ2YJ290J6mkLUdozNhb5I/YoOEheeNADC03ent3Qj07X0fWfUpmw==}
+ unimport@5.3.0:
+ resolution: {integrity: sha512-cty7t1DESgm0OPfCy9oyn5u9B5t0tMW6tH6bXTjAGIO3SkJsbg/DXYHjrPrUKqultqbAAoltAfYsuu/FEDocjg==}
engines: {node: '>=18.12.0'}
universalify@0.1.2:
@@ -5397,17 +5123,17 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
- unixify@1.0.0:
- resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==}
- engines: {node: '>=0.10.0'}
-
unplugin-remove@1.0.3:
resolution: {integrity: sha512-BZMt9v8Y/Z27cY7YQv+DpcW928znjP1cqplBXOirbANiFQtM2YCdiyNAJhHCvjppT0lScNn1aDrQnXqnRp32pQ==}
- unplugin-utils@0.2.4:
- resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
+ unplugin-utils@0.2.5:
+ resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==}
engines: {node: '>=18.12.0'}
+ unplugin-utils@0.3.0:
+ resolution: {integrity: sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg==}
+ engines: {node: '>=20.19.0'}
+
unplugin-vue-router@0.12.0:
resolution: {integrity: sha512-xjgheKU0MegvXQcy62GVea0LjyOdMxN0/QH+ijN29W62ZlMhG7o7K+0AYqfpprvPwpWtuRjiyC5jnV2SxWye2w==}
peerDependencies:
@@ -5416,8 +5142,8 @@ packages:
vue-router:
optional: true
- unplugin-vue-router@0.14.0:
- resolution: {integrity: sha512-ipjunvS5e2aFHBAUFuLbHl2aHKbXXXBhTxGT9wZx66fNVPdEQzVVitF8nODr1plANhTTa3UZ+DQu9uyLngMzoQ==}
+ unplugin-vue-router@0.15.0:
+ resolution: {integrity: sha512-PyGehCjd9Ny9h+Uer4McbBjjib3lHihcyUEILa7pHKl6+rh8N7sFyw4ZkV+N30Oq2zmIUG7iKs3qpL0r+gXAaQ==}
peerDependencies:
'@vue/compiler-sfc': ^3.5.17
vue-router: ^4.5.1
@@ -5429,15 +5155,15 @@ packages:
resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
engines: {node: '>=14.0.0'}
- unplugin@2.3.5:
- resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==}
+ unplugin@2.3.10:
+ resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==}
engines: {node: '>=18.12.0'}
unrs-resolver@1.11.1:
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
- unstorage@1.16.1:
- resolution: {integrity: sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==}
+ unstorage@1.17.1:
+ resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==}
peerDependencies:
'@azure/app-configuration': ^1.8.0
'@azure/cosmos': ^4.2.0
@@ -5451,6 +5177,7 @@ packages:
'@planetscale/database': ^1.19.0
'@upstash/redis': ^1.34.3
'@vercel/blob': '>=0.27.1'
+ '@vercel/functions': ^2.2.12 || ^3.0.0
'@vercel/kv': ^1.0.1
aws4fetch: ^1.0.20
db0: '>=0.2.1'
@@ -5482,6 +5209,8 @@ packages:
optional: true
'@vercel/blob':
optional: true
+ '@vercel/functions':
+ optional: true
'@vercel/kv':
optional: true
aws4fetch:
@@ -5503,8 +5232,8 @@ packages:
resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==}
hasBin: true
- unwasm@0.3.9:
- resolution: {integrity: sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==}
+ unwasm@0.3.11:
+ resolution: {integrity: sha512-Vhp5gb1tusSQw5of/g3Q697srYgMXvwMgXMjcG4ZNga02fDX9coxJ9fAb0Ci38hM2Hv/U1FXRPGgjP2BYqhNoQ==}
update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
@@ -5518,25 +5247,12 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
- urlpattern-polyfill@10.1.0:
- resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==}
-
- urlpattern-polyfill@8.0.2:
- resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==}
-
utf8-byte-length@1.0.5:
resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- uuid@11.1.0:
- resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
- hasBin: true
-
- validate-npm-package-license@3.0.4:
- resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
-
vite-dev-rpc@1.1.0:
resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==}
peerDependencies:
@@ -5552,8 +5268,8 @@ packages:
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
- vite-plugin-checker@0.10.1:
- resolution: {integrity: sha512-imiBsmYTPdjQHIZiEi5BhJ7K8Z/kCjTFMn+Qa4+5ao/a4Yql4yWFcf81FDJqlMiM57iY4Q3Z7PdoEe4KydULYQ==}
+ vite-plugin-checker@0.10.3:
+ resolution: {integrity: sha512-f4sekUcDPF+T+GdbbE8idb1i2YplBAoH+SfRS0e/WRBWb2rYb1Jf5Pimll0Rj+3JgIYWwG2K5LtBPCXxoibkLg==}
engines: {node: '>=14.16'}
peerDependencies:
'@biomejs/biome': '>=1.7'
@@ -5586,8 +5302,8 @@ packages:
vue-tsc:
optional: true
- vite-plugin-inspect@11.3.2:
- resolution: {integrity: sha512-nzwvyFQg58XSMAmKVLr2uekAxNYvAbz1lyPmCAFVIBncCgN9S/HPM+2UM9Q9cvc4JEbC5ZBgwLAdaE2onmQuKg==}
+ vite-plugin-inspect@11.3.3:
+ resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==}
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': '*'
@@ -5608,48 +5324,8 @@ packages:
vite: ^6.0.0 || ^7.0.0
vue: ^3.5.0
- vite@6.3.5:
- resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
- 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
-
- vite@7.0.6:
- resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==}
+ vite@7.1.6:
+ resolution: {integrity: sha512-SRYIB8t/isTwNn8vMB3MR6E+EQZM/WG1aKmmIUCfDXfVvKfc20ZpamngWHKzAmmu9ppsgxsg4b2I7c90JZudIQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -5714,8 +5390,8 @@ packages:
peerDependencies:
vue: ^3.2.0
- vue-tsc@3.0.4:
- resolution: {integrity: sha512-kZmSEjGtROApVBuaIcoprrXZsFNGon5ggkTJokmhQ/H1hMzCFRPQ0Ed8IHYFsmYJYvHBcdmEQVGVcRuxzPzNbw==}
+ vue-tsc@3.0.7:
+ resolution: {integrity: sha512-BSMmW8GGEgHykrv7mRk6zfTdK+tw4MBZY/x6fFa7IkdXK3s/8hQRacPjG9/8YKFDIWGhBocwi6PlkQQ/93OgIQ==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
@@ -5733,8 +5409,8 @@ packages:
peerDependencies:
vue: ^3.5.0
- vue@3.5.22:
- resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==}
+ vue@3.5.21:
+ resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -5746,13 +5422,17 @@ packages:
peerDependencies:
vue: ^3.0.1
- web-streams-polyfill@3.3.3:
- resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
- engines: {node: '>= 8'}
+ w3c-xmlserializer@5.0.0:
+ resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
+ engines: {node: '>=18'}
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ webidl-conversions@8.0.0:
+ resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==}
+ engines: {node: '>=20'}
+
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
@@ -5764,6 +5444,10 @@ packages:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
+ whatwg-url@15.1.0:
+ resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==}
+ engines: {node: '>=20'}
+
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
@@ -5777,14 +5461,6 @@ packages:
engines: {node: ^18.17.0 || >=20.5.0}
hasBin: true
- winston-transport@4.9.0:
- resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==}
- engines: {node: '>= 12.0.0'}
-
- winston@3.17.0:
- resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==}
- engines: {node: '>= 12.0.0'}
-
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
@@ -5800,10 +5476,6 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- write-file-atomic@6.0.0:
- resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -5824,6 +5496,13 @@ packages:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
+ xml-name-validator@5.0.0:
+ resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
+ engines: {node: '>=18'}
+
+ xmlchars@2.2.0:
+ resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+
xss@1.0.15:
resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==}
engines: {node: '>= 0.10.0'}
@@ -5844,8 +5523,8 @@ packages:
resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==}
engines: {node: ^14.17.0 || >=16.0.0}
- yaml@2.8.0:
- resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
+ yaml@2.8.1:
+ resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
engines: {node: '>= 14.6'}
hasBin: true
@@ -5857,9 +5536,6 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
- yauzl@2.10.0:
- resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
-
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -5874,39 +5550,44 @@ packages:
youch@4.1.0-beta.11:
resolution: {integrity: sha512-sQi6PERyO/mT8w564ojOVeAlYTtVQmC2GaktQAf+IdI75/GKIggosBuvyVXvEV+FATAT6RbLdIjFoiIId4ozoQ==}
- youch@4.1.0-beta.8:
- resolution: {integrity: sha512-rY2A2lSF7zC+l7HH9Mq+83D1dLlsPnEvy8jTouzaptDZM6geqZ3aJe/b7ULCwRURPtWV3vbDjA2DDMdoBol0HQ==}
- engines: {node: '>=18'}
-
zip-stream@6.0.1:
resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
engines: {node: '>= 14'}
- zod@3.25.76:
- resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
-
snapshots:
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.12
- '@jridgewell/trace-mapping': 0.3.29
-
'@antfu/install-pkg@1.1.0':
dependencies:
package-manager-detector: 1.3.0
tinyexec: 1.0.1
- '@apidevtools/json-schema-ref-parser@14.1.1':
+ '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)':
dependencies:
'@types/json-schema': 7.0.15
js-yaml: 4.1.0
- '@ark/schema@0.46.0':
+ '@ark/schema@0.49.0':
dependencies:
- '@ark/util': 0.46.0
+ '@ark/util': 0.49.0
- '@ark/util@0.46.0': {}
+ '@ark/util@0.49.0': {}
+
+ '@asamuzakjp/css-color@4.0.4':
+ dependencies:
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ lru-cache: 11.2.1
+
+ '@asamuzakjp/dom-selector@6.5.5':
+ dependencies:
+ '@asamuzakjp/nwsapi': 2.3.9
+ bidi-js: 1.0.3
+ css-tree: 3.1.0
+ is-potential-custom-element-name: 1.0.1
+
+ '@asamuzakjp/nwsapi@2.3.9': {}
'@babel/code-frame@7.27.1':
dependencies:
@@ -5914,34 +5595,34 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/compat-data@7.28.0': {}
+ '@babel/compat-data@7.28.4': {}
- '@babel/core@7.28.0':
+ '@babel/core@7.28.4':
dependencies:
- '@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.0
+ '@babel/generator': 7.28.3
'@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0)
- '@babel/helpers': 7.28.2
- '@babel/parser': 7.28.0
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/helpers': 7.28.4
+ '@babel/parser': 7.28.4
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.0
- '@babel/types': 7.28.2
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ '@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
- debug: 4.4.1
+ debug: 4.4.3
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.28.0':
+ '@babel/generator@7.28.3':
dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.2
- '@jridgewell/gen-mapping': 0.3.12
- '@jridgewell/trace-mapping': 0.3.29
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
'@babel/helper-annotate-as-pure@7.27.3':
@@ -5950,21 +5631,21 @@ snapshots:
'@babel/helper-compilation-targets@7.27.2':
dependencies:
- '@babel/compat-data': 7.28.0
+ '@babel/compat-data': 7.28.4
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.25.1
+ browserslist: 4.26.2
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)':
+ '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)':
dependencies:
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-member-expression-to-functions': 7.27.1
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0)
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4)
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.28.4
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -5973,24 +5654,24 @@ snapshots:
'@babel/helper-member-expression-to-functions@7.27.1':
dependencies:
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.28.4
'@babel/types': 7.28.4
transitivePeerDependencies:
- supports-color
'@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.28.0
- '@babel/types': 7.28.2
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)':
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
dependencies:
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
'@babel/helper-module-imports': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.28.4
transitivePeerDependencies:
- supports-color
@@ -6000,18 +5681,18 @@ snapshots:
'@babel/helper-plugin-utils@7.27.1': {}
- '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)':
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)':
dependencies:
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
'@babel/helper-member-expression-to-functions': 7.27.1
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.28.4
transitivePeerDependencies:
- supports-color
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.28.4
'@babel/types': 7.28.4
transitivePeerDependencies:
- supports-color
@@ -6022,70 +5703,56 @@ snapshots:
'@babel/helper-validator-option@7.27.1': {}
- '@babel/helpers@7.28.2':
+ '@babel/helpers@7.28.4':
dependencies:
'@babel/template': 7.27.2
- '@babel/types': 7.28.2
-
- '@babel/parser@7.28.0':
- dependencies:
- '@babel/types': 7.28.2
+ '@babel/types': 7.28.4
'@babel/parser@7.28.4':
dependencies:
'@babel/types': 7.28.4
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)':
dependencies:
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)':
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)':
dependencies:
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.0)':
+ '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)':
dependencies:
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0)
+ '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4)
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
transitivePeerDependencies:
- supports-color
- '@babel/runtime@7.28.2': {}
+ '@babel/runtime@7.28.4': {}
'@babel/template@7.27.2':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.2
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
- '@babel/traverse@7.28.0':
+ '@babel/traverse@7.28.4':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.0
+ '@babel/generator': 7.28.3
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.0
+ '@babel/parser': 7.28.4
'@babel/template': 7.27.2
- '@babel/types': 7.28.2
- debug: 4.4.1
+ '@babel/types': 7.28.4
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
- '@babel/types@7.28.0':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
-
- '@babel/types@7.28.2':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
-
'@babel/types@7.28.4':
dependencies:
'@babel/helper-string-parser': 7.27.1
@@ -6116,18 +5783,29 @@ snapshots:
dependencies:
mime: 3.0.0
- '@colors/colors@1.6.0': {}
+ '@csstools/color-helpers@5.1.0': {}
- '@dabh/diagnostics@2.0.3':
+ '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
- colorspace: 1.1.4
- enabled: 2.0.0
- kuler: 2.0.0
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
- '@dependents/detective-less@5.0.1':
+ '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
- gonzales-pe: 4.3.0
- node-source-walk: 7.0.1
+ '@csstools/color-helpers': 5.1.0
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-syntax-patches-for-csstree@1.0.14(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+
+ '@csstools/css-tokenizer@3.0.4': {}
'@discordapp/twemoji@16.0.1':
dependencies:
@@ -6185,229 +5863,170 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@emnapi/core@1.6.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.4.5':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.6.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/wasi-threads@1.0.4':
dependencies:
tslib: 2.8.1
optional: true
- '@es-joy/jsdoccomment@0.52.0':
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@es-joy/jsdoccomment@0.56.0':
dependencies:
'@types/estree': 1.0.8
- '@typescript-eslint/types': 8.38.0
+ '@typescript-eslint/types': 8.44.0
comment-parser: 1.4.1
esquery: 1.6.0
- jsdoc-type-pratt-parser: 4.1.0
+ jsdoc-type-pratt-parser: 5.1.1
- '@esbuild/aix-ppc64@0.25.5':
+ '@esbuild/aix-ppc64@0.25.10':
optional: true
- '@esbuild/aix-ppc64@0.25.8':
+ '@esbuild/android-arm64@0.25.10':
optional: true
- '@esbuild/android-arm64@0.25.5':
+ '@esbuild/android-arm@0.25.10':
optional: true
- '@esbuild/android-arm64@0.25.8':
+ '@esbuild/android-x64@0.25.10':
optional: true
- '@esbuild/android-arm@0.25.5':
+ '@esbuild/darwin-arm64@0.25.10':
optional: true
- '@esbuild/android-arm@0.25.8':
+ '@esbuild/darwin-x64@0.25.10':
optional: true
- '@esbuild/android-x64@0.25.5':
+ '@esbuild/freebsd-arm64@0.25.10':
optional: true
- '@esbuild/android-x64@0.25.8':
+ '@esbuild/freebsd-x64@0.25.10':
optional: true
- '@esbuild/darwin-arm64@0.25.5':
+ '@esbuild/linux-arm64@0.25.10':
optional: true
- '@esbuild/darwin-arm64@0.25.8':
+ '@esbuild/linux-arm@0.25.10':
optional: true
- '@esbuild/darwin-x64@0.25.5':
+ '@esbuild/linux-ia32@0.25.10':
optional: true
- '@esbuild/darwin-x64@0.25.8':
+ '@esbuild/linux-loong64@0.25.10':
optional: true
- '@esbuild/freebsd-arm64@0.25.5':
+ '@esbuild/linux-mips64el@0.25.10':
optional: true
- '@esbuild/freebsd-arm64@0.25.8':
+ '@esbuild/linux-ppc64@0.25.10':
optional: true
- '@esbuild/freebsd-x64@0.25.5':
+ '@esbuild/linux-riscv64@0.25.10':
optional: true
- '@esbuild/freebsd-x64@0.25.8':
+ '@esbuild/linux-s390x@0.25.10':
optional: true
- '@esbuild/linux-arm64@0.25.5':
+ '@esbuild/linux-x64@0.25.10':
optional: true
- '@esbuild/linux-arm64@0.25.8':
+ '@esbuild/netbsd-arm64@0.25.10':
optional: true
- '@esbuild/linux-arm@0.25.5':
+ '@esbuild/netbsd-x64@0.25.10':
optional: true
- '@esbuild/linux-arm@0.25.8':
+ '@esbuild/openbsd-arm64@0.25.10':
optional: true
- '@esbuild/linux-ia32@0.25.5':
+ '@esbuild/openbsd-x64@0.25.10':
optional: true
- '@esbuild/linux-ia32@0.25.8':
+ '@esbuild/openharmony-arm64@0.25.10':
optional: true
- '@esbuild/linux-loong64@0.25.5':
+ '@esbuild/sunos-x64@0.25.10':
optional: true
- '@esbuild/linux-loong64@0.25.8':
+ '@esbuild/win32-arm64@0.25.10':
optional: true
- '@esbuild/linux-mips64el@0.25.5':
+ '@esbuild/win32-ia32@0.25.10':
optional: true
- '@esbuild/linux-mips64el@0.25.8':
+ '@esbuild/win32-x64@0.25.10':
optional: true
- '@esbuild/linux-ppc64@0.25.5':
- optional: true
-
- '@esbuild/linux-ppc64@0.25.8':
- optional: true
-
- '@esbuild/linux-riscv64@0.25.5':
- optional: true
-
- '@esbuild/linux-riscv64@0.25.8':
- optional: true
-
- '@esbuild/linux-s390x@0.25.5':
- optional: true
-
- '@esbuild/linux-s390x@0.25.8':
- optional: true
-
- '@esbuild/linux-x64@0.25.5':
- optional: true
-
- '@esbuild/linux-x64@0.25.8':
- optional: true
-
- '@esbuild/netbsd-arm64@0.25.5':
- optional: true
-
- '@esbuild/netbsd-arm64@0.25.8':
- optional: true
-
- '@esbuild/netbsd-x64@0.25.5':
- optional: true
-
- '@esbuild/netbsd-x64@0.25.8':
- optional: true
-
- '@esbuild/openbsd-arm64@0.25.5':
- optional: true
-
- '@esbuild/openbsd-arm64@0.25.8':
- optional: true
-
- '@esbuild/openbsd-x64@0.25.5':
- optional: true
-
- '@esbuild/openbsd-x64@0.25.8':
- optional: true
-
- '@esbuild/openharmony-arm64@0.25.8':
- optional: true
-
- '@esbuild/sunos-x64@0.25.5':
- optional: true
-
- '@esbuild/sunos-x64@0.25.8':
- optional: true
-
- '@esbuild/win32-arm64@0.25.5':
- optional: true
-
- '@esbuild/win32-arm64@0.25.8':
- optional: true
-
- '@esbuild/win32-ia32@0.25.5':
- optional: true
-
- '@esbuild/win32-ia32@0.25.8':
- optional: true
-
- '@esbuild/win32-x64@0.25.5':
- optional: true
-
- '@esbuild/win32-x64@0.25.8':
- optional: true
-
- '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.5.1))':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.5.1))':
dependencies:
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/compat@1.3.1(eslint@9.31.0(jiti@2.5.1))':
+ '@eslint/compat@1.3.2(eslint@9.36.0(jiti@2.5.1))':
optionalDependencies:
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
'@eslint/config-array@0.21.0':
dependencies:
'@eslint/object-schema': 2.1.6
- debug: 4.4.1
+ debug: 4.4.3
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.3.0': {}
+ '@eslint/config-helpers@0.3.1': {}
- '@eslint/config-inspector@1.1.0(eslint@9.31.0(jiti@2.5.1))':
+ '@eslint/config-inspector@1.3.0(eslint@9.36.0(jiti@2.5.1))':
dependencies:
'@nodelib/fs.walk': 3.0.1
ansis: 4.1.0
- bundle-require: 5.1.0(esbuild@0.25.8)
+ bundle-require: 5.1.0(esbuild@0.25.10)
cac: 6.7.14
chokidar: 4.0.3
- debug: 4.4.1
- esbuild: 0.25.8
- eslint: 9.31.0(jiti@2.5.1)
+ debug: 4.4.3
+ esbuild: 0.25.10
+ eslint: 9.36.0(jiti@2.5.1)
find-up: 7.0.0
get-port-please: 3.2.0
- h3: 1.15.3
- mlly: 1.7.4
+ h3: 1.15.4
+ mlly: 1.8.0
mrmime: 2.0.1
open: 10.2.0
- tinyglobby: 0.2.14
+ tinyglobby: 0.2.15
ws: 8.18.3
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- '@eslint/core@0.15.1':
+ '@eslint/core@0.15.2':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
- debug: 4.4.1
+ debug: 4.4.3
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
@@ -6418,83 +6037,77 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.31.0': {}
-
- '@eslint/js@9.32.0': {}
+ '@eslint/js@9.36.0': {}
'@eslint/object-schema@2.1.6': {}
- '@eslint/plugin-kit@0.3.4':
+ '@eslint/plugin-kit@0.3.5':
dependencies:
- '@eslint/core': 0.15.1
+ '@eslint/core': 0.15.2
levn: 0.4.1
'@fastify/accept-negotiator@1.1.0':
optional: true
- '@fastify/busboy@3.1.1': {}
-
- '@headlessui/vue@1.7.23(vue@3.5.22(typescript@5.8.3))':
+ '@headlessui/vue@1.7.23(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@tanstack/vue-virtual': 3.13.12(vue@3.5.22(typescript@5.8.3))
- vue: 3.5.22(typescript@5.8.3)
+ '@tanstack/vue-virtual': 3.13.12(vue@3.5.21(typescript@5.9.2))
+ vue: 3.5.21(typescript@5.9.2)
- '@heroicons/vue@2.2.0(vue@3.5.22(typescript@5.8.3))':
+ '@heroicons/vue@2.2.0(vue@3.5.21(typescript@5.9.2))':
dependencies:
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
'@humanfs/core@0.19.1': {}
- '@humanfs/node@0.16.6':
+ '@humanfs/node@0.16.7':
dependencies:
'@humanfs/core': 0.19.1
- '@humanwhocodes/retry': 0.3.1
+ '@humanwhocodes/retry': 0.4.3
'@humanwhocodes/module-importer@1.0.1': {}
- '@humanwhocodes/retry@0.3.1': {}
-
'@humanwhocodes/retry@0.4.3': {}
- '@intlify/bundle-utils@10.0.1(vue-i18n@10.0.8(vue@3.5.22(typescript@5.8.3)))':
+ '@intlify/bundle-utils@10.0.1(vue-i18n@10.0.8(vue@3.5.21(typescript@5.9.2)))':
dependencies:
- '@intlify/message-compiler': 11.1.11
- '@intlify/shared': 11.1.11
+ '@intlify/message-compiler': 11.1.12
+ '@intlify/shared': 11.1.12
acorn: 8.15.0
escodegen: 2.1.0
estree-walker: 2.0.2
jsonc-eslint-parser: 2.4.0
- mlly: 1.7.4
+ mlly: 1.8.0
source-map-js: 1.2.1
yaml-eslint-parser: 1.3.0
optionalDependencies:
- vue-i18n: 10.0.8(vue@3.5.22(typescript@5.8.3))
+ vue-i18n: 10.0.8(vue@3.5.21(typescript@5.9.2))
'@intlify/core-base@10.0.8':
dependencies:
'@intlify/message-compiler': 10.0.8
'@intlify/shared': 10.0.8
- '@intlify/core-base@11.1.11':
+ '@intlify/core-base@11.1.12':
dependencies:
- '@intlify/message-compiler': 11.1.11
- '@intlify/shared': 11.1.11
+ '@intlify/message-compiler': 11.1.12
+ '@intlify/shared': 11.1.12
'@intlify/core@10.0.8':
dependencies:
'@intlify/core-base': 10.0.8
'@intlify/shared': 10.0.8
- '@intlify/eslint-plugin-vue-i18n@4.0.1(eslint@9.31.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0)(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.5.1)))(yaml-eslint-parser@1.3.0)':
+ '@intlify/eslint-plugin-vue-i18n@4.1.0(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0)(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1)))(yaml-eslint-parser@1.3.0)':
dependencies:
'@eslint/eslintrc': 3.3.1
- '@intlify/core-base': 11.1.11
- '@intlify/message-compiler': 11.1.11
- debug: 4.4.1
- eslint: 9.31.0(jiti@2.5.1)
- eslint-compat-utils: 0.6.5(eslint@9.31.0(jiti@2.5.1))
+ '@intlify/core-base': 11.1.12
+ '@intlify/message-compiler': 11.1.12
+ debug: 4.4.3
+ eslint: 9.36.0(jiti@2.5.1)
+ eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1))
glob: 10.4.5
- globals: 16.3.0
+ globals: 16.4.0
ignore: 7.0.5
import-fresh: 3.3.1
is-language-code: 3.1.0
@@ -6505,7 +6118,7 @@ snapshots:
parse5: 7.3.0
semver: 7.7.2
synckit: 0.10.4
- vue-eslint-parser: 10.2.0(eslint@9.31.0(jiti@2.5.1))
+ vue-eslint-parser: 10.2.0(eslint@9.36.0(jiti@2.5.1))
yaml-eslint-parser: 1.3.0
transitivePeerDependencies:
- supports-color
@@ -6520,25 +6133,25 @@ snapshots:
'@intlify/shared': 10.0.8
source-map-js: 1.2.1
- '@intlify/message-compiler@11.1.11':
+ '@intlify/message-compiler@11.1.12':
dependencies:
- '@intlify/shared': 11.1.11
+ '@intlify/shared': 11.1.12
source-map-js: 1.2.1
'@intlify/shared@10.0.8': {}
- '@intlify/shared@11.1.11': {}
+ '@intlify/shared@11.1.12': {}
- '@intlify/unplugin-vue-i18n@6.0.8(@vue/compiler-dom@3.5.22)(eslint@9.31.0(jiti@2.5.1))(rollup@4.46.2)(typescript@5.8.3)(vue-i18n@10.0.8(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3))':
+ '@intlify/unplugin-vue-i18n@6.0.8(@vue/compiler-dom@3.5.21)(eslint@9.36.0(jiti@2.5.1))(rollup@4.52.0)(typescript@5.9.2)(vue-i18n@10.0.8(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
- '@intlify/bundle-utils': 10.0.1(vue-i18n@10.0.8(vue@3.5.22(typescript@5.8.3)))
- '@intlify/shared': 11.1.11
- '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.11)(@vue/compiler-dom@3.5.22)(vue-i18n@10.0.8(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3))
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
- '@typescript-eslint/scope-manager': 8.38.0
- '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
- debug: 4.4.1
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
+ '@intlify/bundle-utils': 10.0.1(vue-i18n@10.0.8(vue@3.5.21(typescript@5.9.2)))
+ '@intlify/shared': 11.1.12
+ '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.21)(vue-i18n@10.0.8(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
+ '@typescript-eslint/scope-manager': 8.44.0
+ '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
+ debug: 4.4.3
fast-glob: 3.3.3
js-yaml: 4.1.0
json5: 2.2.3
@@ -6546,9 +6159,9 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
unplugin: 1.16.1
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
optionalDependencies:
- vue-i18n: 10.0.8(vue@3.5.22(typescript@5.8.3))
+ vue-i18n: 10.0.8(vue@3.5.21(typescript@5.9.2))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
@@ -6558,16 +6171,16 @@ snapshots:
'@intlify/utils@0.13.0': {}
- '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.11)(@vue/compiler-dom@3.5.22)(vue-i18n@10.0.8(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3))':
+ '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.21)(vue-i18n@10.0.8(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@babel/parser': 7.28.0
+ '@babel/parser': 7.28.4
optionalDependencies:
- '@intlify/shared': 11.1.11
- '@vue/compiler-dom': 3.5.22
- vue: 3.5.22(typescript@5.8.3)
- vue-i18n: 10.0.8(vue@3.5.22(typescript@5.8.3))
+ '@intlify/shared': 11.1.12
+ '@vue/compiler-dom': 3.5.21
+ vue: 3.5.21(typescript@5.9.2)
+ vue-i18n: 10.0.8(vue@3.5.21(typescript@5.9.2))
- '@ioredis/commands@1.3.0': {}
+ '@ioredis/commands@1.4.0': {}
'@isaacs/balanced-match@4.0.1': {}
@@ -6579,7 +6192,7 @@ snapshots:
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
@@ -6588,44 +6201,42 @@ snapshots:
dependencies:
minipass: 7.1.2
- '@jridgewell/gen-mapping@0.3.12':
+ '@jridgewell/gen-mapping@0.3.13':
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.4
- '@jridgewell/trace-mapping': 0.3.29
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
'@jridgewell/resolve-uri@3.1.2': {}
- '@jridgewell/source-map@0.3.10':
+ '@jridgewell/source-map@0.3.11':
dependencies:
- '@jridgewell/gen-mapping': 0.3.12
- '@jridgewell/trace-mapping': 0.3.29
-
- '@jridgewell/sourcemap-codec@1.5.4': {}
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
'@jridgewell/sourcemap-codec@1.5.5': {}
- '@jridgewell/trace-mapping@0.3.29':
+ '@jridgewell/trace-mapping@0.3.31':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.4
+ '@jridgewell/sourcemap-codec': 1.5.5
'@kwsites/file-exists@1.1.1':
dependencies:
- debug: 4.4.1
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
'@kwsites/promise-deferred@1.1.1': {}
- '@lobomfz/prismark@0.0.3':
- dependencies:
- '@prisma/generator-helper': 6.13.0
- arktype: 2.1.20
-
'@mapbox/node-pre-gyp@2.0.0':
dependencies:
consola: 3.4.2
- detect-libc: 2.0.4
+ detect-libc: 2.1.0
https-proxy-agent: 7.0.6
node-fetch: 2.7.0
nopt: 8.1.0
@@ -6637,11 +6248,11 @@ snapshots:
'@mixmark-io/domino@2.2.0': {}
- '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.46.2)':
+ '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.52.0)':
dependencies:
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
json5: 2.2.3
- rollup: 4.46.2
+ rollup: 4.52.0
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
@@ -6650,93 +6261,12 @@ snapshots:
'@tybys/wasm-util': 0.10.0
optional: true
- '@netlify/binary-info@1.0.0': {}
-
- '@netlify/blobs@9.1.2':
+ '@napi-rs/wasm-runtime@1.0.7':
dependencies:
- '@netlify/dev-utils': 2.2.0
- '@netlify/runtime-utils': 1.3.1
-
- '@netlify/dev-utils@2.2.0':
- dependencies:
- '@whatwg-node/server': 0.9.71
- chokidar: 4.0.3
- decache: 4.6.2
- dot-prop: 9.0.0
- env-paths: 3.0.0
- find-up: 7.0.0
- lodash.debounce: 4.0.8
- netlify: 13.3.5
- parse-gitignore: 2.0.0
- uuid: 11.1.0
- write-file-atomic: 6.0.0
-
- '@netlify/functions@3.1.10(rollup@4.46.2)':
- dependencies:
- '@netlify/blobs': 9.1.2
- '@netlify/dev-utils': 2.2.0
- '@netlify/serverless-functions-api': 1.41.2
- '@netlify/zip-it-and-ship-it': 12.2.1(rollup@4.46.2)
- cron-parser: 4.9.0
- decache: 4.6.2
- extract-zip: 2.0.1
- is-stream: 4.0.1
- jwt-decode: 4.0.0
- lambda-local: 2.2.0
- read-package-up: 11.0.0
- source-map-support: 0.5.21
- transitivePeerDependencies:
- - encoding
- - rollup
- - supports-color
-
- '@netlify/open-api@2.37.0': {}
-
- '@netlify/runtime-utils@1.3.1': {}
-
- '@netlify/serverless-functions-api@1.41.2': {}
-
- '@netlify/serverless-functions-api@2.1.3': {}
-
- '@netlify/zip-it-and-ship-it@12.2.1(rollup@4.46.2)':
- dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.0
- '@netlify/binary-info': 1.0.0
- '@netlify/serverless-functions-api': 2.1.3
- '@vercel/nft': 0.29.4(rollup@4.46.2)
- archiver: 7.0.1
- common-path-prefix: 3.0.0
- copy-file: 11.0.0
- es-module-lexer: 1.7.0
- esbuild: 0.25.5
- execa: 8.0.1
- fast-glob: 3.3.3
- filter-obj: 6.1.0
- find-up: 7.0.0
- is-builtin-module: 3.2.1
- is-path-inside: 4.0.0
- junk: 4.0.1
- locate-path: 7.2.0
- merge-options: 3.0.4
- minimatch: 9.0.5
- normalize-path: 3.0.0
- p-map: 7.0.3
- path-exists: 5.0.0
- precinct: 12.2.0
- require-package-name: 2.0.1
- resolve: 2.0.0-next.5
- semver: 7.7.2
- tmp-promise: 3.0.3
- toml: 3.0.0
- unixify: 1.0.0
- urlpattern-polyfill: 8.0.2
- yargs: 17.7.2
- zod: 3.25.76
- transitivePeerDependencies:
- - encoding
- - rollup
- - supports-color
+ '@emnapi/core': 1.6.0
+ '@emnapi/runtime': 1.6.0
+ '@tybys/wasm-util': 0.10.1
+ optional: true
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -6762,9 +6292,9 @@ snapshots:
'@nodelib/fs.scandir': 4.0.1
fastq: 1.19.1
- '@nuxt/cli@3.27.0(magicast@0.3.5)':
+ '@nuxt/cli@3.28.0(magicast@0.3.5)':
dependencies:
- c12: 3.2.0(magicast@0.3.5)
+ c12: 3.3.0(magicast@0.3.5)
citty: 0.1.6
clipboardy: 4.0.0
confbox: 0.2.2
@@ -6774,16 +6304,16 @@ snapshots:
fuse.js: 7.1.0
get-port-please: 3.2.0
giget: 2.0.0
- h3: 1.15.3
+ h3: 1.15.4
httpxy: 0.1.7
jiti: 2.5.1
listhen: 1.9.0
- nypm: 0.6.1
+ nypm: 0.6.2
ofetch: 1.4.1
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
scule: 1.3.0
semver: 7.7.2
std-env: 3.9.0
@@ -6795,58 +6325,58 @@ snapshots:
'@nuxt/devalue@2.0.2': {}
- '@nuxt/devtools-kit@2.6.2(magicast@0.3.5)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))':
+ '@nuxt/devtools-kit@2.6.4(magicast@0.3.5)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))':
dependencies:
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
execa: 8.0.1
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
transitivePeerDependencies:
- magicast
- '@nuxt/devtools-wizard@2.6.2':
+ '@nuxt/devtools-wizard@2.6.4':
dependencies:
consola: 3.4.2
diff: 8.0.2
execa: 8.0.1
magicast: 0.3.5
pathe: 2.0.3
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
prompts: 2.4.2
semver: 7.7.2
- '@nuxt/devtools@2.6.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))':
+ '@nuxt/devtools@2.6.4(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
- '@nuxt/devtools-wizard': 2.6.2
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
- '@vue/devtools-core': 7.7.7(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))
+ '@nuxt/devtools-kit': 2.6.4(magicast@0.3.5)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
+ '@nuxt/devtools-wizard': 2.6.4
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
+ '@vue/devtools-core': 7.7.7(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))
'@vue/devtools-kit': 7.7.7
birpc: 2.5.0
consola: 3.4.2
destr: 2.0.5
error-stack-parser-es: 1.0.5
execa: 8.0.1
- fast-npm-meta: 0.4.4
+ fast-npm-meta: 0.4.6
get-port-please: 3.2.0
hookable: 5.5.3
image-meta: 0.2.1
is-installed-globally: 1.0.0
- launch-editor: 2.11.0
- local-pkg: 1.1.1
+ launch-editor: 2.11.1
+ local-pkg: 1.1.2
magicast: 0.3.5
- nypm: 0.6.1
+ nypm: 0.6.2
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
semver: 7.7.2
simple-git: 3.28.0
- sirv: 3.0.1
+ sirv: 3.0.2
structured-clone-es: 1.0.0
- tinyglobby: 0.2.14
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vite-plugin-inspect: 11.3.2(@nuxt/kit@3.18.0(magicast@0.3.5))(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
- vite-plugin-vue-tracer: 1.0.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))
+ tinyglobby: 0.2.15
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vite-plugin-inspect: 11.3.3(@nuxt/kit@3.19.2(magicast@0.3.5))(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
+ vite-plugin-vue-tracer: 1.0.0(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))
which: 5.0.0
ws: 8.18.3
transitivePeerDependencies:
@@ -6855,30 +6385,30 @@ snapshots:
- utf-8-validate
- vue
- '@nuxt/eslint-config@1.7.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(@vue/compiler-sfc@3.5.22)(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)':
+ '@nuxt/eslint-config@1.9.0(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@antfu/install-pkg': 1.1.0
'@clack/prompts': 0.11.0
- '@eslint/js': 9.32.0
- '@nuxt/eslint-plugin': 1.7.1(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- '@stylistic/eslint-plugin': 5.2.2(eslint@9.31.0(jiti@2.5.1))
- '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- eslint: 9.31.0(jiti@2.5.1)
- eslint-config-flat-gitignore: 2.1.0(eslint@9.31.0(jiti@2.5.1))
- eslint-flat-config-utils: 2.1.1
- eslint-merge-processors: 2.0.0(eslint@9.31.0(jiti@2.5.1))
- eslint-plugin-import-lite: 0.3.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))
- eslint-plugin-jsdoc: 51.4.1(eslint@9.31.0(jiti@2.5.1))
- eslint-plugin-regexp: 2.9.0(eslint@9.31.0(jiti@2.5.1))
- eslint-plugin-unicorn: 60.0.0(eslint@9.31.0(jiti@2.5.1))
- eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.5.1)))
- eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.31.0(jiti@2.5.1))
- globals: 16.3.0
- local-pkg: 1.1.1
+ '@eslint/js': 9.36.0
+ '@nuxt/eslint-plugin': 1.9.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ '@stylistic/eslint-plugin': 5.4.0(eslint@9.36.0(jiti@2.5.1))
+ '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ eslint: 9.36.0(jiti@2.5.1)
+ eslint-config-flat-gitignore: 2.1.0(eslint@9.36.0(jiti@2.5.1))
+ eslint-flat-config-utils: 2.1.4
+ eslint-merge-processors: 2.0.0(eslint@9.36.0(jiti@2.5.1))
+ eslint-plugin-import-lite: 0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))
+ eslint-plugin-jsdoc: 54.7.0(eslint@9.36.0(jiti@2.5.1))
+ eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.5.1))
+ eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.5.1))
+ eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1)))
+ eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))
+ globals: 16.4.0
+ local-pkg: 1.1.2
pathe: 2.0.3
- vue-eslint-parser: 10.2.0(eslint@9.31.0(jiti@2.5.1))
+ vue-eslint-parser: 10.2.0(eslint@9.36.0(jiti@2.5.1))
transitivePeerDependencies:
- '@typescript-eslint/utils'
- '@vue/compiler-sfc'
@@ -6886,31 +6416,31 @@ snapshots:
- supports-color
- typescript
- '@nuxt/eslint-plugin@1.7.1(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)':
+ '@nuxt/eslint-plugin@1.9.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/types': 8.38.0
- '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- eslint: 9.31.0(jiti@2.5.1)
+ '@typescript-eslint/types': 8.44.0
+ '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ eslint: 9.36.0(jiti@2.5.1)
transitivePeerDependencies:
- supports-color
- typescript
- '@nuxt/eslint@1.7.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(@vue/compiler-sfc@3.5.22)(eslint@9.31.0(jiti@2.5.1))(magicast@0.3.5)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))':
+ '@nuxt/eslint@1.9.0(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))':
dependencies:
- '@eslint/config-inspector': 1.1.0(eslint@9.31.0(jiti@2.5.1))
- '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
- '@nuxt/eslint-config': 1.7.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(@vue/compiler-sfc@3.5.22)(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- '@nuxt/eslint-plugin': 1.7.1(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- '@nuxt/kit': 4.0.2(magicast@0.3.5)
+ '@eslint/config-inspector': 1.3.0(eslint@9.36.0(jiti@2.5.1))
+ '@nuxt/devtools-kit': 2.6.4(magicast@0.3.5)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
+ '@nuxt/eslint-config': 1.9.0(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ '@nuxt/eslint-plugin': 1.9.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ '@nuxt/kit': 4.1.2(magicast@0.3.5)
chokidar: 4.0.3
- eslint: 9.31.0(jiti@2.5.1)
- eslint-flat-config-utils: 2.1.1
- eslint-typegen: 2.3.0(eslint@9.31.0(jiti@2.5.1))
+ eslint: 9.36.0(jiti@2.5.1)
+ eslint-flat-config-utils: 2.1.4
+ eslint-typegen: 2.3.0(eslint@9.36.0(jiti@2.5.1))
find-up: 7.0.0
get-port-please: 3.2.0
- mlly: 1.7.4
+ mlly: 1.8.0
pathe: 2.0.3
- unimport: 5.2.0
+ unimport: 5.3.0
transitivePeerDependencies:
- '@typescript-eslint/utils'
- '@vue/compiler-sfc'
@@ -6923,28 +6453,28 @@ snapshots:
- utf-8-validate
- vite
- '@nuxt/fonts@0.11.4(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))':
+ '@nuxt/fonts@0.11.4(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))':
dependencies:
- '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@nuxt/devtools-kit': 2.6.4(magicast@0.3.5)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
consola: 3.4.2
css-tree: 3.1.0
defu: 6.1.4
- esbuild: 0.25.8
+ esbuild: 0.25.10
fontaine: 0.6.0
- h3: 1.15.3
+ h3: 1.15.4
jiti: 2.5.1
magic-regexp: 0.10.0
- magic-string: 0.30.17
- node-fetch-native: 1.6.6
+ magic-string: 0.30.19
+ node-fetch-native: 1.6.7
ohash: 2.0.11
pathe: 2.0.3
- sirv: 3.0.1
- tinyglobby: 0.2.14
+ sirv: 3.0.2
+ tinyglobby: 0.2.15
ufo: 1.6.1
unifont: 0.4.1
- unplugin: 2.3.5
- unstorage: 1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)
+ unplugin: 2.3.10
+ unstorage: 1.17.1(db0@0.3.2)(ioredis@5.7.0)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -6958,6 +6488,7 @@ snapshots:
- '@planetscale/database'
- '@upstash/redis'
- '@vercel/blob'
+ - '@vercel/functions'
- '@vercel/kv'
- aws4fetch
- db0
@@ -6968,12 +6499,12 @@ snapshots:
- uploadthing
- vite
- '@nuxt/image@1.10.0(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)':
+ '@nuxt/image@1.11.0(db0@0.3.2)(ioredis@5.7.0)(magicast@0.3.5)':
dependencies:
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
consola: 3.4.2
defu: 6.1.4
- h3: 1.15.3
+ h3: 1.15.4
image-meta: 0.2.1
knitwork: 1.2.0
ohash: 2.0.11
@@ -6981,7 +6512,7 @@ snapshots:
std-env: 3.9.0
ufo: 1.6.1
optionalDependencies:
- ipx: 2.1.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)
+ ipx: 2.1.1(db0@0.3.2)(ioredis@5.7.0)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -6995,6 +6526,7 @@ snapshots:
- '@planetscale/database'
- '@upstash/redis'
- '@vercel/blob'
+ - '@vercel/functions'
- '@vercel/kv'
- aws4fetch
- bare-buffer
@@ -7002,11 +6534,12 @@ snapshots:
- idb-keyval
- ioredis
- magicast
+ - react-native-b4a
- uploadthing
- '@nuxt/kit@3.17.7(magicast@0.3.5)':
+ '@nuxt/kit@3.19.2(magicast@0.3.5)':
dependencies:
- c12: 3.2.0(magicast@0.3.5)
+ c12: 3.3.0(magicast@0.3.5)
consola: 3.4.2
defu: 6.1.4
destr: 2.0.5
@@ -7016,24 +6549,25 @@ snapshots:
jiti: 2.5.1
klona: 2.0.6
knitwork: 1.2.0
- mlly: 1.7.4
+ mlly: 1.8.0
ohash: 2.0.11
pathe: 2.0.3
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
+ rc9: 2.1.2
scule: 1.3.0
semver: 7.7.2
std-env: 3.9.0
- tinyglobby: 0.2.14
+ tinyglobby: 0.2.15
ufo: 1.6.1
unctx: 2.4.1
- unimport: 5.2.0
+ unimport: 5.3.0
untyped: 2.0.0
transitivePeerDependencies:
- magicast
- '@nuxt/kit@3.18.0(magicast@0.3.5)':
+ '@nuxt/kit@4.1.2(magicast@0.3.5)':
dependencies:
- c12: 3.2.0(magicast@0.3.5)
+ c12: 3.3.0(magicast@0.3.5)
consola: 3.4.2
defu: 6.1.4
destr: 2.0.5
@@ -7042,59 +6576,35 @@ snapshots:
ignore: 7.0.5
jiti: 2.5.1
klona: 2.0.6
- knitwork: 1.2.0
- mlly: 1.7.4
+ mlly: 1.8.0
ohash: 2.0.11
pathe: 2.0.3
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
+ rc9: 2.1.2
scule: 1.3.0
semver: 7.7.2
std-env: 3.9.0
- tinyglobby: 0.2.14
+ tinyglobby: 0.2.15
ufo: 1.6.1
unctx: 2.4.1
- unimport: 5.2.0
+ unimport: 5.3.0
untyped: 2.0.0
transitivePeerDependencies:
- magicast
- '@nuxt/kit@4.0.2(magicast@0.3.5)':
+ '@nuxt/schema@4.1.2':
dependencies:
- c12: 3.2.0(magicast@0.3.5)
+ '@vue/shared': 3.5.21
consola: 3.4.2
defu: 6.1.4
- destr: 2.0.5
- errx: 0.1.0
- exsolve: 1.0.7
- ignore: 7.0.5
- jiti: 2.5.1
- klona: 2.0.6
- mlly: 1.7.4
- ohash: 2.0.11
pathe: 2.0.3
- pkg-types: 2.2.0
- scule: 1.3.0
- semver: 7.7.2
+ pkg-types: 2.3.0
std-env: 3.9.0
- tinyglobby: 0.2.14
ufo: 1.6.1
- unctx: 2.4.1
- unimport: 5.2.0
- untyped: 2.0.0
- transitivePeerDependencies:
- - magicast
-
- '@nuxt/schema@3.17.7':
- dependencies:
- '@vue/shared': 3.5.18
- consola: 3.4.2
- defu: 6.1.4
- pathe: 2.0.3
- std-env: 3.9.0
'@nuxt/telemetry@2.6.6(magicast@0.3.5)':
dependencies:
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
citty: 0.1.6
consola: 3.4.2
destr: 2.0.5
@@ -7109,40 +6619,37 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/vite-builder@3.17.7(@types/node@22.16.5)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(vue-tsc@3.0.4(typescript@5.8.3))(vue@3.5.22(typescript@5.8.3))(yaml@2.8.0)':
+ '@nuxt/vite-builder@4.1.2(@types/node@22.18.6)(eslint@9.36.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.0)(sass@1.93.0)(terser@5.44.0)(typescript@5.9.2)(vue-tsc@3.0.7(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2))(yaml@2.8.1)':
dependencies:
- '@nuxt/kit': 3.17.7(magicast@0.3.5)
- '@rollup/plugin-replace': 6.0.2(rollup@4.46.2)
- '@vitejs/plugin-vue': 5.2.4(vite@6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))
- '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))
+ '@nuxt/kit': 4.1.2(magicast@0.3.5)
+ '@rollup/plugin-replace': 6.0.2(rollup@4.52.0)
+ '@vitejs/plugin-vue': 6.0.1(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))
+ '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))
autoprefixer: 10.4.21(postcss@8.5.6)
consola: 3.4.2
- cssnano: 7.1.0(postcss@8.5.6)
+ cssnano: 7.1.1(postcss@8.5.6)
defu: 6.1.4
- esbuild: 0.25.8
+ esbuild: 0.25.10
escape-string-regexp: 5.0.0
exsolve: 1.0.7
- externality: 1.0.2
get-port-please: 3.2.0
- h3: 1.15.3
+ h3: 1.15.4
jiti: 2.5.1
knitwork: 1.2.0
- magic-string: 0.30.17
- mlly: 1.7.4
+ magic-string: 0.30.19
+ mlly: 1.8.0
mocked-exports: 0.1.1
- ohash: 2.0.11
pathe: 2.0.3
- perfect-debounce: 1.0.0
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
postcss: 8.5.6
- rollup-plugin-visualizer: 6.0.3(rollup@4.46.2)
+ rollup-plugin-visualizer: 6.0.3(rollup@4.52.0)
std-env: 3.9.0
ufo: 1.6.1
- unenv: 2.0.0-rc.19
- vite: 6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vite-plugin-checker: 0.10.1(eslint@9.31.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@3.0.4(typescript@5.8.3))
- vue: 3.5.22(typescript@5.8.3)
+ unenv: 2.0.0-rc.21
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vite-node: 3.2.4(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vite-plugin-checker: 0.10.3(eslint@9.36.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.0.7(typescript@5.9.2))
+ vue: 3.5.21(typescript@5.9.2)
vue-bundle-renderer: 2.1.2
transitivePeerDependencies:
- '@biomejs/biome'
@@ -7169,33 +6676,33 @@ snapshots:
- vue-tsc
- yaml
- '@nuxtjs/i18n@9.5.6(@vue/compiler-dom@3.5.22)(eslint@9.31.0(jiti@2.5.1))(magicast@0.3.5)(rollup@4.46.2)(vue@3.5.22(typescript@5.8.3))':
+ '@nuxtjs/i18n@9.5.6(@vue/compiler-dom@3.5.21)(eslint@9.36.0(jiti@2.5.1))(magicast@0.3.5)(rollup@4.52.0)(vue@3.5.21(typescript@5.9.2))':
dependencies:
'@intlify/h3': 0.6.1
'@intlify/shared': 10.0.8
- '@intlify/unplugin-vue-i18n': 6.0.8(@vue/compiler-dom@3.5.22)(eslint@9.31.0(jiti@2.5.1))(rollup@4.46.2)(typescript@5.8.3)(vue-i18n@10.0.8(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3))
+ '@intlify/unplugin-vue-i18n': 6.0.8(@vue/compiler-dom@3.5.21)(eslint@9.36.0(jiti@2.5.1))(rollup@4.52.0)(typescript@5.9.2)(vue-i18n@10.0.8(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))
'@intlify/utils': 0.13.0
- '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.46.2)
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.52.0)
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
'@oxc-parser/wasm': 0.60.0
- '@rollup/plugin-yaml': 4.1.2(rollup@4.46.2)
- '@vue/compiler-sfc': 3.5.18
- debug: 4.4.1
+ '@rollup/plugin-yaml': 4.1.2(rollup@4.52.0)
+ '@vue/compiler-sfc': 3.5.21
+ debug: 4.4.3
defu: 6.1.4
- esbuild: 0.25.8
+ esbuild: 0.25.10
estree-walker: 3.0.3
- h3: 1.15.3
+ h3: 1.15.4
knitwork: 1.2.0
- magic-string: 0.30.17
- mlly: 1.7.4
+ magic-string: 0.30.19
+ mlly: 1.8.0
oxc-parser: 0.70.0
pathe: 2.0.3
- typescript: 5.8.3
+ typescript: 5.9.2
ufo: 1.6.1
- unplugin: 2.3.5
- unplugin-vue-router: 0.12.0(vue-router@4.5.1(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3))
- vue-i18n: 10.0.8(vue@3.5.22(typescript@5.8.3))
- vue-router: 4.5.1(vue@3.5.22(typescript@5.8.3))
+ unplugin: 2.3.10
+ unplugin-vue-router: 0.12.0(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))
+ vue-i18n: 10.0.8(vue@3.5.21(typescript@5.9.2))
+ vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
@@ -7205,73 +6712,120 @@ snapshots:
- supports-color
- vue
- '@oxc-parser/binding-android-arm64@0.76.0':
+ '@oxc-minify/binding-android-arm64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-arm64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-x64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-freebsd-x64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm-musleabihf@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm64-musl@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-musl@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-wasm32-wasi@0.87.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.0.7
+ optional: true
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-win32-x64-msvc@0.87.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm64@0.87.0':
optional: true
'@oxc-parser/binding-darwin-arm64@0.70.0':
optional: true
- '@oxc-parser/binding-darwin-arm64@0.76.0':
+ '@oxc-parser/binding-darwin-arm64@0.87.0':
optional: true
'@oxc-parser/binding-darwin-x64@0.70.0':
optional: true
- '@oxc-parser/binding-darwin-x64@0.76.0':
+ '@oxc-parser/binding-darwin-x64@0.87.0':
optional: true
'@oxc-parser/binding-freebsd-x64@0.70.0':
optional: true
- '@oxc-parser/binding-freebsd-x64@0.76.0':
+ '@oxc-parser/binding-freebsd-x64@0.87.0':
optional: true
'@oxc-parser/binding-linux-arm-gnueabihf@0.70.0':
optional: true
- '@oxc-parser/binding-linux-arm-gnueabihf@0.76.0':
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.87.0':
optional: true
'@oxc-parser/binding-linux-arm-musleabihf@0.70.0':
optional: true
- '@oxc-parser/binding-linux-arm-musleabihf@0.76.0':
+ '@oxc-parser/binding-linux-arm-musleabihf@0.87.0':
optional: true
'@oxc-parser/binding-linux-arm64-gnu@0.70.0':
optional: true
- '@oxc-parser/binding-linux-arm64-gnu@0.76.0':
+ '@oxc-parser/binding-linux-arm64-gnu@0.87.0':
optional: true
'@oxc-parser/binding-linux-arm64-musl@0.70.0':
optional: true
- '@oxc-parser/binding-linux-arm64-musl@0.76.0':
+ '@oxc-parser/binding-linux-arm64-musl@0.87.0':
optional: true
'@oxc-parser/binding-linux-riscv64-gnu@0.70.0':
optional: true
- '@oxc-parser/binding-linux-riscv64-gnu@0.76.0':
+ '@oxc-parser/binding-linux-riscv64-gnu@0.87.0':
optional: true
'@oxc-parser/binding-linux-s390x-gnu@0.70.0':
optional: true
- '@oxc-parser/binding-linux-s390x-gnu@0.76.0':
+ '@oxc-parser/binding-linux-s390x-gnu@0.87.0':
optional: true
'@oxc-parser/binding-linux-x64-gnu@0.70.0':
optional: true
- '@oxc-parser/binding-linux-x64-gnu@0.76.0':
+ '@oxc-parser/binding-linux-x64-gnu@0.87.0':
optional: true
'@oxc-parser/binding-linux-x64-musl@0.70.0':
optional: true
- '@oxc-parser/binding-linux-x64-musl@0.76.0':
+ '@oxc-parser/binding-linux-x64-musl@0.87.0':
optional: true
'@oxc-parser/binding-wasm32-wasi@0.70.0':
@@ -7279,21 +6833,21 @@ snapshots:
'@napi-rs/wasm-runtime': 0.2.12
optional: true
- '@oxc-parser/binding-wasm32-wasi@0.76.0':
+ '@oxc-parser/binding-wasm32-wasi@0.87.0':
dependencies:
- '@napi-rs/wasm-runtime': 0.2.12
+ '@napi-rs/wasm-runtime': 1.0.7
optional: true
'@oxc-parser/binding-win32-arm64-msvc@0.70.0':
optional: true
- '@oxc-parser/binding-win32-arm64-msvc@0.76.0':
+ '@oxc-parser/binding-win32-arm64-msvc@0.87.0':
optional: true
'@oxc-parser/binding-win32-x64-msvc@0.70.0':
optional: true
- '@oxc-parser/binding-win32-x64-msvc@0.76.0':
+ '@oxc-parser/binding-win32-x64-msvc@0.87.0':
optional: true
'@oxc-parser/wasm@0.60.0':
@@ -7304,7 +6858,54 @@ snapshots:
'@oxc-project/types@0.70.0': {}
- '@oxc-project/types@0.76.0': {}
+ '@oxc-project/types@0.87.0': {}
+
+ '@oxc-transform/binding-android-arm64@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-darwin-arm64@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-darwin-x64@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-freebsd-x64@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm-musleabihf@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm64-musl@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-riscv64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-s390x-gnu@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-x64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-x64-musl@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-wasm32-wasi@0.87.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.0.7
+ optional: true
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.87.0':
+ optional: true
+
+ '@oxc-transform/binding-win32-x64-msvc@0.87.0':
+ optional: true
'@parcel/watcher-android-arm64@2.5.1':
optional: true
@@ -7387,197 +6988,200 @@ snapshots:
'@poppinss/dumper@0.6.4':
dependencies:
'@poppinss/colors': 4.1.5
- '@sindresorhus/is': 7.0.2
- supports-color: 10.0.0
+ '@sindresorhus/is': 7.1.0
+ supports-color: 10.2.2
'@poppinss/exception@1.2.2': {}
- '@prisma/client@6.12.0(prisma@6.12.0(typescript@5.8.3))(typescript@5.8.3)':
+ '@prisma/client@6.16.2(prisma@6.16.2(magicast@0.3.5)(typescript@5.9.2))(typescript@5.9.2)':
optionalDependencies:
- prisma: 6.12.0(typescript@5.8.3)
- typescript: 5.8.3
+ prisma: 6.16.2(magicast@0.3.5)(typescript@5.9.2)
+ typescript: 5.9.2
- '@prisma/config@6.12.0':
+ '@prisma/config@6.16.2(magicast@0.3.5)':
dependencies:
- jiti: 2.4.2
+ c12: 3.1.0(magicast@0.3.5)
+ deepmerge-ts: 7.1.5
+ effect: 3.16.12
+ empathic: 2.0.0
+ transitivePeerDependencies:
+ - magicast
- '@prisma/debug@6.12.0': {}
+ '@prisma/debug@6.16.2': {}
- '@prisma/debug@6.13.0': {}
+ '@prisma/engines-version@6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43': {}
- '@prisma/dmmf@6.13.0': {}
-
- '@prisma/engines-version@6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc': {}
-
- '@prisma/engines@6.12.0':
+ '@prisma/engines@6.16.2':
dependencies:
- '@prisma/debug': 6.12.0
- '@prisma/engines-version': 6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc
- '@prisma/fetch-engine': 6.12.0
- '@prisma/get-platform': 6.12.0
+ '@prisma/debug': 6.16.2
+ '@prisma/engines-version': 6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43
+ '@prisma/fetch-engine': 6.16.2
+ '@prisma/get-platform': 6.16.2
- '@prisma/fetch-engine@6.12.0':
+ '@prisma/fetch-engine@6.16.2':
dependencies:
- '@prisma/debug': 6.12.0
- '@prisma/engines-version': 6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc
- '@prisma/get-platform': 6.12.0
+ '@prisma/debug': 6.16.2
+ '@prisma/engines-version': 6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43
+ '@prisma/get-platform': 6.16.2
- '@prisma/generator-helper@6.13.0':
+ '@prisma/get-platform@6.16.2':
dependencies:
- '@prisma/debug': 6.13.0
- '@prisma/dmmf': 6.13.0
- '@prisma/generator': 6.13.0
-
- '@prisma/generator@6.13.0': {}
-
- '@prisma/get-platform@6.12.0':
- dependencies:
- '@prisma/debug': 6.12.0
+ '@prisma/debug': 6.16.2
'@rolldown/pluginutils@1.0.0-beta.29': {}
- '@rollup/plugin-alias@5.1.1(rollup@4.46.2)':
- optionalDependencies:
- rollup: 4.46.2
+ '@rolldown/pluginutils@1.0.0-beta.38': {}
- '@rollup/plugin-commonjs@28.0.6(rollup@4.46.2)':
+ '@rollup/plugin-alias@5.1.1(rollup@4.52.0)':
+ optionalDependencies:
+ rollup: 4.52.0
+
+ '@rollup/plugin-commonjs@28.0.6(rollup@4.52.0)':
dependencies:
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
commondir: 1.0.1
estree-walker: 2.0.2
- fdir: 6.4.6(picomatch@4.0.3)
+ fdir: 6.5.0(picomatch@4.0.3)
is-reference: 1.2.1
- magic-string: 0.30.17
+ magic-string: 0.30.19
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/plugin-inject@5.0.5(rollup@4.46.2)':
+ '@rollup/plugin-inject@5.0.5(rollup@4.52.0)':
dependencies:
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
estree-walker: 2.0.2
- magic-string: 0.30.17
+ magic-string: 0.30.19
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/plugin-json@6.1.0(rollup@4.46.2)':
+ '@rollup/plugin-json@6.1.0(rollup@4.52.0)':
dependencies:
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/plugin-node-resolve@16.0.1(rollup@4.46.2)':
+ '@rollup/plugin-node-resolve@16.0.1(rollup@4.52.0)':
dependencies:
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.10
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/plugin-replace@6.0.2(rollup@4.46.2)':
+ '@rollup/plugin-replace@6.0.2(rollup@4.52.0)':
dependencies:
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
- magic-string: 0.30.17
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
+ magic-string: 0.30.19
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/plugin-terser@0.4.4(rollup@4.46.2)':
+ '@rollup/plugin-terser@0.4.4(rollup@4.52.0)':
dependencies:
serialize-javascript: 6.0.2
smob: 1.5.0
- terser: 5.43.1
+ terser: 5.44.0
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/plugin-yaml@4.1.2(rollup@4.46.2)':
+ '@rollup/plugin-yaml@4.1.2(rollup@4.52.0)':
dependencies:
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
js-yaml: 4.1.0
tosource: 2.0.0-alpha.3
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/pluginutils@5.2.0(rollup@4.46.2)':
+ '@rollup/pluginutils@5.3.0(rollup@4.52.0)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- '@rollup/rollup-android-arm-eabi@4.46.2':
+ '@rollup/rollup-android-arm-eabi@4.52.0':
optional: true
- '@rollup/rollup-android-arm64@4.46.2':
+ '@rollup/rollup-android-arm64@4.52.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.46.2':
+ '@rollup/rollup-darwin-arm64@4.52.0':
optional: true
- '@rollup/rollup-darwin-x64@4.46.2':
+ '@rollup/rollup-darwin-x64@4.52.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.46.2':
+ '@rollup/rollup-freebsd-arm64@4.52.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.46.2':
+ '@rollup/rollup-freebsd-x64@4.52.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.46.2':
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.46.2':
+ '@rollup/rollup-linux-arm-musleabihf@4.52.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.46.2':
+ '@rollup/rollup-linux-arm64-gnu@4.52.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.46.2':
+ '@rollup/rollup-linux-arm64-musl@4.52.0':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.46.2':
+ '@rollup/rollup-linux-loong64-gnu@4.52.0':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.46.2':
+ '@rollup/rollup-linux-ppc64-gnu@4.52.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.46.2':
+ '@rollup/rollup-linux-riscv64-gnu@4.52.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.46.2':
+ '@rollup/rollup-linux-riscv64-musl@4.52.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.46.2':
+ '@rollup/rollup-linux-s390x-gnu@4.52.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.46.2':
+ '@rollup/rollup-linux-x64-gnu@4.52.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.46.2':
+ '@rollup/rollup-linux-x64-musl@4.52.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.46.2':
+ '@rollup/rollup-openharmony-arm64@4.52.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.46.2':
+ '@rollup/rollup-win32-arm64-msvc@4.52.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.46.2':
+ '@rollup/rollup-win32-ia32-msvc@4.52.0':
optional: true
- '@sindresorhus/is@7.0.2': {}
+ '@rollup/rollup-win32-x64-gnu@4.52.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.52.0':
+ optional: true
+
+ '@sindresorhus/is@7.1.0': {}
'@sindresorhus/merge-streams@2.3.0': {}
'@speed-highlight/core@1.2.7': {}
- '@stylistic/eslint-plugin@5.2.2(eslint@9.31.0(jiti@2.5.1))':
+ '@standard-schema/spec@1.0.0': {}
+
+ '@stylistic/eslint-plugin@5.4.0(eslint@9.36.0(jiti@2.5.1))':
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
- '@typescript-eslint/types': 8.38.0
- eslint: 9.31.0(jiti@2.5.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
+ '@typescript-eslint/types': 8.44.0
+ eslint: 9.36.0(jiti@2.5.1)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
estraverse: 5.3.0
@@ -7587,96 +7191,93 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@tailwindcss/forms@0.5.10(tailwindcss@4.1.11)':
+ '@tailwindcss/forms@0.5.10(tailwindcss@4.1.13)':
dependencies:
mini-svg-data-uri: 1.4.4
- tailwindcss: 4.1.11
+ tailwindcss: 4.1.13
- '@tailwindcss/node@4.1.11':
+ '@tailwindcss/node@4.1.13':
dependencies:
- '@ampproject/remapping': 2.3.0
- enhanced-resolve: 5.18.2
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.18.3
jiti: 2.5.1
lightningcss: 1.30.1
- magic-string: 0.30.17
+ magic-string: 0.30.19
source-map-js: 1.2.1
- tailwindcss: 4.1.11
+ tailwindcss: 4.1.13
- '@tailwindcss/oxide-android-arm64@4.1.11':
+ '@tailwindcss/oxide-android-arm64@4.1.13':
optional: true
- '@tailwindcss/oxide-darwin-arm64@4.1.11':
+ '@tailwindcss/oxide-darwin-arm64@4.1.13':
optional: true
- '@tailwindcss/oxide-darwin-x64@4.1.11':
+ '@tailwindcss/oxide-darwin-x64@4.1.13':
optional: true
- '@tailwindcss/oxide-freebsd-x64@4.1.11':
+ '@tailwindcss/oxide-freebsd-x64@4.1.13':
optional: true
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11':
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
optional: true
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.11':
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
optional: true
- '@tailwindcss/oxide-linux-arm64-musl@4.1.11':
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.13':
optional: true
- '@tailwindcss/oxide-linux-x64-gnu@4.1.11':
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.13':
optional: true
- '@tailwindcss/oxide-linux-x64-musl@4.1.11':
+ '@tailwindcss/oxide-linux-x64-musl@4.1.13':
optional: true
- '@tailwindcss/oxide-wasm32-wasi@4.1.11':
+ '@tailwindcss/oxide-wasm32-wasi@4.1.13':
optional: true
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.11':
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
optional: true
- '@tailwindcss/oxide-win32-x64-msvc@4.1.11':
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.13':
optional: true
- '@tailwindcss/oxide@4.1.11':
+ '@tailwindcss/oxide@4.1.13':
dependencies:
- detect-libc: 2.0.4
+ detect-libc: 2.1.0
tar: 7.4.3
optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.1.11
- '@tailwindcss/oxide-darwin-arm64': 4.1.11
- '@tailwindcss/oxide-darwin-x64': 4.1.11
- '@tailwindcss/oxide-freebsd-x64': 4.1.11
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11
- '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11
- '@tailwindcss/oxide-linux-arm64-musl': 4.1.11
- '@tailwindcss/oxide-linux-x64-gnu': 4.1.11
- '@tailwindcss/oxide-linux-x64-musl': 4.1.11
- '@tailwindcss/oxide-wasm32-wasi': 4.1.11
- '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11
- '@tailwindcss/oxide-win32-x64-msvc': 4.1.11
+ '@tailwindcss/oxide-android-arm64': 4.1.13
+ '@tailwindcss/oxide-darwin-arm64': 4.1.13
+ '@tailwindcss/oxide-darwin-x64': 4.1.13
+ '@tailwindcss/oxide-freebsd-x64': 4.1.13
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.13
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.13
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.13
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.13
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.13
- '@tailwindcss/typography@0.5.16(tailwindcss@4.1.11)':
+ '@tailwindcss/typography@0.5.18(tailwindcss@4.1.13)':
dependencies:
- lodash.castarray: 4.4.0
- lodash.isplainobject: 4.0.6
- lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
- tailwindcss: 4.1.11
+ tailwindcss: 4.1.13
- '@tailwindcss/vite@4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))':
+ '@tailwindcss/vite@4.1.13(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))':
dependencies:
- '@tailwindcss/node': 4.1.11
- '@tailwindcss/oxide': 4.1.11
- tailwindcss: 4.1.11
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
+ '@tailwindcss/node': 4.1.13
+ '@tailwindcss/oxide': 4.1.13
+ tailwindcss: 4.1.13
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
'@tanstack/virtual-core@3.13.12': {}
- '@tanstack/vue-virtual@3.13.12(vue@3.5.22(typescript@5.8.3))':
+ '@tanstack/vue-virtual@3.13.12(vue@3.5.21(typescript@5.9.2))':
dependencies:
'@tanstack/virtual-core': 3.13.12
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
'@tokenizer/token@0.3.0': {}
@@ -7690,9 +7291,10 @@ snapshots:
tslib: 2.8.1
optional: true
- '@types/bcryptjs@3.0.0':
+ '@tybys/wasm-util@0.10.1':
dependencies:
- bcryptjs: 3.0.2
+ tslib: 2.8.1
+ optional: true
'@types/debug@4.1.12':
dependencies:
@@ -7700,135 +7302,134 @@ snapshots:
'@types/estree@1.0.8': {}
+ '@types/jsdom@21.1.7':
+ dependencies:
+ '@types/node': 22.18.6
+ '@types/tough-cookie': 4.0.5
+ parse5: 7.3.0
+
'@types/json-schema@7.0.15': {}
- '@types/luxon@3.6.2': {}
+ '@types/luxon@3.7.1': {}
'@types/ms@2.1.0': {}
- '@types/node@22.16.5':
+ '@types/node@22.18.6':
dependencies:
undici-types: 6.21.0
- '@types/normalize-package-data@2.4.4': {}
-
'@types/parse-path@7.1.0':
dependencies:
parse-path: 7.1.0
'@types/resolve@1.20.2': {}
- '@types/semver@7.7.0': {}
+ '@types/semver@7.7.1': {}
- '@types/triple-beam@1.3.5': {}
+ '@types/tough-cookie@4.0.5': {}
'@types/turndown@5.0.5': {}
'@types/web-bluetooth@0.0.21': {}
- '@types/yauzl@2.10.3':
- dependencies:
- '@types/node': 22.16.5
- optional: true
-
- '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)':
+ '@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- '@typescript-eslint/scope-manager': 8.38.0
- '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 8.38.0
- eslint: 9.31.0(jiti@2.5.1)
+ '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ '@typescript-eslint/scope-manager': 8.44.0
+ '@typescript-eslint/type-utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.44.0
+ eslint: 9.36.0(jiti@2.5.1)
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.8.3)
- typescript: 5.8.3
+ ts-api-utils: 2.1.0(typescript@5.9.2)
+ typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)':
+ '@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/scope-manager': 8.38.0
- '@typescript-eslint/types': 8.38.0
- '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 8.38.0
- debug: 4.4.1
- eslint: 9.31.0(jiti@2.5.1)
- typescript: 5.8.3
+ '@typescript-eslint/scope-manager': 8.44.0
+ '@typescript-eslint/types': 8.44.0
+ '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.44.0
+ debug: 4.4.3
+ eslint: 9.36.0(jiti@2.5.1)
+ typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)':
+ '@typescript-eslint/project-service@8.44.0(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3)
- '@typescript-eslint/types': 8.38.0
- debug: 4.4.1
- typescript: 5.8.3
+ '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.44.0
+ debug: 4.4.3
+ typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.38.0':
+ '@typescript-eslint/scope-manager@8.44.0':
dependencies:
- '@typescript-eslint/types': 8.38.0
- '@typescript-eslint/visitor-keys': 8.38.0
+ '@typescript-eslint/types': 8.44.0
+ '@typescript-eslint/visitor-keys': 8.44.0
- '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)':
+ '@typescript-eslint/tsconfig-utils@8.44.0(typescript@5.9.2)':
dependencies:
- typescript: 5.8.3
+ typescript: 5.9.2
- '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)':
+ '@typescript-eslint/type-utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/types': 8.38.0
- '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
- '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
- debug: 4.4.1
- eslint: 9.31.0(jiti@2.5.1)
- ts-api-utils: 2.1.0(typescript@5.8.3)
- typescript: 5.8.3
+ '@typescript-eslint/types': 8.44.0
+ '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ debug: 4.4.3
+ eslint: 9.36.0(jiti@2.5.1)
+ ts-api-utils: 2.1.0(typescript@5.9.2)
+ typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.38.0': {}
+ '@typescript-eslint/types@8.44.0': {}
- '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)':
+ '@typescript-eslint/typescript-estree@8.44.0(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3)
- '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3)
- '@typescript-eslint/types': 8.38.0
- '@typescript-eslint/visitor-keys': 8.38.0
- debug: 4.4.1
+ '@typescript-eslint/project-service': 8.44.0(typescript@5.9.2)
+ '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.44.0
+ '@typescript-eslint/visitor-keys': 8.44.0
+ debug: 4.4.3
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.2
- ts-api-utils: 2.1.0(typescript@5.8.3)
- typescript: 5.8.3
+ ts-api-utils: 2.1.0(typescript@5.9.2)
+ typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)':
+ '@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
- '@typescript-eslint/scope-manager': 8.38.0
- '@typescript-eslint/types': 8.38.0
- '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
- eslint: 9.31.0(jiti@2.5.1)
- typescript: 5.8.3
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
+ '@typescript-eslint/scope-manager': 8.44.0
+ '@typescript-eslint/types': 8.44.0
+ '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2)
+ eslint: 9.36.0(jiti@2.5.1)
+ typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.38.0':
+ '@typescript-eslint/visitor-keys@8.44.0':
dependencies:
- '@typescript-eslint/types': 8.38.0
+ '@typescript-eslint/types': 8.44.0
eslint-visitor-keys: 4.2.1
- '@unhead/vue@2.0.13(vue@3.5.22(typescript@5.8.3))':
+ '@unhead/vue@2.0.17(vue@3.5.21(typescript@5.9.2))':
dependencies:
hookable: 5.5.3
- unhead: 2.0.13
- vue: 3.5.22(typescript@5.8.3)
+ unhead: 2.0.17
+ vue: 3.5.21(typescript@5.9.2)
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
optional: true
@@ -7889,10 +7490,10 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
optional: true
- '@vercel/nft@0.29.4(rollup@4.46.2)':
+ '@vercel/nft@0.30.1(rollup@4.52.0)':
dependencies:
'@mapbox/node-pre-gyp': 2.0.0
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
acorn: 8.15.0
acorn-import-attributes: 1.9.5(acorn@8.15.0)
async-sema: 3.1.1
@@ -7908,143 +7509,115 @@ snapshots:
- rollup
- supports-color
- '@vitejs/plugin-vue-jsx@4.2.0(vite@6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))':
+ '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@babel/core': 7.28.0
- '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0)
- '@rolldown/pluginutils': 1.0.0-beta.29
- '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.0)
- vite: 6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vue: 3.5.22(typescript@5.8.3)
+ '@babel/core': 7.28.4
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4)
+ '@rolldown/pluginutils': 1.0.0-beta.38
+ '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4)
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vue: 3.5.21(typescript@5.9.2)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))':
+ '@vitejs/plugin-vue@6.0.1(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))':
dependencies:
- vite: 6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vue: 3.5.22(typescript@5.8.3)
+ '@rolldown/pluginutils': 1.0.0-beta.29
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vue: 3.5.21(typescript@5.9.2)
- '@volar/language-core@2.4.20':
+ '@volar/language-core@2.4.23':
dependencies:
- '@volar/source-map': 2.4.20
+ '@volar/source-map': 2.4.23
- '@volar/source-map@2.4.20': {}
+ '@volar/source-map@2.4.23': {}
- '@volar/typescript@2.4.20':
+ '@volar/typescript@2.4.23':
dependencies:
- '@volar/language-core': 2.4.20
+ '@volar/language-core': 2.4.23
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue-macros/common@1.16.1(vue@3.5.22(typescript@5.8.3))':
+ '@vue-macros/common@1.16.1(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@vue/compiler-sfc': 3.5.18
+ '@vue/compiler-sfc': 3.5.21
ast-kit: 1.4.3
- local-pkg: 1.1.1
+ local-pkg: 1.1.2
magic-string-ast: 0.7.1
pathe: 2.0.3
picomatch: 4.0.3
optionalDependencies:
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
- '@vue-macros/common@3.0.0-beta.15(vue@3.5.22(typescript@5.8.3))':
+ '@vue-macros/common@3.0.0-beta.16(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@vue/compiler-sfc': 3.5.22
- ast-kit: 2.1.1
- local-pkg: 1.1.1
- magic-string-ast: 1.0.0
- unplugin-utils: 0.2.4
+ '@vue/compiler-sfc': 3.5.21
+ ast-kit: 2.1.2
+ local-pkg: 1.1.2
+ magic-string-ast: 1.0.2
+ unplugin-utils: 0.2.5
optionalDependencies:
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
- '@vue/babel-helper-vue-transform-on@1.4.0': {}
+ '@vue/babel-helper-vue-transform-on@1.5.0': {}
- '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.28.0)':
+ '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.4)':
dependencies:
'@babel/helper-module-imports': 7.27.1
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.0
- '@babel/types': 7.28.2
- '@vue/babel-helper-vue-transform-on': 1.4.0
- '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.28.0)
- '@vue/shared': 3.5.18
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ '@vue/babel-helper-vue-transform-on': 1.5.0
+ '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.4)
+ '@vue/shared': 3.5.21
optionalDependencies:
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
transitivePeerDependencies:
- supports-color
- '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.28.0)':
+ '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.28.4)':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/core': 7.28.0
+ '@babel/core': 7.28.4
'@babel/helper-module-imports': 7.27.1
'@babel/helper-plugin-utils': 7.27.1
'@babel/parser': 7.28.4
- '@vue/compiler-sfc': 3.5.22
+ '@vue/compiler-sfc': 3.5.21
transitivePeerDependencies:
- supports-color
- '@vue/compiler-core@3.5.18':
+ '@vue/compiler-core@3.5.21':
dependencies:
- '@babel/parser': 7.28.0
- '@vue/shared': 3.5.18
+ '@babel/parser': 7.28.4
+ '@vue/shared': 3.5.21
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-core@3.5.22':
+ '@vue/compiler-dom@3.5.21':
+ dependencies:
+ '@vue/compiler-core': 3.5.21
+ '@vue/shared': 3.5.21
+
+ '@vue/compiler-sfc@3.5.21':
dependencies:
'@babel/parser': 7.28.4
- '@vue/shared': 3.5.22
- entities: 4.5.0
- estree-walker: 2.0.2
- source-map-js: 1.2.1
-
- '@vue/compiler-dom@3.5.18':
- dependencies:
- '@vue/compiler-core': 3.5.18
- '@vue/shared': 3.5.18
-
- '@vue/compiler-dom@3.5.22':
- dependencies:
- '@vue/compiler-core': 3.5.22
- '@vue/shared': 3.5.22
-
- '@vue/compiler-sfc@3.5.18':
- dependencies:
- '@babel/parser': 7.28.0
- '@vue/compiler-core': 3.5.18
- '@vue/compiler-dom': 3.5.18
- '@vue/compiler-ssr': 3.5.18
- '@vue/shared': 3.5.18
- estree-walker: 2.0.2
- magic-string: 0.30.17
- postcss: 8.5.6
- source-map-js: 1.2.1
-
- '@vue/compiler-sfc@3.5.22':
- dependencies:
- '@babel/parser': 7.28.4
- '@vue/compiler-core': 3.5.22
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-core': 3.5.21
+ '@vue/compiler-dom': 3.5.21
+ '@vue/compiler-ssr': 3.5.21
+ '@vue/shared': 3.5.21
estree-walker: 2.0.2
magic-string: 0.30.19
postcss: 8.5.6
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.18':
+ '@vue/compiler-ssr@3.5.21':
dependencies:
- '@vue/compiler-dom': 3.5.18
- '@vue/shared': 3.5.18
-
- '@vue/compiler-ssr@3.5.22':
- dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-dom': 3.5.21
+ '@vue/shared': 3.5.21
'@vue/compiler-vue2@2.7.16':
dependencies:
@@ -8053,15 +7626,15 @@ snapshots:
'@vue/devtools-api@6.6.4': {}
- '@vue/devtools-core@7.7.7(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))':
+ '@vue/devtools-core@7.7.7(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))':
dependencies:
'@vue/devtools-kit': 7.7.7
'@vue/devtools-shared': 7.7.7
mitt: 3.0.1
nanoid: 5.1.5
pathe: 2.0.3
- vite-hot-client: 2.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
- vue: 3.5.22(typescript@5.8.3)
+ vite-hot-client: 2.1.0(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
+ vue: 3.5.21(typescript@5.9.2)
transitivePeerDependencies:
- vite
@@ -8079,96 +7652,66 @@ snapshots:
dependencies:
rfdc: 1.4.1
- '@vue/language-core@3.0.4(typescript@5.8.3)':
+ '@vue/language-core@3.0.7(typescript@5.9.2)':
dependencies:
- '@volar/language-core': 2.4.20
- '@vue/compiler-dom': 3.5.18
+ '@volar/language-core': 2.4.23
+ '@vue/compiler-dom': 3.5.21
'@vue/compiler-vue2': 2.7.16
- '@vue/shared': 3.5.18
- alien-signals: 2.0.5
+ '@vue/shared': 3.5.21
+ alien-signals: 2.0.7
muggle-string: 0.4.1
path-browserify: 1.0.1
picomatch: 4.0.3
optionalDependencies:
- typescript: 5.8.3
+ typescript: 5.9.2
- '@vue/reactivity@3.5.22':
+ '@vue/reactivity@3.5.21':
dependencies:
- '@vue/shared': 3.5.22
+ '@vue/shared': 3.5.21
- '@vue/runtime-core@3.5.22':
+ '@vue/runtime-core@3.5.21':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/reactivity': 3.5.21
+ '@vue/shared': 3.5.21
- '@vue/runtime-dom@3.5.22':
+ '@vue/runtime-dom@3.5.21':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/runtime-core': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/reactivity': 3.5.21
+ '@vue/runtime-core': 3.5.21
+ '@vue/shared': 3.5.21
csstype: 3.1.3
- '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.8.3))':
+ '@vue/server-renderer@3.5.21(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
- vue: 3.5.22(typescript@5.8.3)
+ '@vue/compiler-ssr': 3.5.21
+ '@vue/shared': 3.5.21
+ vue: 3.5.21(typescript@5.9.2)
- '@vue/shared@3.5.18': {}
+ '@vue/shared@3.5.21': {}
- '@vue/shared@3.5.22': {}
-
- '@vueuse/core@13.6.0(vue@3.5.22(typescript@5.8.3))':
+ '@vueuse/core@13.6.0(vue@3.5.21(typescript@5.9.2))':
dependencies:
'@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 13.6.0
- '@vueuse/shared': 13.6.0(vue@3.5.22(typescript@5.8.3))
- vue: 3.5.22(typescript@5.8.3)
+ '@vueuse/shared': 13.6.0(vue@3.5.21(typescript@5.9.2))
+ vue: 3.5.21(typescript@5.9.2)
'@vueuse/metadata@13.6.0': {}
- '@vueuse/nuxt@13.6.0(magicast@0.3.5)(nuxt@3.17.7(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.16.5)(@vue/compiler-sfc@3.5.22)(db0@0.3.2)(eslint@9.31.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@3.0.4(typescript@5.8.3))(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))':
+ '@vueuse/nuxt@13.6.0(magicast@0.3.5)(nuxt@4.1.2(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.0)(sass@1.93.0)(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.0.7(typescript@5.9.2))(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))':
dependencies:
- '@nuxt/kit': 4.0.2(magicast@0.3.5)
- '@vueuse/core': 13.6.0(vue@3.5.22(typescript@5.8.3))
+ '@nuxt/kit': 4.1.2(magicast@0.3.5)
+ '@vueuse/core': 13.6.0(vue@3.5.21(typescript@5.9.2))
'@vueuse/metadata': 13.6.0
- local-pkg: 1.1.1
- nuxt: 3.17.7(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.16.5)(@vue/compiler-sfc@3.5.22)(db0@0.3.2)(eslint@9.31.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@3.0.4(typescript@5.8.3))(yaml@2.8.0)
- vue: 3.5.22(typescript@5.8.3)
+ local-pkg: 1.1.2
+ nuxt: 4.1.2(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.0)(sass@1.93.0)(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.0.7(typescript@5.9.2))(yaml@2.8.1)
+ vue: 3.5.21(typescript@5.9.2)
transitivePeerDependencies:
- magicast
- '@vueuse/shared@13.6.0(vue@3.5.22(typescript@5.8.3))':
+ '@vueuse/shared@13.6.0(vue@3.5.21(typescript@5.9.2))':
dependencies:
- vue: 3.5.22(typescript@5.8.3)
-
- '@whatwg-node/disposablestack@0.0.6':
- dependencies:
- '@whatwg-node/promise-helpers': 1.3.2
- tslib: 2.8.1
-
- '@whatwg-node/fetch@0.10.10':
- dependencies:
- '@whatwg-node/node-fetch': 0.7.25
- urlpattern-polyfill: 10.1.0
-
- '@whatwg-node/node-fetch@0.7.25':
- dependencies:
- '@fastify/busboy': 3.1.1
- '@whatwg-node/disposablestack': 0.0.6
- '@whatwg-node/promise-helpers': 1.3.2
- tslib: 2.8.1
-
- '@whatwg-node/promise-helpers@1.3.2':
- dependencies:
- tslib: 2.8.1
-
- '@whatwg-node/server@0.9.71':
- dependencies:
- '@whatwg-node/disposablestack': 0.0.6
- '@whatwg-node/fetch': 0.10.10
- '@whatwg-node/promise-helpers': 1.3.2
- tslib: 2.8.1
+ vue: 3.5.21(typescript@5.9.2)
abbrev@3.0.1: {}
@@ -8195,17 +7738,17 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- alien-signals@2.0.5: {}
+ alien-signals@2.0.7: {}
ansi-regex@5.0.1: {}
- ansi-regex@6.1.0: {}
+ ansi-regex@6.2.2: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
- ansi-styles@6.2.1: {}
+ ansi-styles@6.2.3: {}
ansis@4.1.0: {}
@@ -8233,6 +7776,8 @@ snapshots:
readdir-glob: 1.1.3
tar-stream: 3.1.7
zip-stream: 6.0.1
+ transitivePeerDependencies:
+ - react-native-b4a
are-docs-informative@0.0.2: {}
@@ -8244,32 +7789,30 @@ snapshots:
argparse@2.0.1: {}
- arktype@2.1.20:
+ arktype@2.1.22:
dependencies:
- '@ark/schema': 0.46.0
- '@ark/util': 0.46.0
+ '@ark/schema': 0.49.0
+ '@ark/util': 0.49.0
ast-kit@1.4.3:
dependencies:
- '@babel/parser': 7.28.0
+ '@babel/parser': 7.28.4
pathe: 2.0.3
- ast-kit@2.1.1:
+ ast-kit@2.1.2:
dependencies:
- '@babel/parser': 7.28.0
+ '@babel/parser': 7.28.4
pathe: 2.0.3
- ast-module-types@6.0.1: {}
-
ast-walker-scope@0.6.2:
dependencies:
- '@babel/parser': 7.28.0
+ '@babel/parser': 7.28.4
ast-kit: 1.4.3
- ast-walker-scope@0.8.1:
+ ast-walker-scope@0.8.2:
dependencies:
- '@babel/parser': 7.28.0
- ast-kit: 2.1.1
+ '@babel/parser': 7.28.4
+ ast-kit: 2.1.2
async-sema@3.1.1: {}
@@ -8281,15 +7824,15 @@ snapshots:
autoprefixer@10.4.21(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
- caniuse-lite: 1.0.30001731
+ browserslist: 4.26.2
+ caniuse-lite: 1.0.30001743
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
postcss: 8.5.6
postcss-value-parser: 4.2.0
- axios@1.12.0:
+ axios@1.12.2:
dependencies:
follow-redirects: 1.15.11
form-data: 4.0.4
@@ -8297,43 +7840,60 @@ snapshots:
transitivePeerDependencies:
- debug
- b4a@1.6.7: {}
+ b4a@1.7.1: {}
balanced-match@1.0.2: {}
- bare-events@2.6.0:
+ bare-events@2.7.0:
optional: true
- bare-fs@4.1.6:
+ bare-fs@4.4.4:
dependencies:
- bare-events: 2.6.0
+ bare-events: 2.7.0
bare-path: 3.0.0
- bare-stream: 2.6.5(bare-events@2.6.0)
+ bare-stream: 2.7.0(bare-events@2.7.0)
+ bare-url: 2.2.2
+ fast-fifo: 1.3.2
+ transitivePeerDependencies:
+ - react-native-b4a
optional: true
- bare-os@3.6.1:
+ bare-os@3.6.2:
optional: true
bare-path@3.0.0:
dependencies:
- bare-os: 3.6.1
+ bare-os: 3.6.2
optional: true
- bare-stream@2.6.5(bare-events@2.6.0):
+ bare-stream@2.7.0(bare-events@2.7.0):
dependencies:
streamx: 2.22.1
optionalDependencies:
- bare-events: 2.6.0
+ bare-events: 2.7.0
+ transitivePeerDependencies:
+ - react-native-b4a
+ optional: true
+
+ bare-url@2.2.2:
+ dependencies:
+ bare-path: 3.0.0
optional: true
base64-js@1.5.1: {}
+ baseline-browser-mapping@2.8.6: {}
+
basic-auth@2.0.1:
dependencies:
safe-buffer: 5.1.2
bcryptjs@3.0.2: {}
+ bidi-js@1.0.3:
+ dependencies:
+ require-from-string: 2.0.2
+
binary-extensions@2.3.0: {}
bindings@1.5.0:
@@ -8370,14 +7930,13 @@ snapshots:
dependencies:
base64-js: 1.5.1
- browserslist@4.25.1:
+ browserslist@4.26.2:
dependencies:
- caniuse-lite: 1.0.30001731
- electron-to-chromium: 1.5.194
- node-releases: 2.0.19
- update-browserslist-db: 1.1.3(browserslist@4.25.1)
-
- buffer-crc32@0.2.13: {}
+ baseline-browser-mapping: 2.8.6
+ caniuse-lite: 1.0.30001743
+ electron-to-chromium: 1.5.222
+ node-releases: 2.0.21
+ update-browserslist-db: 1.1.3(browserslist@4.26.2)
buffer-crc32@1.0.0: {}
@@ -8394,32 +7953,47 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- builtin-modules@3.3.0: {}
-
builtin-modules@5.0.0: {}
bundle-name@4.1.0:
dependencies:
- run-applescript: 7.0.0
+ run-applescript: 7.1.0
- bundle-require@5.1.0(esbuild@0.25.8):
+ bundle-require@5.1.0(esbuild@0.25.10):
dependencies:
- esbuild: 0.25.8
+ esbuild: 0.25.10
load-tsconfig: 0.2.5
- c12@3.2.0(magicast@0.3.5):
+ c12@3.1.0(magicast@0.3.5):
dependencies:
chokidar: 4.0.3
confbox: 0.2.2
defu: 6.1.4
- dotenv: 17.2.1
+ dotenv: 16.6.1
exsolve: 1.0.7
giget: 2.0.0
jiti: 2.5.1
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
+ rc9: 2.1.2
+ optionalDependencies:
+ magicast: 0.3.5
+
+ c12@3.3.0(magicast@0.3.5):
+ dependencies:
+ chokidar: 4.0.3
+ confbox: 0.2.2
+ defu: 6.1.4
+ dotenv: 17.2.2
+ exsolve: 1.0.7
+ giget: 2.0.0
+ jiti: 2.5.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.0.0
+ pkg-types: 2.3.0
rc9: 2.1.2
optionalDependencies:
magicast: 0.3.5
@@ -8431,27 +8005,20 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
- call-bound@1.0.4:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- get-intrinsic: 1.3.0
-
- callsite@1.0.0: {}
-
callsites@3.1.0: {}
caniuse-api@3.0.0:
dependencies:
- browserslist: 4.25.1
- caniuse-lite: 1.0.30001731
+ browserslist: 4.26.2
+ caniuse-lite: 1.0.30001743
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
- caniuse-lite@1.0.30001731: {}
+ caniuse-lite@1.0.30001743: {}
canvas-renderer@2.2.1:
dependencies:
- '@types/node': 22.16.5
+ '@types/node': 22.18.6
chalk@4.1.2:
dependencies:
@@ -8482,7 +8049,7 @@ snapshots:
parse5: 7.3.0
parse5-htmlparser2-tree-adapter: 7.1.0
parse5-parser-stream: 7.1.2
- undici: 7.13.0
+ undici: 7.16.0
whatwg-mimetype: 4.0.0
chokidar@3.6.0:
@@ -8532,27 +8099,17 @@ snapshots:
cluster-key-slot@1.1.2: {}
- color-convert@1.9.3:
- dependencies:
- color-name: 1.1.3
-
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
- color-name@1.1.3: {}
-
color-name@1.1.4: {}
color-string@1.9.1:
dependencies:
color-name: 1.1.4
- simple-swizzle: 0.2.2
-
- color@3.2.1:
- dependencies:
- color-convert: 1.9.3
- color-string: 1.9.1
+ simple-swizzle: 0.2.4
+ optional: true
color@4.2.3:
dependencies:
@@ -8564,21 +8121,12 @@ snapshots:
colorette@2.0.20: {}
- colorspace@1.1.4:
- dependencies:
- color: 3.2.1
- text-hex: 1.0.0
-
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
- commander@10.0.1: {}
-
commander@11.1.0: {}
- commander@12.1.0: {}
-
commander@2.20.3: {}
commander@7.2.0:
@@ -8586,8 +8134,6 @@ snapshots:
comment-parser@1.4.1: {}
- common-path-prefix@3.0.0: {}
-
commondir@1.0.1: {}
compatx@0.2.0: {}
@@ -8620,14 +8166,9 @@ snapshots:
dependencies:
is-what: 4.1.16
- copy-file@11.0.0:
+ core-js-compat@3.45.1:
dependencies:
- graceful-fs: 4.2.11
- p-event: 6.0.1
-
- core-js-compat@3.44.0:
- dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
core-util-is@1.0.3: {}
@@ -8638,10 +8179,6 @@ snapshots:
crc-32: 1.2.2
readable-stream: 4.7.0
- cron-parser@4.9.0:
- dependencies:
- luxon: 3.7.1
-
croner@9.1.0: {}
cross-fetch@3.2.0:
@@ -8660,7 +8197,7 @@ snapshots:
dependencies:
uncrypto: 0.1.3
- css-declaration-sorter@7.2.0(postcss@8.5.6):
+ css-declaration-sorter@7.3.0(postcss@8.5.6):
dependencies:
postcss: 8.5.6
@@ -8694,15 +8231,15 @@ snapshots:
cssfilter@0.0.10: {}
- cssnano-preset-default@7.0.8(postcss@8.5.6):
+ cssnano-preset-default@7.0.9(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
- css-declaration-sorter: 7.2.0(postcss@8.5.6)
+ browserslist: 4.26.2
+ css-declaration-sorter: 7.3.0(postcss@8.5.6)
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
postcss-calc: 10.1.1(postcss@8.5.6)
postcss-colormin: 7.0.4(postcss@8.5.6)
- postcss-convert-values: 7.0.6(postcss@8.5.6)
+ postcss-convert-values: 7.0.7(postcss@8.5.6)
postcss-discard-comments: 7.0.4(postcss@8.5.6)
postcss-discard-duplicates: 7.0.2(postcss@8.5.6)
postcss-discard-empty: 7.0.1(postcss@8.5.6)
@@ -8732,9 +8269,9 @@ snapshots:
dependencies:
postcss: 8.5.6
- cssnano@7.1.0(postcss@8.5.6):
+ cssnano@7.1.1(postcss@8.5.6):
dependencies:
- cssnano-preset-default: 7.0.8(postcss@8.5.6)
+ cssnano-preset-default: 7.0.9(postcss@8.5.6)
lilconfig: 3.1.3
postcss: 8.5.6
@@ -8742,9 +8279,20 @@ snapshots:
dependencies:
css-tree: 2.2.1
+ cssstyle@5.3.0(postcss@8.5.6):
+ dependencies:
+ '@asamuzakjp/css-color': 4.0.4
+ '@csstools/css-syntax-patches-for-csstree': 1.0.14(postcss@8.5.6)
+ css-tree: 3.1.0
+ transitivePeerDependencies:
+ - postcss
+
csstype@3.1.3: {}
- data-uri-to-buffer@4.0.1: {}
+ data-urls@6.0.0:
+ dependencies:
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 15.1.0
dateformat@4.6.3: {}
@@ -8752,13 +8300,11 @@ snapshots:
de-indent@1.0.2: {}
- debug@4.4.1:
+ debug@4.4.3:
dependencies:
ms: 2.1.3
- decache@4.6.2:
- dependencies:
- callsite: 1.0.0
+ decimal.js@10.6.0: {}
decode-named-character-reference@1.2.0:
dependencies:
@@ -8774,6 +8320,8 @@ snapshots:
deep-is@0.1.4: {}
+ deepmerge-ts@7.1.5: {}
+
deepmerge@4.3.1: {}
default-browser-id@5.0.0: {}
@@ -8801,65 +8349,9 @@ snapshots:
detect-libc@1.0.3: {}
- detect-libc@2.0.4: {}
+ detect-libc@2.1.0: {}
- detective-amd@6.0.1:
- dependencies:
- ast-module-types: 6.0.1
- escodegen: 2.1.0
- get-amd-module-type: 6.0.1
- node-source-walk: 7.0.1
-
- detective-cjs@6.0.1:
- dependencies:
- ast-module-types: 6.0.1
- node-source-walk: 7.0.1
-
- detective-es6@5.0.1:
- dependencies:
- node-source-walk: 7.0.1
-
- detective-postcss@7.0.1(postcss@8.5.6):
- dependencies:
- is-url: 1.2.4
- postcss: 8.5.6
- postcss-values-parser: 6.0.2(postcss@8.5.6)
-
- detective-sass@6.0.1:
- dependencies:
- gonzales-pe: 4.3.0
- node-source-walk: 7.0.1
-
- detective-scss@5.0.1:
- dependencies:
- gonzales-pe: 4.3.0
- node-source-walk: 7.0.1
-
- detective-stylus@5.0.1: {}
-
- detective-typescript@14.0.0(typescript@5.8.3):
- dependencies:
- '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
- ast-module-types: 6.0.1
- node-source-walk: 7.0.1
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
- detective-vue2@2.2.0(typescript@5.8.3):
- dependencies:
- '@dependents/detective-less': 5.0.1
- '@vue/compiler-sfc': 3.5.22
- detective-es6: 5.0.1
- detective-sass: 6.0.1
- detective-scss: 5.0.1
- detective-stylus: 5.0.1
- detective-typescript: 14.0.0(typescript@5.8.3)
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
- devalue@5.1.1: {}
+ devalue@5.3.2: {}
devlop@1.1.0:
dependencies:
@@ -8893,7 +8385,7 @@ snapshots:
dotenv@16.6.1: {}
- dotenv@17.2.1: {}
+ dotenv@17.2.2: {}
dunder-proto@1.0.1:
dependencies:
@@ -8907,13 +8399,18 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.194: {}
+ effect@3.16.12:
+ dependencies:
+ '@standard-schema/spec': 1.0.0
+ fast-check: 3.23.2
+
+ electron-to-chromium@1.5.222: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
- enabled@2.0.0: {}
+ empathic@2.0.0: {}
encodeurl@2.0.0: {}
@@ -8926,17 +8423,15 @@ snapshots:
dependencies:
once: 1.4.0
- enhanced-resolve@5.18.2:
+ enhanced-resolve@5.18.3:
dependencies:
graceful-fs: 4.2.11
- tapable: 2.2.2
+ tapable: 2.2.3
entities@4.5.0: {}
entities@6.0.1: {}
- env-paths@3.0.0: {}
-
error-stack-parser-es@1.0.5: {}
errx@0.1.0: {}
@@ -8958,62 +8453,34 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- esbuild@0.25.5:
+ esbuild@0.25.10:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.5
- '@esbuild/android-arm': 0.25.5
- '@esbuild/android-arm64': 0.25.5
- '@esbuild/android-x64': 0.25.5
- '@esbuild/darwin-arm64': 0.25.5
- '@esbuild/darwin-x64': 0.25.5
- '@esbuild/freebsd-arm64': 0.25.5
- '@esbuild/freebsd-x64': 0.25.5
- '@esbuild/linux-arm': 0.25.5
- '@esbuild/linux-arm64': 0.25.5
- '@esbuild/linux-ia32': 0.25.5
- '@esbuild/linux-loong64': 0.25.5
- '@esbuild/linux-mips64el': 0.25.5
- '@esbuild/linux-ppc64': 0.25.5
- '@esbuild/linux-riscv64': 0.25.5
- '@esbuild/linux-s390x': 0.25.5
- '@esbuild/linux-x64': 0.25.5
- '@esbuild/netbsd-arm64': 0.25.5
- '@esbuild/netbsd-x64': 0.25.5
- '@esbuild/openbsd-arm64': 0.25.5
- '@esbuild/openbsd-x64': 0.25.5
- '@esbuild/sunos-x64': 0.25.5
- '@esbuild/win32-arm64': 0.25.5
- '@esbuild/win32-ia32': 0.25.5
- '@esbuild/win32-x64': 0.25.5
-
- esbuild@0.25.8:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.8
- '@esbuild/android-arm': 0.25.8
- '@esbuild/android-arm64': 0.25.8
- '@esbuild/android-x64': 0.25.8
- '@esbuild/darwin-arm64': 0.25.8
- '@esbuild/darwin-x64': 0.25.8
- '@esbuild/freebsd-arm64': 0.25.8
- '@esbuild/freebsd-x64': 0.25.8
- '@esbuild/linux-arm': 0.25.8
- '@esbuild/linux-arm64': 0.25.8
- '@esbuild/linux-ia32': 0.25.8
- '@esbuild/linux-loong64': 0.25.8
- '@esbuild/linux-mips64el': 0.25.8
- '@esbuild/linux-ppc64': 0.25.8
- '@esbuild/linux-riscv64': 0.25.8
- '@esbuild/linux-s390x': 0.25.8
- '@esbuild/linux-x64': 0.25.8
- '@esbuild/netbsd-arm64': 0.25.8
- '@esbuild/netbsd-x64': 0.25.8
- '@esbuild/openbsd-arm64': 0.25.8
- '@esbuild/openbsd-x64': 0.25.8
- '@esbuild/openharmony-arm64': 0.25.8
- '@esbuild/sunos-x64': 0.25.8
- '@esbuild/win32-arm64': 0.25.8
- '@esbuild/win32-ia32': 0.25.8
- '@esbuild/win32-x64': 0.25.8
+ '@esbuild/aix-ppc64': 0.25.10
+ '@esbuild/android-arm': 0.25.10
+ '@esbuild/android-arm64': 0.25.10
+ '@esbuild/android-x64': 0.25.10
+ '@esbuild/darwin-arm64': 0.25.10
+ '@esbuild/darwin-x64': 0.25.10
+ '@esbuild/freebsd-arm64': 0.25.10
+ '@esbuild/freebsd-x64': 0.25.10
+ '@esbuild/linux-arm': 0.25.10
+ '@esbuild/linux-arm64': 0.25.10
+ '@esbuild/linux-ia32': 0.25.10
+ '@esbuild/linux-loong64': 0.25.10
+ '@esbuild/linux-mips64el': 0.25.10
+ '@esbuild/linux-ppc64': 0.25.10
+ '@esbuild/linux-riscv64': 0.25.10
+ '@esbuild/linux-s390x': 0.25.10
+ '@esbuild/linux-x64': 0.25.10
+ '@esbuild/netbsd-arm64': 0.25.10
+ '@esbuild/netbsd-x64': 0.25.10
+ '@esbuild/openbsd-arm64': 0.25.10
+ '@esbuild/openbsd-x64': 0.25.10
+ '@esbuild/openharmony-arm64': 0.25.10
+ '@esbuild/sunos-x64': 0.25.10
+ '@esbuild/win32-arm64': 0.25.10
+ '@esbuild/win32-ia32': 0.25.10
+ '@esbuild/win32-x64': 0.25.10
escalade@3.2.0: {}
@@ -9033,21 +8500,21 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-compat-utils@0.6.5(eslint@9.31.0(jiti@2.5.1)):
+ eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
semver: 7.7.2
- eslint-config-flat-gitignore@2.1.0(eslint@9.31.0(jiti@2.5.1)):
+ eslint-config-flat-gitignore@2.1.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- '@eslint/compat': 1.3.1(eslint@9.31.0(jiti@2.5.1))
- eslint: 9.31.0(jiti@2.5.1)
+ '@eslint/compat': 1.3.2(eslint@9.36.0(jiti@2.5.1))
+ eslint: 9.36.0(jiti@2.5.1)
- eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.5.1)):
+ eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
- eslint-flat-config-utils@2.1.1:
+ eslint-flat-config-utils@2.1.4:
dependencies:
pathe: 2.0.3
@@ -9058,24 +8525,24 @@ snapshots:
optionalDependencies:
unrs-resolver: 1.11.1
- eslint-merge-processors@2.0.0(eslint@9.31.0(jiti@2.5.1)):
+ eslint-merge-processors@2.0.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
- eslint-plugin-import-lite@0.3.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3):
+ eslint-plugin-import-lite@0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
- '@typescript-eslint/types': 8.38.0
- eslint: 9.31.0(jiti@2.5.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
+ '@typescript-eslint/types': 8.44.0
+ eslint: 9.36.0(jiti@2.5.1)
optionalDependencies:
- typescript: 5.8.3
+ typescript: 5.9.2
- eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1)):
+ eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- '@typescript-eslint/types': 8.38.0
+ '@typescript-eslint/types': 8.44.0
comment-parser: 1.4.1
- debug: 4.4.1
- eslint: 9.31.0(jiti@2.5.1)
+ debug: 4.4.3
+ eslint: 9.36.0(jiti@2.5.1)
eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
is-glob: 4.0.3
minimatch: 10.0.3
@@ -9083,18 +8550,18 @@ snapshots:
stable-hash-x: 0.2.0
unrs-resolver: 1.11.1
optionalDependencies:
- '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
transitivePeerDependencies:
- supports-color
- eslint-plugin-jsdoc@51.4.1(eslint@9.31.0(jiti@2.5.1)):
+ eslint-plugin-jsdoc@54.7.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- '@es-joy/jsdoccomment': 0.52.0
+ '@es-joy/jsdoccomment': 0.56.0
are-docs-informative: 0.0.2
comment-parser: 1.4.1
- debug: 4.4.1
+ debug: 4.4.3
escape-string-regexp: 4.0.0
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
espree: 10.4.0
esquery: 1.6.0
parse-imports-exports: 0.2.4
@@ -9103,30 +8570,30 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-regexp@2.9.0(eslint@9.31.0(jiti@2.5.1)):
+ eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
comment-parser: 1.4.1
- eslint: 9.31.0(jiti@2.5.1)
- jsdoc-type-pratt-parser: 4.1.0
+ eslint: 9.36.0(jiti@2.5.1)
+ jsdoc-type-pratt-parser: 4.8.0
refa: 0.12.1
regexp-ast-analysis: 0.7.1
scslre: 0.3.0
- eslint-plugin-unicorn@60.0.0(eslint@9.31.0(jiti@2.5.1)):
+ eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
'@babel/helper-validator-identifier': 7.27.1
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
- '@eslint/plugin-kit': 0.3.4
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
+ '@eslint/plugin-kit': 0.3.5
change-case: 5.4.4
ci-info: 4.3.0
clean-regexp: 1.0.0
- core-js-compat: 3.44.0
- eslint: 9.31.0(jiti@2.5.1)
+ core-js-compat: 3.45.1
+ eslint: 9.36.0(jiti@2.5.1)
esquery: 1.6.0
find-up-simple: 1.0.1
- globals: 16.3.0
+ globals: 16.4.0
indent-string: 5.0.0
is-builtin-module: 5.0.0
jsesc: 3.1.0
@@ -9134,34 +8601,34 @@ snapshots:
regexp-tree: 0.1.27
regjsparser: 0.12.0
semver: 7.7.2
- strip-indent: 4.0.0
+ strip-indent: 4.1.0
- eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.5.1))):
+ eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))):
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
- eslint: 9.31.0(jiti@2.5.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
+ eslint: 9.36.0(jiti@2.5.1)
natural-compare: 1.4.0
nth-check: 2.1.1
postcss-selector-parser: 6.1.2
semver: 7.7.2
- vue-eslint-parser: 10.2.0(eslint@9.31.0(jiti@2.5.1))
+ vue-eslint-parser: 10.2.0(eslint@9.36.0(jiti@2.5.1))
xml-name-validator: 4.0.0
optionalDependencies:
- '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
- eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.31.0(jiti@2.5.1)):
+ eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- '@vue/compiler-sfc': 3.5.22
- eslint: 9.31.0(jiti@2.5.1)
+ '@vue/compiler-sfc': 3.5.21
+ eslint: 9.36.0(jiti@2.5.1)
eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
- eslint-typegen@2.3.0(eslint@9.31.0(jiti@2.5.1)):
+ eslint-typegen@2.3.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
json-schema-to-typescript-lite: 15.0.0
ohash: 2.0.11
@@ -9169,17 +8636,17 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.31.0(jiti@2.5.1):
+ eslint@9.36.0(jiti@2.5.1):
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0
- '@eslint/config-helpers': 0.3.0
- '@eslint/core': 0.15.1
+ '@eslint/config-helpers': 0.3.1
+ '@eslint/core': 0.15.2
'@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.31.0
- '@eslint/plugin-kit': 0.3.4
- '@humanfs/node': 0.16.6
+ '@eslint/js': 9.36.0
+ '@eslint/plugin-kit': 0.3.5
+ '@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
@@ -9187,7 +8654,7 @@ snapshots:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.1
+ debug: 4.4.3
escape-string-regexp: 4.0.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
@@ -9266,22 +8733,9 @@ snapshots:
exsolve@1.0.7: {}
- externality@1.0.2:
+ fast-check@3.23.2:
dependencies:
- enhanced-resolve: 5.18.2
- mlly: 1.7.4
- pathe: 1.1.2
- ufo: 1.6.1
-
- extract-zip@2.0.1:
- dependencies:
- debug: 4.4.1
- get-stream: 5.2.0
- yauzl: 2.10.0
- optionalDependencies:
- '@types/yauzl': 2.10.3
- transitivePeerDependencies:
- - supports-color
+ pure-rand: 6.1.0
fast-copy@3.0.2: {}
@@ -9305,7 +8759,7 @@ snapshots:
fast-levenshtein@2.0.6: {}
- fast-npm-meta@0.4.4: {}
+ fast-npm-meta@0.4.6: {}
fast-redact@3.5.0: {}
@@ -9315,21 +8769,10 @@ snapshots:
dependencies:
reusify: 1.1.0
- fd-slicer@1.1.0:
- dependencies:
- pend: 1.2.0
-
- fdir@6.4.6(picomatch@4.0.3):
+ fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
- fecha@4.2.3: {}
-
- fetch-blob@3.2.0:
- dependencies:
- node-domexception: 1.0.0
- web-streams-polyfill: 3.3.3
-
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
@@ -9348,8 +8791,6 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
- filter-obj@6.1.0: {}
-
find-up-simple@1.0.1: {}
find-up@5.0.0:
@@ -9370,8 +8811,6 @@ snapshots:
flatted@3.3.3: {}
- fn.name@1.1.0: {}
-
follow-redirects@1.15.11: {}
fontaine@0.6.0:
@@ -9380,10 +8819,10 @@ snapshots:
'@capsizecss/unpack': 2.4.0
css-tree: 3.1.0
magic-regexp: 0.10.0
- magic-string: 0.30.17
+ magic-string: 0.30.19
pathe: 2.0.3
ufo: 1.6.1
- unplugin: 2.3.5
+ unplugin: 2.3.10
transitivePeerDependencies:
- encoding
@@ -9412,10 +8851,6 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
- formdata-polyfill@4.0.10:
- dependencies:
- fetch-blob: 3.2.0
-
fraction.js@4.3.7: {}
fresh@2.0.0: {}
@@ -9423,10 +8858,10 @@ snapshots:
fs-constants@1.0.0:
optional: true
- fs-extra@11.3.0:
+ fs-extra@11.3.2:
dependencies:
graceful-fs: 4.2.11
- jsonfile: 6.1.0
+ jsonfile: 6.2.0
universalify: 2.0.1
fs-extra@8.1.0:
@@ -9444,11 +8879,6 @@ snapshots:
gensync@1.0.0-beta.2: {}
- get-amd-module-type@6.0.1:
- dependencies:
- ast-module-types: 6.0.1
- node-source-walk: 7.0.1
-
get-caller-file@2.0.5: {}
get-intrinsic@1.3.0:
@@ -9471,10 +8901,6 @@ snapshots:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
- get-stream@5.2.0:
- dependencies:
- pump: 3.0.3
-
get-stream@8.0.1: {}
get-tsconfig@4.10.1:
@@ -9486,8 +8912,8 @@ snapshots:
citty: 0.1.6
consola: 3.4.2
defu: 6.1.4
- node-fetch-native: 1.6.6
- nypm: 0.6.1
+ node-fetch-native: 1.6.7
+ nypm: 0.6.2
pathe: 2.0.3
git-up@8.1.1:
@@ -9525,7 +8951,7 @@ snapshots:
globals@14.0.0: {}
- globals@16.3.0: {}
+ globals@16.4.0: {}
globby@14.1.0:
dependencies:
@@ -9536,10 +8962,6 @@ snapshots:
slash: 5.1.0
unicorn-magic: 0.3.0
- gonzales-pe@4.3.0:
- dependencies:
- minimist: 1.2.8
-
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
@@ -9548,21 +8970,21 @@ snapshots:
graphemesplit@2.6.0:
dependencies:
- js-base64: 3.7.7
+ js-base64: 3.7.8
unicode-trie: 2.0.0
gzip-size@7.0.0:
dependencies:
duplexer: 0.1.2
- h3@1.15.3:
+ h3@1.15.4:
dependencies:
cookie-es: 1.2.2
crossws: 0.3.5
defu: 6.1.4
destr: 2.0.5
iron-webcrypto: 1.2.1
- node-mock-http: 1.0.2
+ node-mock-http: 1.0.3
radix3: 1.1.2
ufo: 1.6.1
uncrypto: 0.1.3
@@ -9585,9 +9007,9 @@ snapshots:
hookable@5.5.3: {}
- hosted-git-info@7.0.2:
+ html-encoding-sniffer@4.0.0:
dependencies:
- lru-cache: 10.4.3
+ whatwg-encoding: 3.1.1
htmlparser2@10.0.0:
dependencies:
@@ -9604,12 +9026,19 @@ snapshots:
statuses: 2.0.1
toidentifier: 1.0.1
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
http-shutdown@1.2.2: {}
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.4
- debug: 4.4.1
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
@@ -9641,15 +9070,13 @@ snapshots:
exsolve: 1.0.7
mocked-exports: 0.1.1
pathe: 2.0.3
- unplugin: 2.3.5
- unplugin-utils: 0.2.4
+ unplugin: 2.3.10
+ unplugin-utils: 0.2.5
imurmurhash@0.1.4: {}
indent-string@5.0.0: {}
- index-to-position@1.1.0: {}
-
inherits@2.0.4: {}
ini@1.3.8:
@@ -9659,9 +9086,9 @@ snapshots:
ioredis@5.7.0:
dependencies:
- '@ioredis/commands': 1.3.0
+ '@ioredis/commands': 1.4.0
cluster-key-slot: 1.1.2
- debug: 4.4.1
+ debug: 4.4.3
denque: 2.1.0
lodash.defaults: 4.2.0
lodash.isarguments: 3.1.0
@@ -9671,7 +9098,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ipx@2.1.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0):
+ ipx@2.1.1(db0@0.3.2)(ioredis@5.7.0):
dependencies:
'@fastify/accept-negotiator': 1.1.0
citty: 0.1.6
@@ -9679,7 +9106,7 @@ snapshots:
defu: 6.1.4
destr: 2.0.5
etag: 1.8.1
- h3: 1.15.3
+ h3: 1.15.4
image-meta: 0.2.1
listhen: 1.9.0
ofetch: 1.4.1
@@ -9687,7 +9114,7 @@ snapshots:
sharp: 0.32.6
svgo: 3.3.2
ufo: 1.6.1
- unstorage: 1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)
+ unstorage: 1.17.1(db0@0.3.2)(ioredis@5.7.0)
xss: 1.0.15
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -9702,27 +9129,26 @@ snapshots:
- '@planetscale/database'
- '@upstash/redis'
- '@vercel/blob'
+ - '@vercel/functions'
- '@vercel/kv'
- aws4fetch
- bare-buffer
- db0
- idb-keyval
- ioredis
+ - react-native-b4a
- uploadthing
optional: true
iron-webcrypto@1.2.1: {}
- is-arrayish@0.3.2: {}
+ is-arrayish@0.3.4:
+ optional: true
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
- is-builtin-module@3.2.1:
- dependencies:
- builtin-modules: 3.3.0
-
is-builtin-module@5.0.0:
dependencies:
builtin-modules: 5.0.0
@@ -9754,7 +9180,7 @@ snapshots:
is-language-code@3.1.0:
dependencies:
- '@babel/runtime': 7.28.2
+ '@babel/runtime': 7.28.4
is-module@1.0.0: {}
@@ -9762,7 +9188,7 @@ snapshots:
is-path-inside@4.0.0: {}
- is-plain-obj@2.1.0: {}
+ is-potential-custom-element-name@1.0.1: {}
is-reference@1.2.1:
dependencies:
@@ -9776,12 +9202,6 @@ snapshots:
is-stream@3.0.0: {}
- is-stream@4.0.1: {}
-
- is-url-superb@4.0.0: {}
-
- is-url@1.2.4: {}
-
is-what@4.1.16: {}
is-wsl@2.2.0:
@@ -9812,13 +9232,11 @@ snapshots:
dependencies:
canvas-renderer: 2.2.1
- jiti@2.4.2: {}
-
jiti@2.5.1: {}
joycon@3.1.1: {}
- js-base64@3.7.7: {}
+ js-base64@3.7.8: {}
js-tokens@4.0.0: {}
@@ -9828,7 +9246,37 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsdoc-type-pratt-parser@4.1.0: {}
+ jsdoc-type-pratt-parser@4.8.0: {}
+
+ jsdoc-type-pratt-parser@5.1.1: {}
+
+ jsdom@27.0.0(postcss@8.5.6):
+ dependencies:
+ '@asamuzakjp/dom-selector': 6.5.5
+ cssstyle: 5.3.0(postcss@8.5.6)
+ data-urls: 6.0.0
+ decimal.js: 10.6.0
+ html-encoding-sniffer: 4.0.0
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ is-potential-custom-element-name: 1.0.1
+ parse5: 7.3.0
+ rrweb-cssom: 0.8.0
+ saxes: 6.0.0
+ symbol-tree: 3.2.4
+ tough-cookie: 6.0.0
+ w3c-xmlserializer: 5.0.0
+ webidl-conversions: 8.0.0
+ whatwg-encoding: 3.1.1
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 15.1.0
+ ws: 8.18.3
+ xml-name-validator: 5.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - postcss
+ - supports-color
+ - utf-8-validate
jsesc@3.0.2: {}
@@ -9838,7 +9286,7 @@ snapshots:
json-schema-to-typescript-lite@15.0.0:
dependencies:
- '@apidevtools/json-schema-ref-parser': 14.1.1
+ '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15)
'@types/json-schema': 7.0.15
json-schema-traverse@0.4.1: {}
@@ -9864,16 +9312,12 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
- jsonfile@6.1.0:
+ jsonfile@6.2.0:
dependencies:
universalify: 2.0.1
optionalDependencies:
graceful-fs: 4.2.11
- junk@4.0.1: {}
-
- jwt-decode@4.0.0: {}
-
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
@@ -9886,15 +9330,7 @@ snapshots:
knitwork@1.2.0: {}
- kuler@2.0.0: {}
-
- lambda-local@2.2.0:
- dependencies:
- commander: 10.0.1
- dotenv: 16.6.1
- winston: 3.17.0
-
- launch-editor@2.11.0:
+ launch-editor@2.11.1:
dependencies:
picocolors: 1.1.1
shell-quote: 1.8.3
@@ -9940,7 +9376,7 @@ snapshots:
lightningcss@1.30.1:
dependencies:
- detect-libc: 2.0.4
+ detect-libc: 2.1.0
optionalDependencies:
lightningcss-darwin-arm64: 1.30.1
lightningcss-darwin-x64: 1.30.1
@@ -9965,10 +9401,10 @@ snapshots:
crossws: 0.3.5
defu: 6.1.4
get-port-please: 3.2.0
- h3: 1.15.3
+ h3: 1.15.4
http-shutdown: 1.2.2
jiti: 2.5.1
- mlly: 1.7.4
+ mlly: 1.8.0
node-forge: 1.3.1
pathe: 1.1.2
std-env: 3.9.0
@@ -9978,11 +9414,11 @@ snapshots:
load-tsconfig@0.2.5: {}
- local-pkg@1.1.1:
+ local-pkg@1.1.2:
dependencies:
- mlly: 1.7.4
- pkg-types: 2.2.0
- quansync: 0.2.10
+ mlly: 1.8.0
+ pkg-types: 2.3.0
+ quansync: 0.2.11
locate-path@6.0.0:
dependencies:
@@ -9992,18 +9428,10 @@ snapshots:
dependencies:
p-locate: 6.0.0
- lodash-es@4.17.21: {}
-
- lodash.castarray@4.4.0: {}
-
- lodash.debounce@4.0.8: {}
-
lodash.defaults@4.2.0: {}
lodash.isarguments@3.1.0: {}
- lodash.isplainobject@4.0.6: {}
-
lodash.memoize@4.1.2: {}
lodash.merge@4.6.2: {}
@@ -10012,44 +9440,33 @@ snapshots:
lodash@4.17.21: {}
- logform@2.7.0:
- dependencies:
- '@colors/colors': 1.6.0
- '@types/triple-beam': 1.3.5
- fecha: 4.2.3
- ms: 2.1.3
- safe-stable-stringify: 2.5.0
- triple-beam: 1.4.1
-
lru-cache@10.4.3: {}
+ lru-cache@11.2.1: {}
+
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
- luxon@3.7.1: {}
+ luxon@3.7.2: {}
magic-regexp@0.10.0:
dependencies:
estree-walker: 3.0.3
- magic-string: 0.30.17
- mlly: 1.7.4
+ magic-string: 0.30.19
+ mlly: 1.8.0
regexp-tree: 0.1.27
type-level-regexp: 0.1.17
ufo: 1.6.1
- unplugin: 2.3.5
+ unplugin: 2.3.10
magic-string-ast@0.7.1:
dependencies:
- magic-string: 0.30.17
+ magic-string: 0.30.19
- magic-string-ast@1.0.0:
+ magic-string-ast@1.0.2:
dependencies:
- magic-string: 0.30.17
-
- magic-string@0.30.17:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.4
+ magic-string: 0.30.19
magic-string@0.30.19:
dependencies:
@@ -10057,8 +9474,8 @@ snapshots:
magicast@0.3.5:
dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.2
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
source-map-js: 1.2.1
math-intrinsics@1.1.0: {}
@@ -10070,16 +9487,10 @@ snapshots:
mdn-data@2.12.2: {}
- merge-options@3.0.4:
- dependencies:
- is-plain-obj: 2.1.0
-
merge-stream@2.0.0: {}
merge2@1.4.1: {}
- micro-api-client@3.3.0: {}
-
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.2.0
@@ -10187,7 +9598,7 @@ snapshots:
micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
- debug: 4.4.1
+ debug: 4.4.3
decode-named-character-reference: 1.2.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.3
@@ -10225,15 +9636,13 @@ snapshots:
mime@3.0.0: {}
- mime@4.0.7: {}
+ mime@4.1.0: {}
mimic-fn@4.0.0: {}
mimic-response@3.1.0:
optional: true
- min-indent@1.0.1: {}
-
mini-svg-data-uri@1.4.4: {}
minimatch@10.0.3:
@@ -10267,7 +9676,7 @@ snapshots:
mkdirp@3.0.1: {}
- mlly@1.7.4:
+ mlly@1.8.0:
dependencies:
acorn: 8.15.0
pathe: 2.0.3
@@ -10276,11 +9685,6 @@ snapshots:
mocked-exports@0.1.1: {}
- module-definition@6.0.1:
- dependencies:
- ast-module-types: 6.0.1
- node-source-walk: 7.0.1
-
mrmime@2.0.1: {}
ms@2.1.3: {}
@@ -10296,33 +9700,23 @@ snapshots:
napi-build-utils@2.0.0:
optional: true
- napi-postinstall@0.3.2: {}
+ napi-postinstall@0.3.3: {}
natural-compare@1.4.0: {}
- netlify@13.3.5:
- dependencies:
- '@netlify/open-api': 2.37.0
- lodash-es: 4.17.21
- micro-api-client: 3.3.0
- node-fetch: 3.3.2
- p-wait-for: 5.0.2
- qs: 6.14.0
-
- nitropack@2.12.4(@netlify/blobs@9.1.2):
+ nitropack@2.12.6:
dependencies:
'@cloudflare/kv-asset-handler': 0.4.0
- '@netlify/functions': 3.1.10(rollup@4.46.2)
- '@rollup/plugin-alias': 5.1.1(rollup@4.46.2)
- '@rollup/plugin-commonjs': 28.0.6(rollup@4.46.2)
- '@rollup/plugin-inject': 5.0.5(rollup@4.46.2)
- '@rollup/plugin-json': 6.1.0(rollup@4.46.2)
- '@rollup/plugin-node-resolve': 16.0.1(rollup@4.46.2)
- '@rollup/plugin-replace': 6.0.2(rollup@4.46.2)
- '@rollup/plugin-terser': 0.4.4(rollup@4.46.2)
- '@vercel/nft': 0.29.4(rollup@4.46.2)
+ '@rollup/plugin-alias': 5.1.1(rollup@4.52.0)
+ '@rollup/plugin-commonjs': 28.0.6(rollup@4.52.0)
+ '@rollup/plugin-inject': 5.0.5(rollup@4.52.0)
+ '@rollup/plugin-json': 6.1.0(rollup@4.52.0)
+ '@rollup/plugin-node-resolve': 16.0.1(rollup@4.52.0)
+ '@rollup/plugin-replace': 6.0.2(rollup@4.52.0)
+ '@rollup/plugin-terser': 0.4.4(rollup@4.52.0)
+ '@vercel/nft': 0.30.1(rollup@4.52.0)
archiver: 7.0.1
- c12: 3.2.0(magicast@0.3.5)
+ c12: 3.3.0(magicast@0.3.5)
chokidar: 4.0.3
citty: 0.1.6
compatx: 0.2.0
@@ -10335,13 +9729,13 @@ snapshots:
defu: 6.1.4
destr: 2.0.5
dot-prop: 9.0.0
- esbuild: 0.25.8
+ esbuild: 0.25.10
escape-string-regexp: 5.0.0
etag: 1.8.1
exsolve: 1.0.7
globby: 14.1.0
gzip-size: 7.0.0
- h3: 1.15.3
+ h3: 1.15.4
hookable: 5.5.3
httpxy: 0.1.7
ioredis: 5.7.0
@@ -10349,21 +9743,21 @@ snapshots:
klona: 2.0.6
knitwork: 1.2.0
listhen: 1.9.0
- magic-string: 0.30.17
+ magic-string: 0.30.19
magicast: 0.3.5
- mime: 4.0.7
- mlly: 1.7.4
- node-fetch-native: 1.6.6
- node-mock-http: 1.0.2
+ mime: 4.1.0
+ mlly: 1.8.0
+ node-fetch-native: 1.6.7
+ node-mock-http: 1.0.3
ofetch: 1.4.1
ohash: 2.0.11
pathe: 2.0.3
- perfect-debounce: 1.0.0
- pkg-types: 2.2.0
- pretty-bytes: 6.1.1
+ perfect-debounce: 2.0.0
+ pkg-types: 2.3.0
+ pretty-bytes: 7.0.1
radix3: 1.1.2
- rollup: 4.46.2
- rollup-plugin-visualizer: 6.0.3(rollup@4.46.2)
+ rollup: 4.52.0
+ rollup-plugin-visualizer: 6.0.3(rollup@4.52.0)
scule: 1.3.0
semver: 7.7.2
serve-placeholder: 2.0.2
@@ -10374,13 +9768,13 @@ snapshots:
ultrahtml: 1.6.0
uncrypto: 0.1.3
unctx: 2.4.1
- unenv: 2.0.0-rc.19
- unimport: 5.2.0
- unplugin-utils: 0.2.4
- unstorage: 1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)
+ unenv: 2.0.0-rc.21
+ unimport: 5.3.0
+ unplugin-utils: 0.3.0
+ unstorage: 1.17.1(db0@0.3.2)(ioredis@5.7.0)
untyped: 2.0.0
- unwasm: 0.3.9
- youch: 4.1.0-beta.8
+ unwasm: 0.3.11
+ youch: 4.1.0-beta.11
youch-core: 0.3.3
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -10397,6 +9791,7 @@ snapshots:
- '@planetscale/database'
- '@upstash/redis'
- '@vercel/blob'
+ - '@vercel/functions'
- '@vercel/kv'
- aws4fetch
- better-sqlite3
@@ -10404,12 +9799,13 @@ snapshots:
- encoding
- idb-keyval
- mysql2
+ - react-native-b4a
- rolldown
- sqlite3
- supports-color
- uploadthing
- node-abi@3.75.0:
+ node-abi@3.77.0:
dependencies:
semver: 7.7.2
optional: true
@@ -10421,51 +9817,29 @@ snapshots:
node-addon-api@8.5.0: {}
- node-domexception@1.0.0: {}
-
- node-fetch-native@1.6.6: {}
+ node-fetch-native@1.6.7: {}
node-fetch@2.7.0:
dependencies:
whatwg-url: 5.0.0
- node-fetch@3.3.2:
- dependencies:
- data-uri-to-buffer: 4.0.1
- fetch-blob: 3.2.0
- formdata-polyfill: 4.0.10
-
node-forge@1.3.1: {}
node-gyp-build@4.8.4: {}
- node-mock-http@1.0.2: {}
+ node-mock-http@1.0.3: {}
- node-releases@2.0.19: {}
-
- node-source-walk@7.0.1:
- dependencies:
- '@babel/parser': 7.28.0
+ node-releases@2.0.21: {}
nopt@8.1.0:
dependencies:
abbrev: 3.0.1
- normalize-package-data@6.0.2:
- dependencies:
- hosted-git-info: 7.0.2
- semver: 7.7.2
- validate-npm-package-license: 3.0.4
-
- normalize-path@2.1.1:
- dependencies:
- remove-trailing-separator: 1.1.0
-
normalize-path@3.0.0: {}
normalize-range@0.1.2: {}
- normalize-url@8.0.2: {}
+ normalize-url@8.1.0: {}
npm-run-path@5.3.0:
dependencies:
@@ -10482,92 +9856,94 @@ snapshots:
nuxt-csurf@1.6.5(magicast@0.3.5):
dependencies:
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
defu: 6.1.4
uncsrf: 1.2.0
transitivePeerDependencies:
- magicast
- nuxt-security@2.2.0(magicast@0.3.5)(rollup@4.46.2):
+ nuxt-security@2.2.0(magicast@0.3.5)(rollup@4.52.0):
dependencies:
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
basic-auth: 2.0.1
defu: 6.1.4
nuxt-csurf: 1.6.5(magicast@0.3.5)
pathe: 1.1.2
- unplugin-remove: 1.0.3(rollup@4.46.2)
+ unplugin-remove: 1.0.3(rollup@4.52.0)
xss: 1.0.15
transitivePeerDependencies:
- magicast
- rollup
- supports-color
- nuxt@3.17.7(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.16.5)(@vue/compiler-sfc@3.5.22)(db0@0.3.2)(eslint@9.31.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@3.0.4(typescript@5.8.3))(yaml@2.8.0):
+ nuxt@4.1.2(@parcel/watcher@2.5.1)(@types/node@22.18.6)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.36.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.0)(sass@1.93.0)(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.0.7(typescript@5.9.2))(yaml@2.8.1):
dependencies:
- '@nuxt/cli': 3.27.0(magicast@0.3.5)
+ '@nuxt/cli': 3.28.0(magicast@0.3.5)
'@nuxt/devalue': 2.0.2
- '@nuxt/devtools': 2.6.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3))
- '@nuxt/kit': 3.17.7(magicast@0.3.5)
- '@nuxt/schema': 3.17.7
+ '@nuxt/devtools': 2.6.4(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))
+ '@nuxt/kit': 4.1.2(magicast@0.3.5)
+ '@nuxt/schema': 4.1.2
'@nuxt/telemetry': 2.6.6(magicast@0.3.5)
- '@nuxt/vite-builder': 3.17.7(@types/node@22.16.5)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(vue-tsc@3.0.4(typescript@5.8.3))(vue@3.5.22(typescript@5.8.3))(yaml@2.8.0)
- '@unhead/vue': 2.0.13(vue@3.5.22(typescript@5.8.3))
- '@vue/shared': 3.5.18
- c12: 3.2.0(magicast@0.3.5)
+ '@nuxt/vite-builder': 4.1.2(@types/node@22.18.6)(eslint@9.36.0(jiti@2.5.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.0)(sass@1.93.0)(terser@5.44.0)(typescript@5.9.2)(vue-tsc@3.0.7(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2))(yaml@2.8.1)
+ '@unhead/vue': 2.0.17(vue@3.5.21(typescript@5.9.2))
+ '@vue/shared': 3.5.21
+ c12: 3.3.0(magicast@0.3.5)
chokidar: 4.0.3
compatx: 0.2.0
consola: 3.4.2
cookie-es: 2.0.0
defu: 6.1.4
destr: 2.0.5
- devalue: 5.1.1
+ devalue: 5.3.2
errx: 0.1.0
- esbuild: 0.25.8
+ esbuild: 0.25.10
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
exsolve: 1.0.7
- h3: 1.15.3
+ h3: 1.15.4
hookable: 5.5.3
ignore: 7.0.5
impound: 1.0.0
jiti: 2.5.1
klona: 2.0.6
knitwork: 1.2.0
- magic-string: 0.30.17
- mlly: 1.7.4
+ magic-string: 0.30.19
+ mlly: 1.8.0
mocked-exports: 0.1.1
nanotar: 0.2.0
- nitropack: 2.12.4(@netlify/blobs@9.1.2)
- nypm: 0.6.1
+ nitropack: 2.12.6
+ nypm: 0.6.2
ofetch: 1.4.1
ohash: 2.0.11
on-change: 5.0.1
- oxc-parser: 0.76.0
+ oxc-minify: 0.87.0
+ oxc-parser: 0.87.0
+ oxc-transform: 0.87.0
+ oxc-walker: 0.5.2(oxc-parser@0.87.0)
pathe: 2.0.3
- perfect-debounce: 1.0.0
- pkg-types: 2.2.0
+ perfect-debounce: 2.0.0
+ pkg-types: 2.3.0
radix3: 1.1.2
scule: 1.3.0
semver: 7.7.2
std-env: 3.9.0
- strip-literal: 3.0.0
- tinyglobby: 0.2.14
+ tinyglobby: 0.2.15
ufo: 1.6.1
ultrahtml: 1.6.0
uncrypto: 0.1.3
unctx: 2.4.1
- unimport: 5.2.0
- unplugin: 2.3.5
- unplugin-vue-router: 0.14.0(@vue/compiler-sfc@3.5.22)(vue-router@4.5.1(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3))
- unstorage: 1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0)
+ unimport: 5.3.0
+ unplugin: 2.3.10
+ unplugin-vue-router: 0.15.0(@vue/compiler-sfc@3.5.21)(typescript@5.9.2)(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))
+ unstorage: 1.17.1(db0@0.3.2)(ioredis@5.7.0)
untyped: 2.0.0
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
vue-bundle-renderer: 2.1.2
vue-devtools-stub: 0.1.0
- vue-router: 4.5.1(vue@3.5.22(typescript@5.8.3))
+ vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2))
optionalDependencies:
'@parcel/watcher': 2.5.1
- '@types/node': 22.16.5
+ '@types/node': 22.18.6
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -10584,6 +9960,7 @@ snapshots:
- '@planetscale/database'
- '@upstash/redis'
- '@vercel/blob'
+ - '@vercel/functions'
- '@vercel/kv'
- '@vue/compiler-sfc'
- aws4fetch
@@ -10601,6 +9978,7 @@ snapshots:
- meow
- mysql2
- optionator
+ - react-native-b4a
- rolldown
- rollup
- sass
@@ -10622,20 +10000,18 @@ snapshots:
- xml2js
- yaml
- nypm@0.6.1:
+ nypm@0.6.2:
dependencies:
citty: 0.1.6
consola: 3.4.2
pathe: 2.0.3
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
tinyexec: 1.0.1
- object-inspect@1.13.4: {}
-
ofetch@1.4.1:
dependencies:
destr: 2.0.5
- node-fetch-native: 1.6.6
+ node-fetch-native: 1.6.7
ufo: 1.6.1
ohash@2.0.11: {}
@@ -10652,10 +10028,6 @@ snapshots:
dependencies:
wrappy: 1.0.2
- one-time@1.0.0:
- dependencies:
- fn.name: 1.1.0
-
onetime@6.0.0:
dependencies:
mimic-fn: 4.0.0
@@ -10682,6 +10054,24 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
+ oxc-minify@0.87.0:
+ optionalDependencies:
+ '@oxc-minify/binding-android-arm64': 0.87.0
+ '@oxc-minify/binding-darwin-arm64': 0.87.0
+ '@oxc-minify/binding-darwin-x64': 0.87.0
+ '@oxc-minify/binding-freebsd-x64': 0.87.0
+ '@oxc-minify/binding-linux-arm-gnueabihf': 0.87.0
+ '@oxc-minify/binding-linux-arm-musleabihf': 0.87.0
+ '@oxc-minify/binding-linux-arm64-gnu': 0.87.0
+ '@oxc-minify/binding-linux-arm64-musl': 0.87.0
+ '@oxc-minify/binding-linux-riscv64-gnu': 0.87.0
+ '@oxc-minify/binding-linux-s390x-gnu': 0.87.0
+ '@oxc-minify/binding-linux-x64-gnu': 0.87.0
+ '@oxc-minify/binding-linux-x64-musl': 0.87.0
+ '@oxc-minify/binding-wasm32-wasi': 0.87.0
+ '@oxc-minify/binding-win32-arm64-msvc': 0.87.0
+ '@oxc-minify/binding-win32-x64-msvc': 0.87.0
+
oxc-parser@0.70.0:
dependencies:
'@oxc-project/types': 0.70.0
@@ -10701,29 +10091,48 @@ snapshots:
'@oxc-parser/binding-win32-arm64-msvc': 0.70.0
'@oxc-parser/binding-win32-x64-msvc': 0.70.0
- oxc-parser@0.76.0:
+ oxc-parser@0.87.0:
dependencies:
- '@oxc-project/types': 0.76.0
+ '@oxc-project/types': 0.87.0
optionalDependencies:
- '@oxc-parser/binding-android-arm64': 0.76.0
- '@oxc-parser/binding-darwin-arm64': 0.76.0
- '@oxc-parser/binding-darwin-x64': 0.76.0
- '@oxc-parser/binding-freebsd-x64': 0.76.0
- '@oxc-parser/binding-linux-arm-gnueabihf': 0.76.0
- '@oxc-parser/binding-linux-arm-musleabihf': 0.76.0
- '@oxc-parser/binding-linux-arm64-gnu': 0.76.0
- '@oxc-parser/binding-linux-arm64-musl': 0.76.0
- '@oxc-parser/binding-linux-riscv64-gnu': 0.76.0
- '@oxc-parser/binding-linux-s390x-gnu': 0.76.0
- '@oxc-parser/binding-linux-x64-gnu': 0.76.0
- '@oxc-parser/binding-linux-x64-musl': 0.76.0
- '@oxc-parser/binding-wasm32-wasi': 0.76.0
- '@oxc-parser/binding-win32-arm64-msvc': 0.76.0
- '@oxc-parser/binding-win32-x64-msvc': 0.76.0
+ '@oxc-parser/binding-android-arm64': 0.87.0
+ '@oxc-parser/binding-darwin-arm64': 0.87.0
+ '@oxc-parser/binding-darwin-x64': 0.87.0
+ '@oxc-parser/binding-freebsd-x64': 0.87.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.87.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.87.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.87.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.87.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.87.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.87.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.87.0
+ '@oxc-parser/binding-linux-x64-musl': 0.87.0
+ '@oxc-parser/binding-wasm32-wasi': 0.87.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.87.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.87.0
- p-event@6.0.1:
+ oxc-transform@0.87.0:
+ optionalDependencies:
+ '@oxc-transform/binding-android-arm64': 0.87.0
+ '@oxc-transform/binding-darwin-arm64': 0.87.0
+ '@oxc-transform/binding-darwin-x64': 0.87.0
+ '@oxc-transform/binding-freebsd-x64': 0.87.0
+ '@oxc-transform/binding-linux-arm-gnueabihf': 0.87.0
+ '@oxc-transform/binding-linux-arm-musleabihf': 0.87.0
+ '@oxc-transform/binding-linux-arm64-gnu': 0.87.0
+ '@oxc-transform/binding-linux-arm64-musl': 0.87.0
+ '@oxc-transform/binding-linux-riscv64-gnu': 0.87.0
+ '@oxc-transform/binding-linux-s390x-gnu': 0.87.0
+ '@oxc-transform/binding-linux-x64-gnu': 0.87.0
+ '@oxc-transform/binding-linux-x64-musl': 0.87.0
+ '@oxc-transform/binding-wasm32-wasi': 0.87.0
+ '@oxc-transform/binding-win32-arm64-msvc': 0.87.0
+ '@oxc-transform/binding-win32-x64-msvc': 0.87.0
+
+ oxc-walker@0.5.2(oxc-parser@0.87.0):
dependencies:
- p-timeout: 6.1.4
+ magic-regexp: 0.10.0
+ oxc-parser: 0.87.0
p-limit@3.1.0:
dependencies:
@@ -10743,12 +10152,6 @@ snapshots:
p-map@7.0.3: {}
- p-timeout@6.1.4: {}
-
- p-wait-for@5.0.2:
- dependencies:
- p-timeout: 6.1.4
-
package-json-from-dist@1.0.1: {}
package-manager-detector@1.3.0: {}
@@ -10759,18 +10162,10 @@ snapshots:
dependencies:
callsites: 3.1.0
- parse-gitignore@2.0.0: {}
-
parse-imports-exports@0.2.4:
dependencies:
parse-statements: 1.0.11
- parse-json@8.3.0:
- dependencies:
- '@babel/code-frame': 7.27.1
- index-to-position: 1.1.0
- type-fest: 4.41.0
-
parse-path@7.1.0:
dependencies:
protocols: 2.0.2
@@ -10822,10 +10217,10 @@ snapshots:
peek-readable@5.4.2: {}
- pend@1.2.0: {}
-
perfect-debounce@1.0.0: {}
+ perfect-debounce@2.0.0: {}
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -10836,7 +10231,7 @@ snapshots:
dependencies:
split2: 4.2.0
- pino-pretty@13.0.0:
+ pino-pretty@13.1.1:
dependencies:
colorette: 2.0.20
dateformat: 4.6.3
@@ -10848,13 +10243,13 @@ snapshots:
on-exit-leak-free: 2.1.2
pino-abstract-transport: 2.0.0
pump: 3.0.3
- secure-json-parse: 2.7.0
+ secure-json-parse: 4.0.0
sonic-boom: 4.2.0
- strip-json-comments: 3.1.1
+ strip-json-comments: 5.0.3
pino-std-serializers@7.0.0: {}
- pino@9.7.0:
+ pino@9.10.0:
dependencies:
atomic-sleep: 1.0.0
fast-redact: 3.5.0
@@ -10871,10 +10266,10 @@ snapshots:
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
- mlly: 1.7.4
+ mlly: 1.8.0
pathe: 2.0.3
- pkg-types@2.2.0:
+ pkg-types@2.3.0:
dependencies:
confbox: 0.2.2
exsolve: 1.0.7
@@ -10890,15 +10285,15 @@ snapshots:
postcss-colormin@7.0.4(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
caniuse-api: 3.0.0
colord: 2.9.3
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-convert-values@7.0.6(postcss@8.5.6):
+ postcss-convert-values@7.0.7(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -10927,7 +10322,7 @@ snapshots:
postcss-merge-rules@7.0.6(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
caniuse-api: 3.0.0
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
@@ -10947,7 +10342,7 @@ snapshots:
postcss-minify-params@7.0.4(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -10989,7 +10384,7 @@ snapshots:
postcss-normalize-unicode@7.0.4(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -11011,7 +10406,7 @@ snapshots:
postcss-reduce-initial@7.0.4(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
caniuse-api: 3.0.0
postcss: 8.5.6
@@ -11048,13 +10443,6 @@ snapshots:
postcss-value-parser@4.2.0: {}
- postcss-values-parser@6.0.2(postcss@8.5.6):
- dependencies:
- color-name: 1.1.4
- is-url-superb: 4.0.0
- postcss: 8.5.6
- quote-unquote: 1.0.0
-
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
@@ -11063,52 +10451,34 @@ snapshots:
prebuild-install@7.1.3:
dependencies:
- detect-libc: 2.0.4
+ detect-libc: 2.1.0
expand-template: 2.0.3
github-from-package: 0.0.0
minimist: 1.2.8
mkdirp-classic: 0.5.3
napi-build-utils: 2.0.0
- node-abi: 3.75.0
+ node-abi: 3.77.0
pump: 3.0.3
rc: 1.2.8
simple-get: 4.0.1
- tar-fs: 2.1.3
+ tar-fs: 2.1.4
tunnel-agent: 0.6.0
optional: true
- precinct@12.2.0:
- dependencies:
- '@dependents/detective-less': 5.0.1
- commander: 12.1.0
- detective-amd: 6.0.1
- detective-cjs: 6.0.1
- detective-es6: 5.0.1
- detective-postcss: 7.0.1(postcss@8.5.6)
- detective-sass: 6.0.1
- detective-scss: 5.0.1
- detective-stylus: 5.0.1
- detective-typescript: 14.0.0(typescript@5.8.3)
- detective-vue2: 2.2.0(typescript@5.8.3)
- module-definition: 6.0.1
- node-source-walk: 7.0.1
- postcss: 8.5.6
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
prelude-ls@1.2.1: {}
prettier@3.6.2: {}
- pretty-bytes@6.1.1: {}
+ pretty-bytes@7.0.1: {}
- prisma@6.12.0(typescript@5.8.3):
+ prisma@6.16.2(magicast@0.3.5)(typescript@5.9.2):
dependencies:
- '@prisma/config': 6.12.0
- '@prisma/engines': 6.12.0
+ '@prisma/config': 6.16.2(magicast@0.3.5)
+ '@prisma/engines': 6.16.2
optionalDependencies:
- typescript: 5.8.3
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - magicast
process-nextick-args@2.0.1: {}
@@ -11132,18 +10502,14 @@ snapshots:
punycode@2.3.1: {}
- qs@6.14.0:
- dependencies:
- side-channel: 1.1.0
+ pure-rand@6.1.0: {}
- quansync@0.2.10: {}
+ quansync@0.2.11: {}
queue-microtask@1.2.3: {}
quick-format-unescaped@4.0.4: {}
- quote-unquote@1.0.0: {}
-
radix3@1.1.2: {}
randombytes@2.1.0:
@@ -11165,20 +10531,6 @@ snapshots:
strip-json-comments: 2.0.1
optional: true
- read-package-up@11.0.0:
- dependencies:
- find-up-simple: 1.0.1
- read-pkg: 9.0.1
- type-fest: 4.41.0
-
- read-pkg@9.0.1:
- dependencies:
- '@types/normalize-package-data': 2.4.4
- normalize-package-data: 6.0.2
- parse-json: 8.3.0
- type-fest: 4.41.0
- unicorn-magic: 0.1.0
-
readable-stream@2.3.8:
dependencies:
core-util-is: 1.0.3
@@ -11240,11 +10592,9 @@ snapshots:
dependencies:
jsesc: 3.0.2
- remove-trailing-separator@1.1.0: {}
-
require-directory@2.1.1: {}
- require-package-name@2.0.1: {}
+ require-from-string@2.0.2: {}
resolve-from@4.0.0: {}
@@ -11258,54 +10608,52 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- resolve@2.0.0-next.5:
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
restructure@3.0.2: {}
reusify@1.1.0: {}
rfdc@1.4.1: {}
- rollup-plugin-visualizer@6.0.3(rollup@4.46.2):
+ rollup-plugin-visualizer@6.0.3(rollup@4.52.0):
dependencies:
open: 8.4.2
picomatch: 4.0.3
source-map: 0.7.6
yargs: 17.7.2
optionalDependencies:
- rollup: 4.46.2
+ rollup: 4.52.0
- rollup@4.46.2:
+ rollup@4.52.0:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.46.2
- '@rollup/rollup-android-arm64': 4.46.2
- '@rollup/rollup-darwin-arm64': 4.46.2
- '@rollup/rollup-darwin-x64': 4.46.2
- '@rollup/rollup-freebsd-arm64': 4.46.2
- '@rollup/rollup-freebsd-x64': 4.46.2
- '@rollup/rollup-linux-arm-gnueabihf': 4.46.2
- '@rollup/rollup-linux-arm-musleabihf': 4.46.2
- '@rollup/rollup-linux-arm64-gnu': 4.46.2
- '@rollup/rollup-linux-arm64-musl': 4.46.2
- '@rollup/rollup-linux-loongarch64-gnu': 4.46.2
- '@rollup/rollup-linux-ppc64-gnu': 4.46.2
- '@rollup/rollup-linux-riscv64-gnu': 4.46.2
- '@rollup/rollup-linux-riscv64-musl': 4.46.2
- '@rollup/rollup-linux-s390x-gnu': 4.46.2
- '@rollup/rollup-linux-x64-gnu': 4.46.2
- '@rollup/rollup-linux-x64-musl': 4.46.2
- '@rollup/rollup-win32-arm64-msvc': 4.46.2
- '@rollup/rollup-win32-ia32-msvc': 4.46.2
- '@rollup/rollup-win32-x64-msvc': 4.46.2
+ '@rollup/rollup-android-arm-eabi': 4.52.0
+ '@rollup/rollup-android-arm64': 4.52.0
+ '@rollup/rollup-darwin-arm64': 4.52.0
+ '@rollup/rollup-darwin-x64': 4.52.0
+ '@rollup/rollup-freebsd-arm64': 4.52.0
+ '@rollup/rollup-freebsd-x64': 4.52.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.52.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.52.0
+ '@rollup/rollup-linux-arm64-gnu': 4.52.0
+ '@rollup/rollup-linux-arm64-musl': 4.52.0
+ '@rollup/rollup-linux-loong64-gnu': 4.52.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.52.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.52.0
+ '@rollup/rollup-linux-riscv64-musl': 4.52.0
+ '@rollup/rollup-linux-s390x-gnu': 4.52.0
+ '@rollup/rollup-linux-x64-gnu': 4.52.0
+ '@rollup/rollup-linux-x64-musl': 4.52.0
+ '@rollup/rollup-openharmony-arm64': 4.52.0
+ '@rollup/rollup-win32-arm64-msvc': 4.52.0
+ '@rollup/rollup-win32-ia32-msvc': 4.52.0
+ '@rollup/rollup-win32-x64-gnu': 4.52.0
+ '@rollup/rollup-win32-x64-msvc': 4.52.0
fsevents: 2.3.3
- run-applescript@7.0.0: {}
+ rrweb-cssom@0.8.0: {}
+
+ run-applescript@7.1.0: {}
run-parallel@1.2.0:
dependencies:
@@ -11323,7 +10671,7 @@ snapshots:
dependencies:
truncate-utf8-bytes: 1.0.2
- sass@1.89.2:
+ sass@1.93.0:
dependencies:
chokidar: 4.0.3
immutable: 5.1.3
@@ -11333,6 +10681,10 @@ snapshots:
sax@1.4.1: {}
+ saxes@6.0.0:
+ dependencies:
+ xmlchars: 2.2.0
+
scslre@0.3.0:
dependencies:
'@eslint-community/regexpp': 4.12.1
@@ -11341,7 +10693,7 @@ snapshots:
scule@1.3.0: {}
- secure-json-parse@2.7.0: {}
+ secure-json-parse@4.0.0: {}
semver@6.3.1: {}
@@ -11349,7 +10701,7 @@ snapshots:
send@1.2.0:
dependencies:
- debug: 4.4.1
+ debug: 4.4.3
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
@@ -11385,15 +10737,16 @@ snapshots:
sharp@0.32.6:
dependencies:
color: 4.2.3
- detect-libc: 2.0.4
+ detect-libc: 2.1.0
node-addon-api: 6.1.0
prebuild-install: 7.1.3
semver: 7.7.2
simple-get: 4.0.1
- tar-fs: 3.1.0
+ tar-fs: 3.1.1
tunnel-agent: 0.6.0
transitivePeerDependencies:
- bare-buffer
+ - react-native-b4a
optional: true
shebang-command@2.0.0:
@@ -11404,34 +10757,6 @@ snapshots:
shell-quote@1.8.3: {}
- side-channel-list@1.0.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-map@1.0.1:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-weakmap@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
- side-channel-map: 1.0.1
-
- side-channel@1.1.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
- side-channel-list: 1.0.0
- side-channel-map: 1.0.1
- side-channel-weakmap: 1.0.2
-
signal-exit@4.1.0: {}
simple-concat@1.0.1:
@@ -11448,15 +10773,16 @@ snapshots:
dependencies:
'@kwsites/file-exists': 1.1.1
'@kwsites/promise-deferred': 1.1.1
- debug: 4.4.1
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
- simple-swizzle@0.2.2:
+ simple-swizzle@0.2.4:
dependencies:
- is-arrayish: 0.3.2
+ is-arrayish: 0.3.4
+ optional: true
- sirv@3.0.1:
+ sirv@3.0.2:
dependencies:
'@polka/url': 1.0.0-next.29
mrmime: 2.0.1
@@ -11485,24 +10811,14 @@ snapshots:
source-map@0.7.6: {}
- spdx-correct@3.2.0:
- dependencies:
- spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.21
-
spdx-exceptions@2.5.0: {}
- spdx-expression-parse@3.0.1:
- dependencies:
- spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.21
-
spdx-expression-parse@4.0.0:
dependencies:
spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.21
+ spdx-license-ids: 3.0.22
- spdx-license-ids@3.0.21: {}
+ spdx-license-ids@3.0.22: {}
speakingurl@14.0.1: {}
@@ -11510,8 +10826,6 @@ snapshots:
stable-hash-x@0.2.0: {}
- stack-trace@0.0.10: {}
-
standard-as-callback@2.1.0: {}
statuses@2.0.1: {}
@@ -11535,7 +10849,9 @@ snapshots:
fast-fifo: 1.3.2
text-decoder: 1.2.3
optionalDependencies:
- bare-events: 2.6.0
+ bare-events: 2.7.0
+ transitivePeerDependencies:
+ - react-native-b4a
string-width@4.2.3:
dependencies:
@@ -11547,7 +10863,7 @@ snapshots:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
string_decoder@1.1.1:
dependencies:
@@ -11561,21 +10877,21 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
+ strip-ansi@7.1.2:
dependencies:
- ansi-regex: 6.1.0
+ ansi-regex: 6.2.2
strip-final-newline@3.0.0: {}
- strip-indent@4.0.0:
- dependencies:
- min-indent: 1.0.1
+ strip-indent@4.1.0: {}
strip-json-comments@2.0.1:
optional: true
strip-json-comments@3.1.1: {}
+ strip-json-comments@5.0.3: {}
+
strip-literal@3.0.0:
dependencies:
js-tokens: 9.0.1
@@ -11589,7 +10905,7 @@ snapshots:
stylehacks@7.0.6(postcss@8.5.6):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
postcss: 8.5.6
postcss-selector-parser: 7.1.0
@@ -11597,7 +10913,7 @@ snapshots:
dependencies:
copy-anything: 3.0.5
- supports-color@10.0.0: {}
+ supports-color@10.2.2: {}
supports-color@7.2.0:
dependencies:
@@ -11626,6 +10942,8 @@ snapshots:
picocolors: 1.1.1
sax: 1.4.1
+ symbol-tree@3.2.4: {}
+
synckit@0.10.4:
dependencies:
'@pkgr/core': 0.2.9
@@ -11633,11 +10951,11 @@ snapshots:
system-architecture@0.1.0: {}
- tailwindcss@4.1.11: {}
+ tailwindcss@4.1.13: {}
- tapable@2.2.2: {}
+ tapable@2.2.3: {}
- tar-fs@2.1.3:
+ tar-fs@2.1.4:
dependencies:
chownr: 1.1.4
mkdirp-classic: 0.5.3
@@ -11645,15 +10963,16 @@ snapshots:
tar-stream: 2.2.0
optional: true
- tar-fs@3.1.0:
+ tar-fs@3.1.1:
dependencies:
pump: 3.0.3
tar-stream: 3.1.7
optionalDependencies:
- bare-fs: 4.1.6
+ bare-fs: 4.4.4
bare-path: 3.0.0
transitivePeerDependencies:
- bare-buffer
+ - react-native-b4a
optional: true
tar-stream@2.2.0:
@@ -11667,9 +10986,11 @@ snapshots:
tar-stream@3.1.7:
dependencies:
- b4a: 1.6.7
+ b4a: 1.7.1
fast-fifo: 1.3.2
streamx: 2.22.1
+ transitivePeerDependencies:
+ - react-native-b4a
tar@7.4.3:
dependencies:
@@ -11680,18 +11001,18 @@ snapshots:
mkdirp: 3.0.1
yallist: 5.0.0
- terser@5.43.1:
+ terser@5.44.0:
dependencies:
- '@jridgewell/source-map': 0.3.10
+ '@jridgewell/source-map': 0.3.11
acorn: 8.15.0
commander: 2.20.3
source-map-support: 0.5.21
text-decoder@1.2.3:
dependencies:
- b4a: 1.6.7
-
- text-hex@1.0.0: {}
+ b4a: 1.7.1
+ transitivePeerDependencies:
+ - react-native-b4a
thread-stream@3.1.0:
dependencies:
@@ -11707,16 +11028,16 @@ snapshots:
tinyexec@1.0.1: {}
- tinyglobby@0.2.14:
+ tinyglobby@0.2.15:
dependencies:
- fdir: 6.4.6(picomatch@4.0.3)
+ fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- tmp-promise@3.0.3:
- dependencies:
- tmp: 0.2.3
+ tldts-core@7.0.14: {}
- tmp@0.2.3: {}
+ tldts@7.0.14:
+ dependencies:
+ tldts-core: 7.0.14
to-regex-range@5.0.1:
dependencies:
@@ -11729,23 +11050,27 @@ snapshots:
'@tokenizer/token': 0.3.0
ieee754: 1.2.1
- toml@3.0.0: {}
-
tosource@2.0.0-alpha.3: {}
totalist@3.0.1: {}
+ tough-cookie@6.0.0:
+ dependencies:
+ tldts: 7.0.14
+
tr46@0.0.3: {}
- triple-beam@1.4.1: {}
+ tr46@6.0.0:
+ dependencies:
+ punycode: 2.3.1
truncate-utf8-bytes@1.0.2:
dependencies:
utf8-byte-length: 1.0.5
- ts-api-utils@2.1.0(typescript@5.8.3):
+ ts-api-utils@2.1.0(typescript@5.9.2):
dependencies:
- typescript: 5.8.3
+ typescript: 5.9.2
tslib@2.8.1: {}
@@ -11754,7 +11079,7 @@ snapshots:
safe-buffer: 5.2.1
optional: true
- turndown@7.2.0:
+ turndown@7.2.1:
dependencies:
'@mixmark-io/domino': 2.2.0
@@ -11766,7 +11091,7 @@ snapshots:
type-level-regexp@0.1.17: {}
- typescript@5.8.3: {}
+ typescript@5.9.2: {}
ufo@1.6.1: {}
@@ -11780,14 +11105,14 @@ snapshots:
dependencies:
acorn: 8.15.0
estree-walker: 3.0.3
- magic-string: 0.30.17
- unplugin: 2.3.5
+ magic-string: 0.30.19
+ unplugin: 2.3.10
undici-types@6.21.0: {}
- undici@7.13.0: {}
+ undici@7.16.0: {}
- unenv@2.0.0-rc.19:
+ unenv@2.0.0-rc.21:
dependencies:
defu: 6.1.4
exsolve: 1.0.7
@@ -11795,7 +11120,7 @@ snapshots:
pathe: 2.0.3
ufo: 1.6.1
- unhead@2.0.13:
+ unhead@2.0.17:
dependencies:
hookable: 5.5.3
@@ -11818,91 +11143,95 @@ snapshots:
css-tree: 3.1.0
ohash: 2.0.11
- unimport@5.2.0:
+ unimport@5.3.0:
dependencies:
acorn: 8.15.0
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
- local-pkg: 1.1.1
- magic-string: 0.30.17
- mlly: 1.7.4
+ local-pkg: 1.1.2
+ magic-string: 0.30.19
+ mlly: 1.8.0
pathe: 2.0.3
picomatch: 4.0.3
- pkg-types: 2.2.0
+ pkg-types: 2.3.0
scule: 1.3.0
strip-literal: 3.0.0
- tinyglobby: 0.2.14
- unplugin: 2.3.5
- unplugin-utils: 0.2.4
+ tinyglobby: 0.2.15
+ unplugin: 2.3.10
+ unplugin-utils: 0.3.0
universalify@0.1.2: {}
universalify@2.0.1: {}
- unixify@1.0.0:
+ unplugin-remove@1.0.3(rollup@4.52.0):
dependencies:
- normalize-path: 2.1.1
-
- unplugin-remove@1.0.3(rollup@4.46.2):
- dependencies:
- '@babel/core': 7.28.0
- '@babel/generator': 7.28.0
- '@babel/parser': 7.28.0
- '@babel/traverse': 7.28.0
- '@rollup/pluginutils': 5.2.0(rollup@4.46.2)
- magic-string: 0.30.17
+ '@babel/core': 7.28.4
+ '@babel/generator': 7.28.3
+ '@babel/parser': 7.28.4
+ '@babel/traverse': 7.28.4
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.0)
+ magic-string: 0.30.19
unplugin: 1.16.1
transitivePeerDependencies:
- rollup
- supports-color
- unplugin-utils@0.2.4:
+ unplugin-utils@0.2.5:
dependencies:
pathe: 2.0.3
picomatch: 4.0.3
- unplugin-vue-router@0.12.0(vue-router@4.5.1(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3)):
+ unplugin-utils@0.3.0:
dependencies:
- '@babel/types': 7.28.2
- '@vue-macros/common': 1.16.1(vue@3.5.22(typescript@5.8.3))
+ pathe: 2.0.3
+ picomatch: 4.0.3
+
+ unplugin-vue-router@0.12.0(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)):
+ dependencies:
+ '@babel/types': 7.28.4
+ '@vue-macros/common': 1.16.1(vue@3.5.21(typescript@5.9.2))
ast-walker-scope: 0.6.2
chokidar: 4.0.3
fast-glob: 3.3.3
json5: 2.2.3
- local-pkg: 1.1.1
- magic-string: 0.30.17
+ local-pkg: 1.1.2
+ magic-string: 0.30.19
micromatch: 4.0.8
- mlly: 1.7.4
+ mlly: 1.8.0
pathe: 2.0.3
scule: 1.3.0
- unplugin: 2.3.5
- unplugin-utils: 0.2.4
- yaml: 2.8.0
+ unplugin: 2.3.10
+ unplugin-utils: 0.2.5
+ yaml: 2.8.1
optionalDependencies:
- vue-router: 4.5.1(vue@3.5.22(typescript@5.8.3))
+ vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2))
transitivePeerDependencies:
- vue
- unplugin-vue-router@0.14.0(@vue/compiler-sfc@3.5.22)(vue-router@4.5.1(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3)):
+ unplugin-vue-router@0.15.0(@vue/compiler-sfc@3.5.21)(typescript@5.9.2)(vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2)):
dependencies:
- '@vue-macros/common': 3.0.0-beta.15(vue@3.5.22(typescript@5.8.3))
- '@vue/compiler-sfc': 3.5.22
- ast-walker-scope: 0.8.1
+ '@vue-macros/common': 3.0.0-beta.16(vue@3.5.21(typescript@5.9.2))
+ '@vue/compiler-sfc': 3.5.21
+ '@vue/language-core': 3.0.7(typescript@5.9.2)
+ ast-walker-scope: 0.8.2
chokidar: 4.0.3
- fast-glob: 3.3.3
json5: 2.2.3
- local-pkg: 1.1.1
- magic-string: 0.30.17
- mlly: 1.7.4
+ local-pkg: 1.1.2
+ magic-string: 0.30.19
+ mlly: 1.8.0
+ muggle-string: 0.4.1
pathe: 2.0.3
picomatch: 4.0.3
scule: 1.3.0
- unplugin: 2.3.5
- unplugin-utils: 0.2.4
- yaml: 2.8.0
+ tinyglobby: 0.2.15
+ unplugin: 2.3.10
+ unplugin-utils: 0.2.5
+ yaml: 2.8.1
optionalDependencies:
- vue-router: 4.5.1(vue@3.5.22(typescript@5.8.3))
+ vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2))
transitivePeerDependencies:
+ - typescript
- vue
unplugin@1.16.1:
@@ -11910,15 +11239,16 @@ snapshots:
acorn: 8.15.0
webpack-virtual-modules: 0.6.2
- unplugin@2.3.5:
+ unplugin@2.3.10:
dependencies:
+ '@jridgewell/remapping': 2.3.5
acorn: 8.15.0
picomatch: 4.0.3
webpack-virtual-modules: 0.6.2
unrs-resolver@1.11.1:
dependencies:
- napi-postinstall: 0.3.2
+ napi-postinstall: 0.3.3
optionalDependencies:
'@unrs/resolver-binding-android-arm-eabi': 1.11.1
'@unrs/resolver-binding-android-arm64': 1.11.1
@@ -11940,18 +11270,17 @@ snapshots:
'@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
'@unrs/resolver-binding-win32-x64-msvc': 1.11.1
- unstorage@1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0):
+ unstorage@1.17.1(db0@0.3.2)(ioredis@5.7.0):
dependencies:
anymatch: 3.1.3
chokidar: 4.0.3
destr: 2.0.5
- h3: 1.15.3
+ h3: 1.15.4
lru-cache: 10.4.3
- node-fetch-native: 1.6.6
+ node-fetch-native: 1.6.7
ofetch: 1.4.1
ufo: 1.6.1
optionalDependencies:
- '@netlify/blobs': 9.1.2
db0: 0.3.2
ioredis: 5.7.0
@@ -11969,18 +11298,18 @@ snapshots:
knitwork: 1.2.0
scule: 1.3.0
- unwasm@0.3.9:
+ unwasm@0.3.11:
dependencies:
knitwork: 1.2.0
- magic-string: 0.30.17
- mlly: 1.7.4
- pathe: 1.1.2
- pkg-types: 1.3.1
- unplugin: 1.16.1
+ magic-string: 0.30.19
+ mlly: 1.8.0
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ unplugin: 2.3.10
- update-browserslist-db@1.1.3(browserslist@4.25.1):
+ update-browserslist-db@1.1.3(browserslist@4.26.2):
dependencies:
- browserslist: 4.25.1
+ browserslist: 4.26.2
escalade: 3.2.0
picocolors: 1.1.1
@@ -11990,38 +11319,27 @@ snapshots:
dependencies:
punycode: 2.3.1
- urlpattern-polyfill@10.1.0: {}
-
- urlpattern-polyfill@8.0.2: {}
-
utf8-byte-length@1.0.5: {}
util-deprecate@1.0.2: {}
- uuid@11.1.0: {}
-
- validate-npm-package-license@3.0.4:
- dependencies:
- spdx-correct: 3.2.0
- spdx-expression-parse: 3.0.1
-
- vite-dev-rpc@1.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)):
+ vite-dev-rpc@1.1.0(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)):
dependencies:
birpc: 2.5.0
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vite-hot-client: 2.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vite-hot-client: 2.1.0(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
- vite-hot-client@2.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)):
+ vite-hot-client@2.1.0(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)):
dependencies:
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
- vite-node@3.2.4(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0):
+ vite-node@3.2.4(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1):
dependencies:
cac: 6.7.14
- debug: 4.4.1
+ debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -12036,93 +11354,76 @@ snapshots:
- tsx
- yaml
- vite-plugin-checker@0.10.1(eslint@9.31.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@3.0.4(typescript@5.8.3)):
+ vite-plugin-checker@0.10.3(eslint@9.36.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.9.2)(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.0.7(typescript@5.9.2)):
dependencies:
'@babel/code-frame': 7.27.1
chokidar: 4.0.3
npm-run-path: 6.0.0
picocolors: 1.1.1
picomatch: 4.0.3
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
tiny-invariant: 1.3.3
- tinyglobby: 0.2.14
- vite: 6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
+ tinyglobby: 0.2.15
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
vscode-uri: 3.1.0
optionalDependencies:
- eslint: 9.31.0(jiti@2.5.1)
+ eslint: 9.36.0(jiti@2.5.1)
optionator: 0.9.4
- typescript: 5.8.3
- vue-tsc: 3.0.4(typescript@5.8.3)
+ typescript: 5.9.2
+ vue-tsc: 3.0.7(typescript@5.9.2)
- vite-plugin-inspect@11.3.2(@nuxt/kit@3.18.0(magicast@0.3.5))(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)):
+ vite-plugin-inspect@11.3.3(@nuxt/kit@3.19.2(magicast@0.3.5))(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)):
dependencies:
ansis: 4.1.0
- debug: 4.4.1
+ debug: 4.4.3
error-stack-parser-es: 1.0.5
ohash: 2.0.11
open: 10.2.0
- perfect-debounce: 1.0.0
- sirv: 3.0.1
- unplugin-utils: 0.2.4
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vite-dev-rpc: 1.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
+ perfect-debounce: 2.0.0
+ sirv: 3.0.2
+ unplugin-utils: 0.3.0
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vite-dev-rpc: 1.1.0(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))
optionalDependencies:
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
transitivePeerDependencies:
- supports-color
- vite-plugin-static-copy@3.1.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)):
+ vite-plugin-static-copy@3.1.2(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)):
dependencies:
chokidar: 3.6.0
- fs-extra: 11.3.0
+ fs-extra: 11.3.2
p-map: 7.0.3
picocolors: 1.1.1
- tinyglobby: 0.2.14
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
+ tinyglobby: 0.2.15
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
- vite-plugin-vue-tracer@1.0.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.22(typescript@5.8.3)):
+ vite-plugin-vue-tracer@1.0.0(vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.7
- magic-string: 0.30.17
+ magic-string: 0.30.19
pathe: 2.0.3
source-map-js: 1.2.1
- vite: 7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)
- vue: 3.5.22(typescript@5.8.3)
+ vite: 7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1)
+ vue: 3.5.21(typescript@5.9.2)
- vite@6.3.5(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0):
+ vite@7.1.6(@types/node@22.18.6)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1):
dependencies:
- esbuild: 0.25.8
- fdir: 6.4.6(picomatch@4.0.3)
+ esbuild: 0.25.10
+ fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.46.2
- tinyglobby: 0.2.14
+ rollup: 4.52.0
+ tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 22.16.5
+ '@types/node': 22.18.6
fsevents: 2.3.3
jiti: 2.5.1
lightningcss: 1.30.1
- sass: 1.89.2
- terser: 5.43.1
- yaml: 2.8.0
-
- vite@7.0.6(@types/node@22.16.5)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0):
- dependencies:
- esbuild: 0.25.8
- fdir: 6.4.6(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.6
- rollup: 4.46.2
- tinyglobby: 0.2.14
- optionalDependencies:
- '@types/node': 22.16.5
- fsevents: 2.3.3
- jiti: 2.5.1
- lightningcss: 1.30.1
- sass: 1.89.2
- terser: 5.43.1
- yaml: 2.8.0
+ sass: 1.93.0
+ terser: 5.44.0
+ yaml: 2.8.1
vscode-uri@3.1.0: {}
@@ -12132,10 +11433,10 @@ snapshots:
vue-devtools-stub@0.1.0: {}
- vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.5.1)):
+ vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- debug: 4.4.1
- eslint: 9.31.0(jiti@2.5.1)
+ debug: 4.4.3
+ eslint: 9.36.0(jiti@2.5.1)
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
@@ -12144,59 +11445,63 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vue-i18n@10.0.8(vue@3.5.22(typescript@5.8.3)):
+ vue-i18n@10.0.8(vue@3.5.21(typescript@5.9.2)):
dependencies:
'@intlify/core-base': 10.0.8
'@intlify/shared': 10.0.8
'@vue/devtools-api': 6.6.4
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
- vue-router@4.5.1(vue@3.5.22(typescript@5.8.3)):
+ vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)):
dependencies:
'@vue/devtools-api': 6.6.4
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
- vue-tsc@3.0.4(typescript@5.8.3):
+ vue-tsc@3.0.7(typescript@5.9.2):
dependencies:
- '@volar/typescript': 2.4.20
- '@vue/language-core': 3.0.4(typescript@5.8.3)
- typescript: 5.8.3
+ '@volar/typescript': 2.4.23
+ '@vue/language-core': 3.0.7(typescript@5.9.2)
+ typescript: 5.9.2
- vue3-carousel-nuxt@1.1.6(magicast@0.3.5)(vue@3.5.22(typescript@5.8.3)):
+ vue3-carousel-nuxt@1.1.6(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)):
dependencies:
- '@nuxt/kit': 3.18.0(magicast@0.3.5)
- vue3-carousel: 0.15.1(vue@3.5.22(typescript@5.8.3))
+ '@nuxt/kit': 3.19.2(magicast@0.3.5)
+ vue3-carousel: 0.15.1(vue@3.5.21(typescript@5.9.2))
transitivePeerDependencies:
- magicast
- vue
- vue3-carousel@0.15.1(vue@3.5.22(typescript@5.8.3)):
+ vue3-carousel@0.15.1(vue@3.5.21(typescript@5.9.2)):
dependencies:
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
- vue3-carousel@0.16.0(vue@3.5.22(typescript@5.8.3)):
+ vue3-carousel@0.16.0(vue@3.5.21(typescript@5.9.2)):
dependencies:
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
- vue@3.5.22(typescript@5.8.3):
+ vue@3.5.21(typescript@5.9.2):
dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-sfc': 3.5.22
- '@vue/runtime-dom': 3.5.22
- '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.8.3))
- '@vue/shared': 3.5.22
+ '@vue/compiler-dom': 3.5.21
+ '@vue/compiler-sfc': 3.5.21
+ '@vue/runtime-dom': 3.5.21
+ '@vue/server-renderer': 3.5.21(vue@3.5.21(typescript@5.9.2))
+ '@vue/shared': 3.5.21
optionalDependencies:
- typescript: 5.8.3
+ typescript: 5.9.2
- vuedraggable@4.1.0(vue@3.5.22(typescript@5.8.3)):
+ vuedraggable@4.1.0(vue@3.5.21(typescript@5.9.2)):
dependencies:
sortablejs: 1.14.0
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.21(typescript@5.9.2)
- web-streams-polyfill@3.3.3: {}
+ w3c-xmlserializer@5.0.0:
+ dependencies:
+ xml-name-validator: 5.0.0
webidl-conversions@3.0.1: {}
+ webidl-conversions@8.0.0: {}
+
webpack-virtual-modules@0.6.2: {}
whatwg-encoding@3.1.1:
@@ -12205,6 +11510,11 @@ snapshots:
whatwg-mimetype@4.0.0: {}
+ whatwg-url@15.1.0:
+ dependencies:
+ tr46: 6.0.0
+ webidl-conversions: 8.0.0
+
whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3
@@ -12218,26 +11528,6 @@ snapshots:
dependencies:
isexe: 3.1.1
- winston-transport@4.9.0:
- dependencies:
- logform: 2.7.0
- readable-stream: 3.6.2
- triple-beam: 1.4.1
-
- winston@3.17.0:
- dependencies:
- '@colors/colors': 1.6.0
- '@dabh/diagnostics': 2.0.3
- async: 3.2.6
- is-stream: 2.0.1
- logform: 2.7.0
- one-time: 1.0.0
- readable-stream: 3.6.2
- safe-stable-stringify: 2.5.0
- stack-trace: 0.0.10
- triple-beam: 1.4.1
- winston-transport: 4.9.0
-
word-wrap@1.2.5: {}
wrap-ansi@7.0.0:
@@ -12248,17 +11538,12 @@ snapshots:
wrap-ansi@8.1.0:
dependencies:
- ansi-styles: 6.2.1
+ ansi-styles: 6.2.3
string-width: 5.1.2
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
wrappy@1.0.2: {}
- write-file-atomic@6.0.0:
- dependencies:
- imurmurhash: 0.1.4
- signal-exit: 4.1.0
-
ws@8.18.3: {}
wsl-utils@0.1.0:
@@ -12267,6 +11552,10 @@ snapshots:
xml-name-validator@4.0.0: {}
+ xml-name-validator@5.0.0: {}
+
+ xmlchars@2.2.0: {}
+
xss@1.0.15:
dependencies:
commander: 2.20.3
@@ -12281,9 +11570,9 @@ snapshots:
yaml-eslint-parser@1.3.0:
dependencies:
eslint-visitor-keys: 3.4.3
- yaml: 2.8.0
+ yaml: 2.8.1
- yaml@2.8.0: {}
+ yaml@2.8.1: {}
yargs-parser@21.1.1: {}
@@ -12297,11 +11586,6 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
- yauzl@2.10.0:
- dependencies:
- buffer-crc32: 0.2.13
- fd-slicer: 1.1.0
-
yocto-queue@0.1.0: {}
yocto-queue@1.2.1: {}
@@ -12319,18 +11603,8 @@ snapshots:
cookie: 1.0.2
youch-core: 0.3.3
- youch@4.1.0-beta.8:
- dependencies:
- '@poppinss/colors': 4.1.5
- '@poppinss/dumper': 0.6.4
- '@speed-highlight/core': 1.2.7
- cookie: 1.0.2
- youch-core: 0.3.3
-
zip-stream@6.0.1:
dependencies:
archiver-utils: 5.0.2
compress-commons: 6.0.2
readable-stream: 4.7.0
-
- zod@3.25.76: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index c98ca1f..fdb859f 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,4 +1,8 @@
-overrides:
- droplet: link:../../.local/share/pnpm/global/5/node_modules/@drop-oss/droplet
+onlyBuiltDependencies:
+ - '@prisma/client'
+ - '@prisma/engines'
+ - '@tailwindcss/oxide'
+ - esbuild
+ - prisma
shamefullyHoist: true
diff --git a/prisma/migrations/20240928081254_create_user_and_auth_mechanisms/migration.sql b/prisma/migrations/20240928081254_create_user_and_auth_mechanisms/migration.sql
deleted file mode 100644
index 58d7ae2..0000000
--- a/prisma/migrations/20240928081254_create_user_and_auth_mechanisms/migration.sql
+++ /dev/null
@@ -1,25 +0,0 @@
--- CreateEnum
-CREATE TYPE "AuthMec" AS ENUM ('Simple');
-
--- CreateTable
-CREATE TABLE "User" (
- "id" TEXT NOT NULL,
- "username" TEXT NOT NULL,
-
- CONSTRAINT "User_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "LinkedAuthMec" (
- "userId" TEXT NOT NULL,
- "mec" "AuthMec" NOT NULL,
- "credentials" TEXT[],
-
- CONSTRAINT "LinkedAuthMec_pkey" PRIMARY KEY ("userId","mec")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
-
--- AddForeignKey
-ALTER TABLE "LinkedAuthMec" ADD CONSTRAINT "LinkedAuthMec_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20240928085121_move_to_json_for_credentials/migration.sql b/prisma/migrations/20240928085121_move_to_json_for_credentials/migration.sql
deleted file mode 100644
index f77b52a..0000000
--- a/prisma/migrations/20240928085121_move_to_json_for_credentials/migration.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Warnings:
-
- - Changed the type of `credentials` on the `LinkedAuthMec` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
-
-*/
--- AlterTable
-ALTER TABLE "LinkedAuthMec" DROP COLUMN "credentials",
-ADD COLUMN "credentials" JSONB NOT NULL;
diff --git a/prisma/migrations/20240929000950_add_game_data/migration.sql b/prisma/migrations/20240929000950_add_game_data/migration.sql
deleted file mode 100644
index 1c5b1fc..0000000
--- a/prisma/migrations/20240929000950_add_game_data/migration.sql
+++ /dev/null
@@ -1,76 +0,0 @@
--- CreateEnum
-CREATE TYPE "MetadataSource" AS ENUM ('Custom', 'GiantBomb');
-
--- CreateTable
-CREATE TABLE "Game" (
- "id" TEXT NOT NULL,
- "metadataSource" "MetadataSource" NOT NULL,
- "metadataId" TEXT NOT NULL,
- "mName" TEXT NOT NULL,
- "mShortDescription" TEXT NOT NULL,
- "mDescription" TEXT NOT NULL,
- "mReviewCount" INTEGER NOT NULL,
- "mReviewRating" DOUBLE PRECISION NOT NULL,
- "mIconId" TEXT NOT NULL,
- "mBannerId" TEXT NOT NULL,
- "mArt" TEXT[],
- "mScreenshots" TEXT[],
-
- CONSTRAINT "Game_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "Developer" (
- "id" TEXT NOT NULL,
- "metadataSource" "MetadataSource" NOT NULL,
- "metadataId" TEXT NOT NULL,
- "mName" TEXT NOT NULL,
-
- CONSTRAINT "Developer_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "Publisher" (
- "id" TEXT NOT NULL,
- "metadataSource" "MetadataSource" NOT NULL,
- "metadataId" TEXT NOT NULL,
- "mName" TEXT NOT NULL,
-
- CONSTRAINT "Publisher_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "_GameToPublisher" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL
-);
-
--- CreateTable
-CREATE TABLE "_DeveloperToGame" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "_GameToPublisher_AB_unique" ON "_GameToPublisher"("A", "B");
-
--- CreateIndex
-CREATE INDEX "_GameToPublisher_B_index" ON "_GameToPublisher"("B");
-
--- CreateIndex
-CREATE UNIQUE INDEX "_DeveloperToGame_AB_unique" ON "_DeveloperToGame"("A", "B");
-
--- CreateIndex
-CREATE INDEX "_DeveloperToGame_B_index" ON "_DeveloperToGame"("B");
-
--- AddForeignKey
-ALTER TABLE "_GameToPublisher" ADD CONSTRAINT "_GameToPublisher_A_fkey" FOREIGN KEY ("A") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_GameToPublisher" ADD CONSTRAINT "_GameToPublisher_B_fkey" FOREIGN KEY ("B") REFERENCES "Publisher"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_DeveloperToGame" ADD CONSTRAINT "_DeveloperToGame_A_fkey" FOREIGN KEY ("A") REFERENCES "Developer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_DeveloperToGame" ADD CONSTRAINT "_DeveloperToGame_B_fkey" FOREIGN KEY ("B") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20240929010842_updates_to_metadata_schema/migration.sql b/prisma/migrations/20240929010842_updates_to_metadata_schema/migration.sql
deleted file mode 100644
index 913d4c1..0000000
--- a/prisma/migrations/20240929010842_updates_to_metadata_schema/migration.sql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `mBanner` to the `Developer` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mDescription` to the `Developer` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mLogo` to the `Developer` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mShortDescription` to the `Developer` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mBanner` to the `Publisher` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mDescription` to the `Publisher` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mLogo` to the `Publisher` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mShortDescription` to the `Publisher` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Developer" ADD COLUMN "mBanner" TEXT NOT NULL,
-ADD COLUMN "mDescription" TEXT NOT NULL,
-ADD COLUMN "mLogo" TEXT NOT NULL,
-ADD COLUMN "mShortDescription" TEXT NOT NULL;
-
--- AlterTable
-ALTER TABLE "Publisher" ADD COLUMN "mBanner" TEXT NOT NULL,
-ADD COLUMN "mDescription" TEXT NOT NULL,
-ADD COLUMN "mLogo" TEXT NOT NULL,
-ADD COLUMN "mShortDescription" TEXT NOT NULL;
diff --git a/prisma/migrations/20241004020835_unique_constraints/migration.sql b/prisma/migrations/20241004020835_unique_constraints/migration.sql
deleted file mode 100644
index a475fd5..0000000
--- a/prisma/migrations/20241004020835_unique_constraints/migration.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- Warnings:
-
- - A unique constraint covering the columns `[metadataSource,metadataId]` on the table `Developer` will be added. If there are existing duplicate values, this will fail.
- - A unique constraint covering the columns `[metadataSource,metadataId]` on the table `Game` will be added. If there are existing duplicate values, this will fail.
- - A unique constraint covering the columns `[metadataSource,metadataId]` on the table `Publisher` will be added. If there are existing duplicate values, this will fail.
-
-*/
--- CreateIndex
-CREATE UNIQUE INDEX "Developer_metadataSource_metadataId_key" ON "Developer"("metadataSource", "metadataId");
-
--- CreateIndex
-CREATE UNIQUE INDEX "Game_metadataSource_metadataId_key" ON "Game"("metadataSource", "metadataId");
-
--- CreateIndex
-CREATE UNIQUE INDEX "Publisher_metadataSource_metadataId_key" ON "Publisher"("metadataSource", "metadataId");
diff --git a/prisma/migrations/20241004025235_add_dev_pub_websites/migration.sql b/prisma/migrations/20241004025235_add_dev_pub_websites/migration.sql
deleted file mode 100644
index 0f3e9bf..0000000
--- a/prisma/migrations/20241004025235_add_dev_pub_websites/migration.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `mWebsite` to the `Developer` table without a default value. This is not possible if the table is not empty.
- - Added the required column `mWebsite` to the `Publisher` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Developer" ADD COLUMN "mWebsite" TEXT NOT NULL;
-
--- AlterTable
-ALTER TABLE "Publisher" ADD COLUMN "mWebsite" TEXT NOT NULL;
diff --git a/prisma/migrations/20241007043002_add_user_admin/migration.sql b/prisma/migrations/20241007043002_add_user_admin/migration.sql
deleted file mode 100644
index 554507b..0000000
--- a/prisma/migrations/20241007043002_add_user_admin/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "User" ADD COLUMN "admin" BOOLEAN NOT NULL DEFAULT false;
diff --git a/prisma/migrations/20241007065541_add_client/migration.sql b/prisma/migrations/20241007065541_add_client/migration.sql
deleted file mode 100644
index efca156..0000000
--- a/prisma/migrations/20241007065541_add_client/migration.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- CreateEnum
-CREATE TYPE "ClientCapabilities" AS ENUM ('DownloadAggregation');
-
--- CreateTable
-CREATE TABLE "Client" (
- "sharedToken" TEXT NOT NULL,
- "userId" TEXT NOT NULL,
- "endpoint" TEXT NOT NULL,
- "capabilities" "ClientCapabilities"[],
-
- CONSTRAINT "Client_pkey" PRIMARY KEY ("sharedToken")
-);
-
--- AddForeignKey
-ALTER TABLE "Client" ADD CONSTRAINT "Client_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20241008062519_remove_shared_token_and_add_last_connected/migration.sql b/prisma/migrations/20241008062519_remove_shared_token_and_add_last_connected/migration.sql
deleted file mode 100644
index 52d9c03..0000000
--- a/prisma/migrations/20241008062519_remove_shared_token_and_add_last_connected/migration.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- Warnings:
-
- - The primary key for the `Client` table will be changed. If it partially fails, the table could be left without primary key constraint.
- - You are about to drop the column `sharedToken` on the `Client` table. All the data in the column will be lost.
- - The required column `id` was added to the `Client` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
- - Added the required column `lastConnected` to the `Client` table without a default value. This is not possible if the table is not empty.
- - Added the required column `name` to the `Client` table without a default value. This is not possible if the table is not empty.
- - Added the required column `platform` to the `Client` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Client" DROP CONSTRAINT "Client_pkey",
-DROP COLUMN "sharedToken",
-ADD COLUMN "id" TEXT NOT NULL,
-ADD COLUMN "lastConnected" TIMESTAMP(3) NOT NULL,
-ADD COLUMN "name" TEXT NOT NULL,
-ADD COLUMN "platform" TEXT NOT NULL,
-ADD CONSTRAINT "Client_pkey" PRIMARY KEY ("id");
diff --git a/prisma/migrations/20241009032354_add_account_details/migration.sql b/prisma/migrations/20241009032354_add_account_details/migration.sql
deleted file mode 100644
index e731d26..0000000
--- a/prisma/migrations/20241009032354_add_account_details/migration.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `displayName` to the `User` table without a default value. This is not possible if the table is not empty.
- - Added the required column `email` to the `User` table without a default value. This is not possible if the table is not empty.
- - Added the required column `profilePicture` to the `User` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "User" ADD COLUMN "displayName" TEXT NOT NULL,
-ADD COLUMN "email" TEXT NOT NULL,
-ADD COLUMN "profilePicture" TEXT NOT NULL;
diff --git a/prisma/migrations/20241010062956_add_constraints/migration.sql b/prisma/migrations/20241010062956_add_constraints/migration.sql
deleted file mode 100644
index 11e38bc..0000000
--- a/prisma/migrations/20241010062956_add_constraints/migration.sql
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- Warnings:
-
- - A unique constraint covering the columns `[libraryBasePath]` on the table `Game` will be added. If there are existing duplicate values, this will fail.
- - Added the required column `libraryBasePath` to the `Game` table without a default value. This is not possible if the table is not empty.
- - Added the required column `versionOrder` to the `Game` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Game" ADD COLUMN "libraryBasePath" TEXT NOT NULL,
-ADD COLUMN "versionOrder" TEXT NOT NULL;
-
--- CreateTable
-CREATE TABLE "GameVersion" (
- "gameId" TEXT NOT NULL,
- "versionName" TEXT NOT NULL,
-
- CONSTRAINT "GameVersion_pkey" PRIMARY KEY ("gameId","versionName")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "Game_libraryBasePath_key" ON "Game"("libraryBasePath");
-
--- AddForeignKey
-ALTER TABLE "GameVersion" ADD CONSTRAINT "GameVersion_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20241010095344_various_fixes/migration.sql b/prisma/migrations/20241010095344_various_fixes/migration.sql
deleted file mode 100644
index 030d2ee..0000000
--- a/prisma/migrations/20241010095344_various_fixes/migration.sql
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- Warnings:
-
- - The `versionOrder` column on the `Game` table would be dropped and recreated. This will lead to data loss if there is data in the column.
- - Changed the type of `platform` on the `Client` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
- - Added the required column `launchCommand` to the `GameVersion` table without a default value. This is not possible if the table is not empty.
- - Added the required column `platform` to the `GameVersion` table without a default value. This is not possible if the table is not empty.
- - Added the required column `setupCommand` to the `GameVersion` table without a default value. This is not possible if the table is not empty.
-
-*/
--- CreateEnum
-CREATE TYPE "Platform" AS ENUM ('windows', 'linux');
-
--- AlterTable
-ALTER TABLE "Client" DROP COLUMN "platform",
-ADD COLUMN "platform" "Platform" NOT NULL;
-
--- AlterTable
-ALTER TABLE "Game" DROP COLUMN "versionOrder",
-ADD COLUMN "versionOrder" TEXT[];
-
--- AlterTable
-ALTER TABLE "GameVersion" ADD COLUMN "launchCommand" TEXT NOT NULL,
-ADD COLUMN "platform" "Platform" NOT NULL,
-ADD COLUMN "setupCommand" TEXT NOT NULL;
diff --git a/prisma/migrations/20241010104439_added_original_query_field/migration.sql b/prisma/migrations/20241010104439_added_original_query_field/migration.sql
deleted file mode 100644
index 79aa26c..0000000
--- a/prisma/migrations/20241010104439_added_original_query_field/migration.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `metadataOriginalQuery` to the `Developer` table without a default value. This is not possible if the table is not empty.
- - Added the required column `metadataOriginalQuery` to the `Publisher` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Developer" ADD COLUMN "metadataOriginalQuery" TEXT NOT NULL;
-
--- AlterTable
-ALTER TABLE "Publisher" ADD COLUMN "metadataOriginalQuery" TEXT NOT NULL;
diff --git a/prisma/migrations/20241010104722_fix_unique_constraints/migration.sql b/prisma/migrations/20241010104722_fix_unique_constraints/migration.sql
deleted file mode 100644
index 6e22210..0000000
--- a/prisma/migrations/20241010104722_fix_unique_constraints/migration.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- Warnings:
-
- - A unique constraint covering the columns `[metadataSource,metadataId,metadataOriginalQuery]` on the table `Developer` will be added. If there are existing duplicate values, this will fail.
- - A unique constraint covering the columns `[metadataSource,metadataId,metadataOriginalQuery]` on the table `Publisher` will be added. If there are existing duplicate values, this will fail.
-
-*/
--- DropIndex
-DROP INDEX "Developer_metadataSource_metadataId_key";
-
--- DropIndex
-DROP INDEX "Publisher_metadataSource_metadataId_key";
-
--- CreateIndex
-CREATE UNIQUE INDEX "Developer_metadataSource_metadataId_metadataOriginalQuery_key" ON "Developer"("metadataSource", "metadataId", "metadataOriginalQuery");
-
--- CreateIndex
-CREATE UNIQUE INDEX "Publisher_metadataSource_metadataId_metadataOriginalQuery_key" ON "Publisher"("metadataSource", "metadataId", "metadataOriginalQuery");
diff --git a/prisma/migrations/20241011035227_add_droplet_manifest_to_game_versions/migration.sql b/prisma/migrations/20241011035227_add_droplet_manifest_to_game_versions/migration.sql
deleted file mode 100644
index 97ed815..0000000
--- a/prisma/migrations/20241011035227_add_droplet_manifest_to_game_versions/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `dropletManifest` to the `GameVersion` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "GameVersion" ADD COLUMN "dropletManifest" JSONB NOT NULL;
diff --git a/prisma/migrations/20241011093950_update_game_images_system/migration.sql b/prisma/migrations/20241011093950_update_game_images_system/migration.sql
deleted file mode 100644
index 1b436c2..0000000
--- a/prisma/migrations/20241011093950_update_game_images_system/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `mArt` on the `Game` table. All the data in the column will be lost.
- - You are about to drop the column `mBannerId` on the `Game` table. All the data in the column will be lost.
- - You are about to drop the column `mScreenshots` on the `Game` table. All the data in the column will be lost.
-
-*/
--- AlterTable
-ALTER TABLE "Game" DROP COLUMN "mArt",
-DROP COLUMN "mBannerId",
-DROP COLUMN "mScreenshots",
-ADD COLUMN "mBannerIndex" INTEGER NOT NULL DEFAULT 0,
-ADD COLUMN "mImageLibrary" TEXT[];
diff --git a/prisma/migrations/20241011101243_revert_banner_system/migration.sql b/prisma/migrations/20241011101243_revert_banner_system/migration.sql
deleted file mode 100644
index 667c783..0000000
--- a/prisma/migrations/20241011101243_revert_banner_system/migration.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `mBannerIndex` on the `Game` table. All the data in the column will be lost.
- - Added the required column `mBannerId` to the `Game` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Game" DROP COLUMN "mBannerIndex",
-ADD COLUMN "mBannerId" TEXT NOT NULL;
diff --git a/prisma/migrations/20241011103116_add_cover_image/migration.sql b/prisma/migrations/20241011103116_add_cover_image/migration.sql
deleted file mode 100644
index 0b1aaa0..0000000
--- a/prisma/migrations/20241011103116_add_cover_image/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `mCoverId` to the `Game` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Game" ADD COLUMN "mCoverId" TEXT NOT NULL;
diff --git a/prisma/migrations/20241014052934_add_delta_and_order/migration.sql b/prisma/migrations/20241014052934_add_delta_and_order/migration.sql
deleted file mode 100644
index 9619d00..0000000
--- a/prisma/migrations/20241014052934_add_delta_and_order/migration.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `versionIndex` to the `GameVersion` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "GameVersion" ADD COLUMN "delta" BOOLEAN NOT NULL DEFAULT false,
-ADD COLUMN "versionIndex" INTEGER NOT NULL;
diff --git a/prisma/migrations/20241014053941_remove_version_order/migration.sql b/prisma/migrations/20241014053941_remove_version_order/migration.sql
deleted file mode 100644
index 8e05931..0000000
--- a/prisma/migrations/20241014053941_remove_version_order/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `versionOrder` on the `Game` table. All the data in the column will be lost.
-
-*/
--- AlterTable
-ALTER TABLE "Game" DROP COLUMN "versionOrder";
diff --git a/prisma/migrations/20241025091103_add_invitations/migration.sql b/prisma/migrations/20241025091103_add_invitations/migration.sql
deleted file mode 100644
index 1b0b37f..0000000
--- a/prisma/migrations/20241025091103_add_invitations/migration.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- CreateTable
-CREATE TABLE "Invitation" (
- "id" TEXT NOT NULL,
- "isAdmin" BOOLEAN NOT NULL DEFAULT false,
- "username" TEXT,
- "email" TEXT,
-
- CONSTRAINT "Invitation_pkey" PRIMARY KEY ("id")
-);
diff --git a/prisma/migrations/20241102000813_create_application_configuration/migration.sql b/prisma/migrations/20241102000813_create_application_configuration/migration.sql
deleted file mode 100644
index e07ad83..0000000
--- a/prisma/migrations/20241102000813_create_application_configuration/migration.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- CreateTable
-CREATE TABLE "ApplicationSettings" (
- "timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
- "enabledAuthencationMechanisms" "AuthMec"[],
-
- CONSTRAINT "ApplicationSettings_pkey" PRIMARY KEY ("timestamp")
-);
diff --git a/prisma/migrations/20241105221904_different_client_capabilities/migration.sql b/prisma/migrations/20241105221904_different_client_capabilities/migration.sql
deleted file mode 100644
index e63a1dc..0000000
--- a/prisma/migrations/20241105221904_different_client_capabilities/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Warnings:
-
- - The values [DownloadAggregation] on the enum `ClientCapabilities` will be removed. If these variants are still used in the database, this will fail.
-
-*/
--- AlterEnum
-BEGIN;
-CREATE TYPE "ClientCapabilities_new" AS ENUM ('PeerAPI', 'UserStatus');
-ALTER TABLE "Client" ALTER COLUMN "capabilities" TYPE "ClientCapabilities_new"[] USING ("capabilities"::text::"ClientCapabilities_new"[]);
-ALTER TYPE "ClientCapabilities" RENAME TO "ClientCapabilities_old";
-ALTER TYPE "ClientCapabilities_new" RENAME TO "ClientCapabilities";
-DROP TYPE "ClientCapabilities_old";
-COMMIT;
diff --git a/prisma/migrations/20241105222110_trackable_names_for_capabilities/migration.sql b/prisma/migrations/20241105222110_trackable_names_for_capabilities/migration.sql
deleted file mode 100644
index 1638c38..0000000
--- a/prisma/migrations/20241105222110_trackable_names_for_capabilities/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Warnings:
-
- - The values [PeerAPI,UserStatus] on the enum `ClientCapabilities` will be removed. If these variants are still used in the database, this will fail.
-
-*/
--- AlterEnum
-BEGIN;
-CREATE TYPE "ClientCapabilities_new" AS ENUM ('peerAPI', 'userStatus');
-ALTER TABLE "Client" ALTER COLUMN "capabilities" TYPE "ClientCapabilities_new"[] USING ("capabilities"::text::"ClientCapabilities_new"[]);
-ALTER TYPE "ClientCapabilities" RENAME TO "ClientCapabilities_old";
-ALTER TYPE "ClientCapabilities_new" RENAME TO "ClientCapabilities";
-DROP TYPE "ClientCapabilities_old";
-COMMIT;
diff --git a/prisma/migrations/20241105225732_peer_api_configuration/migration.sql b/prisma/migrations/20241105225732_peer_api_configuration/migration.sql
deleted file mode 100644
index ecafb93..0000000
--- a/prisma/migrations/20241105225732_peer_api_configuration/migration.sql
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `endpoint` on the `Client` table. All the data in the column will be lost.
-
-*/
--- AlterTable
-ALTER TABLE "Client" DROP COLUMN "endpoint";
-
--- CreateTable
-CREATE TABLE "ClientPeerAPIConfiguration" (
- "id" TEXT NOT NULL,
- "clientId" TEXT NOT NULL,
- "ipConfigurations" TEXT[],
-
- CONSTRAINT "ClientPeerAPIConfiguration_pkey" PRIMARY KEY ("id")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "ClientPeerAPIConfiguration_clientId_key" ON "ClientPeerAPIConfiguration"("clientId");
-
--- AddForeignKey
-ALTER TABLE "ClientPeerAPIConfiguration" ADD CONSTRAINT "ClientPeerAPIConfiguration_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20241105230021_move_to_endpoint_configuration/migration.sql b/prisma/migrations/20241105230021_move_to_endpoint_configuration/migration.sql
deleted file mode 100644
index 619e47c..0000000
--- a/prisma/migrations/20241105230021_move_to_endpoint_configuration/migration.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `ipConfigurations` on the `ClientPeerAPIConfiguration` table. All the data in the column will be lost.
-
-*/
--- AlterTable
-ALTER TABLE "ClientPeerAPIConfiguration" DROP COLUMN "ipConfigurations",
-ADD COLUMN "endpoints" TEXT[];
diff --git a/prisma/migrations/20241107080421_add_expiry_for_invitations/migration.sql b/prisma/migrations/20241107080421_add_expiry_for_invitations/migration.sql
deleted file mode 100644
index 864239e..0000000
--- a/prisma/migrations/20241107080421_add_expiry_for_invitations/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `expires` to the `Invitation` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Invitation" ADD COLUMN "expires" TIMESTAMP(3) NOT NULL;
diff --git a/prisma/migrations/20241116053120_add_notifications/migration.sql b/prisma/migrations/20241116053120_add_notifications/migration.sql
deleted file mode 100644
index 230e67c..0000000
--- a/prisma/migrations/20241116053120_add_notifications/migration.sql
+++ /dev/null
@@ -1,18 +0,0 @@
--- CreateTable
-CREATE TABLE "Notification" (
- "id" TEXT NOT NULL,
- "nonce" TEXT,
- "userId" TEXT NOT NULL,
- "title" TEXT NOT NULL,
- "description" TEXT NOT NULL,
- "actions" TEXT[],
- "read" BOOLEAN NOT NULL DEFAULT false,
-
- CONSTRAINT "Notification_pkey" PRIMARY KEY ("id")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "Notification_nonce_key" ON "Notification"("nonce");
-
--- AddForeignKey
-ALTER TABLE "Notification" ADD CONSTRAINT "Notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20241116054212_add_created_time_stamp_to_notifications/migration.sql b/prisma/migrations/20241116054212_add_created_time_stamp_to_notifications/migration.sql
deleted file mode 100644
index ec5756c..0000000
--- a/prisma/migrations/20241116054212_add_created_time_stamp_to_notifications/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "Notification" ADD COLUMN "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
diff --git a/prisma/migrations/20241122215933_add_created_timestamps_for_games/migration.sql b/prisma/migrations/20241122215933_add_created_timestamps_for_games/migration.sql
deleted file mode 100644
index b383c57..0000000
--- a/prisma/migrations/20241122215933_add_created_timestamps_for_games/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- AlterTable
-ALTER TABLE "Game" ADD COLUMN "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
-
--- AlterTable
-ALTER TABLE "GameVersion" ADD COLUMN "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
diff --git a/prisma/migrations/20241124042825_add_released_date_for_the_game/migration.sql b/prisma/migrations/20241124042825_add_released_date_for_the_game/migration.sql
deleted file mode 100644
index b2bea83..0000000
--- a/prisma/migrations/20241124042825_add_released_date_for_the_game/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `mReleased` to the `Game` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Game" ADD COLUMN "mReleased" TIMESTAMP(3) NOT NULL;
diff --git a/prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql b/prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql
deleted file mode 100644
index 9cac164..0000000
--- a/prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "GameVersion" ADD COLUMN "umuIdOverride" TEXT;
diff --git a/prisma/migrations/20241223100329_add_referential_deletion_for_game_versions/migration.sql b/prisma/migrations/20241223100329_add_referential_deletion_for_game_versions/migration.sql
deleted file mode 100644
index c68ac5c..0000000
--- a/prisma/migrations/20241223100329_add_referential_deletion_for_game_versions/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- DropForeignKey
-ALTER TABLE "GameVersion" DROP CONSTRAINT "GameVersion_gameId_fkey";
-
--- AddForeignKey
-ALTER TABLE "GameVersion" ADD CONSTRAINT "GameVersion_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20241223100418_update_to_prisma_6/migration.sql b/prisma/migrations/20241223100418_update_to_prisma_6/migration.sql
deleted file mode 100644
index 6d8bac7..0000000
--- a/prisma/migrations/20241223100418_update_to_prisma_6/migration.sql
+++ /dev/null
@@ -1,11 +0,0 @@
--- AlterTable
-ALTER TABLE "_DeveloperToGame" ADD CONSTRAINT "_DeveloperToGame_AB_pkey" PRIMARY KEY ("A", "B");
-
--- DropIndex
-DROP INDEX "_DeveloperToGame_AB_unique";
-
--- AlterTable
-ALTER TABLE "_GameToPublisher" ADD CONSTRAINT "_GameToPublisher_AB_pkey" PRIMARY KEY ("A", "B");
-
--- DropIndex
-DROP INDEX "_GameToPublisher_AB_unique";
diff --git a/prisma/migrations/20241226065709_rename_custom_to_manual/migration.sql b/prisma/migrations/20241226065709_rename_custom_to_manual/migration.sql
deleted file mode 100644
index 7110139..0000000
--- a/prisma/migrations/20241226065709_rename_custom_to_manual/migration.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- Warnings:
-
- - The values [Custom] on the enum `MetadataSource` will be removed. If these variants are still used in the database, this will fail.
-
-*/
--- AlterEnum
-BEGIN;
-CREATE TYPE "MetadataSource_new" AS ENUM ('Manual', 'GiantBomb');
-ALTER TABLE "Game" ALTER COLUMN "metadataSource" TYPE "MetadataSource_new" USING ("metadataSource"::text::"MetadataSource_new");
-ALTER TABLE "Developer" ALTER COLUMN "metadataSource" TYPE "MetadataSource_new" USING ("metadataSource"::text::"MetadataSource_new");
-ALTER TABLE "Publisher" ALTER COLUMN "metadataSource" TYPE "MetadataSource_new" USING ("metadataSource"::text::"MetadataSource_new");
-ALTER TYPE "MetadataSource" RENAME TO "MetadataSource_old";
-ALTER TYPE "MetadataSource_new" RENAME TO "MetadataSource";
-DROP TYPE "MetadataSource_old";
-COMMIT;
diff --git a/prisma/migrations/20241226230207_add_image_carousel/migration.sql b/prisma/migrations/20241226230207_add_image_carousel/migration.sql
deleted file mode 100644
index 44ccbfb..0000000
--- a/prisma/migrations/20241226230207_add_image_carousel/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "Game" ADD COLUMN "mImageCarousel" INTEGER[];
diff --git a/prisma/migrations/20241227033610_move_image_carousel_to_image_ids/migration.sql b/prisma/migrations/20241227033610_move_image_carousel_to_image_ids/migration.sql
deleted file mode 100644
index f86124c..0000000
--- a/prisma/migrations/20241227033610_move_image_carousel_to_image_ids/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "Game" ALTER COLUMN "mImageCarousel" SET DATA TYPE TEXT[];
diff --git a/prisma/migrations/20241230053403_add_args_and_only_setup/migration.sql b/prisma/migrations/20241230053403_add_args_and_only_setup/migration.sql
deleted file mode 100644
index 14383ee..0000000
--- a/prisma/migrations/20241230053403_add_args_and_only_setup/migration.sql
+++ /dev/null
@@ -1,6 +0,0 @@
--- AlterTable
-ALTER TABLE "GameVersion" ADD COLUMN "launchArgs" TEXT[],
-ADD COLUMN "onlySetup" BOOLEAN NOT NULL DEFAULT false,
-ADD COLUMN "setupArgs" TEXT[],
-ALTER COLUMN "launchCommand" DROP NOT NULL,
-ALTER COLUMN "setupCommand" DROP NOT NULL;
diff --git a/prisma/migrations/20250103202348_add_collections/migration.sql b/prisma/migrations/20250103202348_add_collections/migration.sql
deleted file mode 100644
index 3dd7f22..0000000
--- a/prisma/migrations/20250103202348_add_collections/migration.sql
+++ /dev/null
@@ -1,29 +0,0 @@
--- CreateTable
-CREATE TABLE "Collection" (
- "id" TEXT NOT NULL,
- "name" TEXT NOT NULL,
- "isDefault" BOOLEAN NOT NULL DEFAULT false,
- "userId" TEXT NOT NULL,
-
- CONSTRAINT "Collection_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "_CollectionToGame" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL,
-
- CONSTRAINT "_CollectionToGame_AB_pkey" PRIMARY KEY ("A","B")
-);
-
--- CreateIndex
-CREATE INDEX "_CollectionToGame_B_index" ON "_CollectionToGame"("B");
-
--- AddForeignKey
-ALTER TABLE "Collection" ADD CONSTRAINT "Collection_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_CollectionToGame" ADD CONSTRAINT "_CollectionToGame_A_fkey" FOREIGN KEY ("A") REFERENCES "Collection"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_CollectionToGame" ADD CONSTRAINT "_CollectionToGame_B_fkey" FOREIGN KEY ("B") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250109005948_use_collection_entry_to_ensure_unique_games/migration.sql b/prisma/migrations/20250109005948_use_collection_entry_to_ensure_unique_games/migration.sql
deleted file mode 100644
index 0e4a76f..0000000
--- a/prisma/migrations/20250109005948_use_collection_entry_to_ensure_unique_games/migration.sql
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the `_CollectionToGame` table. If the table is not empty, all the data it contains will be lost.
-
-*/
--- DropForeignKey
-ALTER TABLE "_CollectionToGame" DROP CONSTRAINT "_CollectionToGame_A_fkey";
-
--- DropForeignKey
-ALTER TABLE "_CollectionToGame" DROP CONSTRAINT "_CollectionToGame_B_fkey";
-
--- DropTable
-DROP TABLE "_CollectionToGame";
-
--- CreateTable
-CREATE TABLE "CollectionEntry" (
- "collectionId" TEXT NOT NULL,
- "gameId" TEXT NOT NULL,
-
- CONSTRAINT "CollectionEntry_pkey" PRIMARY KEY ("collectionId","gameId")
-);
-
--- AddForeignKey
-ALTER TABLE "CollectionEntry" ADD CONSTRAINT "CollectionEntry_collectionId_fkey" FOREIGN KEY ("collectionId") REFERENCES "Collection"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "CollectionEntry" ADD CONSTRAINT "CollectionEntry_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250128060446_casacad_e_delete_for_collection_entries/migration.sql b/prisma/migrations/20250128060446_casacad_e_delete_for_collection_entries/migration.sql
deleted file mode 100644
index fb40ca3..0000000
--- a/prisma/migrations/20250128060446_casacad_e_delete_for_collection_entries/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- DropForeignKey
-ALTER TABLE "CollectionEntry" DROP CONSTRAINT "CollectionEntry_collectionId_fkey";
-
--- AddForeignKey
-ALTER TABLE "CollectionEntry" ADD CONSTRAINT "CollectionEntry_collectionId_fkey" FOREIGN KEY ("collectionId") REFERENCES "Collection"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250128102738_add_news/migration.sql b/prisma/migrations/20250128102738_add_news/migration.sql
deleted file mode 100644
index 68b2aca..0000000
--- a/prisma/migrations/20250128102738_add_news/migration.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- CreateTable
-CREATE TABLE "news" (
- "id" TEXT NOT NULL,
- "title" TEXT NOT NULL,
- "content" TEXT NOT NULL,
- "excerpt" TEXT NOT NULL,
- "tags" TEXT[],
- "image" TEXT,
- "publishedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
- "authorId" TEXT NOT NULL,
-
- CONSTRAINT "news_pkey" PRIMARY KEY ("id")
-);
-
--- AddForeignKey
-ALTER TABLE "news" ADD CONSTRAINT "news_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250204010021_add_tokens/migration.sql b/prisma/migrations/20250204010021_add_tokens/migration.sql
deleted file mode 100644
index 3023727..0000000
--- a/prisma/migrations/20250204010021_add_tokens/migration.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- CreateEnum
-CREATE TYPE "APITokenMode" AS ENUM ('User', 'System');
-
--- CreateTable
-CREATE TABLE "APIToken" (
- "token" TEXT NOT NULL,
- "mode" "APITokenMode" NOT NULL,
- "userId" TEXT,
- "acls" TEXT[],
-
- CONSTRAINT "APIToken_pkey" PRIMARY KEY ("token")
-);
-
--- AddForeignKey
-ALTER TABLE "APIToken" ADD CONSTRAINT "APIToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250204020918_add_collection_entry_casacade_delete/migration.sql b/prisma/migrations/20250204020918_add_collection_entry_casacade_delete/migration.sql
deleted file mode 100644
index 846ce19..0000000
--- a/prisma/migrations/20250204020918_add_collection_entry_casacade_delete/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- DropForeignKey
-ALTER TABLE "CollectionEntry" DROP CONSTRAINT "CollectionEntry_gameId_fkey";
-
--- AddForeignKey
-ALTER TABLE "CollectionEntry" ADD CONSTRAINT "CollectionEntry_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250208004345_add_api_token_name/migration.sql b/prisma/migrations/20250208004345_add_api_token_name/migration.sql
deleted file mode 100644
index 26cfe96..0000000
--- a/prisma/migrations/20250208004345_add_api_token_name/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `name` to the `APIToken` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "APIToken" ADD COLUMN "name" TEXT NOT NULL;
diff --git a/prisma/migrations/20250208005625_add_id_to_token/migration.sql b/prisma/migrations/20250208005625_add_id_to_token/migration.sql
deleted file mode 100644
index 2a9e0b0..0000000
--- a/prisma/migrations/20250208005625_add_id_to_token/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Warnings:
-
- - The primary key for the `APIToken` table will be changed. If it partially fails, the table could be left without primary key constraint.
- - The required column `id` was added to the `APIToken` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
-
-*/
--- AlterTable
-ALTER TABLE "APIToken" DROP CONSTRAINT "APIToken_pkey",
-ADD COLUMN "id" TEXT NOT NULL,
-ADD CONSTRAINT "APIToken_pkey" PRIMARY KEY ("id");
-
--- CreateIndex
-CREATE INDEX "APIToken_token_idx" ON "APIToken"("token");
diff --git a/prisma/migrations/20250211230021_ensure_non_null_launch_and_setup_commands/migration.sql b/prisma/migrations/20250211230021_ensure_non_null_launch_and_setup_commands/migration.sql
deleted file mode 100644
index 79a655d..0000000
--- a/prisma/migrations/20250211230021_ensure_non_null_launch_and_setup_commands/migration.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- Warnings:
-
- - Made the column `launchCommand` on table `GameVersion` required. This step will fail if there are existing NULL values in that column.
- - Made the column `setupCommand` on table `GameVersion` required. This step will fail if there are existing NULL values in that column.
-
-*/
-UPDATE "GameVersion"
-SET "launchCommand" = ''
-WHERE "launchCommand" is NULL;
-
-UPDATE "GameVersion"
-SET "setupCommand" = ''
-WHERE "launchCommand" is NULL;
-
--- AlterTable
-ALTER TABLE "GameVersion" ALTER COLUMN "launchCommand" SET NOT NULL,
-ALTER COLUMN "launchCommand" SET DEFAULT '',
-ALTER COLUMN "setupCommand" SET NOT NULL,
-ALTER COLUMN "setupCommand" SET DEFAULT '';
diff --git a/prisma/migrations/20250309234300_news_articles/migration.sql b/prisma/migrations/20250309234300_news_articles/migration.sql
deleted file mode 100644
index 23a25c0..0000000
--- a/prisma/migrations/20250309234300_news_articles/migration.sql
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the `news` table. If the table is not empty, all the data it contains will be lost.
-
-*/
--- DropForeignKey
-ALTER TABLE "news" DROP CONSTRAINT "news_authorId_fkey";
-
--- DropTable
-DROP TABLE "news";
-
--- CreateTable
-CREATE TABLE "Tag" (
- "id" TEXT NOT NULL,
- "name" TEXT NOT NULL,
-
- CONSTRAINT "Tag_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "Article" (
- "id" TEXT NOT NULL,
- "title" TEXT NOT NULL,
- "description" TEXT NOT NULL,
- "content" TEXT NOT NULL,
- "image" TEXT,
- "publishedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
- "authorId" TEXT,
-
- CONSTRAINT "Article_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "_ArticleToTag" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL,
-
- CONSTRAINT "_ArticleToTag_AB_pkey" PRIMARY KEY ("A","B")
-);
-
--- CreateIndex
-CREATE INDEX "_ArticleToTag_B_index" ON "_ArticleToTag"("B");
-
--- AddForeignKey
-ALTER TABLE "Article" ADD CONSTRAINT "Article_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_ArticleToTag" ADD CONSTRAINT "_ArticleToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_ArticleToTag" ADD CONSTRAINT "_ArticleToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250309234801_make_tags_unique/migration.sql b/prisma/migrations/20250309234801_make_tags_unique/migration.sql
deleted file mode 100644
index 918aee1..0000000
--- a/prisma/migrations/20250309234801_make_tags_unique/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - A unique constraint covering the columns `[name]` on the table `Tag` will be added. If there are existing duplicate values, this will fail.
-
-*/
--- CreateIndex
-CREATE UNIQUE INDEX "Tag_name_key" ON "Tag"("name");
diff --git a/prisma/migrations/20250309234846_make_tokens_unique/migration.sql b/prisma/migrations/20250309234846_make_tokens_unique/migration.sql
deleted file mode 100644
index a09d63c..0000000
--- a/prisma/migrations/20250309234846_make_tokens_unique/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - A unique constraint covering the columns `[token]` on the table `APIToken` will be added. If there are existing duplicate values, this will fail.
-
-*/
--- CreateIndex
-CREATE UNIQUE INDEX "APIToken_token_key" ON "APIToken"("token");
diff --git a/prisma/migrations/20250311073601_add_macos_as_a_platform/migration.sql b/prisma/migrations/20250311073601_add_macos_as_a_platform/migration.sql
deleted file mode 100644
index f2f6840..0000000
--- a/prisma/migrations/20250311073601_add_macos_as_a_platform/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterEnum
-ALTER TYPE "Platform" ADD VALUE 'macos';
diff --git a/prisma/migrations/20250312230736_add_metadata_providers_to_appconfig/migration.sql b/prisma/migrations/20250312230736_add_metadata_providers_to_appconfig/migration.sql
deleted file mode 100644
index 54f1097..0000000
--- a/prisma/migrations/20250312230736_add_metadata_providers_to_appconfig/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "ApplicationSettings" ADD COLUMN "metadataProviders" TEXT[];
diff --git a/prisma/migrations/20250313042306_add_igdb_pcgamingwiki_metadata/migration.sql b/prisma/migrations/20250313042306_add_igdb_pcgamingwiki_metadata/migration.sql
deleted file mode 100644
index 152b5fb..0000000
--- a/prisma/migrations/20250313042306_add_igdb_pcgamingwiki_metadata/migration.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- AlterEnum
--- This migration adds more than one value to an enum.
--- With PostgreSQL versions 11 and earlier, this is not possible
--- in a single migration. This can be worked around by creating
--- multiple migrations, each migration adding only one value to
--- the enum.
-
-
-ALTER TYPE "MetadataSource" ADD VALUE 'PCGamingWiki';
-ALTER TYPE "MetadataSource" ADD VALUE 'IGDB';
diff --git a/prisma/migrations/20250313053250_add_enable_fields_to_auth_and_users/migration.sql b/prisma/migrations/20250313053250_add_enable_fields_to_auth_and_users/migration.sql
deleted file mode 100644
index de27367..0000000
--- a/prisma/migrations/20250313053250_add_enable_fields_to_auth_and_users/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- AlterTable
-ALTER TABLE "LinkedAuthMec" ADD COLUMN "enabled" BOOLEAN NOT NULL DEFAULT true;
-
--- AlterTable
-ALTER TABLE "User" ADD COLUMN "enabled" BOOLEAN NOT NULL DEFAULT true;
diff --git a/prisma/migrations/20250314153636_store_ca_and_session_in_db/migration.sql b/prisma/migrations/20250314153636_store_ca_and_session_in_db/migration.sql
deleted file mode 100644
index b342bf4..0000000
--- a/prisma/migrations/20250314153636_store_ca_and_session_in_db/migration.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- CreateTable
-CREATE TABLE "Certificate" (
- "id" TEXT NOT NULL,
- "privateKey" TEXT NOT NULL,
- "certificate" TEXT NOT NULL,
- "blacklisted" BOOLEAN NOT NULL DEFAULT false,
-
- CONSTRAINT "Certificate_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "Session" (
- "token" TEXT NOT NULL,
- "data" JSONB NOT NULL,
-
- CONSTRAINT "Session_pkey" PRIMARY KEY ("token")
-);
diff --git a/prisma/migrations/20250324014736_add_auth_mek_version/migration.sql b/prisma/migrations/20250324014736_add_auth_mek_version/migration.sql
deleted file mode 100644
index a6bdfb7..0000000
--- a/prisma/migrations/20250324014736_add_auth_mek_version/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "LinkedAuthMec" ADD COLUMN "version" INTEGER NOT NULL DEFAULT 1;
diff --git a/prisma/migrations/20250401082200_add_save_slots/migration.sql b/prisma/migrations/20250401082200_add_save_slots/migration.sql
deleted file mode 100644
index d55a36c..0000000
--- a/prisma/migrations/20250401082200_add_save_slots/migration.sql
+++ /dev/null
@@ -1,24 +0,0 @@
--- AlterEnum
-ALTER TYPE "ClientCapabilities" ADD VALUE 'save';
-
--- CreateTable
-CREATE TABLE "SaveSlot" (
- "gameId" TEXT NOT NULL,
- "userId" TEXT NOT NULL,
- "index" INTEGER NOT NULL,
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
- "playtime" DOUBLE PRECISION NOT NULL,
- "lastUsedClientId" TEXT NOT NULL,
- "data" TEXT[],
-
- CONSTRAINT "SaveSlot_pkey" PRIMARY KEY ("gameId","userId","index")
-);
-
--- AddForeignKey
-ALTER TABLE "SaveSlot" ADD CONSTRAINT "SaveSlot_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "SaveSlot" ADD CONSTRAINT "SaveSlot_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "SaveSlot" ADD CONSTRAINT "SaveSlot_lastUsedClientId_fkey" FOREIGN KEY ("lastUsedClientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250401082605_add_save_slot_limits_to_application_settings/migration.sql b/prisma/migrations/20250401082605_add_save_slot_limits_to_application_settings/migration.sql
deleted file mode 100644
index 158a843..0000000
--- a/prisma/migrations/20250401082605_add_save_slot_limits_to_application_settings/migration.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- AlterTable
-ALTER TABLE "ApplicationSettings" ADD COLUMN "saveSlotCountLimit" INTEGER NOT NULL DEFAULT 5,
-ADD COLUMN "saveSlotSizeLimit" DOUBLE PRECISION NOT NULL DEFAULT 10;
diff --git a/prisma/migrations/20250401083942_rename_save_to_cloud_saves/migration.sql b/prisma/migrations/20250401083942_rename_save_to_cloud_saves/migration.sql
deleted file mode 100644
index 50afe85..0000000
--- a/prisma/migrations/20250401083942_rename_save_to_cloud_saves/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Warnings:
-
- - The values [save] on the enum `ClientCapabilities` will be removed. If these variants are still used in the database, this will fail.
-
-*/
--- AlterEnum
-BEGIN;
-CREATE TYPE "ClientCapabilities_new" AS ENUM ('peerAPI', 'userStatus', 'cloudSaves');
-ALTER TABLE "Client" ALTER COLUMN "capabilities" TYPE "ClientCapabilities_new"[] USING ("capabilities"::text::"ClientCapabilities_new"[]);
-ALTER TYPE "ClientCapabilities" RENAME TO "ClientCapabilities_old";
-ALTER TYPE "ClientCapabilities_new" RENAME TO "ClientCapabilities";
-DROP TYPE "ClientCapabilities_old";
-COMMIT;
diff --git a/prisma/migrations/20250401084907_add_history_limit/migration.sql b/prisma/migrations/20250401084907_add_history_limit/migration.sql
deleted file mode 100644
index fca349d..0000000
--- a/prisma/migrations/20250401084907_add_history_limit/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "ApplicationSettings" ADD COLUMN "saveSlotHistoryLimit" INTEGER NOT NULL DEFAULT 3;
diff --git a/prisma/migrations/20250401085406_add_default_to_playtime/migration.sql b/prisma/migrations/20250401085406_add_default_to_playtime/migration.sql
deleted file mode 100644
index 2e48923..0000000
--- a/prisma/migrations/20250401085406_add_default_to_playtime/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "SaveSlot" ALTER COLUMN "playtime" SET DEFAULT 0;
diff --git a/prisma/migrations/20250401091937_add_history_and_hashes/migration.sql b/prisma/migrations/20250401091937_add_history_and_hashes/migration.sql
deleted file mode 100644
index 1c39120..0000000
--- a/prisma/migrations/20250401091937_add_history_and_hashes/migration.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `data` on the `SaveSlot` table. All the data in the column will be lost.
-
-*/
--- AlterTable
-ALTER TABLE "SaveSlot" DROP COLUMN "data",
-ADD COLUMN "history" TEXT[],
-ADD COLUMN "historyChecksums" TEXT[];
diff --git a/prisma/migrations/20250403233442_apply_store_changes/migration.sql b/prisma/migrations/20250403233442_apply_store_changes/migration.sql
deleted file mode 100644
index 2a71099..0000000
--- a/prisma/migrations/20250403233442_apply_store_changes/migration.sql
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `expiresAt` to the `Session` table without a default value. This is not possible if the table is not empty.
- - Added the required column `userId` to the `Session` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Session" ADD COLUMN "expiresAt" TIMESTAMP(3) NOT NULL,
-ADD COLUMN "userId" TEXT NOT NULL;
-
--- AddForeignKey
-ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250405062945_make_last_accessed_optional_on_save_slots/migration.sql b/prisma/migrations/20250405062945_make_last_accessed_optional_on_save_slots/migration.sql
deleted file mode 100644
index fef07e3..0000000
--- a/prisma/migrations/20250405062945_make_last_accessed_optional_on_save_slots/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- DropForeignKey
-ALTER TABLE "SaveSlot" DROP CONSTRAINT "SaveSlot_lastUsedClientId_fkey";
-
--- AlterTable
-ALTER TABLE "SaveSlot" ALTER COLUMN "lastUsedClientId" DROP NOT NULL;
-
--- AddForeignKey
-ALTER TABLE "SaveSlot" ADD CONSTRAINT "SaveSlot_lastUsedClientId_fkey" FOREIGN KEY ("lastUsedClientId") REFERENCES "Client"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250407090729_add_client_token_mode/migration.sql b/prisma/migrations/20250407090729_add_client_token_mode/migration.sql
deleted file mode 100644
index 3af3976..0000000
--- a/prisma/migrations/20250407090729_add_client_token_mode/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterEnum
-ALTER TYPE "APITokenMode" ADD VALUE 'Client';
diff --git a/prisma/migrations/20250407091012_add_client_token_field_to_apitoken/migration.sql b/prisma/migrations/20250407091012_add_client_token_field_to_apitoken/migration.sql
deleted file mode 100644
index 406edd4..0000000
--- a/prisma/migrations/20250407091012_add_client_token_field_to_apitoken/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- AlterTable
-ALTER TABLE "APIToken" ADD COLUMN "clientId" TEXT;
-
--- AddForeignKey
-ALTER TABLE "APIToken" ADD CONSTRAINT "APIToken_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250414002714_add_object_hash/migration.sql b/prisma/migrations/20250414002714_add_object_hash/migration.sql
deleted file mode 100644
index b0c17b0..0000000
--- a/prisma/migrations/20250414002714_add_object_hash/migration.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- CreateTable
-CREATE TABLE "ObjectHash" (
- "id" TEXT NOT NULL,
- "hash" TEXT NOT NULL,
-
- CONSTRAINT "ObjectHash_pkey" PRIMARY KEY ("id")
-);
diff --git a/prisma/migrations/20250507120031_add_openid_authmek/migration.sql b/prisma/migrations/20250507120031_add_openid_authmek/migration.sql
deleted file mode 100644
index c48e6a0..0000000
--- a/prisma/migrations/20250507120031_add_openid_authmek/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterEnum
-ALTER TYPE "AuthMec" ADD VALUE 'OpenID';
diff --git a/prisma/migrations/20250507223112_remove_authentication_option_from_applicationsettings/migration.sql b/prisma/migrations/20250507223112_remove_authentication_option_from_applicationsettings/migration.sql
deleted file mode 100644
index 0397f5f..0000000
--- a/prisma/migrations/20250507223112_remove_authentication_option_from_applicationsettings/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `enabledAuthencationMechanisms` on the `ApplicationSettings` table. All the data in the column will be lost.
-
-*/
--- AlterTable
-ALTER TABLE "ApplicationSettings" DROP COLUMN "enabledAuthencationMechanisms";
diff --git a/prisma/migrations/20250508153613_add_screenshots/migration.sql b/prisma/migrations/20250508153613_add_screenshots/migration.sql
deleted file mode 100644
index 08869af..0000000
--- a/prisma/migrations/20250508153613_add_screenshots/migration.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- CreateTable
-CREATE TABLE "Screenshot" (
- "id" TEXT NOT NULL,
- "gameId" TEXT NOT NULL,
- "userId" TEXT NOT NULL,
- "objectId" TEXT NOT NULL,
- "private" BOOLEAN NOT NULL DEFAULT true,
- "createdAt" TIMESTAMPTZ(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-
- CONSTRAINT "Screenshot_pkey" PRIMARY KEY ("id")
-);
-
--- CreateIndex
-CREATE INDEX "Screenshot_gameId_userId_idx" ON "Screenshot"("gameId", "userId");
-
--- AddForeignKey
-ALTER TABLE "Screenshot" ADD CONSTRAINT "Screenshot_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "Screenshot" ADD CONSTRAINT "Screenshot_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250508224553_cleanup_old_objects/migration.sql b/prisma/migrations/20250508224553_cleanup_old_objects/migration.sql
deleted file mode 100644
index 2de26c3..0000000
--- a/prisma/migrations/20250508224553_cleanup_old_objects/migration.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-
--- Rename game table columns
-ALTER TABLE "Game" RENAME COLUMN "mIconId" TO "mIconObjectId";
-ALTER TABLE "Game" RENAME COLUMN "mBannerId" TO "mBannerObjectId";
-ALTER TABLE "Game" RENAME COLUMN "mCoverId" TO "mCoverObjectId";
-ALTER TABLE "Game" RENAME COLUMN "mImageCarousel" TO "mImageCarouselObjectIds";
-ALTER TABLE "Game" RENAME COLUMN "mImageLibrary" TO "mImageLibraryObjectIds";
-
--- Rename saveslot table columns
-ALTER TABLE "SaveSlot" RENAME COLUMN "history" TO "historyObjectIds";
-
--- Rename article table columns
-ALTER TABLE "Article" RENAME COLUMN "image" TO "imageObjectId";
-
--- Rename user table columns
-ALTER TABLE "User" RENAME COLUMN "profilePicture" TO "profilePictureObjectId";
diff --git a/prisma/migrations/20250509003340_init_unified_company_metadata/migration.sql b/prisma/migrations/20250509003340_init_unified_company_metadata/migration.sql
deleted file mode 100644
index ac49e82..0000000
--- a/prisma/migrations/20250509003340_init_unified_company_metadata/migration.sql
+++ /dev/null
@@ -1,35 +0,0 @@
--- CreateTable
-CREATE TABLE "Company" (
- "id" TEXT NOT NULL,
- "metadataSource" "MetadataSource" NOT NULL,
- "metadataId" TEXT NOT NULL,
- "metadataOriginalQuery" TEXT NOT NULL,
- "mName" TEXT NOT NULL,
- "mShortDescription" TEXT NOT NULL,
- "mDescription" TEXT NOT NULL,
- "mLogoObjectId" TEXT NOT NULL,
- "mBannerObjectId" TEXT NOT NULL,
- "mWebsite" TEXT NOT NULL,
-
- CONSTRAINT "Company_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "CompanyGameRelation" (
- "companyId" TEXT NOT NULL,
- "gameId" TEXT NOT NULL,
- "developer" BOOLEAN NOT NULL DEFAULT false,
- "publisher" BOOLEAN NOT NULL DEFAULT false
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "Company_metadataSource_metadataId_key" ON "Company"("metadataSource", "metadataId");
-
--- CreateIndex
-CREATE UNIQUE INDEX "CompanyGameRelation_companyId_gameId_key" ON "CompanyGameRelation"("companyId", "gameId");
-
--- AddForeignKey
-ALTER TABLE "CompanyGameRelation" ADD CONSTRAINT "CompanyGameRelation_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "CompanyGameRelation" ADD CONSTRAINT "CompanyGameRelation_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250510013650_remove_devlopers_and_publishers/migration.sql b/prisma/migrations/20250510013650_remove_devlopers_and_publishers/migration.sql
deleted file mode 100644
index 00fb46d..0000000
--- a/prisma/migrations/20250510013650_remove_devlopers_and_publishers/migration.sql
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the `CompanyGameRelation` table. If the table is not empty, all the data it contains will be lost.
- - You are about to drop the `Developer` table. If the table is not empty, all the data it contains will be lost.
- - You are about to drop the `Publisher` table. If the table is not empty, all the data it contains will be lost.
- - You are about to drop the `_DeveloperToGame` table. If the table is not empty, all the data it contains will be lost.
- - You are about to drop the `_GameToPublisher` table. If the table is not empty, all the data it contains will be lost.
-
-*/
--- DropForeignKey
-ALTER TABLE "CompanyGameRelation" DROP CONSTRAINT "CompanyGameRelation_companyId_fkey";
-
--- DropForeignKey
-ALTER TABLE "CompanyGameRelation" DROP CONSTRAINT "CompanyGameRelation_gameId_fkey";
-
--- DropForeignKey
-ALTER TABLE "_DeveloperToGame" DROP CONSTRAINT "_DeveloperToGame_A_fkey";
-
--- DropForeignKey
-ALTER TABLE "_DeveloperToGame" DROP CONSTRAINT "_DeveloperToGame_B_fkey";
-
--- DropForeignKey
-ALTER TABLE "_GameToPublisher" DROP CONSTRAINT "_GameToPublisher_A_fkey";
-
--- DropForeignKey
-ALTER TABLE "_GameToPublisher" DROP CONSTRAINT "_GameToPublisher_B_fkey";
-
--- DropTable
-DROP TABLE "CompanyGameRelation";
-
--- DropTable
-DROP TABLE "Developer";
-
--- DropTable
-DROP TABLE "Publisher";
-
--- DropTable
-DROP TABLE "_DeveloperToGame";
-
--- DropTable
-DROP TABLE "_GameToPublisher";
-
--- CreateTable
-CREATE TABLE "_developers" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL,
-
- CONSTRAINT "_developers_AB_pkey" PRIMARY KEY ("A","B")
-);
-
--- CreateTable
-CREATE TABLE "_publishers" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL,
-
- CONSTRAINT "_publishers_AB_pkey" PRIMARY KEY ("A","B")
-);
-
--- CreateIndex
-CREATE INDEX "_developers_B_index" ON "_developers"("B");
-
--- CreateIndex
-CREATE INDEX "_publishers_B_index" ON "_publishers"("B");
-
--- AddForeignKey
-ALTER TABLE "_developers" ADD CONSTRAINT "_developers_A_fkey" FOREIGN KEY ("A") REFERENCES "Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_developers" ADD CONSTRAINT "_developers_B_fkey" FOREIGN KEY ("B") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_publishers" ADD CONSTRAINT "_publishers_A_fkey" FOREIGN KEY ("A") REFERENCES "Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_publishers" ADD CONSTRAINT "_publishers_B_fkey" FOREIGN KEY ("B") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250511154134_add_tags_to_games/migration.sql b/prisma/migrations/20250511154134_add_tags_to_games/migration.sql
deleted file mode 100644
index fb10131..0000000
--- a/prisma/migrations/20250511154134_add_tags_to_games/migration.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- CreateTable
-CREATE TABLE "_GameToTag" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL,
-
- CONSTRAINT "_GameToTag_AB_pkey" PRIMARY KEY ("A","B")
-);
-
--- CreateIndex
-CREATE INDEX "_GameToTag_B_index" ON "_GameToTag"("B");
-
--- AddForeignKey
-ALTER TABLE "_GameToTag" ADD CONSTRAINT "_GameToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_GameToTag" ADD CONSTRAINT "_GameToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250514193830_allow_notification_nonce_reuse_per_user/migration.sql b/prisma/migrations/20250514193830_allow_notification_nonce_reuse_per_user/migration.sql
deleted file mode 100644
index 035b237..0000000
--- a/prisma/migrations/20250514193830_allow_notification_nonce_reuse_per_user/migration.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Warnings:
-
- - A unique constraint covering the columns `[userId,nonce]` on the table `Notification` will be added. If there are existing duplicate values, this will fail.
-
-*/
--- DropIndex
-DROP INDEX "Notification_nonce_key";
-
--- CreateIndex
-CREATE UNIQUE INDEX "Notification_userId_nonce_key" ON "Notification"("userId", "nonce");
diff --git a/prisma/migrations/20250515021331_add_game_ratings/migration.sql b/prisma/migrations/20250515021331_add_game_ratings/migration.sql
deleted file mode 100644
index 52a2f5f..0000000
--- a/prisma/migrations/20250515021331_add_game_ratings/migration.sql
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `mReviewCount` on the `Game` table. All the data in the column will be lost.
- - You are about to drop the column `mReviewRating` on the `Game` table. All the data in the column will be lost.
-
-*/
--- AlterEnum
--- This migration adds more than one value to an enum.
--- With PostgreSQL versions 11 and earlier, this is not possible
--- in a single migration. This can be worked around by creating
--- multiple migrations, each migration adding only one value to
--- the enum.
-
-
-ALTER TYPE "MetadataSource" ADD VALUE 'Metacritic';
-ALTER TYPE "MetadataSource" ADD VALUE 'OpenCritic';
-
--- AlterTable
-ALTER TABLE "Game" DROP COLUMN "mReviewCount",
-DROP COLUMN "mReviewRating";
-
--- CreateTable
-CREATE TABLE "GameRating" (
- "id" TEXT NOT NULL,
- "metadataSource" "MetadataSource" NOT NULL,
- "metadataId" TEXT NOT NULL,
- "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
- "mReviewCount" INTEGER NOT NULL,
- "mReviewRating" DOUBLE PRECISION NOT NULL,
- "mReviewHref" TEXT,
- "gameId" TEXT NOT NULL,
-
- CONSTRAINT "GameRating_pkey" PRIMARY KEY ("id")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "GameRating_metadataSource_metadataId_key" ON "GameRating"("metadataSource", "metadataId");
-
--- AddForeignKey
-ALTER TABLE "GameRating" ADD CONSTRAINT "GameRating_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250515043254_add_acls_to_notifications/migration.sql b/prisma/migrations/20250515043254_add_acls_to_notifications/migration.sql
deleted file mode 100644
index 2f6fdd8..0000000
--- a/prisma/migrations/20250515043254_add_acls_to_notifications/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "Notification" ADD COLUMN "acls" TEXT[];
diff --git a/prisma/migrations/20250601022736_add_database_library/migration.sql b/prisma/migrations/20250601022736_add_database_library/migration.sql
deleted file mode 100644
index e51f2fa..0000000
--- a/prisma/migrations/20250601022736_add_database_library/migration.sql
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the `ClientPeerAPIConfiguration` table. If the table is not empty, all the data it contains will be lost.
-
-*/
--- CreateEnum
-CREATE TYPE "LibraryBackend" AS ENUM ('Filesystem');
-
--- AlterEnum
-ALTER TYPE "ClientCapabilities" ADD VALUE 'trackPlaytime';
-
--- DropForeignKey
-ALTER TABLE "ClientPeerAPIConfiguration" DROP CONSTRAINT "ClientPeerAPIConfiguration_clientId_fkey";
-
--- AlterTable
-ALTER TABLE "Screenshot" ALTER COLUMN "private" DROP DEFAULT;
-
--- DropTable
-DROP TABLE "ClientPeerAPIConfiguration";
-
--- CreateTable
-CREATE TABLE "Library" (
- "id" TEXT NOT NULL,
- "name" TEXT NOT NULL,
- "backend" "LibraryBackend" NOT NULL,
- "options" JSONB NOT NULL,
-
- CONSTRAINT "Library_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "Playtime" (
- "gameId" TEXT NOT NULL,
- "userId" TEXT NOT NULL,
- "seconds" INTEGER NOT NULL,
- "updatedAt" TIMESTAMPTZ(6) NOT NULL,
- "createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-
- CONSTRAINT "Playtime_pkey" PRIMARY KEY ("gameId","userId")
-);
-
--- CreateIndex
-CREATE INDEX "Playtime_userId_idx" ON "Playtime"("userId");
-
--- CreateIndex
-CREATE INDEX "Screenshot_userId_idx" ON "Screenshot"("userId");
-
--- AddForeignKey
-ALTER TABLE "Playtime" ADD CONSTRAINT "Playtime_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "Playtime" ADD CONSTRAINT "Playtime_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250601032211_add_library_relation_to_game/migration.sql b/prisma/migrations/20250601032211_add_library_relation_to_game/migration.sql
deleted file mode 100644
index e50aac1..0000000
--- a/prisma/migrations/20250601032211_add_library_relation_to_game/migration.sql
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-Warnings:
-
-- You are about to drop the column `libraryBasePath` on the `Game` table. All the data in the column will be lost.
-
-*/
--- DropIndex
-DROP INDEX "Game_libraryBasePath_key";
-
--- AlterTable
-ALTER TABLE "Game" RENAME COLUMN "libraryBasePath" TO "libraryPath";
-
-ALTER TABLE "Game" ADD COLUMN "libraryId" TEXT;
-
--- AddForeignKey
-ALTER TABLE "Game"
-ADD CONSTRAINT "Game_libraryId_fkey" FOREIGN KEY ("libraryId") REFERENCES "Library" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/prisma/migrations/20250601032938_add_unique_constraint/migration.sql b/prisma/migrations/20250601032938_add_unique_constraint/migration.sql
deleted file mode 100644
index f460020..0000000
--- a/prisma/migrations/20250601032938_add_unique_constraint/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - A unique constraint covering the columns `[libraryId,libraryPath]` on the table `Game` will be added. If there are existing duplicate values, this will fail.
-
-*/
--- CreateIndex
-CREATE UNIQUE INDEX "Game_libraryId_libraryPath_key" ON "Game"("libraryId", "libraryPath");
diff --git a/prisma/migrations/20250606013242_add_tasks_to_database/migration.sql b/prisma/migrations/20250606013242_add_tasks_to_database/migration.sql
deleted file mode 100644
index e3aa449..0000000
--- a/prisma/migrations/20250606013242_add_tasks_to_database/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
--- CreateTable
-CREATE TABLE "Task" (
- "id" TEXT NOT NULL,
- "taskGroup" TEXT NOT NULL,
- "started" TIMESTAMP(3) NOT NULL,
- "ended" TIMESTAMP(3) NOT NULL,
- "success" BOOLEAN NOT NULL,
- "error" JSONB,
- "progress" DOUBLE PRECISION NOT NULL,
- "log" TEXT[],
- "acls" TEXT[],
-
- CONSTRAINT "Task_pkey" PRIMARY KEY ("id")
-);
diff --git a/prisma/migrations/20250606023802_add_name_to_task/migration.sql b/prisma/migrations/20250606023802_add_name_to_task/migration.sql
deleted file mode 100644
index db4f781..0000000
--- a/prisma/migrations/20250606023802_add_name_to_task/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Warnings:
-
- - Added the required column `name` to the `Task` table without a default value. This is not possible if the table is not empty.
-
-*/
--- AlterTable
-ALTER TABLE "Task" ADD COLUMN "name" TEXT NOT NULL;
diff --git a/prisma/migrations/20250608010030_delete_user_cascade/migration.sql b/prisma/migrations/20250608010030_delete_user_cascade/migration.sql
deleted file mode 100644
index d9e569a..0000000
--- a/prisma/migrations/20250608010030_delete_user_cascade/migration.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- DropForeignKey
-ALTER TABLE "APIToken" DROP CONSTRAINT "APIToken_userId_fkey";
-
--- DropForeignKey
-ALTER TABLE "Article" DROP CONSTRAINT "Article_authorId_fkey";
-
--- DropForeignKey
-ALTER TABLE "Client" DROP CONSTRAINT "Client_userId_fkey";
-
--- DropForeignKey
-ALTER TABLE "Collection" DROP CONSTRAINT "Collection_userId_fkey";
-
--- DropForeignKey
-ALTER TABLE "LinkedAuthMec" DROP CONSTRAINT "LinkedAuthMec_userId_fkey";
-
--- DropForeignKey
-ALTER TABLE "Notification" DROP CONSTRAINT "Notification_userId_fkey";
-
--- DropForeignKey
-ALTER TABLE "Session" DROP CONSTRAINT "Session_userId_fkey";
-
--- AddForeignKey
-ALTER TABLE "LinkedAuthMec" ADD CONSTRAINT "LinkedAuthMec_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "APIToken" ADD CONSTRAINT "APIToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "Client" ADD CONSTRAINT "Client_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "Collection" ADD CONSTRAINT "Collection_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "Article" ADD CONSTRAINT "Article_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "Notification" ADD CONSTRAINT "Notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250621205541_add_show_title_description_on_game_panel/migration.sql b/prisma/migrations/20250621205541_add_show_title_description_on_game_panel/migration.sql
deleted file mode 100644
index c0cd66d..0000000
--- a/prisma/migrations/20250621205541_add_show_title_description_on_game_panel/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "ApplicationSettings" ADD COLUMN "showGamePanelTextDecoration" BOOLEAN NOT NULL DEFAULT true;
diff --git a/prisma/migrations/20250702102624_add_flat_fs_provider/migration.sql b/prisma/migrations/20250702102624_add_flat_fs_provider/migration.sql
deleted file mode 100644
index 355bd24..0000000
--- a/prisma/migrations/20250702102624_add_flat_fs_provider/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterEnum
-ALTER TYPE "LibraryBackend" ADD VALUE 'FlatFilesystem';
diff --git a/prisma/migrations/20250720070939_static_genres/migration.sql b/prisma/migrations/20250720070939_static_genres/migration.sql
deleted file mode 100644
index df31459..0000000
--- a/prisma/migrations/20250720070939_static_genres/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- CreateEnum
-CREATE TYPE "Genre" AS ENUM ('Action', 'Strategy', 'Sports', 'Adventure', 'Roleplay', 'Racing', 'Simulation', 'Educational', 'Fighting', 'Shooter', 'RealTimeStrategy', 'CardGame', 'BoardGame', 'Compilation', 'MMORPG', 'MinigameCollection', 'Puzzle', 'MusicRhythm');
-
--- AlterTable
-ALTER TABLE "Game" ADD COLUMN "genres" "Genre"[];
diff --git a/prisma/migrations/20250721053244_update_genre_names/migration.sql b/prisma/migrations/20250721053244_update_genre_names/migration.sql
deleted file mode 100644
index 63accfe..0000000
--- a/prisma/migrations/20250721053244_update_genre_names/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Warnings:
-
- - The values [RealTimeStrategy,CardGame,BoardGame,MinigameCollection,MusicRhythm] on the enum `Genre` will be removed. If these variants are still used in the database, this will fail.
-
-*/
--- AlterEnum
-BEGIN;
-CREATE TYPE "Genre_new" AS ENUM ('Action', 'Strategy', 'Sports', 'Adventure', 'Roleplay', 'Racing', 'Simulation', 'Educational', 'Fighting', 'Shooter', 'RTS', 'Card', 'Board', 'Compilation', 'MMORPG', 'Minigames', 'Puzzle', 'Rhythm');
-ALTER TABLE "Game" ALTER COLUMN "genres" TYPE "Genre_new"[] USING ("genres"::text::"Genre_new"[]);
-ALTER TYPE "Genre" RENAME TO "Genre_old";
-ALTER TYPE "Genre_new" RENAME TO "Genre";
-DROP TYPE "Genre_old";
-COMMIT;
diff --git a/prisma/migrations/20250721053514_add_featured/migration.sql b/prisma/migrations/20250721053514_add_featured/migration.sql
deleted file mode 100644
index 89aeeb4..0000000
--- a/prisma/migrations/20250721053514_add_featured/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- AlterTable
-ALTER TABLE "Game" ADD COLUMN "featured" BOOLEAN NOT NULL DEFAULT false;
diff --git a/prisma/migrations/20250721061200_remove_genres/migration.sql b/prisma/migrations/20250721061200_remove_genres/migration.sql
deleted file mode 100644
index 4f4f1df..0000000
--- a/prisma/migrations/20250721061200_remove_genres/migration.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the column `genres` on the `Game` table. All the data in the column will be lost.
-
-*/
--- AlterTable
-ALTER TABLE "Game" DROP COLUMN "genres";
-
--- DropEnum
-DROP TYPE "Genre";
diff --git a/prisma/migrations/20250721062509_add_pg_trgm/migration.sql b/prisma/migrations/20250721062509_add_pg_trgm/migration.sql
deleted file mode 100644
index 567fbd0..0000000
--- a/prisma/migrations/20250721062509_add_pg_trgm/migration.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Add pg_trgm
-CREATE EXTENSION pg_trgm;
-
--- Create index for tag names
--- CREATE INDEX trgm_tag_name ON "Tag" USING GIST (name gist_trgm_ops(siglen=32));
\ No newline at end of file
diff --git a/prisma/migrations/20250721063518_add_index_for_tag_name/migration.sql b/prisma/migrations/20250721063518_add_index_for_tag_name/migration.sql
deleted file mode 100644
index 02b93b5..0000000
--- a/prisma/migrations/20250721063518_add_index_for_tag_name/migration.sql
+++ /dev/null
@@ -1,2 +0,0 @@
--- CreateIndex
-CREATE INDEX "Tag_name_idx" ON "Tag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20250721070713_split_game_and_news_tags/migration.sql b/prisma/migrations/20250721070713_split_game_and_news_tags/migration.sql
deleted file mode 100644
index cbd80c5..0000000
--- a/prisma/migrations/20250721070713_split_game_and_news_tags/migration.sql
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- Warnings:
-
- - You are about to drop the `Tag` table. If the table is not empty, all the data it contains will be lost.
- - You are about to drop the `_ArticleToTag` table. If the table is not empty, all the data it contains will be lost.
- - You are about to drop the `_GameToTag` table. If the table is not empty, all the data it contains will be lost.
-
-*/
--- DropForeignKey
-ALTER TABLE "_ArticleToTag" DROP CONSTRAINT "_ArticleToTag_A_fkey";
-
--- DropForeignKey
-ALTER TABLE "_ArticleToTag" DROP CONSTRAINT "_ArticleToTag_B_fkey";
-
--- DropForeignKey
-ALTER TABLE "_GameToTag" DROP CONSTRAINT "_GameToTag_A_fkey";
-
--- DropForeignKey
-ALTER TABLE "_GameToTag" DROP CONSTRAINT "_GameToTag_B_fkey";
-
--- DropTable
-DROP TABLE "Tag";
-
--- DropTable
-DROP TABLE "_ArticleToTag";
-
--- DropTable
-DROP TABLE "_GameToTag";
-
--- CreateTable
-CREATE TABLE "GameTag" (
- "id" TEXT NOT NULL,
- "name" TEXT NOT NULL,
-
- CONSTRAINT "GameTag_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "NewsTag" (
- "id" TEXT NOT NULL,
- "name" TEXT NOT NULL,
-
- CONSTRAINT "NewsTag_pkey" PRIMARY KEY ("id")
-);
-
--- CreateTable
-CREATE TABLE "_GameToGameTag" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL,
-
- CONSTRAINT "_GameToGameTag_AB_pkey" PRIMARY KEY ("A","B")
-);
-
--- CreateTable
-CREATE TABLE "_ArticleToNewsTag" (
- "A" TEXT NOT NULL,
- "B" TEXT NOT NULL,
-
- CONSTRAINT "_ArticleToNewsTag_AB_pkey" PRIMARY KEY ("A","B")
-);
-
--- CreateIndex
-CREATE UNIQUE INDEX "GameTag_name_key" ON "GameTag"("name");
-
--- CreateIndex
-CREATE INDEX "GameTag_name_idx" ON "GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
-
--- CreateIndex
-CREATE UNIQUE INDEX "NewsTag_name_key" ON "NewsTag"("name");
-
--- CreateIndex
-CREATE INDEX "_GameToGameTag_B_index" ON "_GameToGameTag"("B");
-
--- CreateIndex
-CREATE INDEX "_ArticleToNewsTag_B_index" ON "_ArticleToNewsTag"("B");
-
--- AddForeignKey
-ALTER TABLE "_GameToGameTag" ADD CONSTRAINT "_GameToGameTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_GameToGameTag" ADD CONSTRAINT "_GameToGameTag_B_fkey" FOREIGN KEY ("B") REFERENCES "GameTag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_ArticleToNewsTag" ADD CONSTRAINT "_ArticleToNewsTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE "_ArticleToNewsTag" ADD CONSTRAINT "_ArticleToNewsTag_B_fkey" FOREIGN KEY ("B") REFERENCES "NewsTag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250801035031_add_delete_casacde/migration.sql b/prisma/migrations/20250801035031_add_delete_casacde/migration.sql
deleted file mode 100644
index 645377a..0000000
--- a/prisma/migrations/20250801035031_add_delete_casacde/migration.sql
+++ /dev/null
@@ -1,11 +0,0 @@
--- DropForeignKey
-ALTER TABLE "Game" DROP CONSTRAINT "Game_libraryId_fkey";
-
--- DropIndex
-DROP INDEX "GameTag_name_idx";
-
--- CreateIndex
-CREATE INDEX "GameTag_name_idx" ON "GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
-
--- AddForeignKey
-ALTER TABLE "Game" ADD CONSTRAINT "Game_libraryId_fkey" FOREIGN KEY ("libraryId") REFERENCES "Library"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250815014713_use_task_id_started_composite_id/migration.sql b/prisma/migrations/20250815014713_use_task_id_started_composite_id/migration.sql
deleted file mode 100644
index 7f096a1..0000000
--- a/prisma/migrations/20250815014713_use_task_id_started_composite_id/migration.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- Warnings:
-
- - The primary key for the `Task` table will be changed. If it partially fails, the table could be left without primary key constraint.
-
-*/
--- DropIndex
-DROP INDEX "GameTag_name_idx";
-
--- AlterTable
-ALTER TABLE "Task" DROP CONSTRAINT "Task_pkey",
-ADD CONSTRAINT "Task_pkey" PRIMARY KEY ("id", "started");
-
--- CreateIndex
-CREATE INDEX "GameTag_name_idx" ON "GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20250823005001_add_api_token_expiry/migration.sql b/prisma/migrations/20250823005001_add_api_token_expiry/migration.sql
deleted file mode 100644
index c028e99..0000000
--- a/prisma/migrations/20250823005001_add_api_token_expiry/migration.sql
+++ /dev/null
@@ -1,8 +0,0 @@
--- DropIndex
-DROP INDEX "GameTag_name_idx";
-
--- AlterTable
-ALTER TABLE "APIToken" ADD COLUMN "expiresAt" TIMESTAMP(3);
-
--- CreateIndex
-CREATE INDEX "GameTag_name_idx" ON "GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20250906060327_init/migration.sql b/prisma/migrations/20250906060327_init/migration.sql
new file mode 100644
index 0000000..021b5cb
--- /dev/null
+++ b/prisma/migrations/20250906060327_init/migration.sql
@@ -0,0 +1,765 @@
+
+-- enable pg_trgm
+CREATE EXTENSION pg_trgm;
+
+-- CreateEnum
+CREATE TYPE "public"."Platform" AS ENUM ('windows', 'linux', 'macos');
+
+-- CreateEnum
+CREATE TYPE "public"."LibraryBackend" AS ENUM ('Filesystem', 'FlatFilesystem');
+
+-- CreateEnum
+CREATE TYPE "public"."LibraryMode" AS ENUM ('Game', 'Redist', 'DLC', 'Mod');
+
+-- CreateEnum
+CREATE TYPE "public"."AuthMec" AS ENUM ('Simple', 'OpenID');
+
+-- CreateEnum
+CREATE TYPE "public"."APITokenMode" AS ENUM ('User', 'System', 'Client');
+
+-- CreateEnum
+CREATE TYPE "public"."ClientCapabilities" AS ENUM ('peerAPI', 'userStatus', 'cloudSaves', 'trackPlaytime');
+
+-- CreateEnum
+CREATE TYPE "public"."HardwarePlatform" AS ENUM ('windows', 'linux', 'macos');
+
+-- CreateEnum
+CREATE TYPE "public"."MetadataSource" AS ENUM ('Manual', 'GiantBomb', 'PCGamingWiki', 'IGDB', 'Metacritic', 'OpenCritic');
+
+-- CreateTable
+CREATE TABLE "public"."ApplicationSettings" (
+ "timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "metadataProviders" TEXT[],
+ "saveSlotCountLimit" INTEGER NOT NULL DEFAULT 5,
+ "saveSlotSizeLimit" DOUBLE PRECISION NOT NULL DEFAULT 10,
+ "saveSlotHistoryLimit" INTEGER NOT NULL DEFAULT 3,
+ "showGamePanelTextDecoration" BOOLEAN NOT NULL DEFAULT true,
+
+ CONSTRAINT "ApplicationSettings_pkey" PRIMARY KEY ("timestamp")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Library" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "backend" "public"."LibraryBackend" NOT NULL,
+ "options" JSONB NOT NULL,
+ "mode" "public"."LibraryMode" NOT NULL DEFAULT 'Game',
+
+ CONSTRAINT "Library_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."LinkedAuthMec" (
+ "userId" TEXT NOT NULL,
+ "mec" "public"."AuthMec" NOT NULL,
+ "enabled" BOOLEAN NOT NULL DEFAULT true,
+ "version" INTEGER NOT NULL DEFAULT 1,
+ "credentials" JSONB NOT NULL,
+
+ CONSTRAINT "LinkedAuthMec_pkey" PRIMARY KEY ("userId","mec")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Invitation" (
+ "id" TEXT NOT NULL,
+ "isAdmin" BOOLEAN NOT NULL DEFAULT false,
+ "username" TEXT,
+ "email" TEXT,
+ "expires" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Invitation_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."APIToken" (
+ "id" TEXT NOT NULL,
+ "token" TEXT NOT NULL,
+ "mode" "public"."APITokenMode" NOT NULL,
+ "name" TEXT NOT NULL,
+ "userId" TEXT,
+ "clientId" TEXT,
+ "acls" TEXT[],
+ "expiresAt" TIMESTAMP(3),
+
+ CONSTRAINT "APIToken_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Certificate" (
+ "id" TEXT NOT NULL,
+ "privateKey" TEXT NOT NULL,
+ "certificate" TEXT NOT NULL,
+ "blacklisted" BOOLEAN NOT NULL DEFAULT false,
+
+ CONSTRAINT "Certificate_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Session" (
+ "token" TEXT NOT NULL,
+ "expiresAt" TIMESTAMP(3) NOT NULL,
+ "userId" TEXT NOT NULL,
+ "data" JSONB NOT NULL,
+
+ CONSTRAINT "Session_pkey" PRIMARY KEY ("token")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Client" (
+ "id" TEXT NOT NULL,
+ "userId" TEXT NOT NULL,
+ "capabilities" "public"."ClientCapabilities"[],
+ "name" TEXT NOT NULL,
+ "platform" "public"."HardwarePlatform" NOT NULL,
+ "lastConnected" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Client_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Collection" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "isDefault" BOOLEAN NOT NULL DEFAULT false,
+ "userId" TEXT NOT NULL,
+
+ CONSTRAINT "Collection_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."CollectionEntry" (
+ "collectionId" TEXT NOT NULL,
+ "gameId" TEXT NOT NULL,
+
+ CONSTRAINT "CollectionEntry_pkey" PRIMARY KEY ("collectionId","gameId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."UserPlatform" (
+ "id" TEXT NOT NULL,
+ "platformName" TEXT NOT NULL,
+ "iconSvg" TEXT NOT NULL,
+ "fileExtensions" TEXT[] DEFAULT ARRAY[]::TEXT[],
+ "redistId" TEXT,
+
+ CONSTRAINT "UserPlatform_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."PlatformLink" (
+ "id" TEXT NOT NULL,
+ "platform" "public"."HardwarePlatform",
+ "userPlatformId" TEXT,
+
+ CONSTRAINT "PlatformLink_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."LaunchOption" (
+ "launchId" TEXT NOT NULL,
+ "versionId" TEXT NOT NULL,
+ "launchGId" TEXT,
+ "installGId" TEXT,
+ "uninstallGId" TEXT,
+ "name" TEXT NOT NULL,
+ "description" TEXT NOT NULL,
+ "command" TEXT NOT NULL,
+ "args" TEXT NOT NULL DEFAULT '',
+
+ CONSTRAINT "LaunchOption_pkey" PRIMARY KEY ("launchId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Version" (
+ "versionId" TEXT NOT NULL,
+ "versionPath" TEXT NOT NULL,
+ "versionName" TEXT NOT NULL,
+ "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "gameId" TEXT,
+ "redistId" TEXT,
+ "dlcId" TEXT,
+ "modId" TEXT,
+ "dropletManifest" JSONB NOT NULL,
+
+ CONSTRAINT "Version_pkey" PRIMARY KEY ("versionId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."GameVersion" (
+ "versionId" TEXT NOT NULL,
+ "installId" TEXT,
+ "uninstallId" TEXT,
+ "onlySetup" BOOLEAN NOT NULL DEFAULT false,
+ "umuIdOverride" TEXT,
+ "versionIndex" INTEGER NOT NULL,
+ "delta" BOOLEAN NOT NULL DEFAULT false,
+ "hidden" BOOLEAN NOT NULL DEFAULT false,
+ "platformId" TEXT NOT NULL,
+
+ CONSTRAINT "GameVersion_pkey" PRIMARY KEY ("versionId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."DLCVersion" (
+ "versionId" TEXT NOT NULL,
+ "platformId" TEXT NOT NULL,
+
+ CONSTRAINT "DLCVersion_pkey" PRIMARY KEY ("versionId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."RedistVersion" (
+ "versionId" TEXT NOT NULL,
+ "platformId" TEXT NOT NULL,
+
+ CONSTRAINT "RedistVersion_pkey" PRIMARY KEY ("versionId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."ModVersion" (
+ "versionId" TEXT NOT NULL,
+ "dependencies" TEXT[],
+ "platformId" TEXT NOT NULL,
+
+ CONSTRAINT "ModVersion_pkey" PRIMARY KEY ("versionId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."SaveSlot" (
+ "gameId" TEXT NOT NULL,
+ "userId" TEXT NOT NULL,
+ "index" INTEGER NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "playtime" DOUBLE PRECISION NOT NULL DEFAULT 0,
+ "lastUsedClientId" TEXT,
+ "historyObjectIds" TEXT[],
+ "historyChecksums" TEXT[],
+
+ CONSTRAINT "SaveSlot_pkey" PRIMARY KEY ("gameId","userId","index")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Screenshot" (
+ "id" TEXT NOT NULL,
+ "gameId" TEXT NOT NULL,
+ "userId" TEXT NOT NULL,
+ "objectId" TEXT NOT NULL,
+ "private" BOOLEAN NOT NULL,
+ "createdAt" TIMESTAMPTZ(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "Screenshot_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Playtime" (
+ "gameId" TEXT NOT NULL,
+ "userId" TEXT NOT NULL,
+ "seconds" INTEGER NOT NULL,
+ "updatedAt" TIMESTAMPTZ(6) NOT NULL,
+ "createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "Playtime_pkey" PRIMARY KEY ("gameId","userId")
+);
+
+-- CreateTable
+CREATE TABLE "public"."ObjectHash" (
+ "id" TEXT NOT NULL,
+ "hash" TEXT NOT NULL,
+
+ CONSTRAINT "ObjectHash_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Game" (
+ "id" TEXT NOT NULL,
+ "metadataSource" "public"."MetadataSource" NOT NULL,
+ "metadataId" TEXT NOT NULL,
+ "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "mName" TEXT NOT NULL,
+ "mShortDescription" TEXT NOT NULL,
+ "mDescription" TEXT NOT NULL,
+ "mReleased" TIMESTAMP(3) NOT NULL,
+ "featured" BOOLEAN NOT NULL DEFAULT false,
+ "mIconObjectId" TEXT NOT NULL,
+ "mBannerObjectId" TEXT NOT NULL,
+ "mCoverObjectId" TEXT NOT NULL,
+ "mImageCarouselObjectIds" TEXT[],
+ "mImageLibraryObjectIds" TEXT[],
+ "libraryId" TEXT NOT NULL,
+ "libraryPath" TEXT NOT NULL,
+
+ CONSTRAINT "Game_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."DLC" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "description" TEXT NOT NULL,
+ "iconObjectId" TEXT NOT NULL,
+ "libraryId" TEXT NOT NULL,
+ "libraryPath" TEXT NOT NULL,
+
+ CONSTRAINT "DLC_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."GameDLCMetadata" (
+ "id" TEXT NOT NULL,
+ "mName" TEXT NOT NULL,
+ "mShortDescription" TEXT NOT NULL,
+ "mDescription" TEXT NOT NULL,
+ "mIconObjectId" TEXT NOT NULL,
+ "mBannerObjectId" TEXT NOT NULL,
+ "mCoverObjectId" TEXT NOT NULL,
+ "mImageCarouselObjectIds" TEXT[],
+ "mImageLibraryObjectIds" TEXT[],
+
+ CONSTRAINT "GameDLCMetadata_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Redist" (
+ "id" TEXT NOT NULL,
+ "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "mName" TEXT NOT NULL,
+ "mShortDescription" TEXT NOT NULL,
+ "mIconObjectId" TEXT NOT NULL,
+ "libraryId" TEXT NOT NULL,
+ "libraryPath" TEXT NOT NULL,
+
+ CONSTRAINT "Redist_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Mod" (
+ "id" TEXT NOT NULL,
+ "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "gameId" TEXT NOT NULL,
+ "user" BOOLEAN NOT NULL DEFAULT true,
+ "mName" TEXT NOT NULL,
+ "mShortDescription" TEXT NOT NULL,
+ "mDescription" TEXT NOT NULL,
+ "mReleased" TIMESTAMP(3) NOT NULL,
+ "mIconObjectId" TEXT NOT NULL,
+ "mBannerObjectId" TEXT NOT NULL,
+ "mCoverObjectId" TEXT NOT NULL,
+ "mImageCarouselObjectIds" TEXT[],
+ "mImageLibraryObjectIds" TEXT[],
+ "libraryId" TEXT NOT NULL,
+ "libraryPath" TEXT NOT NULL,
+
+ CONSTRAINT "Mod_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."GameTag" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+
+ CONSTRAINT "GameTag_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."GameRating" (
+ "id" TEXT NOT NULL,
+ "metadataSource" "public"."MetadataSource" NOT NULL,
+ "metadataId" TEXT NOT NULL,
+ "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "mReviewCount" INTEGER NOT NULL,
+ "mReviewRating" DOUBLE PRECISION NOT NULL,
+ "mReviewHref" TEXT,
+ "gameId" TEXT NOT NULL,
+
+ CONSTRAINT "GameRating_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Company" (
+ "id" TEXT NOT NULL,
+ "metadataSource" "public"."MetadataSource" NOT NULL,
+ "metadataId" TEXT NOT NULL,
+ "metadataOriginalQuery" TEXT NOT NULL,
+ "mName" TEXT NOT NULL,
+ "mShortDescription" TEXT NOT NULL,
+ "mDescription" TEXT NOT NULL,
+ "mLogoObjectId" TEXT NOT NULL,
+ "mBannerObjectId" TEXT NOT NULL,
+ "mWebsite" TEXT NOT NULL,
+
+ CONSTRAINT "Company_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."NewsTag" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+
+ CONSTRAINT "NewsTag_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Article" (
+ "id" TEXT NOT NULL,
+ "title" TEXT NOT NULL,
+ "description" TEXT NOT NULL,
+ "content" TEXT NOT NULL,
+ "imageObjectId" TEXT,
+ "publishedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "authorId" TEXT,
+
+ CONSTRAINT "Article_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Task" (
+ "id" TEXT NOT NULL,
+ "taskGroup" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "started" TIMESTAMP(3) NOT NULL,
+ "ended" TIMESTAMP(3) NOT NULL,
+ "success" BOOLEAN NOT NULL,
+ "error" JSONB,
+ "progress" DOUBLE PRECISION NOT NULL,
+ "log" TEXT[],
+ "acls" TEXT[],
+
+ CONSTRAINT "Task_pkey" PRIMARY KEY ("id","started")
+);
+
+-- CreateTable
+CREATE TABLE "public"."User" (
+ "id" TEXT NOT NULL,
+ "username" TEXT NOT NULL,
+ "admin" BOOLEAN NOT NULL DEFAULT false,
+ "enabled" BOOLEAN NOT NULL DEFAULT true,
+ "email" TEXT NOT NULL,
+ "displayName" TEXT NOT NULL,
+ "profilePictureObjectId" TEXT NOT NULL,
+
+ CONSTRAINT "User_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."Notification" (
+ "id" TEXT NOT NULL,
+ "nonce" TEXT,
+ "userId" TEXT NOT NULL,
+ "acls" TEXT[],
+ "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "title" TEXT NOT NULL,
+ "description" TEXT NOT NULL,
+ "actions" TEXT[],
+ "read" BOOLEAN NOT NULL DEFAULT false,
+
+ CONSTRAINT "Notification_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "public"."_GameVersionToRedistVersion" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_GameVersionToRedistVersion_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateTable
+CREATE TABLE "public"."_DLCVersionToRedistVersion" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_DLCVersionToRedistVersion_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateTable
+CREATE TABLE "public"."_GameToGameTag" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_GameToGameTag_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateTable
+CREATE TABLE "public"."_GameTagToMod" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_GameTagToMod_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateTable
+CREATE TABLE "public"."_developers" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_developers_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateTable
+CREATE TABLE "public"."_publishers" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_publishers_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateTable
+CREATE TABLE "public"."_ArticleToNewsTag" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_ArticleToNewsTag_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "APIToken_token_key" ON "public"."APIToken"("token");
+
+-- CreateIndex
+CREATE INDEX "APIToken_token_idx" ON "public"."APIToken"("token");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "UserPlatform_redistId_key" ON "public"."UserPlatform"("redistId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "LaunchOption_installGId_key" ON "public"."LaunchOption"("installGId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "LaunchOption_uninstallGId_key" ON "public"."LaunchOption"("uninstallGId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Version_versionId_key" ON "public"."Version"("versionId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "GameVersion_installId_key" ON "public"."GameVersion"("installId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "GameVersion_uninstallId_key" ON "public"."GameVersion"("uninstallId");
+
+-- CreateIndex
+CREATE INDEX "Screenshot_gameId_userId_idx" ON "public"."Screenshot"("gameId", "userId");
+
+-- CreateIndex
+CREATE INDEX "Screenshot_userId_idx" ON "public"."Screenshot"("userId");
+
+-- CreateIndex
+CREATE INDEX "Playtime_userId_idx" ON "public"."Playtime"("userId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Game_metadataSource_metadataId_key" ON "public"."Game"("metadataSource", "metadataId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Game_libraryId_libraryPath_key" ON "public"."Game"("libraryId", "libraryPath");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Redist_libraryId_libraryPath_key" ON "public"."Redist"("libraryId", "libraryPath");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "GameTag_name_key" ON "public"."GameTag"("name");
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
+
+-- CreateIndex
+CREATE UNIQUE INDEX "GameRating_metadataSource_metadataId_key" ON "public"."GameRating"("metadataSource", "metadataId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Company_metadataSource_metadataId_key" ON "public"."Company"("metadataSource", "metadataId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "NewsTag_name_key" ON "public"."NewsTag"("name");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "User_username_key" ON "public"."User"("username");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Notification_userId_nonce_key" ON "public"."Notification"("userId", "nonce");
+
+-- CreateIndex
+CREATE INDEX "_GameVersionToRedistVersion_B_index" ON "public"."_GameVersionToRedistVersion"("B");
+
+-- CreateIndex
+CREATE INDEX "_DLCVersionToRedistVersion_B_index" ON "public"."_DLCVersionToRedistVersion"("B");
+
+-- CreateIndex
+CREATE INDEX "_GameToGameTag_B_index" ON "public"."_GameToGameTag"("B");
+
+-- CreateIndex
+CREATE INDEX "_GameTagToMod_B_index" ON "public"."_GameTagToMod"("B");
+
+-- CreateIndex
+CREATE INDEX "_developers_B_index" ON "public"."_developers"("B");
+
+-- CreateIndex
+CREATE INDEX "_publishers_B_index" ON "public"."_publishers"("B");
+
+-- CreateIndex
+CREATE INDEX "_ArticleToNewsTag_B_index" ON "public"."_ArticleToNewsTag"("B");
+
+-- AddForeignKey
+ALTER TABLE "public"."LinkedAuthMec" ADD CONSTRAINT "LinkedAuthMec_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."APIToken" ADD CONSTRAINT "APIToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."APIToken" ADD CONSTRAINT "APIToken_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "public"."Client"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Client" ADD CONSTRAINT "Client_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Collection" ADD CONSTRAINT "Collection_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."CollectionEntry" ADD CONSTRAINT "CollectionEntry_collectionId_fkey" FOREIGN KEY ("collectionId") REFERENCES "public"."Collection"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."CollectionEntry" ADD CONSTRAINT "CollectionEntry_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."UserPlatform" ADD CONSTRAINT "UserPlatform_redistId_fkey" FOREIGN KEY ("redistId") REFERENCES "public"."Redist"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."PlatformLink" ADD CONSTRAINT "PlatformLink_userPlatformId_fkey" FOREIGN KEY ("userPlatformId") REFERENCES "public"."UserPlatform"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."LaunchOption" ADD CONSTRAINT "redistVersion_fkey" FOREIGN KEY ("versionId") REFERENCES "public"."RedistVersion"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."LaunchOption" ADD CONSTRAINT "LaunchOption_launchGId_fkey" FOREIGN KEY ("launchGId") REFERENCES "public"."GameVersion"("versionId") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Version" ADD CONSTRAINT "game_link" FOREIGN KEY ("gameId") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Version" ADD CONSTRAINT "redist_link" FOREIGN KEY ("redistId") REFERENCES "public"."Redist"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Version" ADD CONSTRAINT "dlc_link" FOREIGN KEY ("dlcId") REFERENCES "public"."DLC"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Version" ADD CONSTRAINT "mod_link" FOREIGN KEY ("modId") REFERENCES "public"."Mod"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."GameVersion" ADD CONSTRAINT "GameVersion_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "public"."Version"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."GameVersion" ADD CONSTRAINT "GameVersion_installId_fkey" FOREIGN KEY ("installId") REFERENCES "public"."LaunchOption"("launchId") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."GameVersion" ADD CONSTRAINT "GameVersion_uninstallId_fkey" FOREIGN KEY ("uninstallId") REFERENCES "public"."LaunchOption"("launchId") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."GameVersion" ADD CONSTRAINT "GameVersion_platformId_fkey" FOREIGN KEY ("platformId") REFERENCES "public"."PlatformLink"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."DLCVersion" ADD CONSTRAINT "DLCVersion_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "public"."Version"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."DLCVersion" ADD CONSTRAINT "DLCVersion_platformId_fkey" FOREIGN KEY ("platformId") REFERENCES "public"."PlatformLink"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."RedistVersion" ADD CONSTRAINT "RedistVersion_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "public"."Version"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."RedistVersion" ADD CONSTRAINT "RedistVersion_platformId_fkey" FOREIGN KEY ("platformId") REFERENCES "public"."PlatformLink"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."ModVersion" ADD CONSTRAINT "ModVersion_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "public"."Version"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."ModVersion" ADD CONSTRAINT "ModVersion_platformId_fkey" FOREIGN KEY ("platformId") REFERENCES "public"."PlatformLink"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."SaveSlot" ADD CONSTRAINT "SaveSlot_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."SaveSlot" ADD CONSTRAINT "SaveSlot_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."SaveSlot" ADD CONSTRAINT "SaveSlot_lastUsedClientId_fkey" FOREIGN KEY ("lastUsedClientId") REFERENCES "public"."Client"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Screenshot" ADD CONSTRAINT "Screenshot_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Screenshot" ADD CONSTRAINT "Screenshot_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Playtime" ADD CONSTRAINT "Playtime_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Playtime" ADD CONSTRAINT "Playtime_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Game" ADD CONSTRAINT "Game_libraryId_fkey" FOREIGN KEY ("libraryId") REFERENCES "public"."Library"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."DLC" ADD CONSTRAINT "DLC_libraryId_fkey" FOREIGN KEY ("libraryId") REFERENCES "public"."Library"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."GameDLCMetadata" ADD CONSTRAINT "GameDLCMetadata_id_fkey" FOREIGN KEY ("id") REFERENCES "public"."DLC"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Redist" ADD CONSTRAINT "Redist_libraryId_fkey" FOREIGN KEY ("libraryId") REFERENCES "public"."Library"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Mod" ADD CONSTRAINT "Mod_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "public"."Game"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Mod" ADD CONSTRAINT "Mod_libraryId_fkey" FOREIGN KEY ("libraryId") REFERENCES "public"."Library"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."GameRating" ADD CONSTRAINT "GameRating_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Article" ADD CONSTRAINT "Article_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."Notification" ADD CONSTRAINT "Notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_GameVersionToRedistVersion" ADD CONSTRAINT "_GameVersionToRedistVersion_A_fkey" FOREIGN KEY ("A") REFERENCES "public"."GameVersion"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_GameVersionToRedistVersion" ADD CONSTRAINT "_GameVersionToRedistVersion_B_fkey" FOREIGN KEY ("B") REFERENCES "public"."RedistVersion"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_DLCVersionToRedistVersion" ADD CONSTRAINT "_DLCVersionToRedistVersion_A_fkey" FOREIGN KEY ("A") REFERENCES "public"."DLCVersion"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_DLCVersionToRedistVersion" ADD CONSTRAINT "_DLCVersionToRedistVersion_B_fkey" FOREIGN KEY ("B") REFERENCES "public"."RedistVersion"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_GameToGameTag" ADD CONSTRAINT "_GameToGameTag_A_fkey" FOREIGN KEY ("A") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_GameToGameTag" ADD CONSTRAINT "_GameToGameTag_B_fkey" FOREIGN KEY ("B") REFERENCES "public"."GameTag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_GameTagToMod" ADD CONSTRAINT "_GameTagToMod_A_fkey" FOREIGN KEY ("A") REFERENCES "public"."GameTag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_GameTagToMod" ADD CONSTRAINT "_GameTagToMod_B_fkey" FOREIGN KEY ("B") REFERENCES "public"."Mod"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_developers" ADD CONSTRAINT "_developers_A_fkey" FOREIGN KEY ("A") REFERENCES "public"."Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_developers" ADD CONSTRAINT "_developers_B_fkey" FOREIGN KEY ("B") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_publishers" ADD CONSTRAINT "_publishers_A_fkey" FOREIGN KEY ("A") REFERENCES "public"."Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_publishers" ADD CONSTRAINT "_publishers_B_fkey" FOREIGN KEY ("B") REFERENCES "public"."Game"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_ArticleToNewsTag" ADD CONSTRAINT "_ArticleToNewsTag_A_fkey" FOREIGN KEY ("A") REFERENCES "public"."Article"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."_ArticleToNewsTag" ADD CONSTRAINT "_ArticleToNewsTag_B_fkey" FOREIGN KEY ("B") REFERENCES "public"."NewsTag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250906060713_rename_to_hardware_platform/migration.sql b/prisma/migrations/20250906060713_rename_to_hardware_platform/migration.sql
new file mode 100644
index 0000000..c4a4d3f
--- /dev/null
+++ b/prisma/migrations/20250906060713_rename_to_hardware_platform/migration.sql
@@ -0,0 +1,15 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `platform` on the `PlatformLink` table. All the data in the column will be lost.
+
+*/
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."PlatformLink" DROP COLUMN "platform",
+ADD COLUMN "hardwarePlatform" "public"."HardwarePlatform";
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20250906062106_rename_redist_version_id/migration.sql b/prisma/migrations/20250906062106_rename_redist_version_id/migration.sql
new file mode 100644
index 0000000..522ac2f
--- /dev/null
+++ b/prisma/migrations/20250906062106_rename_redist_version_id/migration.sql
@@ -0,0 +1,21 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `versionId` on the `LaunchOption` table. All the data in the column will be lost.
+
+*/
+-- DropForeignKey
+ALTER TABLE "public"."LaunchOption" DROP CONSTRAINT "redistVersion_fkey";
+
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."LaunchOption" DROP COLUMN "versionId",
+ADD COLUMN "redistVersionId" TEXT;
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
+
+-- AddForeignKey
+ALTER TABLE "public"."LaunchOption" ADD CONSTRAINT "redistVersion_fkey" FOREIGN KEY ("redistVersionId") REFERENCES "public"."RedistVersion"("versionId") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250906063020_refine_platform_link/migration.sql b/prisma/migrations/20250906063020_refine_platform_link/migration.sql
new file mode 100644
index 0000000..232e688
--- /dev/null
+++ b/prisma/migrations/20250906063020_refine_platform_link/migration.sql
@@ -0,0 +1,20 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `userPlatformId` on the `PlatformLink` table. All the data in the column will be lost.
+
+*/
+-- DropForeignKey
+ALTER TABLE "public"."PlatformLink" DROP CONSTRAINT "PlatformLink_userPlatformId_fkey";
+
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."PlatformLink" DROP COLUMN "userPlatformId";
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
+
+-- AddForeignKey
+ALTER TABLE "public"."PlatformLink" ADD CONSTRAINT "PlatformLink_id_fkey" FOREIGN KEY ("id") REFERENCES "public"."UserPlatform"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250906070635_remove_hard_relation_for_user_platform/migration.sql b/prisma/migrations/20250906070635_remove_hard_relation_for_user_platform/migration.sql
new file mode 100644
index 0000000..1d88338
--- /dev/null
+++ b/prisma/migrations/20250906070635_remove_hard_relation_for_user_platform/migration.sql
@@ -0,0 +1,8 @@
+-- DropForeignKey
+ALTER TABLE "public"."PlatformLink" DROP CONSTRAINT "PlatformLink_id_fkey";
+
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20250906081518_enforce_redists_as_only_source_of_user_platform_for_now/migration.sql b/prisma/migrations/20250906081518_enforce_redists_as_only_source_of_user_platform_for_now/migration.sql
new file mode 100644
index 0000000..2b125cc
--- /dev/null
+++ b/prisma/migrations/20250906081518_enforce_redists_as_only_source_of_user_platform_for_now/migration.sql
@@ -0,0 +1,20 @@
+/*
+ Warnings:
+
+ - Made the column `redistId` on table `UserPlatform` required. This step will fail if there are existing NULL values in that column.
+
+*/
+-- DropForeignKey
+ALTER TABLE "public"."UserPlatform" DROP CONSTRAINT "UserPlatform_redistId_fkey";
+
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."UserPlatform" ALTER COLUMN "redistId" SET NOT NULL;
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
+
+-- AddForeignKey
+ALTER TABLE "public"."UserPlatform" ADD CONSTRAINT "UserPlatform_redistId_fkey" FOREIGN KEY ("redistId") REFERENCES "public"."Redist"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250906091448_remove_platform/migration.sql b/prisma/migrations/20250906091448_remove_platform/migration.sql
new file mode 100644
index 0000000..0ff5153
--- /dev/null
+++ b/prisma/migrations/20250906091448_remove_platform/migration.sql
@@ -0,0 +1,8 @@
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- DropEnum
+DROP TYPE "public"."Platform";
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20250925223539_add_pre_and_post_install_for_redist_version/migration.sql b/prisma/migrations/20250925223539_add_pre_and_post_install_for_redist_version/migration.sql
new file mode 100644
index 0000000..11ceb10
--- /dev/null
+++ b/prisma/migrations/20250925223539_add_pre_and_post_install_for_redist_version/migration.sql
@@ -0,0 +1,41 @@
+/*
+ Warnings:
+
+ - A unique constraint covering the columns `[installRId]` on the table `LaunchOption` will be added. If there are existing duplicate values, this will fail.
+ - A unique constraint covering the columns `[uninstallRId]` on the table `LaunchOption` will be added. If there are existing duplicate values, this will fail.
+ - A unique constraint covering the columns `[installId]` on the table `RedistVersion` will be added. If there are existing duplicate values, this will fail.
+ - A unique constraint covering the columns `[uninstallId]` on the table `RedistVersion` will be added. If there are existing duplicate values, this will fail.
+
+*/
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."LaunchOption" ADD COLUMN "installRId" TEXT,
+ADD COLUMN "uninstallRId" TEXT;
+
+-- AlterTable
+ALTER TABLE "public"."RedistVersion" ADD COLUMN "installId" TEXT,
+ADD COLUMN "onlySetup" BOOLEAN NOT NULL DEFAULT false,
+ADD COLUMN "uninstallId" TEXT;
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
+
+-- CreateIndex
+CREATE UNIQUE INDEX "LaunchOption_installRId_key" ON "public"."LaunchOption"("installRId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "LaunchOption_uninstallRId_key" ON "public"."LaunchOption"("uninstallRId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "RedistVersion_installId_key" ON "public"."RedistVersion"("installId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "RedistVersion_uninstallId_key" ON "public"."RedistVersion"("uninstallId");
+
+-- AddForeignKey
+ALTER TABLE "public"."RedistVersion" ADD CONSTRAINT "RedistVersion_installId_fkey" FOREIGN KEY ("installId") REFERENCES "public"."LaunchOption"("launchId") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "public"."RedistVersion" ADD CONSTRAINT "RedistVersion_uninstallId_fkey" FOREIGN KEY ("uninstallId") REFERENCES "public"."LaunchOption"("launchId") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250925225034_add_delta_versioning_to_redist/migration.sql b/prisma/migrations/20250925225034_add_delta_versioning_to_redist/migration.sql
new file mode 100644
index 0000000..174c04b
--- /dev/null
+++ b/prisma/migrations/20250925225034_add_delta_versioning_to_redist/migration.sql
@@ -0,0 +1,15 @@
+/*
+ Warnings:
+
+ - Added the required column `versionIndex` to the `RedistVersion` table without a default value. This is not possible if the table is not empty.
+
+*/
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."RedistVersion" ADD COLUMN "delta" BOOLEAN NOT NULL DEFAULT false,
+ADD COLUMN "versionIndex" INTEGER NOT NULL;
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20251107223657_move_version_index/migration.sql b/prisma/migrations/20251107223657_move_version_index/migration.sql
new file mode 100644
index 0000000..58eb513
--- /dev/null
+++ b/prisma/migrations/20251107223657_move_version_index/migration.sql
@@ -0,0 +1,18 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `versionIndex` on the `GameVersion` table. All the data in the column will be lost.
+ - Added the required column `versionIndex` to the `Version` table without a default value. This is not possible if the table is not empty.
+
+*/
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."GameVersion" DROP COLUMN "versionIndex";
+
+-- AlterTable
+ALTER TABLE "public"."Version" ADD COLUMN "versionIndex" INTEGER NOT NULL;
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/migrations/20251109232837_move_hidden_to_version/migration.sql b/prisma/migrations/20251109232837_move_hidden_to_version/migration.sql
new file mode 100644
index 0000000..373114a
--- /dev/null
+++ b/prisma/migrations/20251109232837_move_hidden_to_version/migration.sql
@@ -0,0 +1,17 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `hidden` on the `GameVersion` table. All the data in the column will be lost.
+
+*/
+-- DropIndex
+DROP INDEX "public"."GameTag_name_idx";
+
+-- AlterTable
+ALTER TABLE "public"."GameVersion" DROP COLUMN "hidden";
+
+-- AlterTable
+ALTER TABLE "public"."Version" ADD COLUMN "hidden" BOOLEAN NOT NULL DEFAULT false;
+
+-- CreateIndex
+CREATE INDEX "GameTag_name_idx" ON "public"."GameTag" USING GIST ("name" gist_trgm_ops(siglen=32));
diff --git a/prisma/models/app.prisma b/prisma/models/app.prisma
index 338af50..65996f8 100644
--- a/prisma/models/app.prisma
+++ b/prisma/models/app.prisma
@@ -10,23 +10,28 @@ model ApplicationSettings {
showGamePanelTextDecoration Boolean @default(true)
}
-enum Platform {
- Windows @map("windows")
- Linux @map("linux")
- macOS @map("macos")
-}
-
enum LibraryBackend {
Filesystem
FlatFilesystem
}
+enum LibraryMode {
+ Game
+ Redist
+ DLC
+ Mod
+}
+
model Library {
id String @id @default(uuid())
name String
backend LibraryBackend
options Json
+ mode LibraryMode @default(Game)
- games Game[]
+ games Game[]
+ redists Redist[]
+ dlcs DLC[]
+ mods Mod[]
}
diff --git a/prisma/models/client.prisma b/prisma/models/client.prisma
index 6dd7208..253b97a 100644
--- a/prisma/models/client.prisma
+++ b/prisma/models/client.prisma
@@ -14,7 +14,7 @@ model Client {
capabilities ClientCapabilities[]
name String
- platform Platform
+ platform HardwarePlatform
lastConnected DateTime
lastAccessedSaves SaveSlot[]
diff --git a/prisma/models/content.prisma b/prisma/models/content.prisma
index 1d8a002..b1f9896 100644
--- a/prisma/models/content.prisma
+++ b/prisma/models/content.prisma
@@ -1,185 +1,217 @@
-enum MetadataSource {
- Manual
- GiantBomb
- Steam
- PCGamingWiki
- IGDB
- Metacritic
- OpenCritic
+enum HardwarePlatform {
+ Windows @map("windows")
+ Linux @map("linux")
+ macOS @map("macos")
+ // Switch @map("switch")
+ // etc
+
+ // @@map("Platform")
}
-model Game {
- id String @id @default(uuid())
+model UserPlatform {
+ id String @id @default(uuid())
- metadataSource MetadataSource
- metadataId String
- created DateTime @default(now())
+ platformName String
+ iconSvg String
+ fileExtensions String[] @default([])
- // Any field prefixed with m is filled in from metadata
- // Acts as a cache so we can search and filter it
- mName String // Name of game
- mShortDescription String // Short description
- mDescription String // Supports markdown
- mReleased DateTime // When the game was released
+ redistId String @unique
+ redist Redist @relation(fields: [redistId], references: [id], onDelete: Cascade, onUpdate: Cascade)
- ratings GameRating[]
-
- featured Boolean @default(false)
-
- mIconObjectId String // linked to objects in s3
- mBannerObjectId String // linked to objects in s3
- mCoverObjectId String
- mImageCarouselObjectIds String[] // linked to below array
- mImageLibraryObjectIds String[] // linked to objects in s3
-
- versions GameVersion[]
-
- // These fields will not be optional in the next version
- // Any game without a library ID will be assigned one at startup, based on the defaults
- libraryId String?
- library Library? @relation(fields: [libraryId], references: [id], onDelete: Cascade, onUpdate: Cascade)
- libraryPath String
-
- collections CollectionEntry[]
- saves SaveSlot[]
- screenshots Screenshot[]
- tags GameTag[]
- playtime Playtime[]
-
- developers Company[] @relation(name: "developers")
- publishers Company[] @relation(name: "publishers")
-
- @@unique([metadataSource, metadataId], name: "metadataKey")
- @@unique([libraryId, libraryPath], name: "libraryKey")
+ //platform PlatformLink[]
}
-model GameTag {
- id String @id @default(uuid())
- name String @unique
+model PlatformLink {
+ id String @id // This is either the ID of the user platform, or a repeat of the HardwarePlatform enum. It's cursed.
- games Game[]
+ hardwarePlatform HardwarePlatform?
+ // Waiting on weak reference
+ // userPlatform UserPlatform? @relation(fields: [id], references: [id])
- @@index([name(ops: raw("gist_trgm_ops(siglen=32)"))], type: Gist)
+ gameVersions GameVersion[]
+ dlcVersions DLCVersion[]
+ redistVerisons RedistVersion[]
+ modVersions ModVersion[]
}
+/**
+ */
+model LaunchOption {
+ launchId String @id @default(uuid())
-model GameRating {
- id String @id @default(uuid())
+ redistVersionId String?
+ redistVersion RedistVersion? @relation(fields: [redistVersionId], references: [versionId], onDelete: Cascade, onUpdate: Cascade, map: "redistVersion_fkey")
- metadataSource MetadataSource
- metadataId String
- created DateTime @default(now())
+ launchGId String?
+ launchGVersion GameVersion? @relation(name: "launches", fields: [launchGId], references: [versionId])
+ installGId String? @unique
+ installGVersion GameVersion? @relation(name: "install")
+ uninstallGId String? @unique
+ uninstallGVersion GameVersion? @relation(name: "uninstall")
- mReviewCount Int
- mReviewRating Float // 0 to 1
+ installRId String? @unique
+ installRVersion RedistVersion? @relation(name: "install_redist")
+ uninstallRId String? @unique
+ uninstallRVersion RedistVersion? @relation(name: "uninstall_redist")
- mReviewHref String?
+ name String
+ description String
- game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
- gameId String
-
- @@unique([metadataSource, metadataId], name: "metadataKey")
+ command String
+ args String @default("")
}
-// A particular set of files that relate to the version
+// Platform agnostic object
+model Version {
+ versionId String @id @unique @default(uuid())
+
+ versionPath String
+
+ versionName String
+ versionIndex Int
+ created DateTime @default(now())
+ hidden Boolean @default(false)
+
+ gameId String?
+ game Game? @relation(fields: [gameId], references: [id], map: "game_link", onDelete: Cascade, onUpdate: Cascade)
+ gameVersions GameVersion[]
+
+ redistId String?
+ redist Redist? @relation(fields: [redistId], references: [id], map: "redist_link", onDelete: Cascade, onUpdate: Cascade)
+ redistVersions RedistVersion[]
+
+ dlcId String?
+ dlc DLC? @relation(fields: [dlcId], references: [id], map: "dlc_link", onDelete: Cascade, onUpdate: Cascade)
+ dlcVersions DLCVersion[]
+
+ modId String?
+ mod Mod? @relation(fields: [modId], references: [id], map: "mod_link", onDelete: Cascade, onUpdate: Cascade)
+ modVersions ModVersion[]
+
+ dropletManifest Json // Results from droplet
+}
+
+// Platform specific object
model GameVersion {
- gameId String
- game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
- versionName String // Sub directory for the game files
+ versionId String @id
+ version Version @relation(fields: [versionId], references: [versionId], onDelete: Cascade, onUpdate: Cascade)
- created DateTime @default(now())
+ redistDeps RedistVersion[]
- platform Platform
+ launches LaunchOption[] @relation(name: "launches")
- launchCommand String @default("") // Command to run to start. Platform-specific. Windows games on Linux will wrap this command in Proton/Wine
- launchArgs String[]
- setupCommand String @default("") // Command to setup game (dependencies and such)
- setupArgs String[]
- onlySetup Boolean @default(false)
+ installId String? @unique
+ install LaunchOption? @relation(name: "install", fields: [installId], references: [launchId])
+ uninstallId String? @unique
+ uninstall LaunchOption? @relation(name: "uninstall", fields: [uninstallId], references: [launchId])
+ onlySetup Boolean @default(false)
- umuIdOverride String?
+ umuIdOverride String?
- dropletManifest Json // Results from droplet
+ delta Boolean @default(false)
- versionIndex Int
- delta Boolean @default(false)
+ platformId String
+ platform PlatformLink @relation(fields: [platformId], references: [id])
+}
- @@id([gameId, versionName])
+// Platform specific object
+model DLCVersion {
+ versionId String @id
+ version Version @relation(fields: [versionId], references: [versionId], onDelete: Cascade, onUpdate: Cascade)
+
+ redistDeps RedistVersion[]
+
+ platformId String
+ platform PlatformLink @relation(fields: [platformId], references: [id])
+}
+
+// Platform specific object
+model RedistVersion {
+ versionId String @id
+ version Version @relation(fields: [versionId], references: [versionId], onDelete: Cascade, onUpdate: Cascade)
+
+ installId String? @unique
+ install LaunchOption? @relation(name: "install_redist", fields: [installId], references: [launchId])
+ uninstallId String? @unique
+ uninstall LaunchOption? @relation(name: "uninstall_redist", fields: [uninstallId], references: [launchId])
+ onlySetup Boolean @default(false)
+
+ launches LaunchOption[]
+
+ versionIndex Int
+ delta Boolean @default(false)
+
+ gameDependees GameVersion[]
+ dlcDependees DLCVersion[]
+
+ platformId String
+ platform PlatformLink @relation(fields: [platformId], references: [id])
+}
+
+// Platform specific object
+model ModVersion {
+ versionId String @id
+ version Version @relation(fields: [versionId], references: [versionId], onDelete: Cascade, onUpdate: Cascade)
+
+ dependencies String[]
+
+ platformId String
+ platform PlatformLink @relation(fields: [platformId], references: [id])
}
// A save slot for a game
model SaveSlot {
- gameId String
- game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
- userId String
- user User @relation(fields: [userId], references: [id], onDelete: Cascade)
- index Int
+ gameId String
+ game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
+ userId String
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
+ index Int
- createdAt DateTime @default(now())
- playtime Float @default(0) // hours
+ createdAt DateTime @default(now())
+ playtime Float @default(0) // hours
- lastUsedClientId String?
- lastUsedClient Client? @relation(fields: [lastUsedClientId], references: [id])
+ lastUsedClientId String?
+ lastUsedClient Client? @relation(fields: [lastUsedClientId], references: [id])
- historyObjectIds String[] // list of objects
- historyChecksums String[] // list of hashes
+ historyObjectIds String[] // list of objects
+ historyChecksums String[] // list of hashes
- @@id([gameId, userId, index], name: "id")
+ @@id([gameId, userId, index], name: "id")
}
model Screenshot {
- id String @id @default(uuid())
+ id String @id @default(uuid())
- gameId String
- game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
- userId String
- user User @relation(fields: [userId], references: [id], onDelete: Cascade)
+ gameId String
+ game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
+ userId String
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
- objectId String
- private Boolean // if other users can see
+ objectId String
+ private Boolean // if other users can see
- createdAt DateTime @default(now()) @db.Timestamptz(0)
+ createdAt DateTime @default(now()) @db.Timestamptz(0)
- @@index([gameId, userId])
- @@index([userId])
+ @@index([gameId, userId])
+ @@index([userId])
}
model Playtime {
- gameId String
- game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
- userId String
- user User @relation(fields: [userId], references: [id], onDelete: Cascade)
+ gameId String
+ game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
+ userId String
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
- seconds Int // seconds user has spent playing the game
+ seconds Int // seconds user has spent playing the game
- updatedAt DateTime @updatedAt @db.Timestamptz(6)
- createdAt DateTime @default(now()) @db.Timestamptz(6)
+ updatedAt DateTime @updatedAt @db.Timestamptz(6)
+ createdAt DateTime @default(now()) @db.Timestamptz(6)
- @@id([gameId, userId])
- @@index([userId])
-}
-
-model Company {
- id String @id @default(uuid())
-
- metadataSource MetadataSource
- metadataId String
- metadataOriginalQuery String
-
- mName String
- mShortDescription String
- mDescription String
- mLogoObjectId String
- mBannerObjectId String
- mWebsite String
-
- developed Game[] @relation(name: "developers")
- published Game[] @relation(name: "publishers")
-
- @@unique([metadataSource, metadataId], name: "metadataKey")
+ @@id([gameId, userId])
+ @@index([userId])
}
model ObjectHash {
- id String @id
- hash String
+ id String @id
+ hash String
}
diff --git a/prisma/models/metadata.prisma b/prisma/models/metadata.prisma
new file mode 100644
index 0000000..ab10150
--- /dev/null
+++ b/prisma/models/metadata.prisma
@@ -0,0 +1,180 @@
+enum MetadataSource {
+ Manual
+ GiantBomb
+ PCGamingWiki
+ IGDB
+ Metacritic
+ OpenCritic
+ Steam
+}
+
+model Game {
+ id String @id @default(uuid())
+
+ metadataSource MetadataSource
+ metadataId String
+ created DateTime @default(now())
+
+ // Any field prefixed with m is filled in from metadata
+ // Acts as a cache so we can search and filter it
+ mName String // Name of game
+ mShortDescription String // Short description
+ mDescription String // Supports markdown
+ mReleased DateTime // When the game was released
+
+ ratings GameRating[]
+
+ featured Boolean @default(false)
+
+ mIconObjectId String // linked to objects in s3
+ mBannerObjectId String // linked to objects in s3
+ mCoverObjectId String
+ mImageCarouselObjectIds String[] // linked to below array
+ mImageLibraryObjectIds String[] // linked to objects in s3
+
+ versions Version[]
+ mods Mod[]
+
+ libraryId String
+ library Library @relation(fields: [libraryId], references: [id], onDelete: Cascade, onUpdate: Cascade)
+ libraryPath String
+
+ collections CollectionEntry[]
+ saves SaveSlot[]
+ screenshots Screenshot[]
+ tags GameTag[]
+ playtime Playtime[]
+
+ developers Company[] @relation(name: "developers")
+ publishers Company[] @relation(name: "publishers")
+
+ @@unique([metadataSource, metadataId], name: "metadataKey")
+ @@unique([libraryId, libraryPath], name: "libraryKey")
+}
+
+model DLC {
+ id String @id @default(uuid())
+
+ name String
+ description String
+ iconObjectId String
+
+ libraryId String
+ library Library @relation(fields: [libraryId], references: [id], onDelete: Cascade, onUpdate: Cascade)
+ libraryPath String
+
+ versions Version[]
+ metadata GameDLCMetadata?
+}
+
+model GameDLCMetadata {
+ id String @id
+ dlc DLC @relation(fields: [id], references: [id])
+
+ mName String
+ mShortDescription String
+ mDescription String
+
+ mIconObjectId String // linked to objects in s3
+ mBannerObjectId String // linked to objects in s3
+ mCoverObjectId String
+ mImageCarouselObjectIds String[] // linked to below array
+ mImageLibraryObjectIds String[] // linked to objects in s3
+}
+
+model Redist {
+ id String @id @default(uuid())
+ created DateTime @default(now())
+
+ mName String
+ mShortDescription String
+ mIconObjectId String
+
+ libraryId String
+ library Library @relation(fields: [libraryId], references: [id], onDelete: Cascade, onUpdate: Cascade)
+ libraryPath String
+
+ versions Version[]
+ platform UserPlatform?
+
+ @@unique([libraryId, libraryPath], name: "libraryKey")
+}
+
+model Mod {
+ id String @id @default(uuid())
+ created DateTime @default(now())
+
+ gameId String
+ game Game @relation(fields: [gameId], references: [id])
+
+ // If this mod is user-provided
+ user Boolean @default(true)
+
+ mName String
+ mShortDescription String
+ mDescription String
+
+ mReleased DateTime
+
+ mIconObjectId String // linked to objects in s3
+ mBannerObjectId String // linked to objects in s3
+ mCoverObjectId String
+ mImageCarouselObjectIds String[] // linked to below array
+ mImageLibraryObjectIds String[] // linked to objects in s3
+
+ libraryId String
+ library Library @relation(fields: [libraryId], references: [id], onDelete: Cascade, onUpdate: Cascade)
+ libraryPath String
+
+ tags GameTag[]
+
+ versions Version[]
+}
+
+model GameTag {
+ id String @id @default(uuid())
+ name String @unique
+
+ games Game[]
+ mods Mod[]
+
+ @@index([name(ops: raw("gist_trgm_ops(siglen=32)"))], type: Gist)
+}
+
+model GameRating {
+ id String @id @default(uuid())
+
+ metadataSource MetadataSource
+ metadataId String
+ created DateTime @default(now())
+
+ mReviewCount Int
+ mReviewRating Float // 0 to 1
+
+ mReviewHref String?
+
+ game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
+ gameId String
+
+ @@unique([metadataSource, metadataId], name: "metadataKey")
+}
+
+model Company {
+ id String @id @default(uuid())
+
+ metadataSource MetadataSource
+ metadataId String
+ metadataOriginalQuery String
+
+ mName String
+ mShortDescription String
+ mDescription String
+ mLogoObjectId String
+ mBannerObjectId String
+ mWebsite String
+
+ developed Game[] @relation(name: "developers")
+ published Game[] @relation(name: "publishers")
+
+ @@unique([metadataSource, metadataId], name: "metadataKey")
+}
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 8fc2d88..a08fa9a 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -10,15 +10,6 @@ generator client {
binaryTargets = ["native", "debian-openssl-3.0.x"]
}
-/**
- * generator arktype {
- * provider = "yarn prismark"
- * output = "./validate"
- * fileName = "schema.ts"
- * nullish = true
- * }
- */
-
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
diff --git a/server/api/v1/admin/auth/index.get.ts b/server/api/v1/admin/auth/index.get.ts
index 4ea1523..ceae889 100644
--- a/server/api/v1/admin/auth/index.get.ts
+++ b/server/api/v1/admin/auth/index.get.ts
@@ -1,6 +1,6 @@
-import { AuthMec } from "~/prisma/client/enums";
-import aclManager from "~/server/internal/acls";
-import authManager from "~/server/internal/auth";
+import { AuthMec } from "~~/prisma/client/enums";
+import aclManager from "~~/server/internal/acls";
+import authManager from "~~/server/internal/auth";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["auth:read", "setup"]);
diff --git a/server/api/v1/admin/auth/invitation/index.delete.ts b/server/api/v1/admin/auth/invitation/index.delete.ts
index 195aae5..a7e01b0 100644
--- a/server/api/v1/admin/auth/invitation/index.delete.ts
+++ b/server/api/v1/admin/auth/invitation/index.delete.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const DeleteInvite = type({
id: "string",
diff --git a/server/api/v1/admin/auth/invitation/index.get.ts b/server/api/v1/admin/auth/invitation/index.get.ts
index 0724e49..bb910ed 100644
--- a/server/api/v1/admin/auth/invitation/index.get.ts
+++ b/server/api/v1/admin/auth/invitation/index.get.ts
@@ -1,7 +1,7 @@
-import aclManager from "~/server/internal/acls";
-import { systemConfig } from "~/server/internal/config/sys-conf";
-import prisma from "~/server/internal/db/database";
-import taskHandler from "~/server/internal/tasks";
+import aclManager from "~~/server/internal/acls";
+import { systemConfig } from "~~/server/internal/config/sys-conf";
+import prisma from "~~/server/internal/db/database";
+import taskHandler from "~~/server/internal/tasks";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, [
diff --git a/server/api/v1/admin/auth/invitation/index.post.ts b/server/api/v1/admin/auth/invitation/index.post.ts
index 69d3649..43d1d82 100644
--- a/server/api/v1/admin/auth/invitation/index.post.ts
+++ b/server/api/v1/admin/auth/invitation/index.post.ts
@@ -1,8 +1,8 @@
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
import { SharedRegisterValidator } from "../../../auth/signup/simple.post";
-import { systemConfig } from "~/server/internal/config/sys-conf";
+import { systemConfig } from "~~/server/internal/config/sys-conf";
const CreateInvite = SharedRegisterValidator.partial()
.and({
diff --git a/server/api/v1/admin/company/[id]/banner.post.ts b/server/api/v1/admin/company/[id]/banner.post.ts
index 0c8744a..10146cf 100644
--- a/server/api/v1/admin/company/[id]/banner.post.ts
+++ b/server/api/v1/admin/company/[id]/banner.post.ts
@@ -1,7 +1,7 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import objectHandler from "~/server/internal/objects";
-import { handleFileUpload } from "~/server/internal/utils/handlefileupload";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import objectHandler from "~~/server/internal/objects";
+import { handleFileUpload } from "~~/server/internal/utils/handlefileupload";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["company:update"]);
@@ -15,13 +15,13 @@ export default defineEventHandler(async (h3) => {
});
if (!company)
- throw createError({ statusCode: 400, statusMessage: "Invalid company id" });
+ throw createError({ statusCode: 400, message: "Invalid company id" });
const result = await handleFileUpload(h3, {}, ["internal:read"], 1);
if (!result)
throw createError({
statusCode: 400,
- statusMessage: "File upload required (multipart form)",
+ message: "File upload required (multipart form)",
});
const [ids, , pull, dump] = result;
@@ -29,7 +29,7 @@ export default defineEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "Upload at least one file.",
+ message: "Upload at least one file.",
});
try {
diff --git a/server/api/v1/admin/company/[id]/game.delete.ts b/server/api/v1/admin/company/[id]/game.delete.ts
index 0a9fe21..1fe3145 100644
--- a/server/api/v1/admin/company/[id]/game.delete.ts
+++ b/server/api/v1/admin/company/[id]/game.delete.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const GameDelete = type({
id: "string",
diff --git a/server/api/v1/admin/company/[id]/game.patch.ts b/server/api/v1/admin/company/[id]/game.patch.ts
index 9e0260f..2565775 100644
--- a/server/api/v1/admin/company/[id]/game.patch.ts
+++ b/server/api/v1/admin/company/[id]/game.patch.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const GamePatch = type({
action: "'developed' | 'published'",
diff --git a/server/api/v1/admin/company/[id]/game.post.ts b/server/api/v1/admin/company/[id]/game.post.ts
index f873118..662aac7 100644
--- a/server/api/v1/admin/company/[id]/game.post.ts
+++ b/server/api/v1/admin/company/[id]/game.post.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const GamePost = type({
published: "boolean",
@@ -20,7 +20,7 @@ export default defineEventHandler(async (h3) => {
if (!body.published && !body.developed)
throw createError({
statusCode: 400,
- statusMessage: "Must be related (either developed or published).",
+ message: "Must be related (either developed or published).",
});
const publisherConnect = body.published
diff --git a/server/api/v1/admin/company/[id]/icon.post.ts b/server/api/v1/admin/company/[id]/icon.post.ts
index 0a4cefd..d6d6178 100644
--- a/server/api/v1/admin/company/[id]/icon.post.ts
+++ b/server/api/v1/admin/company/[id]/icon.post.ts
@@ -1,7 +1,7 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import objectHandler from "~/server/internal/objects";
-import { handleFileUpload } from "~/server/internal/utils/handlefileupload";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import objectHandler from "~~/server/internal/objects";
+import { handleFileUpload } from "~~/server/internal/utils/handlefileupload";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["company:update"]);
@@ -15,13 +15,13 @@ export default defineEventHandler(async (h3) => {
});
if (!company)
- throw createError({ statusCode: 400, statusMessage: "Invalid company id" });
+ throw createError({ statusCode: 400, message: "Invalid company id" });
const result = await handleFileUpload(h3, {}, ["internal:read"], 1);
if (!result)
throw createError({
statusCode: 400,
- statusMessage: "File upload required (multipart form)",
+ message: "File upload required (multipart form)",
});
const [ids, , pull, dump] = result;
@@ -29,7 +29,7 @@ export default defineEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "Upload at least one file.",
+ message: "Upload at least one file.",
});
try {
diff --git a/server/api/v1/admin/company/[id]/index.delete.ts b/server/api/v1/admin/company/[id]/index.delete.ts
index b27d393..a17928b 100644
--- a/server/api/v1/admin/company/[id]/index.delete.ts
+++ b/server/api/v1/admin/company/[id]/index.delete.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["company:delete"]);
@@ -9,6 +9,6 @@ export default defineEventHandler(async (h3) => {
const company = await prisma.company.deleteMany({ where: { id } });
if (company.count == 0)
- throw createError({ statusCode: 404, statusMessage: "Company not found" });
+ throw createError({ statusCode: 404, message: "Company not found" });
return;
});
diff --git a/server/api/v1/admin/company/[id]/index.get.ts b/server/api/v1/admin/company/[id]/index.get.ts
index 50c4115..c911b15 100644
--- a/server/api/v1/admin/company/[id]/index.get.ts
+++ b/server/api/v1/admin/company/[id]/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["company:read"]);
@@ -23,7 +23,7 @@ export default defineEventHandler(async (h3) => {
},
});
if (!company)
- throw createError({ statusCode: 404, statusMessage: "Company not found" });
+ throw createError({ statusCode: 404, message: "Company not found" });
const games = await prisma.game.findMany({
where: {
OR: [
diff --git a/server/api/v1/admin/company/[id]/index.patch.ts b/server/api/v1/admin/company/[id]/index.patch.ts
index 74511e2..ce0481a 100644
--- a/server/api/v1/admin/company/[id]/index.patch.ts
+++ b/server/api/v1/admin/company/[id]/index.patch.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["company:update"]);
diff --git a/server/api/v1/admin/company/index.get.ts b/server/api/v1/admin/company/index.get.ts
index dac5ae2..042c546 100644
--- a/server/api/v1/admin/company/index.get.ts
+++ b/server/api/v1/admin/company/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["company:read"]);
diff --git a/server/api/v1/admin/company/index.post.ts b/server/api/v1/admin/company/index.post.ts
index cbea4a1..8255f4b 100644
--- a/server/api/v1/admin/company/index.post.ts
+++ b/server/api/v1/admin/company/index.post.ts
@@ -1,10 +1,10 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
import * as jdenticon from "jdenticon";
-import { ObjectTransactionalHandler } from "~/server/internal/objects/transactional";
-import prisma from "~/server/internal/db/database";
-import { MetadataSource } from "~/prisma/client/enums";
+import { ObjectTransactionalHandler } from "~~/server/internal/objects/transactional";
+import prisma from "~~/server/internal/db/database";
+import { MetadataSource } from "~~/prisma/client/enums";
const CompanyCreate = type({
name: "string",
diff --git a/server/api/v1/admin/game/[id]/index.delete.ts b/server/api/v1/admin/game/[id]/index.delete.ts
index 66e7027..20c2f2a 100644
--- a/server/api/v1/admin/game/[id]/index.delete.ts
+++ b/server/api/v1/admin/game/[id]/index.delete.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import libraryManager from "~/server/internal/library";
+import aclManager from "~~/server/internal/acls";
+import libraryManager from "~~/server/internal/library";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["game:delete"]);
@@ -7,7 +7,7 @@ export default defineEventHandler(async (h3) => {
const gameId = getRouterParam(h3, "id")!;
- libraryManager.deleteGame(gameId);
+ await libraryManager.deleteGame(gameId);
return {};
});
diff --git a/server/api/v1/admin/game/[id]/index.get.ts b/server/api/v1/admin/game/[id]/index.get.ts
index 54f1af8..ffc65e1 100644
--- a/server/api/v1/admin/game/[id]/index.get.ts
+++ b/server/api/v1/admin/game/[id]/index.get.ts
@@ -1,7 +1,6 @@
-import type { GameVersion } from "~/prisma/client/client";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["game:read"]);
@@ -15,24 +14,32 @@ export default defineEventHandler(async (h3) => {
},
include: {
versions: {
- orderBy: {
- versionIndex: "asc",
- },
omit: {
dropletManifest: true,
},
+ include: {
+ gameVersions: {
+ include: {
+ install: true,
+ uninstall: true,
+ launches: true,
+ },
+ },
+ },
},
tags: true,
},
});
if (!game || !game.libraryId)
- throw createError({ statusCode: 404, statusMessage: "Game ID not found" });
+ throw createError({ statusCode: 404, message: "Game ID not found" });
- const getGameVersionSize = async (version: GameVersion) => {
+ const getGameVersionSize = async (
+ version: Omit<(typeof game)["versions"][number], "dropletManifest">,
+ ) => {
const size = await libraryManager.getGameVersionSize(
gameId,
- version.versionName,
+ version.versionId,
);
return { ...version, size };
};
diff --git a/server/api/v1/admin/game/[id]/index.patch.ts b/server/api/v1/admin/game/[id]/index.patch.ts
index 410adee..819bf08 100644
--- a/server/api/v1/admin/game/[id]/index.patch.ts
+++ b/server/api/v1/admin/game/[id]/index.patch.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["game:update"]);
diff --git a/server/api/v1/admin/game/[id]/metadata.post.ts b/server/api/v1/admin/game/[id]/metadata.post.ts
index cd1dcbc..9a267a1 100644
--- a/server/api/v1/admin/game/[id]/metadata.post.ts
+++ b/server/api/v1/admin/game/[id]/metadata.post.ts
@@ -1,7 +1,13 @@
-import type { Prisma } from "~/prisma/client/client";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import { handleFileUpload } from "~/server/internal/utils/handlefileupload";
+import { ArkErrors, type } from "arktype";
+import type { Prisma } from "~~/prisma/client/client";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import { handleFileUpload } from "~~/server/internal/utils/handlefileupload";
+
+const UpdateMetadata = type({
+ name: "string?",
+ description: "string?",
+});
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["game:update"]);
@@ -11,7 +17,7 @@ export default defineEventHandler(async (h3) => {
if (!form)
throw createError({
statusCode: 400,
- statusMessage: "This endpoint requires multipart form data.",
+ message: "This endpoint requires multipart form data.",
});
const gameId = getRouterParam(h3, "id")!;
@@ -20,20 +26,20 @@ export default defineEventHandler(async (h3) => {
if (!uploadResult)
throw createError({
statusCode: 400,
- statusMessage: "Failed to upload file",
+ message: "Failed to upload file",
});
const [ids, options, pull, dump] = uploadResult;
const id = ids.at(0);
- // handleFileUpload reads the rest of the options for us.
- const name = options.name;
- const description = options.description;
+ const body = UpdateMetadata(options);
+ if (body instanceof ArkErrors)
+ throw createError({ statusCode: 400, message: body.summary });
const updateModel: Prisma.GameUpdateInput = {
- mName: name,
- mShortDescription: description,
+ ...(body.name ? { mName: body.name } : undefined),
+ ...(body.description ? { mShortDescription: body.description } : undefined),
};
// handle if user uploaded new icon
diff --git a/server/api/v1/admin/game/[id]/tags.patch.ts b/server/api/v1/admin/game/[id]/tags.patch.ts
index d7192ad..df1acfc 100644
--- a/server/api/v1/admin/game/[id]/tags.patch.ts
+++ b/server/api/v1/admin/game/[id]/tags.patch.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const PatchTags = type({
tags: "string[]",
diff --git a/server/api/v1/admin/game/image/index.delete.ts b/server/api/v1/admin/game/image/index.delete.ts
index d89ae76..0802885 100644
--- a/server/api/v1/admin/game/image/index.delete.ts
+++ b/server/api/v1/admin/game/image/index.delete.ts
@@ -1,8 +1,8 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import objectHandler from "~/server/internal/objects";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import objectHandler from "~~/server/internal/objects";
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
const DeleteGameImage = type({
gameId: "string",
@@ -32,20 +32,20 @@ export default defineEventHandler<{
});
if (!game)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
const imageIndex = game.mImageLibraryObjectIds.findIndex((e) => e == imageId);
if (imageIndex == -1)
- throw createError({ statusCode: 400, statusMessage: "Image not found" });
+ throw createError({ statusCode: 400, message: "Image not found" });
game.mImageLibraryObjectIds.splice(imageIndex, 1);
await objectHandler.deleteAsSystem(imageId);
if (game.mBannerObjectId === imageId) {
- game.mBannerObjectId = game.mImageLibraryObjectIds[0];
+ game.mBannerObjectId = game.mImageLibraryObjectIds[0] ?? "";
}
if (game.mCoverObjectId === imageId) {
- game.mCoverObjectId = game.mImageLibraryObjectIds[0];
+ game.mCoverObjectId = game.mImageLibraryObjectIds[0] ?? "";
}
const result = await prisma.game.update({
diff --git a/server/api/v1/admin/game/image/index.post.ts b/server/api/v1/admin/game/image/index.post.ts
index e230e9f..ed03351 100644
--- a/server/api/v1/admin/game/image/index.post.ts
+++ b/server/api/v1/admin/game/image/index.post.ts
@@ -1,6 +1,6 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import { handleFileUpload } from "~/server/internal/utils/handlefileupload";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import { handleFileUpload } from "~~/server/internal/utils/handlefileupload";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["game:image:new"]);
@@ -10,14 +10,14 @@ export default defineEventHandler(async (h3) => {
if (!form)
throw createError({
statusCode: 400,
- statusMessage: "This endpoint requires multipart form data.",
+ message: "This endpoint requires multipart form data.",
});
const uploadResult = await handleFileUpload(h3, {}, ["internal:read"]);
if (!uploadResult)
throw createError({
statusCode: 400,
- statusMessage: "Failed to upload file",
+ message: "Failed to upload file",
});
const [ids, options, pull, dump] = uploadResult;
@@ -25,21 +25,21 @@ export default defineEventHandler(async (h3) => {
dump();
throw createError({
statusCode: 400,
- statusMessage: "Did not upload a file",
+ message: "Did not upload a file",
});
}
- const gameId = options.id;
+ const gameId = options.id as string;
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "No game ID attached",
+ message: "No game ID attached",
});
const hasGame = (await prisma.game.count({ where: { id: gameId } })) != 0;
if (!hasGame) {
dump();
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
}
const result = await prisma.game.update({
diff --git a/server/api/v1/admin/game/index.get.ts b/server/api/v1/admin/game/index.get.ts
index c7ca363..3e9194d 100644
--- a/server/api/v1/admin/game/index.get.ts
+++ b/server/api/v1/admin/game/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["game:read"]);
diff --git a/server/api/v1/admin/game/version/index.delete.ts b/server/api/v1/admin/game/version/index.delete.ts
index 6037858..415b42e 100644
--- a/server/api/v1/admin/game/version/index.delete.ts
+++ b/server/api/v1/admin/game/version/index.delete.ts
@@ -1,11 +1,10 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import libraryManager from "~/server/internal/library";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import libraryManager from "~~/server/internal/library";
const DeleteVersion = type({
id: "string",
- versionName: "string",
}).configure(throwingArktype);
export default defineEventHandler<{ body: typeof DeleteVersion }>(
@@ -17,10 +16,8 @@ export default defineEventHandler<{ body: typeof DeleteVersion }>(
const body = await readDropValidatedBody(h3, DeleteVersion);
- const gameId = body.id.toString();
- const version = body.versionName.toString();
+ await libraryManager.deleteGameVersion(body.id);
- await libraryManager.deleteGameVersion(gameId, version);
return {};
},
);
diff --git a/server/api/v1/admin/game/version/index.patch.ts b/server/api/v1/admin/game/version/index.patch.ts
index 54e0547..bbeee21 100644
--- a/server/api/v1/admin/game/version/index.patch.ts
+++ b/server/api/v1/admin/game/version/index.patch.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const UpdateVersionOrder = type({
id: "string",
@@ -16,57 +16,24 @@ export default defineEventHandler<{ body: typeof UpdateVersionOrder }>(
if (!allowed) throw createError({ statusCode: 403 });
const body = await readDropValidatedBody(h3, UpdateVersionOrder);
- const gameId = body.id;
// We expect an array of the version names for this game
- const unsortedVersions = await prisma.gameVersion.findMany({
- where: {
- versionName: { in: body.versions },
- },
- select: {
- versionName: true,
- versionIndex: true,
- delta: true,
- platform: true,
- },
- });
-
- const versions = body.versions
- .map((e) => unsortedVersions.find((v) => v.versionName === e))
- .filter((e) => e !== undefined);
-
- if (versions.length !== unsortedVersions.length)
- throw createError({
- statusCode: 500,
- statusMessage: "Sorting versions yielded less results, somehow.",
- });
-
- // Validate the new order
- const has: { [key: string]: boolean } = {};
- for (const version of versions) {
- if (version.delta && !has[version.platform])
- throw createError({
- statusCode: 400,
- statusMessage: `"${version.versionName}" requires a base version to apply the delta to.`,
- });
- has[version.platform] = true;
- }
+ const versions = body.versions;
await prisma.$transaction(
- versions.map((version, versionIndex) =>
- prisma.gameVersion.update({
+ versions.map((versionId, versionIndex) =>
+ prisma.version.update({
where: {
- gameId_versionName: {
- gameId: gameId,
- versionName: version.versionName,
- },
+ versionId,
},
data: {
versionIndex: versionIndex,
},
+ select: {},
}),
),
);
- return versions;
+ setResponseStatus(h3, 201);
+ return;
},
);
diff --git a/server/api/v1/admin/home/index.get.ts b/server/api/v1/admin/home/index.get.ts
index 4cdcd02..e95c85e 100644
--- a/server/api/v1/admin/home/index.get.ts
+++ b/server/api/v1/admin/home/index.get.ts
@@ -1,8 +1,8 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import { systemConfig } from "~/server/internal/config/sys-conf";
-import libraryManager from "~/server/internal/library";
-import userStatsManager from "~/server/internal/userstats";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import { systemConfig } from "~~/server/internal/config/sys-conf";
+import libraryManager from "~~/server/internal/library";
+import userStatsManager from "~~/server/internal/userstats";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["game:read"]);
diff --git a/server/api/v1/admin/import/game/index.get.ts b/server/api/v1/admin/import/game/index.get.ts
index 8ef65fb..f32e2ea 100644
--- a/server/api/v1/admin/import/game/index.get.ts
+++ b/server/api/v1/admin/import/game/index.get.ts
@@ -1,8 +1,8 @@
-import aclManager from "~/server/internal/acls";
-import libraryManager from "~/server/internal/library";
+import aclManager from "~~/server/internal/acls";
+import libraryManager from "~~/server/internal/library";
export default defineEventHandler(async (h3) => {
- const allowed = await aclManager.allowSystemACL(h3, ["import:game:read"]);
+ const allowed = await aclManager.allowSystemACL(h3, ["import:game:read", "import:redist:read"]);
if (!allowed) throw createError({ statusCode: 403 });
const unimportedGames = await libraryManager.fetchUnimportedGames();
diff --git a/server/api/v1/admin/import/game/index.post.ts b/server/api/v1/admin/import/game/index.post.ts
index e3e3247..01aef8e 100644
--- a/server/api/v1/admin/import/game/index.post.ts
+++ b/server/api/v1/admin/import/game/index.post.ts
@@ -1,8 +1,8 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import libraryManager from "~/server/internal/library";
-import metadataHandler from "~/server/internal/metadata";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import libraryManager from "~~/server/internal/library";
+import metadataHandler from "~~/server/internal/metadata";
const ImportGameBody = type({
library: "string",
@@ -27,14 +27,14 @@ export default defineEventHandler<{ body: typeof ImportGameBody.infer }>(
if (!path)
throw createError({
statusCode: 400,
- statusMessage: "Path missing from body",
+ message: "Path missing from body",
});
const valid = await libraryManager.checkUnimportedGamePath(library, path);
if (!valid)
throw createError({
statusCode: 400,
- statusMessage: "Invalid library or game.",
+ message: "Invalid library or game.",
});
const taskId = metadata
@@ -44,7 +44,7 @@ export default defineEventHandler<{ body: typeof ImportGameBody.infer }>(
if (!taskId)
throw createError({
statusCode: 400,
- statusMessage:
+ message:
"Duplicate metadata import. Please chose a different game or metadata provider.",
});
diff --git a/server/api/v1/admin/import/game/search.get.ts b/server/api/v1/admin/import/game/search.get.ts
index a68f45d..531955d 100644
--- a/server/api/v1/admin/import/game/search.get.ts
+++ b/server/api/v1/admin/import/game/search.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import metadataHandler from "~/server/internal/metadata";
+import aclManager from "~~/server/internal/acls";
+import metadataHandler from "~~/server/internal/metadata";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["import:game:read"]);
@@ -8,14 +8,14 @@ export default defineEventHandler(async (h3) => {
const query = getQuery(h3);
const search = query.q?.toString();
if (!search)
- throw createError({ statusCode: 400, statusMessage: "Invalid search" });
+ throw createError({ statusCode: 400, message: "Invalid search" });
const results = await metadataHandler.search(search);
if (results.length == 0)
throw createError({
statusCode: 404,
- statusMessage: "No metadata provider returned search results.",
+ message: "No metadata provider returned search results.",
});
return results;
diff --git a/server/api/v1/admin/import/redist/index.get.ts b/server/api/v1/admin/import/redist/index.get.ts
new file mode 100644
index 0000000..8620668
--- /dev/null
+++ b/server/api/v1/admin/import/redist/index.get.ts
@@ -0,0 +1,3 @@
+import handler from "../game/index.get";
+
+export default handler;
\ No newline at end of file
diff --git a/server/api/v1/admin/import/redist/index.post.ts b/server/api/v1/admin/import/redist/index.post.ts
new file mode 100644
index 0000000..9fd768d
--- /dev/null
+++ b/server/api/v1/admin/import/redist/index.post.ts
@@ -0,0 +1,92 @@
+import { ArkErrors, type } from "arktype";
+import aclManager from "~~/server/internal/acls";
+import { handleFileUpload } from "~~/server/internal/utils/handlefileupload";
+import * as jdenticon from "jdenticon";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
+import jsdom from "jsdom";
+
+export const ImportRedist = type({
+ library: "string",
+ path: "string",
+
+ name: "string",
+ description: "string",
+
+ "platform?": type({
+ name: "string",
+ icon: "string",
+ fileExts: type("string").pipe.try((s) => JSON.parse(s), type("string.alphanumeric").array()),
+ }),
+});
+
+export default defineEventHandler(async (h3) => {
+ const allowed = await aclManager.allowSystemACL(h3, ["import:redist:new"]);
+ if (!allowed) throw createError({ statusCode: 403 });
+
+ const body = await handleFileUpload(h3, {}, ["internal:read"], 1);
+ if (!body) throw createError({ statusCode: 400, message: "Body required." });
+
+ const [ids, rawOptions, pull, , add] = body;
+ const id = ids.at(0);
+
+ const options = ImportRedist(rawOptions);
+ if (options instanceof ArkErrors)
+ throw createError({ statusCode: 400, message: options.summary });
+
+ const valid = await libraryManager.checkUnimportedGamePath(
+ options.library,
+ options.path,
+ );
+ if (!valid)
+ throw createError({
+ statusCode: 400,
+ message: "Invalid library or game.",
+ });
+
+ const icon = id ?? add(jdenticon.toPng(options.name, 512));
+
+ let svgContent = "";
+ if (options.platform) {
+ // This logic is duplicated on the client to make viewing there possible.
+ // TODO?: refactor into a single function. Not totally sure if this is a good idea though,
+ // because they do different things
+ const dom = new jsdom.JSDOM(options.platform.icon);
+ const svg = dom.window.document.getElementsByTagName("svg").item(0);
+ if (!svg)
+ throw createError({
+ statusCode: 400,
+ statusMessage: "No SVG in uploaded image.",
+ });
+ svg.removeAttribute("width");
+ svg.removeAttribute("height");
+ svgContent = svg.outerHTML;
+ }
+
+ const redist = await prisma.redist.create({
+ data: {
+ libraryId: options.library,
+ libraryPath: options.path,
+
+ mName: options.name,
+ mShortDescription: options.description,
+ mIconObjectId: icon,
+
+ platform: {
+ ...(options.platform
+ ? {
+ create: {
+ platformName: options.platform.name,
+ iconSvg: svgContent,
+ fileExtensions: options.platform.fileExts.map((v) => `.${v}`),
+ },
+ }
+ : undefined),
+ },
+ },
+ });
+
+ await pull();
+
+ return redist;
+});
diff --git a/server/api/v1/admin/import/version/index.get.ts b/server/api/v1/admin/import/version/index.get.ts
index 893d295..c10427a 100644
--- a/server/api/v1/admin/import/version/index.get.ts
+++ b/server/api/v1/admin/import/version/index.get.ts
@@ -1,32 +1,36 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
+import { ArkErrors, type } from "arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import libraryManager, { VersionImportModes } from "~~/server/internal/library";
+
+export const PreloadQuery = type({
+ id: "string",
+ mode: type.enumerated(...VersionImportModes),
+});
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["import:version:read"]);
if (!allowed) throw createError({ statusCode: 403 });
- const query = await getQuery(h3);
- const gameId = query.id?.toString();
- if (!gameId)
- throw createError({
- statusCode: 400,
- statusMessage: "Missing id in request params",
- });
+ const rawQuery = await getQuery(h3);
+ const query = PreloadQuery(rawQuery);
+ if (query instanceof ArkErrors)
+ throw createError({ statusCode: 400, message: query.summary });
- const game = await prisma.game.findUnique({
- where: { id: gameId },
- select: { libraryId: true, libraryPath: true },
- });
- if (!game || !game.libraryId)
- throw createError({ statusCode: 404, statusMessage: "Game not found" });
+ const value: { libraryId: string; libraryPath: string } | undefined =
+ await // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ (prisma[query.mode] as any).findUnique({
+ where: { id: query.id },
+ select: { libraryId: true, libraryPath: true },
+ });
+ if (!value) throw createError({ statusCode: 404, message: "Not found" });
const unimportedVersions = await libraryManager.fetchUnimportedGameVersions(
- game.libraryId,
- game.libraryPath,
+ value.libraryId,
+ value.libraryPath,
);
if (!unimportedVersions)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
return unimportedVersions;
});
diff --git a/server/api/v1/admin/import/version/index.post.ts b/server/api/v1/admin/import/version/index.post.ts
index ab9ad1c..34c8fce 100644
--- a/server/api/v1/admin/import/version/index.post.ts
+++ b/server/api/v1/admin/import/version/index.post.ts
@@ -1,88 +1,71 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
-import { parsePlatform } from "~/server/internal/utils/parseplatform";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import libraryManager from "~~/server/internal/library";
-const ImportVersion = type({
+export const LaunchCommands = type({
+ name: "string > 0",
+ description: "string = ''",
+ launchCommand: "string > 0",
+ launchArgs: "string = ''",
+}).array();
+
+const ImportVersionBase = type({
id: "string",
version: "string",
+ name: "string?",
platform: "string",
- launch: "string = ''",
- launchArgs: "string = ''",
- setup: "string = ''",
- setupArgs: "string = ''",
- onlySetup: "boolean = false",
delta: "boolean = false",
+});
+
+const ImportGameVersion = type({
+ mode: "'game'",
+ onlySetup: "boolean = false",
umuId: "string = ''",
-}).configure(throwingArktype);
+
+ install: "string?",
+ installArgs: "string?",
+ launches: LaunchCommands,
+ uninstall: "string?",
+ uninstallArgs: "string?",
+});
+
+const ImportRedistVersion = type({
+ mode: "'redist'",
+ install: "string?",
+ installArgs: "string?",
+ launches: LaunchCommands,
+ uninstall: "string?",
+ uninstallArgs: "string?",
+});
+
+export const ImportVersion = ImportVersionBase.and(
+ ImportGameVersion.or(ImportRedistVersion),
+).configure(throwingArktype);
+
+export type ImportGameVersion = typeof ImportVersionBase.infer &
+ typeof ImportGameVersion.infer;
+
+export type ImportRedistVersion = typeof ImportVersionBase.infer &
+ typeof ImportRedistVersion.infer;
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["import:version:new"]);
if (!allowed) throw createError({ statusCode: 403 });
- const {
- id,
- version,
- platform,
- launch,
- launchArgs,
- setup,
- setupArgs,
- onlySetup,
- delta,
- umuId,
- } = await readDropValidatedBody(h3, ImportVersion);
-
- const platformParsed = parsePlatform(platform);
- if (!platformParsed)
- throw createError({ statusCode: 400, statusMessage: "Invalid platform." });
-
- if (delta) {
- const validOverlayVersions = await prisma.gameVersion.count({
- where: { gameId: id, platform: platformParsed, delta: false },
- });
- if (validOverlayVersions == 0)
- throw createError({
- statusCode: 400,
- statusMessage:
- "Update mode requires a pre-existing version for this platform.",
- });
- }
-
- if (onlySetup) {
- if (!setup)
- throw createError({
- statusCode: 400,
- statusMessage: 'Setup required in "setup mode".',
- });
- } else {
- if (!delta && !launch)
- throw createError({
- statusCode: 400,
- statusMessage: "Launch executable is required for non-update versions",
- });
- }
+ const body = await readDropValidatedBody(h3, ImportVersion);
// startup & delta require more complex checking logic
- const taskId = await libraryManager.importVersion(id, version, {
- platform,
- onlySetup,
-
- launch,
- launchArgs,
- setup,
- setupArgs,
-
- umuId,
- delta,
- });
+ const taskId = await libraryManager.importVersion(
+ body.id,
+ body.version,
+ body,
+ );
if (!taskId)
throw createError({
statusCode: 400,
- statusMessage: "Invalid options for import",
+ message: "Invalid options for import",
});
return { taskId: taskId };
diff --git a/server/api/v1/admin/import/version/preload.get.ts b/server/api/v1/admin/import/version/preload.get.ts
index d83b936..d8cafbe 100644
--- a/server/api/v1/admin/import/version/preload.get.ts
+++ b/server/api/v1/admin/import/version/preload.get.ts
@@ -1,27 +1,31 @@
-import aclManager from "~/server/internal/acls";
-import libraryManager from "~/server/internal/library";
+import { ArkErrors, type } from "arktype";
+import aclManager from "~~/server/internal/acls";
+import libraryManager, { VersionImportModes } from "~~/server/internal/library";
+
+export const PreloadQuery = type({
+ id: "string",
+ version: "string",
+ mode: type.enumerated(...VersionImportModes),
+});
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["import:version:read"]);
if (!allowed) throw createError({ statusCode: 403 });
- const query = await getQuery(h3);
- const gameId = query.id?.toString();
- const versionName = query.version?.toString();
- if (!gameId || !versionName)
- throw createError({
- statusCode: 400,
- statusMessage: "Missing id or version in request params",
- });
+ const rawQuery = await getQuery(h3);
+ const query = PreloadQuery(rawQuery);
+ if (query instanceof ArkErrors)
+ throw createError({ statusCode: 400, message: query.summary });
const preload = await libraryManager.fetchUnimportedVersionInformation(
- gameId,
- versionName,
+ query.id,
+ query.mode,
+ query.version,
);
if (!preload)
throw createError({
statusCode: 400,
- statusMessage: "Invalid game or version id/name",
+ message: "Invalid game or version id/name",
});
return preload;
diff --git a/server/api/v1/admin/index.get.ts b/server/api/v1/admin/index.get.ts
index 9d52d0f..6faaff1 100644
--- a/server/api/v1/admin/index.get.ts
+++ b/server/api/v1/admin/index.get.ts
@@ -1,4 +1,4 @@
-import aclManager from "~/server/internal/acls";
+import aclManager from "~~/server/internal/acls";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, []);
diff --git a/server/api/v1/admin/library/index.get.ts b/server/api/v1/admin/library/index.get.ts
index 5df358b..99187f0 100644
--- a/server/api/v1/admin/library/index.get.ts
+++ b/server/api/v1/admin/library/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import libraryManager from "~/server/internal/library";
+import aclManager from "~~/server/internal/acls";
+import libraryManager from "~~/server/internal/library";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["library:read"]);
@@ -7,9 +7,15 @@ export default defineEventHandler(async (h3) => {
const unimportedGames = await libraryManager.fetchUnimportedGames();
const games = await libraryManager.fetchGamesWithStatus();
+ const redists = await libraryManager.fetchRedistsWithStatus();
const libraries = await libraryManager.fetchLibraries();
// Fetch other library data here
- return { unimportedGames, games, hasLibraries: libraries.length > 0 };
+ return {
+ unimportedGames,
+ games,
+ redists,
+ hasLibraries: libraries.length > 0,
+ };
});
diff --git a/server/api/v1/admin/library/sources/index.delete.ts b/server/api/v1/admin/library/sources/index.delete.ts
index 165a9b2..e33e47c 100644
--- a/server/api/v1/admin/library/sources/index.delete.ts
+++ b/server/api/v1/admin/library/sources/index.delete.ts
@@ -1,8 +1,8 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
const DeleteLibrarySource = type({
id: "string",
diff --git a/server/api/v1/admin/library/sources/index.get.ts b/server/api/v1/admin/library/sources/index.get.ts
index 25b0f0b..89c2d63 100644
--- a/server/api/v1/admin/library/sources/index.get.ts
+++ b/server/api/v1/admin/library/sources/index.get.ts
@@ -1,6 +1,6 @@
-import type { LibraryModel } from "~/prisma/client/models";
-import aclManager from "~/server/internal/acls";
-import libraryManager from "~/server/internal/library";
+import type { LibraryModel } from "~~/prisma/client/models";
+import aclManager from "~~/server/internal/acls";
+import libraryManager from "~~/server/internal/library";
export type WorkingLibrarySource = LibraryModel & {
working: boolean;
diff --git a/server/api/v1/admin/library/sources/index.patch.ts b/server/api/v1/admin/library/sources/index.patch.ts
index 7cec327..57d4a48 100644
--- a/server/api/v1/admin/library/sources/index.patch.ts
+++ b/server/api/v1/admin/library/sources/index.patch.ts
@@ -1,10 +1,10 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
-import type { WorkingLibrarySource } from "~/server/api/v1/admin/library/sources/index.get";
-import { libraryConstructors } from "~/server/plugins/05.library-init";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
+import type { WorkingLibrarySource } from "~~/server/api/v1/admin/library/sources/index.get";
+import { libraryConstructors } from "~~/server/plugins/05.library-init";
const UpdateLibrarySource = type({
id: "string",
@@ -26,7 +26,7 @@ export default defineEventHandler<{ body: typeof UpdateLibrarySource.infer }>(
if (!source)
throw createError({
statusCode: 400,
- statusMessage: "Library source not found",
+ message: "Library source not found",
});
const constructor = libraryConstructors[source.backend];
@@ -61,7 +61,7 @@ export default defineEventHandler<{ body: typeof UpdateLibrarySource.infer }>(
} catch (e) {
throw createError({
statusCode: 400,
- statusMessage: `Failed to create source: ${e}`,
+ message: `Failed to create source: ${e}`,
});
}
},
diff --git a/server/api/v1/admin/library/sources/index.post.ts b/server/api/v1/admin/library/sources/index.post.ts
index 68ccce8..8dad442 100644
--- a/server/api/v1/admin/library/sources/index.post.ts
+++ b/server/api/v1/admin/library/sources/index.post.ts
@@ -1,12 +1,12 @@
import { type } from "arktype";
import { randomUUID } from "crypto";
-import { LibraryBackend } from "~/prisma/client/enums";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
-import { libraryConstructors } from "~/server/plugins/05.library-init";
-import type { WorkingLibrarySource } from "~/server/api/v1/admin/library/sources/index.get";
+import { LibraryBackend } from "~~/prisma/client/enums";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
+import { libraryConstructors } from "~~/server/plugins/05.library-init";
+import type { WorkingLibrarySource } from "~~/server/api/v1/admin/library/sources/index.get";
const CreateLibrarySource = type({
name: "string",
@@ -29,7 +29,7 @@ export default defineEventHandler<{ body: typeof CreateLibrarySource.infer }>(
if (!backend)
throw createError({
statusCode: 400,
- statusMessage: "Invalid source backend.",
+ message: "Invalid source backend.",
});
const constructor = libraryConstructors[backend];
@@ -64,7 +64,7 @@ export default defineEventHandler<{ body: typeof CreateLibrarySource.infer }>(
} catch (e) {
throw createError({
statusCode: 400,
- statusMessage: `Failed to create source: ${e}`,
+ message: `Failed to create source: ${e}`,
});
}
},
diff --git a/server/api/v1/admin/news/[id]/index.delete.ts b/server/api/v1/admin/news/[id]/index.delete.ts
index 30c4913..9fbb104 100644
--- a/server/api/v1/admin/news/[id]/index.delete.ts
+++ b/server/api/v1/admin/news/[id]/index.delete.ts
@@ -1,6 +1,6 @@
import { defineEventHandler, createError } from "h3";
-import aclManager from "~/server/internal/acls";
-import newsManager from "~/server/internal/news";
+import aclManager from "~~/server/internal/acls";
+import newsManager from "~~/server/internal/news";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["news:delete"]);
diff --git a/server/api/v1/admin/news/[id]/index.get.ts b/server/api/v1/admin/news/[id]/index.get.ts
index 50161e3..cb54b25 100644
--- a/server/api/v1/admin/news/[id]/index.get.ts
+++ b/server/api/v1/admin/news/[id]/index.get.ts
@@ -1,6 +1,6 @@
import { defineEventHandler, createError } from "h3";
-import aclManager from "~/server/internal/acls";
-import newsManager from "~/server/internal/news";
+import aclManager from "~~/server/internal/acls";
+import newsManager from "~~/server/internal/news";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["news:read"]);
diff --git a/server/api/v1/admin/news/index.get.ts b/server/api/v1/admin/news/index.get.ts
index 392f4b7..316c565 100644
--- a/server/api/v1/admin/news/index.get.ts
+++ b/server/api/v1/admin/news/index.get.ts
@@ -1,6 +1,6 @@
import { defineEventHandler, getQuery } from "h3";
-import aclManager from "~/server/internal/acls";
-import newsManager from "~/server/internal/news";
+import aclManager from "~~/server/internal/acls";
+import newsManager from "~~/server/internal/news";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["news:read"]);
@@ -14,13 +14,13 @@ export default defineEventHandler(async (h3) => {
const orderBy = query.order as "asc" | "desc";
if (orderBy) {
if (typeof orderBy !== "string" || !["asc", "desc"].includes(orderBy))
- throw createError({ statusCode: 400, statusMessage: "Invalid order" });
+ throw createError({ statusCode: 400, message: "Invalid order" });
}
const tags = query.tags as string[] | undefined;
if (tags) {
if (typeof tags !== "object" || !Array.isArray(tags))
- throw createError({ statusCode: 400, statusMessage: "Invalid tags" });
+ throw createError({ statusCode: 400, message: "Invalid tags" });
}
const options = {
diff --git a/server/api/v1/admin/news/index.post.ts b/server/api/v1/admin/news/index.post.ts
index fb09c2e..1de0fae 100644
--- a/server/api/v1/admin/news/index.post.ts
+++ b/server/api/v1/admin/news/index.post.ts
@@ -1,8 +1,8 @@
import { ArkErrors, type } from "arktype";
import { defineEventHandler, createError } from "h3";
-import aclManager from "~/server/internal/acls";
-import newsManager from "~/server/internal/news";
-import { handleFileUpload } from "~/server/internal/utils/handlefileupload";
+import aclManager from "~~/server/internal/acls";
+import newsManager from "~~/server/internal/news";
+import { handleFileUpload } from "~~/server/internal/utils/handlefileupload";
const CreateNews = type({
title: "string",
@@ -19,27 +19,27 @@ export default defineEventHandler(async (h3) => {
if (!form)
throw createError({
statusCode: 400,
- statusMessage: "This endpoint requires multipart form data.",
+ message: "This endpoint requires multipart form data.",
});
const uploadResult = await handleFileUpload(h3, {}, ["internal:read"], 1);
if (!uploadResult)
throw createError({
statusCode: 400,
- statusMessage: "Failed to upload file",
+ message: "Failed to upload file",
});
const [imageIds, options, pull, _dump] = uploadResult;
const body = await CreateNews(options);
if (body instanceof ArkErrors)
- throw createError({ statusCode: 400, statusMessage: body.summary });
+ throw createError({ statusCode: 400, message: body.summary });
const parsedTags = JSON.parse(body.tags);
if (typeof parsedTags !== "object" || !Array.isArray(parsedTags))
throw createError({
statusCode: 400,
- statusMessage: "Tags must be an array",
+ message: "Tags must be an array",
});
const imageId = imageIds.at(0);
diff --git a/server/api/v1/admin/platforms.get.ts b/server/api/v1/admin/platforms.get.ts
new file mode 100644
index 0000000..3dcbe37
--- /dev/null
+++ b/server/api/v1/admin/platforms.get.ts
@@ -0,0 +1,11 @@
+import aclManager from "~~/server/internal/acls"
+import prisma from "~~/server/internal/db/database";
+
+export default defineEventHandler(async (h3) => {
+ const allowed = await aclManager.allowSystemACL(h3, ["import:version:read"]);
+ if(!allowed) throw createError({statusCode: 403});
+
+ const userPlatforms = await prisma.userPlatform.findMany({});
+
+ return userPlatforms;
+})
diff --git a/server/api/v1/admin/redist/[id]/index.delete.ts b/server/api/v1/admin/redist/[id]/index.delete.ts
new file mode 100644
index 0000000..ab39b94
--- /dev/null
+++ b/server/api/v1/admin/redist/[id]/index.delete.ts
@@ -0,0 +1,19 @@
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+
+export default defineEventHandler(async (h3) => {
+ const allowed = await aclManager.allowSystemACL(h3, ["redist:delete"]);
+ if (!allowed) throw createError({ statusCode: 403 });
+
+ const id = getRouterParam(h3, "id")!;
+
+ const { count } = await prisma.redist.deleteMany({
+ where: {
+ id,
+ },
+ });
+
+ if (count == 0) throw createError({ statusCode: 404 });
+
+ return;
+});
diff --git a/server/api/v1/admin/redist/[id]/index.get.ts b/server/api/v1/admin/redist/[id]/index.get.ts
new file mode 100644
index 0000000..751be85
--- /dev/null
+++ b/server/api/v1/admin/redist/[id]/index.get.ts
@@ -0,0 +1,38 @@
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
+
+export default defineEventHandler(async (h3) => {
+ const allowed = await aclManager.allowSystemACL(h3, ["redist:read"]);
+ if (!allowed) throw createError({ statusCode: 403 });
+
+ const id = getRouterParam(h3, "id")!;
+
+ const redist = await prisma.redist.findUnique({
+ where: {
+ id,
+ },
+ include: {
+ platform: true,
+ versions: true,
+ },
+ });
+ if (!redist)
+ throw createError({
+ statusCode: 404,
+ message: "Redistributable not found.",
+ });
+
+ const unimportedVersions = await libraryManager.fetchUnimportedGameVersions(
+ redist.libraryId,
+ redist.libraryPath,
+ );
+
+ if (!unimportedVersions)
+ throw createError({
+ statusCode: 500,
+ message: "Failed to fetch unimported versions for redistributable.",
+ });
+
+ return { redist, unimportedVersions };
+});
diff --git a/server/api/v1/admin/redist/[id]/index.patch.ts b/server/api/v1/admin/redist/[id]/index.patch.ts
new file mode 100644
index 0000000..7aa7d95
--- /dev/null
+++ b/server/api/v1/admin/redist/[id]/index.patch.ts
@@ -0,0 +1,27 @@
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+
+export default defineEventHandler(async (h3) => {
+ const allowed = await aclManager.allowSystemACL(h3, ["redist:update"]);
+ if (!allowed) throw createError({ statusCode: 403 });
+
+ const body = await readBody(h3);
+
+ const id = body.id;
+ if (!id || typeof id !== "string")
+ throw createError({ statusCode: 400, message: "ID required in body." });
+
+ const updateParams = body;
+ delete updateParams["id"];
+
+ try {
+ return await prisma.redist.update({
+ where: {
+ id,
+ },
+ data: updateParams,
+ });
+ } catch (e) {
+ throw createError({ statusCode: 400, message: (e as string)?.toString() });
+ }
+});
diff --git a/server/api/v1/admin/redist/index.get.ts b/server/api/v1/admin/redist/index.get.ts
new file mode 100644
index 0000000..e131c07
--- /dev/null
+++ b/server/api/v1/admin/redist/index.get.ts
@@ -0,0 +1,16 @@
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+
+export default defineEventHandler(async (h3) => {
+ const allowed = await aclManager.allowSystemACL(h3, ["redist:read"]);
+ if (!allowed) throw createError({ statusCode: 403 });
+
+ return await prisma.redist.findMany({
+ select: {
+ id: true,
+ mName: true,
+ mShortDescription: true,
+ mIconObjectId: true,
+ },
+ });
+});
diff --git a/server/api/v1/admin/settings/dummy-data.get.ts b/server/api/v1/admin/settings/dummy-data.get.ts
index 6f62372..ff6bb30 100644
--- a/server/api/v1/admin/settings/dummy-data.get.ts
+++ b/server/api/v1/admin/settings/dummy-data.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.getUserACL(h3, ["settings:read"]);
diff --git a/server/api/v1/admin/settings/index.patch.ts b/server/api/v1/admin/settings/index.patch.ts
index ef99441..f56da1b 100644
--- a/server/api/v1/admin/settings/index.patch.ts
+++ b/server/api/v1/admin/settings/index.patch.ts
@@ -1,8 +1,8 @@
import { type } from "arktype";
-import { applicationSettings } from "~/server/internal/config/application-configuration";
-import { readDropValidatedBody } from "~/server/arktype";
+import { applicationSettings } from "~~/server/internal/config/application-configuration";
+import { readDropValidatedBody } from "~~/server/arktype";
import { defineEventHandler, createError } from "h3";
-import aclManager from "~/server/internal/acls";
+import aclManager from "~~/server/internal/acls";
const UpdateSettings = type({
showGamePanelTextDecoration: "boolean",
diff --git a/server/api/v1/admin/tags/[id]/index.delete.ts b/server/api/v1/admin/tags/[id]/index.delete.ts
index 4279257..b37c6dc 100644
--- a/server/api/v1/admin/tags/[id]/index.delete.ts
+++ b/server/api/v1/admin/tags/[id]/index.delete.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["tags:delete"]);
@@ -9,6 +9,6 @@ export default defineEventHandler(async (h3) => {
const tag = await prisma.gameTag.deleteMany({ where: { id } });
if (tag.count == 0)
- throw createError({ statusCode: 404, statusMessage: "Tag not found" });
+ throw createError({ statusCode: 404, message: "Tag not found" });
return;
});
diff --git a/server/api/v1/admin/tags/index.get.ts b/server/api/v1/admin/tags/index.get.ts
index d8f1c1e..1713431 100644
--- a/server/api/v1/admin/tags/index.get.ts
+++ b/server/api/v1/admin/tags/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["tags:read"]);
diff --git a/server/api/v1/admin/tags/index.post.ts b/server/api/v1/admin/tags/index.post.ts
index 15698e7..e06eaae 100644
--- a/server/api/v1/admin/tags/index.post.ts
+++ b/server/api/v1/admin/tags/index.post.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const CreateTag = type({
name: "string",
diff --git a/server/api/v1/admin/task/index.get.ts b/server/api/v1/admin/task/index.get.ts
index 690dce8..2395831 100644
--- a/server/api/v1/admin/task/index.get.ts
+++ b/server/api/v1/admin/task/index.get.ts
@@ -1,7 +1,7 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import type { TaskMessage } from "~/server/internal/tasks";
-import taskHandler from "~/server/internal/tasks";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import type { TaskMessage } from "~~/server/internal/tasks";
+import taskHandler from "~~/server/internal/tasks";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["task:read"]);
@@ -10,7 +10,7 @@ export default defineEventHandler(async (h3) => {
if (!allAcls)
throw createError({
statusCode: 403,
- statusMessage: "Somehow no ACLs on authenticated request.",
+ message: "Somehow no ACLs on authenticated request.",
});
const runningTasks = (await taskHandler.runningTasks()).map((e) => e.id);
diff --git a/server/api/v1/admin/task/index.post.ts b/server/api/v1/admin/task/index.post.ts
index dc28190..2339f84 100644
--- a/server/api/v1/admin/task/index.post.ts
+++ b/server/api/v1/admin/task/index.post.ts
@@ -1,12 +1,11 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager from "~/server/internal/acls";
-import taskHandler from "~/server/internal/tasks";
-import type { TaskGroup } from "~/server/internal/tasks/group";
-import { taskGroups } from "~/server/internal/tasks/group";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager from "~~/server/internal/acls";
+import taskHandler from "~~/server/internal/tasks";
+import { TASK_GROUPS } from "~~/server/internal/tasks/group";
const StartTask = type({
- taskGroup: type("string"),
+ taskGroup: type.enumerated(...TASK_GROUPS),
}).configure(throwingArktype);
export default defineEventHandler(async (h3) => {
@@ -14,18 +13,12 @@ export default defineEventHandler(async (h3) => {
if (!allowed) throw createError({ statusCode: 403 });
const body = await readDropValidatedBody(h3, StartTask);
- const taskGroup = body.taskGroup as TaskGroup;
- if (!taskGroups[taskGroup])
- throw createError({
- statusCode: 400,
- statusMessage: "Invalid task group.",
- });
- const task = await taskHandler.runTaskGroupByName(taskGroup);
+ const task = await taskHandler.runTaskGroupByName(body.taskGroup);
if (!task)
throw createError({
statusCode: 500,
- statusMessage: "Could not start task.",
+ message: "Could not start task.",
});
return { id: task };
});
diff --git a/server/api/v1/admin/token/[id]/index.delete.ts b/server/api/v1/admin/token/[id]/index.delete.ts
index 1e33730..f72e161 100644
--- a/server/api/v1/admin/token/[id]/index.delete.ts
+++ b/server/api/v1/admin/token/[id]/index.delete.ts
@@ -1,6 +1,6 @@
-import { APITokenMode } from "~/prisma/client/enums";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, []); // No ACLs only allows session authentication
@@ -10,14 +10,14 @@ export default defineEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "No id in router params",
+ message: "No id in router params",
});
const deleted = await prisma.aPIToken.delete({
where: { id: id, mode: APITokenMode.System },
})!;
if (!deleted)
- throw createError({ statusCode: 404, statusMessage: "Token not found" });
+ throw createError({ statusCode: 404, message: "Token not found" });
return;
});
diff --git a/server/api/v1/admin/token/acls.get.ts b/server/api/v1/admin/token/acls.get.ts
index 09b4e0f..f039315 100644
--- a/server/api/v1/admin/token/acls.get.ts
+++ b/server/api/v1/admin/token/acls.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import { systemACLDescriptions } from "~/server/internal/acls/descriptions";
+import aclManager from "~~/server/internal/acls";
+import { systemACLDescriptions } from "~~/server/internal/acls/descriptions";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, []); // No ACLs only allows session authentication
diff --git a/server/api/v1/admin/token/index.get.ts b/server/api/v1/admin/token/index.get.ts
index 2438a4b..ce8410e 100644
--- a/server/api/v1/admin/token/index.get.ts
+++ b/server/api/v1/admin/token/index.get.ts
@@ -1,6 +1,6 @@
-import { APITokenMode } from "~/prisma/client/enums";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, []); // No ACLs only allows session authentication
diff --git a/server/api/v1/admin/token/index.post.ts b/server/api/v1/admin/token/index.post.ts
index 421fe8d..98b000e 100644
--- a/server/api/v1/admin/token/index.post.ts
+++ b/server/api/v1/admin/token/index.post.ts
@@ -1,8 +1,8 @@
import { type } from "arktype";
-import { APITokenMode } from "~/prisma/client/enums";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager, { systemACLs } from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager, { systemACLs } from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const CreateToken = type({
name: "string",
@@ -22,7 +22,7 @@ export default defineEventHandler(async (h3) => {
if (invalidACLs.length > 0)
throw createError({
statusCode: 400,
- statusMessage: `Invalid ACLs: ${invalidACLs.join(", ")}`,
+ message: `Invalid ACLs: ${invalidACLs.join(", ")}`,
});
const token = await prisma.aPIToken.create({
diff --git a/server/api/v1/admin/users/[id]/index.delete.ts b/server/api/v1/admin/users/[id]/index.delete.ts
index 4b5b141..7f6025d 100644
--- a/server/api/v1/admin/users/[id]/index.delete.ts
+++ b/server/api/v1/admin/users/[id]/index.delete.ts
@@ -1,7 +1,7 @@
import { defineEventHandler, createError } from "h3";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import userStatsManager from "~/server/internal/userstats";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import userStatsManager from "~~/server/internal/userstats";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["user:delete"]);
@@ -20,12 +20,12 @@ export default defineEventHandler(async (h3) => {
if (userId === "system")
throw createError({
statusCode: 400,
- statusMessage: "Cannot interact with system user.",
+ message: "Cannot interact with system user.",
});
const user = await prisma.user.findUnique({ where: { id: userId } });
if (!user)
- throw createError({ statusCode: 404, statusMessage: "User not found." });
+ throw createError({ statusCode: 404, message: "User not found." });
await prisma.user.delete({ where: { id: userId } });
await userStatsManager.deleteUser();
diff --git a/server/api/v1/admin/users/[id]/index.get.ts b/server/api/v1/admin/users/[id]/index.get.ts
index f90db23..e6f8f1a 100644
--- a/server/api/v1/admin/users/[id]/index.get.ts
+++ b/server/api/v1/admin/users/[id]/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["user:read"]);
@@ -9,18 +9,18 @@ export default defineEventHandler(async (h3) => {
if (!userId)
throw createError({
statusCode: 400,
- statusMessage: "No userId in route.",
+ message: "No userId in route.",
});
if (userId == "system")
throw createError({
statusCode: 400,
- statusMessage: "Cannot delete system user.",
+ message: "Cannot fetch system user.",
});
const user = await prisma.user.findUnique({ where: { id: userId } });
if (!user)
- throw createError({ statusCode: 404, statusMessage: "User not found." });
+ throw createError({ statusCode: 404, message: "User not found." });
return user;
});
diff --git a/server/api/v1/admin/users/index.get.ts b/server/api/v1/admin/users/index.get.ts
index 43a90fe..2db9ad7 100644
--- a/server/api/v1/admin/users/index.get.ts
+++ b/server/api/v1/admin/users/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["user:read"]);
diff --git a/server/api/v1/auth/index.get.ts b/server/api/v1/auth/index.get.ts
index 1582f1b..ce75ba0 100644
--- a/server/api/v1/auth/index.get.ts
+++ b/server/api/v1/auth/index.get.ts
@@ -1,4 +1,4 @@
-import authManager from "~/server/internal/auth";
+import authManager from "~~/server/internal/auth";
export default defineEventHandler(() => {
return authManager.getEnabledAuthProviders();
diff --git a/server/api/v1/auth/signin/simple.post.ts b/server/api/v1/auth/signin/simple.post.ts
index 3e4ca03..3922a2f 100644
--- a/server/api/v1/auth/signin/simple.post.ts
+++ b/server/api/v1/auth/signin/simple.post.ts
@@ -1,13 +1,13 @@
-import { AuthMec } from "~/prisma/client/enums";
+import { AuthMec } from "~~/prisma/client/enums";
import type { JsonArray } from "@prisma/client/runtime/library";
import { type } from "arktype";
-import prisma from "~/server/internal/db/database";
-import sessionHandler from "~/server/internal/session";
+import prisma from "~~/server/internal/db/database";
+import sessionHandler from "~~/server/internal/session";
import authManager, {
checkHashArgon2,
checkHashBcrypt,
-} from "~/server/internal/auth";
-import { logger } from "~/server/internal/logging";
+} from "~~/server/internal/auth";
+import { logger } from "~~/server/internal/logging";
const signinValidator = type({
username: "string",
@@ -23,7 +23,7 @@ export default defineEventHandler<{
if (!authManager.getAuthProviders().Simple)
throw createError({
statusCode: 403,
- statusMessage: t("errors.auth.method.signinDisabled"),
+ message: t("errors.auth.method.signinDisabled"),
});
const body = signinValidator(await readBody(h3));
@@ -33,7 +33,7 @@ export default defineEventHandler<{
throw createError({
statusCode: 400,
- statusMessage: body.summary,
+ message: body.summary,
});
}
@@ -57,13 +57,13 @@ export default defineEventHandler<{
if (!authMek)
throw createError({
statusCode: 401,
- statusMessage: t("errors.auth.invalidUserOrPass"),
+ message: t("errors.auth.invalidUserOrPass"),
});
if (!authMek.user.enabled)
throw createError({
statusCode: 403,
- statusMessage: t("errors.auth.disabled"),
+ message: t("errors.auth.disabled"),
});
// LEGACY bcrypt
@@ -74,13 +74,13 @@ export default defineEventHandler<{
if (!hash)
throw createError({
statusCode: 500,
- statusMessage: t("errors.auth.invalidPassState"),
+ message: t("errors.auth.invalidPassState"),
});
if (!(await checkHashBcrypt(body.password, hash)))
throw createError({
statusCode: 401,
- statusMessage: t("errors.auth.invalidUserOrPass"),
+ message: t("errors.auth.invalidUserOrPass"),
});
// TODO: send user to forgot password screen or something to force them to change their password to new system
@@ -93,13 +93,13 @@ export default defineEventHandler<{
if (!hash || typeof hash !== "string")
throw createError({
statusCode: 500,
- statusMessage: t("errors.auth.invalidPassState"),
+ message: t("errors.auth.invalidPassState"),
});
if (!(await checkHashArgon2(body.password, hash)))
throw createError({
statusCode: 401,
- statusMessage: t("errors.auth.invalidUserOrPass"),
+ message: t("errors.auth.invalidUserOrPass"),
});
await sessionHandler.signin(h3, authMek.userId, body.rememberMe);
diff --git a/server/api/v1/auth/signup/simple.get.ts b/server/api/v1/auth/signup/simple.get.ts
index ad6c496..c72cf72 100644
--- a/server/api/v1/auth/signup/simple.get.ts
+++ b/server/api/v1/auth/signup/simple.get.ts
@@ -1,6 +1,6 @@
-import prisma from "~/server/internal/db/database";
-import taskHandler from "~/server/internal/tasks";
-import authManager from "~/server/internal/auth";
+import prisma from "~~/server/internal/db/database";
+import taskHandler from "~~/server/internal/tasks";
+import authManager from "~~/server/internal/auth";
export default defineEventHandler(async (h3) => {
const t = await useTranslation(h3);
@@ -8,7 +8,7 @@ export default defineEventHandler(async (h3) => {
if (!authManager.getAuthProviders().Simple)
throw createError({
statusCode: 403,
- statusMessage: t("errors.auth.method.signinDisabled"),
+ message: t("errors.auth.method.signinDisabled"),
});
const query = getQuery(h3);
@@ -16,7 +16,7 @@ export default defineEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: t("errors.auth.inviteIdRequired"),
+ message: t("errors.auth.inviteIdRequired"),
});
taskHandler.runTaskGroupByName("cleanup:invitations");
@@ -24,7 +24,7 @@ export default defineEventHandler(async (h3) => {
if (!invitation)
throw createError({
statusCode: 404,
- statusMessage: t("errors.auth.invalidInvite"),
+ message: t("errors.auth.invalidInvite"),
});
return invitation;
diff --git a/server/api/v1/auth/signup/simple.post.ts b/server/api/v1/auth/signup/simple.post.ts
index 9f11f92..4e08d5a 100644
--- a/server/api/v1/auth/signup/simple.post.ts
+++ b/server/api/v1/auth/signup/simple.post.ts
@@ -1,12 +1,12 @@
-import { AuthMec } from "~/prisma/client/enums";
-import prisma from "~/server/internal/db/database";
-import authManager, { createHashArgon2 } from "~/server/internal/auth";
+import { AuthMec } from "~~/prisma/client/enums";
+import prisma from "~~/server/internal/db/database";
+import authManager, { createHashArgon2 } from "~~/server/internal/auth";
import * as jdenticon from "jdenticon";
-import objectHandler from "~/server/internal/objects";
+import objectHandler from "~~/server/internal/objects";
import { type } from "arktype";
import { randomUUID } from "node:crypto";
-import { throwingArktype } from "~/server/arktype";
-import userStatsManager from "~/server/internal/userstats";
+import { throwingArktype } from "~~/server/arktype";
+import userStatsManager from "~~/server/internal/userstats";
export const SharedRegisterValidator = type({
username: "string >= 5",
@@ -27,7 +27,7 @@ export default defineEventHandler<{
if (!authManager.getAuthProviders().Simple)
throw createError({
statusCode: 403,
- statusMessage: t("errors.auth.method.signinDisabled"),
+ message: t("errors.auth.method.signinDisabled"),
});
const user = await readValidatedBody(h3, CreateUserValidator);
@@ -38,7 +38,7 @@ export default defineEventHandler<{
if (!invitation)
throw createError({
statusCode: 401,
- statusMessage: t("errors.auth.invalidInvite"),
+ message: t("errors.auth.invalidInvite"),
});
// reuse items from invite
@@ -51,7 +51,7 @@ export default defineEventHandler<{
if (existing > 0)
throw createError({
statusCode: 400,
- statusMessage: t("errors.auth.usernameTaken"),
+ message: t("errors.auth.usernameTaken"),
});
const userId = randomUUID();
diff --git a/server/api/v1/client/auth/callback/index.post.ts b/server/api/v1/client/auth/callback/index.post.ts
index bc63be7..f9670a8 100644
--- a/server/api/v1/client/auth/callback/index.post.ts
+++ b/server/api/v1/client/auth/callback/index.post.ts
@@ -1,5 +1,5 @@
-import clientHandler from "~/server/internal/clients/handler";
-import sessionHandler from "~/server/internal/session";
+import clientHandler from "~~/server/internal/clients/handler";
+import sessionHandler from "~~/server/internal/session";
export default defineEventHandler(async (h3) => {
const user = await sessionHandler.getSession(h3);
@@ -12,13 +12,13 @@ export default defineEventHandler(async (h3) => {
if (!client)
throw createError({
statusCode: 400,
- statusMessage: "Invalid or expired client ID.",
+ message: "Invalid or expired client ID.",
});
if (client.userId != user.userId)
throw createError({
statusCode: 403,
- statusMessage: "Not allowed to authorize this client.",
+ message: "Not allowed to authorize this client.",
});
const token = await clientHandler.generateAuthToken(clientId);
diff --git a/server/api/v1/client/auth/code/index.get.ts b/server/api/v1/client/auth/code/index.get.ts
index 74bc6e8..04488e9 100644
--- a/server/api/v1/client/auth/code/index.get.ts
+++ b/server/api/v1/client/auth/code/index.get.ts
@@ -1,5 +1,5 @@
-import clientHandler from "~/server/internal/clients/handler";
-import sessionHandler from "~/server/internal/session";
+import clientHandler from "~~/server/internal/clients/handler";
+import sessionHandler from "~~/server/internal/session";
export default defineEventHandler(async (h3) => {
const user = await sessionHandler.getSession(h3);
@@ -10,12 +10,12 @@ export default defineEventHandler(async (h3) => {
if (!code)
throw createError({
statusCode: 400,
- statusMessage: "Code required in query params.",
+ message: "Code required in query params.",
});
const clientId = await clientHandler.fetchClientIdByCode(code);
if (!clientId)
- throw createError({ statusCode: 400, statusMessage: "Invalid code." });
+ throw createError({ statusCode: 400, message: "Invalid code." });
return clientId;
});
diff --git a/server/api/v1/client/auth/code/index.post.ts b/server/api/v1/client/auth/code/index.post.ts
index 593b773..a96aea5 100644
--- a/server/api/v1/client/auth/code/index.post.ts
+++ b/server/api/v1/client/auth/code/index.post.ts
@@ -1,5 +1,5 @@
-import clientHandler from "~/server/internal/clients/handler";
-import sessionHandler from "~/server/internal/session";
+import clientHandler from "~~/server/internal/clients/handler";
+import sessionHandler from "~~/server/internal/session";
export default defineEventHandler(async (h3) => {
const user = await sessionHandler.getSession(h3);
@@ -12,19 +12,19 @@ export default defineEventHandler(async (h3) => {
if (!client)
throw createError({
statusCode: 400,
- statusMessage: "Invalid or expired client ID.",
+ message: "Invalid or expired client ID.",
});
if (client.userId != user.userId)
throw createError({
statusCode: 403,
- statusMessage: "Not allowed to authorize this client.",
+ message: "Not allowed to authorize this client.",
});
if (!client.peer)
throw createError({
statusCode: 500,
- statusMessage: "No client listening for authorization.",
+ message: "No client listening for authorization.",
});
const token = await clientHandler.generateAuthToken(clientId);
diff --git a/server/api/v1/client/auth/code/ws.get.ts b/server/api/v1/client/auth/code/ws.get.ts
index 637d8df..c809f0f 100644
--- a/server/api/v1/client/auth/code/ws.get.ts
+++ b/server/api/v1/client/auth/code/ws.get.ts
@@ -1,5 +1,5 @@
import type { FetchError } from "ofetch";
-import clientHandler from "~/server/internal/clients/handler";
+import clientHandler from "~~/server/internal/clients/handler";
export default defineWebSocketHandler({
async open(peer) {
@@ -9,14 +9,14 @@ export default defineWebSocketHandler({
if (!code)
throw createError({
statusCode: 400,
- statusMessage: "Code required in Authorization header.",
+ message: "Code required in Authorization header.",
});
await clientHandler.connectCodeListener(code, peer);
} catch (e) {
peer.send(
JSON.stringify({
type: "error",
- value: (e as FetchError)?.statusMessage,
+ value: (e as FetchError)?.message,
}),
);
peer.close();
diff --git a/server/api/v1/client/auth/handshake.post.ts b/server/api/v1/client/auth/handshake.post.ts
index c154c8c..a2942a2 100644
--- a/server/api/v1/client/auth/handshake.post.ts
+++ b/server/api/v1/client/auth/handshake.post.ts
@@ -1,5 +1,5 @@
-import clientHandler from "~/server/internal/clients/handler";
-import { useCertificateAuthority } from "~/server/plugins/ca";
+import clientHandler from "~~/server/internal/clients/handler";
+import { useCertificateAuthority } from "~~/server/plugins/ca";
export default defineEventHandler(async (h3) => {
const body = await readBody(h3);
@@ -8,24 +8,24 @@ export default defineEventHandler(async (h3) => {
if (!clientId || !token)
throw createError({
statusCode: 400,
- statusMessage: "Missing token or client ID from body",
+ message: "Missing token or client ID from body",
});
const metadata = await clientHandler.fetchClient(clientId);
if (!metadata)
throw createError({
statusCode: 403,
- statusMessage: "Invalid client ID",
+ message: "Invalid client ID",
});
if (!metadata.authToken || !metadata.userId)
throw createError({
statusCode: 400,
- statusMessage: "Un-authorized client ID",
+ message: "Un-authorized client ID",
});
if (metadata.authToken !== token)
throw createError({
statusCode: 403,
- statusMessage: "Invalid token",
+ message: "Invalid token",
});
const certificateAuthority = useCertificateAuthority();
diff --git a/server/api/v1/client/auth/index.get.ts b/server/api/v1/client/auth/index.get.ts
index 92cf16c..b55706c 100644
--- a/server/api/v1/client/auth/index.get.ts
+++ b/server/api/v1/client/auth/index.get.ts
@@ -1,5 +1,5 @@
-import clientHandler from "~/server/internal/clients/handler";
-import sessionHandler from "~/server/internal/session";
+import clientHandler from "~~/server/internal/clients/handler";
+import sessionHandler from "~~/server/internal/session";
export default defineEventHandler(async (h3) => {
const user = await sessionHandler.getSession(h3);
@@ -10,20 +10,20 @@ export default defineEventHandler(async (h3) => {
if (!providedClientId)
throw createError({
statusCode: 400,
- statusMessage: "Provide client ID in request params as 'id'",
+ message: "Provide client ID in request params as 'id'",
});
const client = await clientHandler.fetchClient(providedClientId);
if (!client)
throw createError({
statusCode: 404,
- statusMessage: "Request not found.",
+ message: "Request not found.",
});
if (client.userId && user.userId !== client.userId)
throw createError({
statusCode: 400,
- statusMessage: "Client already claimed.",
+ message: "Client already claimed.",
});
await clientHandler.attachUserId(providedClientId, user.userId);
diff --git a/server/api/v1/client/auth/initiate.post.ts b/server/api/v1/client/auth/initiate.post.ts
index 64186b5..f0fc7f5 100644
--- a/server/api/v1/client/auth/initiate.post.ts
+++ b/server/api/v1/client/auth/initiate.post.ts
@@ -1,20 +1,20 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
+import type { ClientCapabilities } from "~~/prisma/client/enums";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
import type {
CapabilityConfiguration,
- InternalClientCapability,
-} from "~/server/internal/clients/capabilities";
+} from "~~/server/internal/clients/capabilities";
import capabilityManager, {
validCapabilities,
-} from "~/server/internal/clients/capabilities";
-import clientHandler, { AuthMode } from "~/server/internal/clients/handler";
-import { parsePlatform } from "~/server/internal/utils/parseplatform";
+} from "~~/server/internal/clients/capabilities";
+import clientHandler, { AuthModes } from "~~/server/internal/clients/handler";
+import { parsePlatform } from "~~/server/internal/utils/parseplatform";
const ClientAuthInitiate = type({
name: "string",
platform: "string",
capabilities: "object",
- mode: type.valueOf(AuthMode).default(AuthMode.Callback),
+ mode: type.enumerated(...AuthModes).default("callback"),
}).configure(throwingArktype);
export default defineEventHandler(async (h3) => {
@@ -28,11 +28,11 @@ export default defineEventHandler(async (h3) => {
if (!platform)
throw createError({
statusCode: 400,
- statusMessage: "Invalid or unsupported platform",
+ message: "Invalid or unsupported platform",
});
const capabilityIterable = Object.entries(capabilities) as Array<
- [InternalClientCapability, object]
+ [ClientCapabilities, object]
>;
if (
capabilityIterable.length > 0 &&
@@ -42,7 +42,7 @@ export default defineEventHandler(async (h3) => {
)
throw createError({
statusCode: 400,
- statusMessage: "Invalid capabilities.",
+ message: "Invalid capabilities.",
});
if (
@@ -57,7 +57,7 @@ export default defineEventHandler(async (h3) => {
)
throw createError({
statusCode: 400,
- statusMessage: "Invalid capability configuration.",
+ message: "Invalid capability configuration.",
});
const result = await clientHandler.initiate({
diff --git a/server/api/v1/client/capability/index.post.ts b/server/api/v1/client/capability/index.post.ts
index a33f690..d55d680 100644
--- a/server/api/v1/client/capability/index.post.ts
+++ b/server/api/v1/client/capability/index.post.ts
@@ -1,49 +1,32 @@
-import type { InternalClientCapability } from "~/server/internal/clients/capabilities";
-import capabilityManager, {
- validCapabilities,
-} from "~/server/internal/clients/capabilities";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import notificationSystem from "~/server/internal/notifications";
+import { type } from "arktype";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import capabilityManager from "~~/server/internal/clients/capabilities";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import notificationSystem from "~~/server/internal/notifications";
+
+const SetCapability = type({
+ capability: type.enumerated(...Object.values(ClientCapabilities)),
+ configuration: "object"
+}).configure(throwingArktype);
export default defineClientEventHandler(
async (h3, { clientId, fetchClient, fetchUser }) => {
- const body = await readBody(h3);
- const rawCapability = body.capability;
- const configuration = body.configuration;
-
- if (!rawCapability || typeof rawCapability !== "string")
- throw createError({
- statusCode: 400,
- statusMessage: "capability must be a string",
- });
-
- if (!configuration || typeof configuration !== "object")
- throw createError({
- statusCode: 400,
- statusMessage: "configuration must be an object",
- });
-
- const capability = rawCapability as InternalClientCapability;
-
- if (!validCapabilities.includes(capability))
- throw createError({
- statusCode: 400,
- statusMessage: "Invalid capability.",
- });
+ const body = await readDropValidatedBody(h3, SetCapability);
const isValid = await capabilityManager.validateCapabilityConfiguration(
- capability,
- configuration,
+ body.capability,
+ body.configuration,
);
if (!isValid)
throw createError({
statusCode: 400,
- statusMessage: "Invalid capability configuration.",
+ message: "Invalid capability configuration.",
});
await capabilityManager.upsertClientCapability(
- capability,
- configuration,
+ body.capability,
+ body.configuration,
clientId,
);
@@ -51,9 +34,9 @@ export default defineClientEventHandler(
const user = await fetchUser();
await notificationSystem.push(user.id, {
- nonce: `capability-${clientId}-${capability}`,
- title: `"${client.name}" can now access ${capability}`,
- description: `A device called "${client.name}" now has access to your ${capability}.`,
+ nonce: `capability-${clientId}-${body.capability}`,
+ title: `"${client.name}" can now access ${body.capability}`,
+ description: `A device called "${client.name}" now has access to your ${body.capability}.`,
actions: ["Review|/account/devices"],
acls: ["user:clients:read"],
});
diff --git a/server/api/v1/client/chunk.get.ts b/server/api/v1/client/chunk.get.ts
index 030b796..6f24a3b 100644
--- a/server/api/v1/client/chunk.get.ts
+++ b/server/api/v1/client/chunk.get.ts
@@ -1,7 +1,7 @@
-import cacheHandler from "~/server/internal/cache";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
+import cacheHandler from "~~/server/internal/cache";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
const chunkSize = 1024 * 1024 * 64;
@@ -20,7 +20,7 @@ export default defineClientEventHandler(async (h3) => {
if (!gameId || !versionName || !filename || Number.isNaN(chunkIndex))
throw createError({
statusCode: 400,
- statusMessage: "Invalid chunk arguments",
+ message: "Invalid chunk arguments",
});
let game = await gameLookupCache.getItem(gameId);
@@ -35,7 +35,7 @@ export default defineClientEventHandler(async (h3) => {
},
});
if (!game || !game.libraryId)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
await gameLookupCache.setItem(gameId, game);
}
@@ -43,7 +43,7 @@ export default defineClientEventHandler(async (h3) => {
if (!game.libraryId)
throw createError({
statusCode: 500,
- statusMessage: "Somehow, we got here.",
+ message: "Somehow, we got here.",
});
const peek = await libraryManager.peekFile(
@@ -53,7 +53,7 @@ export default defineClientEventHandler(async (h3) => {
filename,
);
if (!peek)
- throw createError({ status: 400, statusMessage: "Failed to peek file" });
+ throw createError({ status: 400, message: "Failed to peek file" });
const start = chunkIndex * chunkSize;
const end = Math.min((chunkIndex + 1) * chunkSize, peek.size);
@@ -63,7 +63,7 @@ export default defineClientEventHandler(async (h3) => {
if (start >= end)
throw createError({
statusCode: 400,
- statusMessage: "Invalid chunk index",
+ message: "Invalid chunk index",
});
const gameReadStream = await libraryManager.readFile(
@@ -76,7 +76,7 @@ export default defineClientEventHandler(async (h3) => {
if (!gameReadStream)
throw createError({
statusCode: 400,
- statusMessage: "Failed to create stream",
+ message: "Failed to create stream",
});
return sendStream(h3, gameReadStream);
diff --git a/server/api/v1/client/collection/[id]/entry.delete.ts b/server/api/v1/client/collection/[id]/entry.delete.ts
index 204e133..039ef09 100644
--- a/server/api/v1/client/collection/[id]/entry.delete.ts
+++ b/server/api/v1/client/collection/[id]/entry.delete.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
@@ -8,13 +8,13 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
const body = await readBody(h3);
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
const successful = await userLibraryManager.collectionRemove(
gameId,
@@ -24,7 +24,7 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
if (!successful)
throw createError({
statusCode: 404,
- statusMessage: "Collection not found",
+ message: "Collection not found",
});
return {};
});
diff --git a/server/api/v1/client/collection/[id]/entry.post.ts b/server/api/v1/client/collection/[id]/entry.post.ts
index 357e236..ea7ddb9 100644
--- a/server/api/v1/client/collection/[id]/entry.post.ts
+++ b/server/api/v1/client/collection/[id]/entry.post.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
@@ -8,13 +8,13 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
const body = await readBody(h3);
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
return await userLibraryManager.collectionAdd(gameId, id, user.id);
});
diff --git a/server/api/v1/client/collection/[id]/index.delete.ts b/server/api/v1/client/collection/[id]/index.delete.ts
index ffe6b71..2640177 100644
--- a/server/api/v1/client/collection/[id]/index.delete.ts
+++ b/server/api/v1/client/collection/[id]/index.delete.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
@@ -8,7 +8,7 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
// Verify collection exists and user owns it
@@ -17,13 +17,13 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
if (!collection)
throw createError({
statusCode: 404,
- statusMessage: "Collection not found",
+ message: "Collection not found",
});
if (collection.userId !== user.id)
throw createError({
statusCode: 403,
- statusMessage: "Not authorized to delete this collection",
+ message: "Not authorized to delete this collection",
});
await userLibraryManager.deleteCollection(id);
diff --git a/server/api/v1/client/collection/[id]/index.get.ts b/server/api/v1/client/collection/[id]/index.get.ts
index 9267f69..3b7afb6 100644
--- a/server/api/v1/client/collection/[id]/index.get.ts
+++ b/server/api/v1/client/collection/[id]/index.get.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
@@ -8,7 +8,7 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
// Fetch specific collection
@@ -17,14 +17,14 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
if (!collection)
throw createError({
statusCode: 404,
- statusMessage: "Collection not found",
+ message: "Collection not found",
});
// Verify user owns this collection
if (collection.userId !== user.id)
throw createError({
statusCode: 403,
- statusMessage: "Not authorized to access this collection",
+ message: "Not authorized to access this collection",
});
return collection;
diff --git a/server/api/v1/client/collection/default/entry.delete.ts b/server/api/v1/client/collection/default/entry.delete.ts
index 774c1bd..8ddab1e 100644
--- a/server/api/v1/client/collection/default/entry.delete.ts
+++ b/server/api/v1/client/collection/default/entry.delete.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
@@ -8,7 +8,7 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
await userLibraryManager.libraryRemove(gameId, user.id);
return {};
diff --git a/server/api/v1/client/collection/default/entry.post.ts b/server/api/v1/client/collection/default/entry.post.ts
index 5e7f603..71cd5f0 100644
--- a/server/api/v1/client/collection/default/entry.post.ts
+++ b/server/api/v1/client/collection/default/entry.post.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
@@ -7,7 +7,7 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
const body = await readBody(h3);
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
// Add the game to the default collection
await userLibraryManager.libraryAdd(gameId, user.id);
diff --git a/server/api/v1/client/collection/default/index.get.ts b/server/api/v1/client/collection/default/index.get.ts
index fdb5da6..3a9f687 100644
--- a/server/api/v1/client/collection/default/index.get.ts
+++ b/server/api/v1/client/collection/default/index.get.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
diff --git a/server/api/v1/client/collection/index.get.ts b/server/api/v1/client/collection/index.get.ts
index 9b07931..9e819cf 100644
--- a/server/api/v1/client/collection/index.get.ts
+++ b/server/api/v1/client/collection/index.get.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
diff --git a/server/api/v1/client/collection/index.post.ts b/server/api/v1/client/collection/index.post.ts
index c08d355..506bea3 100644
--- a/server/api/v1/client/collection/index.post.ts
+++ b/server/api/v1/client/collection/index.post.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
@@ -8,7 +8,7 @@ export default defineClientEventHandler(async (h3, { fetchUser }) => {
const name = body.name;
if (!name)
- throw createError({ statusCode: 400, statusMessage: "Requires name" });
+ throw createError({ statusCode: 400, message: "Requires name" });
// Create the collection using the manager
const newCollection = await userLibraryManager.collectionCreate(
diff --git a/server/api/v1/client/game/[id]/index.get.ts b/server/api/v1/client/game/[id]/index.get.ts
index 13e06fb..01f8209 100644
--- a/server/api/v1/client/game/[id]/index.get.ts
+++ b/server/api/v1/client/game/[id]/index.get.ts
@@ -1,10 +1,10 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(async (h3) => {
const id = getRouterParam(h3, "id");
if (!id)
- throw createError({ statusCode: 400, statusMessage: "No ID in route" });
+ throw createError({ statusCode: 400, message: "No ID in route" });
const game = await prisma.game.findUnique({
where: {
@@ -12,7 +12,7 @@ export default defineClientEventHandler(async (h3) => {
},
});
if (!game)
- throw createError({ statusCode: 404, statusMessage: "Game not found" });
+ throw createError({ statusCode: 404, message: "Game not found" });
return game;
});
diff --git a/server/api/v1/client/game/manifest.get.ts b/server/api/v1/client/game/manifest.get.ts
index 80535e5..7c24e51 100644
--- a/server/api/v1/client/game/manifest.get.ts
+++ b/server/api/v1/client/game/manifest.get.ts
@@ -1,21 +1,20 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import manifestGenerator from "~/server/internal/downloads/manifest";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import manifestGenerator from "~~/server/internal/downloads/manifest";
export default defineClientEventHandler(async (h3) => {
const query = getQuery(h3);
const id = query.id?.toString();
- const version = query.version?.toString();
- if (!id || !version)
+ if (!id)
throw createError({
statusCode: 400,
- statusMessage: "Missing id or version in query",
+ message: "Missing version id in query",
});
- const manifest = await manifestGenerator.generateManifest(id, version);
+ const manifest = await manifestGenerator.generateManifest(id);
if (!manifest)
throw createError({
statusCode: 400,
- statusMessage: "Invalid game or version, or no versions added.",
+ message: "Invalid game or version, or no versions added.",
});
return manifest;
});
diff --git a/server/api/v1/client/game/version.get.ts b/server/api/v1/client/game/version.get.ts
index 2ed7422..bec9c46 100644
--- a/server/api/v1/client/game/version.get.ts
+++ b/server/api/v1/client/game/version.get.ts
@@ -1,6 +1,6 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
+import libraryManager from "~~/server/internal/library";
export default defineClientEventHandler(async (h3) => {
const query = getQuery(h3);
@@ -9,22 +9,19 @@ export default defineClientEventHandler(async (h3) => {
if (!id || !version)
throw createError({
statusCode: 400,
- statusMessage: "Missing id or version in query",
+ message: "Missing id or version in query",
});
const gameVersion = await prisma.gameVersion.findUnique({
where: {
- gameId_versionName: {
- gameId: id,
- versionName: version,
- },
+ versionId: id,
},
});
if (!gameVersion)
throw createError({
statusCode: 404,
- statusMessage: "Game version not found",
+ message: "Game version not found",
});
return {
diff --git a/server/api/v1/client/game/versions.get.ts b/server/api/v1/client/game/versions.get.ts
index fab014a..a6bec18 100644
--- a/server/api/v1/client/game/versions.get.ts
+++ b/server/api/v1/client/game/versions.get.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(async (h3) => {
const query = getQuery(h3);
@@ -7,31 +7,21 @@ export default defineClientEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "No ID in request query",
+ message: "No ID in request query",
});
- const versions = await prisma.gameVersion.findMany({
+ const versions = await prisma.version.findMany({
where: {
gameId: id,
+ hidden: false,
},
orderBy: {
versionIndex: "desc", // Latest one first
},
+ include: {
+ gameVersions: true,
+ },
});
- const mappedVersions = versions
- .map((version) => {
- if (!version.dropletManifest) return undefined;
-
- const newVersion = { ...version, dropletManifest: undefined };
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore idk why we delete an undefined object
- delete newVersion.dropletManifest;
- return {
- ...newVersion,
- };
- })
- .filter((e) => e);
-
- return mappedVersions;
+ return versions;
});
diff --git a/server/api/v1/client/news/[id]/index.get.ts b/server/api/v1/client/news/[id]/index.get.ts
index c7019c9..82814e3 100644
--- a/server/api/v1/client/news/[id]/index.get.ts
+++ b/server/api/v1/client/news/[id]/index.get.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import newsManager from "~/server/internal/news";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import newsManager from "~~/server/internal/news";
export default defineClientEventHandler(async (h3) => {
const id = h3.context.params?.id;
diff --git a/server/api/v1/client/news/index.get.ts b/server/api/v1/client/news/index.get.ts
index 8ab6e13..ef15a22 100644
--- a/server/api/v1/client/news/index.get.ts
+++ b/server/api/v1/client/news/index.get.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import newsManager from "~/server/internal/news";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import newsManager from "~~/server/internal/news";
export default defineClientEventHandler(async (h3) => {
const query = getQuery(h3);
@@ -7,13 +7,13 @@ export default defineClientEventHandler(async (h3) => {
const orderBy = query.order as "asc" | "desc";
if (orderBy) {
if (typeof orderBy !== "string" || !["asc", "desc"].includes(orderBy))
- throw createError({ statusCode: 400, statusMessage: "Invalid order" });
+ throw createError({ statusCode: 400, message: "Invalid order" });
}
const tags = query.tags as string[] | undefined;
if (tags) {
if (typeof tags !== "object" || !Array.isArray(tags))
- throw createError({ statusCode: 400, statusMessage: "Invalid tags" });
+ throw createError({ statusCode: 400, message: "Invalid tags" });
}
const options = {
diff --git a/server/api/v1/client/object/[id]/index.get.ts b/server/api/v1/client/object/[id]/index.get.ts
index 962d30d..25cdb3d 100644
--- a/server/api/v1/client/object/[id]/index.get.ts
+++ b/server/api/v1/client/object/[id]/index.get.ts
@@ -1,15 +1,15 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import objectHandler from "~/server/internal/objects";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import objectHandler from "~~/server/internal/objects";
export default defineClientEventHandler(async (h3, utils) => {
const id = getRouterParam(h3, "id");
- if (!id) throw createError({ statusCode: 400, statusMessage: "Invalid ID" });
+ if (!id) throw createError({ statusCode: 400, message: "Invalid ID" });
const user = await utils.fetchUser();
const object = await objectHandler.fetchWithPermissions(id, user.id);
if (!object)
- throw createError({ statusCode: 404, statusMessage: "Object not found" });
+ throw createError({ statusCode: 404, message: "Object not found" });
setHeader(h3, "Content-Type", object.mime);
return object.data;
diff --git a/server/api/v1/client/saves/[gameid]/[slotindex]/index.delete.ts b/server/api/v1/client/saves/[gameid]/[slotindex]/index.delete.ts
index 0f36008..a502686 100644
--- a/server/api/v1/client/saves/[gameid]/[slotindex]/index.delete.ts
+++ b/server/api/v1/client/saves/[gameid]/[slotindex]/index.delete.ts
@@ -1,6 +1,6 @@
-import { ClientCapabilities } from "~/prisma/client/enums";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(
async (h3, { fetchClient, fetchUser }) => {
@@ -8,27 +8,27 @@ export default defineClientEventHandler(
if (!client.capabilities.includes(ClientCapabilities.CloudSaves))
throw createError({
statusCode: 403,
- statusMessage: "Capability not allowed.",
+ message: "Capability not allowed.",
});
const user = await fetchUser();
const gameId = getRouterParam(h3, "gameid");
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "No gameID in route params",
+ message: "No gameID in route params",
});
const slotIndexString = getRouterParam(h3, "slotindex");
if (!slotIndexString)
throw createError({
statusCode: 400,
- statusMessage: "No slotIndex in route params",
+ message: "No slotIndex in route params",
});
const slotIndex = parseInt(slotIndexString);
if (Number.isNaN(slotIndex))
throw createError({
statusCode: 400,
- statusMessage: "Invalid slotIndex",
+ message: "Invalid slotIndex",
});
const game = await prisma.game.findUnique({
@@ -36,7 +36,7 @@ export default defineClientEventHandler(
select: { id: true },
});
if (!game)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
const save = await prisma.saveSlot.delete({
where: {
@@ -48,6 +48,6 @@ export default defineClientEventHandler(
},
});
if (!save)
- throw createError({ statusCode: 404, statusMessage: "Save not found" });
+ throw createError({ statusCode: 404, message: "Save not found" });
},
);
diff --git a/server/api/v1/client/saves/[gameid]/[slotindex]/index.get.ts b/server/api/v1/client/saves/[gameid]/[slotindex]/index.get.ts
index 1ea38ae..5c931e4 100644
--- a/server/api/v1/client/saves/[gameid]/[slotindex]/index.get.ts
+++ b/server/api/v1/client/saves/[gameid]/[slotindex]/index.get.ts
@@ -1,6 +1,6 @@
-import { ClientCapabilities } from "~/prisma/client/enums";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(
async (h3, { fetchClient, fetchUser }) => {
@@ -8,27 +8,27 @@ export default defineClientEventHandler(
if (!client.capabilities.includes(ClientCapabilities.CloudSaves))
throw createError({
statusCode: 403,
- statusMessage: "Capability not allowed.",
+ message: "Capability not allowed.",
});
const user = await fetchUser();
const gameId = getRouterParam(h3, "gameid");
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "No gameID in route params",
+ message: "No gameID in route params",
});
const slotIndexString = getRouterParam(h3, "slotindex");
if (!slotIndexString)
throw createError({
statusCode: 400,
- statusMessage: "No slotIndex in route params",
+ message: "No slotIndex in route params",
});
const slotIndex = parseInt(slotIndexString);
if (Number.isNaN(slotIndex))
throw createError({
statusCode: 400,
- statusMessage: "Invalid slotIndex",
+ message: "Invalid slotIndex",
});
const game = await prisma.game.findUnique({
@@ -36,7 +36,7 @@ export default defineClientEventHandler(
select: { id: true },
});
if (!game)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
const save = await prisma.saveSlot.findUnique({
where: {
@@ -48,7 +48,7 @@ export default defineClientEventHandler(
},
});
if (!save)
- throw createError({ statusCode: 404, statusMessage: "Save not found" });
+ throw createError({ statusCode: 404, message: "Save not found" });
return save;
},
diff --git a/server/api/v1/client/saves/[gameid]/[slotindex]/push.post.ts b/server/api/v1/client/saves/[gameid]/[slotindex]/push.post.ts
index 8034b81..6ead8cf 100644
--- a/server/api/v1/client/saves/[gameid]/[slotindex]/push.post.ts
+++ b/server/api/v1/client/saves/[gameid]/[slotindex]/push.post.ts
@@ -1,7 +1,7 @@
-import { ClientCapabilities } from "~/prisma/client/enums";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
-import saveManager from "~/server/internal/saves";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
+import saveManager from "~~/server/internal/saves";
export default defineClientEventHandler(
async (h3, { fetchClient, fetchUser }) => {
@@ -9,27 +9,27 @@ export default defineClientEventHandler(
if (!client.capabilities.includes(ClientCapabilities.CloudSaves))
throw createError({
statusCode: 403,
- statusMessage: "Capability not allowed.",
+ message: "Capability not allowed.",
});
const user = await fetchUser();
const gameId = getRouterParam(h3, "gameid");
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "No gameID in route params",
+ message: "No gameID in route params",
});
const slotIndexString = getRouterParam(h3, "slotindex");
if (!slotIndexString)
throw createError({
statusCode: 400,
- statusMessage: "No slotIndex in route params",
+ message: "No slotIndex in route params",
});
const slotIndex = parseInt(slotIndexString);
if (Number.isNaN(slotIndex))
throw createError({
statusCode: 400,
- statusMessage: "Invalid slotIndex",
+ message: "Invalid slotIndex",
});
const game = await prisma.game.findUnique({
@@ -37,7 +37,7 @@ export default defineClientEventHandler(
select: { id: true },
});
if (!game)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
await saveManager.pushSave(
gameId,
diff --git a/server/api/v1/client/saves/[gameid]/index.get.ts b/server/api/v1/client/saves/[gameid]/index.get.ts
index 53ce8a5..dc66991 100644
--- a/server/api/v1/client/saves/[gameid]/index.get.ts
+++ b/server/api/v1/client/saves/[gameid]/index.get.ts
@@ -1,6 +1,6 @@
-import { ClientCapabilities } from "~/prisma/client/enums";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(
async (h3, { fetchClient, fetchUser }) => {
@@ -8,14 +8,14 @@ export default defineClientEventHandler(
if (!client.capabilities.includes(ClientCapabilities.CloudSaves))
throw createError({
statusCode: 403,
- statusMessage: "Capability not allowed.",
+ message: "Capability not allowed.",
});
const user = await fetchUser();
const gameId = getRouterParam(h3, "gameid");
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "No gameID in route params",
+ message: "No gameID in route params",
});
const game = await prisma.game.findUnique({
@@ -23,7 +23,7 @@ export default defineClientEventHandler(
select: { id: true },
});
if (!game)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
const saves = await prisma.saveSlot.findMany({
where: {
diff --git a/server/api/v1/client/saves/[gameid]/index.post.ts b/server/api/v1/client/saves/[gameid]/index.post.ts
index 91193ce..6070803 100644
--- a/server/api/v1/client/saves/[gameid]/index.post.ts
+++ b/server/api/v1/client/saves/[gameid]/index.post.ts
@@ -1,7 +1,7 @@
-import { ClientCapabilities } from "~/prisma/client/enums";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import { applicationSettings } from "~/server/internal/config/application-configuration";
-import prisma from "~/server/internal/db/database";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import { applicationSettings } from "~~/server/internal/config/application-configuration";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(
async (h3, { fetchClient, fetchUser }) => {
@@ -9,14 +9,14 @@ export default defineClientEventHandler(
if (!client.capabilities.includes(ClientCapabilities.CloudSaves))
throw createError({
statusCode: 403,
- statusMessage: "Capability not allowed.",
+ message: "Capability not allowed.",
});
const user = await fetchUser();
const gameId = getRouterParam(h3, "gameid");
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "No gameID in route params",
+ message: "No gameID in route params",
});
const game = await prisma.game.findUnique({
@@ -24,7 +24,7 @@ export default defineClientEventHandler(
select: { id: true },
});
if (!game)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
const saves = await prisma.saveSlot.findMany({
where: {
@@ -40,7 +40,7 @@ export default defineClientEventHandler(
if (saves.length + 1 > limit)
throw createError({
statusCode: 400,
- statusMessage: "Out of save slots",
+ message: "Out of save slots",
});
let firstIndex = 0;
diff --git a/server/api/v1/client/saves/index.get.ts b/server/api/v1/client/saves/index.get.ts
index 506151e..c27e53e 100644
--- a/server/api/v1/client/saves/index.get.ts
+++ b/server/api/v1/client/saves/index.get.ts
@@ -1,6 +1,6 @@
-import { ClientCapabilities } from "~/prisma/client/enums";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(
async (h3, { fetchClient, fetchUser }) => {
@@ -8,7 +8,7 @@ export default defineClientEventHandler(
if (!client.capabilities.includes(ClientCapabilities.CloudSaves))
throw createError({
statusCode: 403,
- statusMessage: "Capability not allowed.",
+ message: "Capability not allowed.",
});
const user = await fetchUser();
diff --git a/server/api/v1/client/saves/settings.get.ts b/server/api/v1/client/saves/settings.get.ts
index 05c3026..ac3b36f 100644
--- a/server/api/v1/client/saves/settings.get.ts
+++ b/server/api/v1/client/saves/settings.get.ts
@@ -1,13 +1,13 @@
-import { ClientCapabilities } from "~/prisma/client/enums";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import { applicationSettings } from "~/server/internal/config/application-configuration";
+import { ClientCapabilities } from "~~/prisma/client/enums";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import { applicationSettings } from "~~/server/internal/config/application-configuration";
export default defineClientEventHandler(async (_h3, { fetchClient }) => {
const client = await fetchClient();
if (!client.capabilities.includes(ClientCapabilities.CloudSaves))
throw createError({
statusCode: 403,
- statusMessage: "Capability not allowed.",
+ message: "Capability not allowed.",
});
const slotLimit = await applicationSettings.get("saveSlotCountLimit");
diff --git a/server/api/v1/client/user/index.get.ts b/server/api/v1/client/user/index.get.ts
index 79ba08c..d17d6a8 100644
--- a/server/api/v1/client/user/index.get.ts
+++ b/server/api/v1/client/user/index.get.ts
@@ -1,4 +1,4 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
export default defineClientEventHandler(async (h3, { fetchUser }) => {
const user = await fetchUser();
diff --git a/server/api/v1/client/user/library.get.ts b/server/api/v1/client/user/library.get.ts
index 4870e2c..ee53840 100644
--- a/server/api/v1/client/user/library.get.ts
+++ b/server/api/v1/client/user/library.get.ts
@@ -1,5 +1,5 @@
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import userLibraryManager from "~/server/internal/userlibrary";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineClientEventHandler(async (_h3, { fetchUser }) => {
const user = await fetchUser();
diff --git a/server/api/v1/client/user/webtoken.post.ts b/server/api/v1/client/user/webtoken.post.ts
index eda744f..27fc46d 100644
--- a/server/api/v1/client/user/webtoken.post.ts
+++ b/server/api/v1/client/user/webtoken.post.ts
@@ -1,8 +1,8 @@
-import { APITokenMode } from "~/prisma/client/enums";
+import { APITokenMode } from "~~/prisma/client/enums";
import { DateTime } from "luxon";
-import type { UserACL } from "~/server/internal/acls";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import prisma from "~/server/internal/db/database";
+import type { UserACL } from "~~/server/internal/acls";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import prisma from "~~/server/internal/db/database";
export default defineClientEventHandler(
async (h3, { fetchUser, fetchClient, clientId }) => {
diff --git a/server/api/v1/collection/[id]/entry.delete.ts b/server/api/v1/collection/[id]/entry.delete.ts
index d0a4faf..feb547d 100644
--- a/server/api/v1/collection/[id]/entry.delete.ts
+++ b/server/api/v1/collection/[id]/entry.delete.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["collections:remove"]);
@@ -12,13 +12,13 @@ export default defineEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
const body = await readBody(h3);
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
const successful = await userLibraryManager.collectionRemove(
gameId,
@@ -28,7 +28,7 @@ export default defineEventHandler(async (h3) => {
if (!successful)
throw createError({
statusCode: 404,
- statusMessage: "Collection not found",
+ message: "Collection not found",
});
return {};
});
diff --git a/server/api/v1/collection/[id]/entry.post.ts b/server/api/v1/collection/[id]/entry.post.ts
index d6a2394..56bfea5 100644
--- a/server/api/v1/collection/[id]/entry.post.ts
+++ b/server/api/v1/collection/[id]/entry.post.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["collections:add"]);
@@ -12,13 +12,13 @@ export default defineEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
const body = await readBody(h3);
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
return await userLibraryManager.collectionAdd(gameId, id, userId);
});
diff --git a/server/api/v1/collection/[id]/index.delete.ts b/server/api/v1/collection/[id]/index.delete.ts
index e00b3d6..9459c0b 100644
--- a/server/api/v1/collection/[id]/index.delete.ts
+++ b/server/api/v1/collection/[id]/index.delete.ts
@@ -1,19 +1,19 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["collections:delete"]);
if (!userId)
throw createError({
statusCode: 403,
- statusMessage: "Requires authentication",
+ message: "Requires authentication",
});
const id = getRouterParam(h3, "id");
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
// Verify collection exists and user owns it
@@ -22,13 +22,13 @@ export default defineEventHandler(async (h3) => {
if (!collection)
throw createError({
statusCode: 404,
- statusMessage: "Collection not found",
+ message: "Collection not found",
});
if (collection.userId !== userId)
throw createError({
statusCode: 403,
- statusMessage: "Not authorized to delete this collection",
+ message: "Not authorized to delete this collection",
});
await userLibraryManager.deleteCollection(id);
diff --git a/server/api/v1/collection/[id]/index.get.ts b/server/api/v1/collection/[id]/index.get.ts
index 9bb1854..a71194d 100644
--- a/server/api/v1/collection/[id]/index.get.ts
+++ b/server/api/v1/collection/[id]/index.get.ts
@@ -1,19 +1,19 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["collections:read"]);
if (!userId)
throw createError({
statusCode: 403,
- statusMessage: "Requires authentication",
+ message: "Requires authentication",
});
const id = getRouterParam(h3, "id");
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "ID required in route params",
+ message: "ID required in route params",
});
// Fetch specific collection
@@ -22,14 +22,14 @@ export default defineEventHandler(async (h3) => {
if (!collection)
throw createError({
statusCode: 404,
- statusMessage: "Collection not found",
+ message: "Collection not found",
});
// Verify user owns this collection
if (collection.userId !== userId)
throw createError({
statusCode: 403,
- statusMessage: "Not authorized to access this collection",
+ message: "Not authorized to access this collection",
});
return collection;
diff --git a/server/api/v1/collection/default/entry.delete.ts b/server/api/v1/collection/default/entry.delete.ts
index 77f3c39..b7bd492 100644
--- a/server/api/v1/collection/default/entry.delete.ts
+++ b/server/api/v1/collection/default/entry.delete.ts
@@ -1,19 +1,19 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["library:remove"]);
if (!userId)
throw createError({
statusCode: 403,
- statusMessage: "Requires authentication",
+ message: "Requires authentication",
});
const body = await readBody(h3);
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
await userLibraryManager.libraryRemove(gameId, userId);
return {};
diff --git a/server/api/v1/collection/default/entry.post.ts b/server/api/v1/collection/default/entry.post.ts
index 4c8b8fd..dafcfd8 100644
--- a/server/api/v1/collection/default/entry.post.ts
+++ b/server/api/v1/collection/default/entry.post.ts
@@ -1,18 +1,18 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["library:add"]);
if (!userId)
throw createError({
statusCode: 403,
- statusMessage: "Requires authentication",
+ message: "Requires authentication",
});
const body = await readBody(h3);
const gameId = body.id;
if (!gameId)
- throw createError({ statusCode: 400, statusMessage: "Game ID required" });
+ throw createError({ statusCode: 400, message: "Game ID required" });
// Add the game to the default collection
await userLibraryManager.libraryAdd(gameId, userId);
diff --git a/server/api/v1/collection/default/index.get.ts b/server/api/v1/collection/default/index.get.ts
index 22a357d..f4510a8 100644
--- a/server/api/v1/collection/default/index.get.ts
+++ b/server/api/v1/collection/default/index.get.ts
@@ -1,12 +1,12 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["collections:read"]);
if (!userId)
throw createError({
statusCode: 403,
- statusMessage: "Requires authentication",
+ message: "Requires authentication",
});
const collection = await userLibraryManager.fetchLibrary(userId);
diff --git a/server/api/v1/collection/index.get.ts b/server/api/v1/collection/index.get.ts
index 2fbe41b..656587a 100644
--- a/server/api/v1/collection/index.get.ts
+++ b/server/api/v1/collection/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["collections:read"]);
diff --git a/server/api/v1/collection/index.post.ts b/server/api/v1/collection/index.post.ts
index 1d3daad..f4eb698 100644
--- a/server/api/v1/collection/index.post.ts
+++ b/server/api/v1/collection/index.post.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import userLibraryManager from "~/server/internal/userlibrary";
+import aclManager from "~~/server/internal/acls";
+import userLibraryManager from "~~/server/internal/userlibrary";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["collections:read"]);
@@ -12,7 +12,7 @@ export default defineEventHandler(async (h3) => {
const name = body.name;
if (!name)
- throw createError({ statusCode: 400, statusMessage: "Requires name" });
+ throw createError({ statusCode: 400, message: "Requires name" });
// Create the collection using the manager
const newCollection = await userLibraryManager.collectionCreate(name, userId);
diff --git a/server/api/v1/companies/[id]/index.get.ts b/server/api/v1/companies/[id]/index.get.ts
index a326371..481af52 100644
--- a/server/api/v1/companies/[id]/index.get.ts
+++ b/server/api/v1/companies/[id]/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["store:read"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!companyId)
throw createError({
statusCode: 400,
- statusMessage: "Missing gameId in route params (somehow...?)",
+ message: "Missing gameId in route params (somehow...?)",
});
const company = await prisma.company.findUnique({
@@ -17,7 +17,7 @@ export default defineEventHandler(async (h3) => {
});
if (!company)
- throw createError({ statusCode: 404, statusMessage: "Company not found" });
+ throw createError({ statusCode: 404, message: "Company not found" });
return { company };
});
diff --git a/server/api/v1/games/[id]/index.get.ts b/server/api/v1/games/[id]/index.get.ts
index ec0b3f4..edbae8d 100644
--- a/server/api/v1/games/[id]/index.get.ts
+++ b/server/api/v1/games/[id]/index.get.ts
@@ -1,6 +1,7 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import libraryManager from "~/server/internal/library";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import { convertIDsToPlatforms } from "~~/server/internal/platform/link";
+import libraryManager from "~~/server/internal/library";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["store:read"]);
@@ -10,13 +11,21 @@ export default defineEventHandler(async (h3) => {
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "Missing gameId in route params (somehow...?)",
+ message: "Missing gameId in route params (somehow...?)",
});
const game = await prisma.game.findUnique({
where: { id: gameId },
include: {
- versions: true,
+ versions: {
+ include: {
+ gameVersions: {
+ include: {
+ platform: true,
+ },
+ },
+ },
+ },
publishers: {
select: {
id: true,
@@ -37,8 +46,7 @@ export default defineEventHandler(async (h3) => {
},
});
- if (!game)
- throw createError({ statusCode: 404, statusMessage: "Game not found" });
+ if (!game) throw createError({ statusCode: 404, message: "Game not found" });
const rating = await prisma.gameRating.aggregate({
where: {
@@ -52,7 +60,20 @@ export default defineEventHandler(async (h3) => {
},
});
+ const platformIDs = game.versions
+ .map((e) => e.gameVersions)
+ .flat()
+ .map((e) => e.platform)
+ .flat()
+ .map((e) => e.id)
+ .filter((e) => e !== null)
+ .filter((v, index, arr) => arr.findIndex((k) => k == v) == index);
+
+ const platforms = await convertIDsToPlatforms(platformIDs);
+
+ const noVersionsGame = { ...game, versions: undefined };
+
const size = await libraryManager.getGameVersionSize(game.id);
- return { game, rating, size };
+ return { game: noVersionsGame, rating, platforms, size };
});
diff --git a/server/api/v1/index.get.ts b/server/api/v1/index.get.ts
index 4d25388..8dde401 100644
--- a/server/api/v1/index.get.ts
+++ b/server/api/v1/index.get.ts
@@ -1,4 +1,4 @@
-import { systemConfig } from "~/server/internal/config/sys-conf";
+import { systemConfig } from "~~/server/internal/config/sys-conf";
export default defineEventHandler((_h3) => {
return {
diff --git a/server/api/v1/news/[id]/index.get.ts b/server/api/v1/news/[id]/index.get.ts
index 2499779..7c4829a 100644
--- a/server/api/v1/news/[id]/index.get.ts
+++ b/server/api/v1/news/[id]/index.get.ts
@@ -1,13 +1,13 @@
import { defineEventHandler, createError } from "h3";
-import aclManager from "~/server/internal/acls";
-import newsManager from "~/server/internal/news";
+import aclManager from "~~/server/internal/acls";
+import newsManager from "~~/server/internal/news";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["news:read"]);
if (!userId)
throw createError({
statusCode: 403,
- statusMessage: "Requires authentication",
+ message: "Requires authentication",
});
const id = h3.context.params?.id;
diff --git a/server/api/v1/news/index.get.ts b/server/api/v1/news/index.get.ts
index e5b6aac..9cc0eaa 100644
--- a/server/api/v1/news/index.get.ts
+++ b/server/api/v1/news/index.get.ts
@@ -1,13 +1,13 @@
import { defineEventHandler, getQuery } from "h3";
-import aclManager from "~/server/internal/acls";
-import newsManager from "~/server/internal/news";
+import aclManager from "~~/server/internal/acls";
+import newsManager from "~~/server/internal/news";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["news:read"]);
if (!userId)
throw createError({
statusCode: 403,
- statusMessage: "Requires authentication",
+ message: "Requires authentication",
});
const query = getQuery(h3);
@@ -15,13 +15,13 @@ export default defineEventHandler(async (h3) => {
const orderBy = query.order as "asc" | "desc";
if (orderBy) {
if (typeof orderBy !== "string" || !["asc", "desc"].includes(orderBy))
- throw createError({ statusCode: 400, statusMessage: "Invalid order" });
+ throw createError({ statusCode: 400, message: "Invalid order" });
}
const tags = query.tags as string[] | undefined;
if (tags) {
if (typeof tags !== "object" || !Array.isArray(tags))
- throw createError({ statusCode: 400, statusMessage: "Invalid tags" });
+ throw createError({ statusCode: 400, message: "Invalid tags" });
}
const options = {
diff --git a/server/api/v1/notifications/[id]/index.delete.ts b/server/api/v1/notifications/[id]/index.delete.ts
index ac60839..ee14c4e 100644
--- a/server/api/v1/notifications/[id]/index.delete.ts
+++ b/server/api/v1/notifications/[id]/index.delete.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["notifications:delete"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!notificationId)
throw createError({
statusCode: 400,
- statusMessage: "Missing notification ID",
+ message: "Missing notification ID",
});
const userIds = [userId];
@@ -30,7 +30,7 @@ export default defineEventHandler(async (h3) => {
if (!notification)
throw createError({
statusCode: 400,
- statusMessage: "Invalid notification ID",
+ message: "Invalid notification ID",
});
return {};
diff --git a/server/api/v1/notifications/[id]/index.get.ts b/server/api/v1/notifications/[id]/index.get.ts
index ba2c6fa..a069ae9 100644
--- a/server/api/v1/notifications/[id]/index.get.ts
+++ b/server/api/v1/notifications/[id]/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["notifications:read"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!notificationId)
throw createError({
statusCode: 400,
- statusMessage: "Missing notification ID",
+ message: "Missing notification ID",
});
const userIds = [userId];
@@ -30,7 +30,7 @@ export default defineEventHandler(async (h3) => {
if (!notification)
throw createError({
statusCode: 400,
- statusMessage: "Invalid notification ID",
+ message: "Invalid notification ID",
});
return notification;
diff --git a/server/api/v1/notifications/[id]/read.post.ts b/server/api/v1/notifications/[id]/read.post.ts
index 4ffe007..20ec33b 100644
--- a/server/api/v1/notifications/[id]/read.post.ts
+++ b/server/api/v1/notifications/[id]/read.post.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["notifications:mark"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!notificationId)
throw createError({
statusCode: 400,
- statusMessage: "Missing notification ID",
+ message: "Missing notification ID",
});
const userIds = [userId];
@@ -33,7 +33,7 @@ export default defineEventHandler(async (h3) => {
if (!notification)
throw createError({
statusCode: 400,
- statusMessage: "Invalid notification ID",
+ message: "Invalid notification ID",
});
return notification;
diff --git a/server/api/v1/notifications/index.get.ts b/server/api/v1/notifications/index.get.ts
index 982d520..022aa7d 100644
--- a/server/api/v1/notifications/index.get.ts
+++ b/server/api/v1/notifications/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["notifications:read"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!acls)
throw createError({
statusCode: 500,
- statusMessage: "Got userId but no ACLs - what?",
+ message: "Got userId but no ACLs - what?",
});
const notifications = await prisma.notification.findMany({
diff --git a/server/api/v1/notifications/readall.post.ts b/server/api/v1/notifications/readall.post.ts
index 0e4c8c7..302f472 100644
--- a/server/api/v1/notifications/readall.post.ts
+++ b/server/api/v1/notifications/readall.post.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["notifications:mark"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!acls)
throw createError({
statusCode: 500,
- statusMessage: "Got userId but no ACLs - what?",
+ message: "Got userId but no ACLs - what?",
});
await prisma.notification.updateMany({
diff --git a/server/api/v1/notifications/ws.get.ts b/server/api/v1/notifications/ws.get.ts
index 2f86d7c..3222f64 100644
--- a/server/api/v1/notifications/ws.get.ts
+++ b/server/api/v1/notifications/ws.get.ts
@@ -1,6 +1,6 @@
-import notificationSystem from "~/server/internal/notifications";
-import aclManager from "~/server/internal/acls";
-import { logger } from "~/server/internal/logging";
+import notificationSystem from "~~/server/internal/notifications";
+import aclManager from "~~/server/internal/acls";
+import { logger } from "~~/server/internal/logging";
// TODO add web socket sessions for horizontal scaling
// Peer ID to user ID
diff --git a/server/api/v1/object/[id]/index.delete.ts b/server/api/v1/object/[id]/index.delete.ts
index fbdd5ee..35d88f0 100644
--- a/server/api/v1/object/[id]/index.delete.ts
+++ b/server/api/v1/object/[id]/index.delete.ts
@@ -1,11 +1,11 @@
-import aclManager from "~/server/internal/acls";
-import objectHandler from "~/server/internal/objects";
+import aclManager from "~~/server/internal/acls";
+import objectHandler from "~~/server/internal/objects";
import sanitize from "sanitize-filename";
export default defineEventHandler(async (h3) => {
const unsafeId = getRouterParam(h3, "id");
if (!unsafeId)
- throw createError({ statusCode: 400, statusMessage: "Invalid ID" });
+ throw createError({ statusCode: 400, message: "Invalid ID" });
const userId = await aclManager.getUserIdACL(h3, ["object:delete"]);
diff --git a/server/api/v1/object/[id]/index.get.ts b/server/api/v1/object/[id]/index.get.ts
index 649bfcd..b979601 100644
--- a/server/api/v1/object/[id]/index.get.ts
+++ b/server/api/v1/object/[id]/index.get.ts
@@ -1,18 +1,18 @@
-import aclManager from "~/server/internal/acls";
-import objectHandler from "~/server/internal/objects";
+import aclManager from "~~/server/internal/acls";
+import objectHandler from "~~/server/internal/objects";
import sanitize from "sanitize-filename";
export default defineEventHandler(async (h3) => {
const unsafeId = getRouterParam(h3, "id");
if (!unsafeId)
- throw createError({ statusCode: 400, statusMessage: "Invalid ID" });
+ throw createError({ statusCode: 400, message: "Invalid ID" });
const userId = await aclManager.getUserIdACL(h3, ["object:read"]);
const id = sanitize(unsafeId);
const object = await objectHandler.fetchWithPermissions(id, userId);
if (!object)
- throw createError({ statusCode: 404, statusMessage: "Object not found" });
+ throw createError({ statusCode: 404, message: "Object not found" });
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/ETag
const etagRequestValue = h3.headers.get("If-None-Match");
diff --git a/server/api/v1/object/[id]/index.head.ts b/server/api/v1/object/[id]/index.head.ts
index e762de5..60b778d 100644
--- a/server/api/v1/object/[id]/index.head.ts
+++ b/server/api/v1/object/[id]/index.head.ts
@@ -1,19 +1,19 @@
-import aclManager from "~/server/internal/acls";
-import objectHandler from "~/server/internal/objects";
+import aclManager from "~~/server/internal/acls";
+import objectHandler from "~~/server/internal/objects";
import sanitize from "sanitize-filename";
// this request method is purely used by the browser to check if etag values are still valid
export default defineEventHandler(async (h3) => {
const unsafeId = getRouterParam(h3, "id");
if (!unsafeId)
- throw createError({ statusCode: 400, statusMessage: "Invalid ID" });
+ throw createError({ statusCode: 400, message: "Invalid ID" });
const userId = await aclManager.getUserIdACL(h3, ["object:read"]);
const id = sanitize(unsafeId);
const object = await objectHandler.fetchWithPermissions(id, userId);
if (!object)
- throw createError({ statusCode: 404, statusMessage: "Object not found" });
+ throw createError({ statusCode: 404, message: "Object not found" });
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/ETag
const etagRequestValue = h3.headers.get("If-None-Match");
diff --git a/server/api/v1/object/[id]/index.post.ts b/server/api/v1/object/[id]/index.post.ts
index e6779ff..2148f78 100644
--- a/server/api/v1/object/[id]/index.post.ts
+++ b/server/api/v1/object/[id]/index.post.ts
@@ -1,17 +1,17 @@
-import aclManager from "~/server/internal/acls";
-import objectHandler from "~/server/internal/objects";
+import aclManager from "~~/server/internal/acls";
+import objectHandler from "~~/server/internal/objects";
import sanitize from "sanitize-filename";
export default defineEventHandler(async (h3) => {
const unsafeId = getRouterParam(h3, "id");
if (!unsafeId)
- throw createError({ statusCode: 400, statusMessage: "Invalid ID" });
+ throw createError({ statusCode: 400, message: "Invalid ID" });
const body = await readRawBody(h3, "binary");
if (!body)
throw createError({
statusCode: 400,
- statusMessage: "Invalid upload",
+ message: "Invalid upload",
});
const userId = await aclManager.getUserIdACL(h3, ["object:update"]);
diff --git a/server/api/v1/screenshots/[id]/index.delete.ts b/server/api/v1/screenshots/[id]/index.delete.ts
index 41e2bf5..0f5ddb1 100644
--- a/server/api/v1/screenshots/[id]/index.delete.ts
+++ b/server/api/v1/screenshots/[id]/index.delete.ts
@@ -1,6 +1,6 @@
// get a specific screenshot
-import aclManager from "~/server/internal/acls";
-import screenshotManager from "~/server/internal/screenshots";
+import aclManager from "~~/server/internal/acls";
+import screenshotManager from "~~/server/internal/screenshots";
import sanitize from "sanitize-filename";
export default defineEventHandler(async (h3) => {
@@ -11,7 +11,7 @@ export default defineEventHandler(async (h3) => {
if (!unsafeId)
throw createError({
statusCode: 400,
- statusMessage: "Missing screenshot ID",
+ message: "Missing screenshot ID",
});
const screenshotId = sanitize(unsafeId);
diff --git a/server/api/v1/screenshots/[id]/index.get.ts b/server/api/v1/screenshots/[id]/index.get.ts
index 79d569a..b7f1fa9 100644
--- a/server/api/v1/screenshots/[id]/index.get.ts
+++ b/server/api/v1/screenshots/[id]/index.get.ts
@@ -1,6 +1,6 @@
// get a specific screenshot
-import aclManager from "~/server/internal/acls";
-import screenshotManager from "~/server/internal/screenshots";
+import aclManager from "~~/server/internal/acls";
+import screenshotManager from "~~/server/internal/screenshots";
import sanitize from "sanitize-filename";
export default defineEventHandler(async (h3) => {
@@ -11,7 +11,7 @@ export default defineEventHandler(async (h3) => {
if (!unsafeId)
throw createError({
statusCode: 400,
- statusMessage: "Missing screenshot ID",
+ message: "Missing screenshot ID",
});
const result = await screenshotManager.get(sanitize(unsafeId));
diff --git a/server/api/v1/screenshots/game/[id]/index.get.ts b/server/api/v1/screenshots/game/[id]/index.get.ts
index 71addae..23e4a74 100644
--- a/server/api/v1/screenshots/game/[id]/index.get.ts
+++ b/server/api/v1/screenshots/game/[id]/index.get.ts
@@ -1,6 +1,6 @@
// get all user screenshots by game
-import aclManager from "~/server/internal/acls";
-import screenshotManager from "~/server/internal/screenshots";
+import aclManager from "~~/server/internal/acls";
+import screenshotManager from "~~/server/internal/screenshots";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["screenshots:read"]);
@@ -10,7 +10,7 @@ export default defineEventHandler(async (h3) => {
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "Missing game ID",
+ message: "Missing game ID",
});
const results = await screenshotManager.getUserAllByGame(userId, gameId);
diff --git a/server/api/v1/screenshots/game/[id]/index.post.ts b/server/api/v1/screenshots/game/[id]/index.post.ts
index c06b815..b97f958 100644
--- a/server/api/v1/screenshots/game/[id]/index.post.ts
+++ b/server/api/v1/screenshots/game/[id]/index.post.ts
@@ -1,7 +1,7 @@
// create new screenshot
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import screenshotManager from "~/server/internal/screenshots";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+import screenshotManager from "~~/server/internal/screenshots";
// TODO: make defineClientEventHandler instead?
// only clients will be upload screenshots yea??
@@ -13,7 +13,7 @@ export default defineEventHandler(async (h3) => {
if (!gameId)
throw createError({
statusCode: 400,
- statusMessage: "Missing game ID",
+ message: "Missing game ID",
});
const game = await prisma.game.findUnique({
@@ -21,7 +21,7 @@ export default defineEventHandler(async (h3) => {
select: { id: true },
});
if (!game)
- throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
+ throw createError({ statusCode: 400, message: "Invalid game ID" });
await screenshotManager.upload(userId, gameId, h3.node.req);
});
diff --git a/server/api/v1/screenshots/index.get.ts b/server/api/v1/screenshots/index.get.ts
index 97b9f93..32c3c4d 100644
--- a/server/api/v1/screenshots/index.get.ts
+++ b/server/api/v1/screenshots/index.get.ts
@@ -1,6 +1,6 @@
// get all user screenshots
-import aclManager from "~/server/internal/acls";
-import screenshotManager from "~/server/internal/screenshots";
+import aclManager from "~~/server/internal/acls";
+import screenshotManager from "~~/server/internal/screenshots";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["screenshots:read"]);
diff --git a/server/api/v1/settings/index.get.ts b/server/api/v1/settings/index.get.ts
index dea2604..f2ebb04 100644
--- a/server/api/v1/settings/index.get.ts
+++ b/server/api/v1/settings/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import { applicationSettings } from "~/server/internal/config/application-configuration";
+import aclManager from "~~/server/internal/acls";
+import { applicationSettings } from "~~/server/internal/config/application-configuration";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.getUserACL(h3, ["settings:read"]);
diff --git a/server/api/v1/setup.post.ts b/server/api/v1/setup.post.ts
index acd83f6..1c63ec0 100644
--- a/server/api/v1/setup.post.ts
+++ b/server/api/v1/setup.post.ts
@@ -1,13 +1,13 @@
-import { APITokenMode } from "~/prisma/client/enums";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["setup"]);
if (!allowed)
throw createError({
statusCode: 403,
- statusMessage: "Must use a setup token.",
+ message: "Must use a setup token.",
});
await prisma.aPIToken.deleteMany({
where: {
diff --git a/server/api/v1/store/featured.get.ts b/server/api/v1/store/featured.get.ts
index fb353e4..ce7f0af 100644
--- a/server/api/v1/store/featured.get.ts
+++ b/server/api/v1/store/featured.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserACL(h3, ["store:read"]);
diff --git a/server/api/v1/store/index.get.ts b/server/api/v1/store/index.get.ts
index 26649f3..8ee924d 100644
--- a/server/api/v1/store/index.get.ts
+++ b/server/api/v1/store/index.get.ts
@@ -1,8 +1,7 @@
import { ArkErrors, type } from "arktype";
-import type { Prisma } from "~/prisma/client/client";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
-import { parsePlatform } from "~/server/internal/utils/parseplatform";
+import type { Prisma } from "~~/prisma/client/client";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const StoreRead = type({
skip: type("string")
@@ -29,7 +28,7 @@ export default defineEventHandler(async (h3) => {
const query = getQuery(h3);
const options = StoreRead(query);
if (options instanceof ArkErrors)
- throw createError({ statusCode: 400, statusMessage: options.summary });
+ throw createError({ statusCode: 400, message: options.summary });
/**
* Generic filters
@@ -46,18 +45,19 @@ export default defineEventHandler(async (h3) => {
}
: undefined;
const platformFilter = options.platform
- ? {
+ ? ({
versions: {
some: {
- platform: {
- in: options.platform
- .split(",")
- .map(parsePlatform)
- .filter((e) => e !== undefined),
- },
+ gameVersions: {
+ some: {
+ platform: {
+ id: options.platform
+ }
+ }
+ }
},
},
- }
+ } satisfies Prisma.GameWhereInput)
: undefined;
/**
diff --git a/server/api/v1/store/platforms.get.ts b/server/api/v1/store/platforms.get.ts
new file mode 100644
index 0000000..96ee357
--- /dev/null
+++ b/server/api/v1/store/platforms.get.ts
@@ -0,0 +1,17 @@
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
+
+export default defineEventHandler(async (h3) => {
+ const userId = await aclManager.getUserIdACL(h3, ["store:read"]);
+ if (!userId) throw createError({ statusCode: 403 });
+
+ const platforms = await prisma.userPlatform.findMany({
+ orderBy: { platformName: "asc" },
+ select: {
+ id: true,
+ platformName: true,
+ iconSvg: true,
+ },
+ });
+ return platforms;
+});
diff --git a/server/api/v1/store/tags.get.ts b/server/api/v1/store/tags.get.ts
index 07f4030..2ed97ee 100644
--- a/server/api/v1/store/tags.get.ts
+++ b/server/api/v1/store/tags.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["store:read"]);
diff --git a/server/api/v1/tags/[id]/index.get.ts b/server/api/v1/tags/[id]/index.get.ts
index 5d5d686..29bbe32 100644
--- a/server/api/v1/tags/[id]/index.get.ts
+++ b/server/api/v1/tags/[id]/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["store:read"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!tagId)
throw createError({
statusCode: 400,
- statusMessage: "Missing gameId in route params (somehow...?)",
+ message: "Missing gameId in route params (somehow...?)",
});
const tag = await prisma.gameTag.findUnique({
@@ -17,7 +17,7 @@ export default defineEventHandler(async (h3) => {
});
if (!tag)
- throw createError({ statusCode: 404, statusMessage: "Tag not found" });
+ throw createError({ statusCode: 404, message: "Tag not found" });
return { tag };
});
diff --git a/server/api/v1/task/index.get.ts b/server/api/v1/task/index.get.ts
index 6f25a53..feb6b56 100644
--- a/server/api/v1/task/index.get.ts
+++ b/server/api/v1/task/index.get.ts
@@ -1,5 +1,5 @@
-import taskHandler from "~/server/internal/tasks";
-import type { MinimumRequestObject } from "~/server/h3";
+import taskHandler from "~~/server/internal/tasks";
+import type { MinimumRequestObject } from "~~/server/h3";
// TODO add web socket sessions for horizontal scaling
// ID to admin
diff --git a/server/api/v1/token.get.ts b/server/api/v1/token.get.ts
index 1ce5320..5557f66 100644
--- a/server/api/v1/token.get.ts
+++ b/server/api/v1/token.get.ts
@@ -1,4 +1,4 @@
-import aclManager from "~/server/internal/acls";
+import aclManager from "~~/server/internal/acls";
export default defineEventHandler(async (h3) => {
const acls = await aclManager.fetchAllACLs(h3);
diff --git a/server/api/v1/user/client/[id]/index.delete.ts b/server/api/v1/user/client/[id]/index.delete.ts
index 2f17273..aea32ef 100644
--- a/server/api/v1/user/client/[id]/index.delete.ts
+++ b/server/api/v1/user/client/[id]/index.delete.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import clientHandler from "~/server/internal/clients/handler";
+import aclManager from "~~/server/internal/acls";
+import clientHandler from "~~/server/internal/clients/handler";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["clients:revoke"]);
@@ -9,7 +9,7 @@ export default defineEventHandler(async (h3) => {
if (!clientId)
throw createError({
statusCode: 400,
- statusMessage: "Client ID missing in route params",
+ message: "Client ID missing in route params",
});
await clientHandler.removeClient(clientId);
diff --git a/server/api/v1/user/client/index.get.ts b/server/api/v1/user/client/index.get.ts
index 17b5f1f..093c8cd 100644
--- a/server/api/v1/user/client/index.get.ts
+++ b/server/api/v1/user/client/index.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["clients:read"]);
diff --git a/server/api/v1/user/index.get.ts b/server/api/v1/user/index.get.ts
index fb8a254..3dc1295 100644
--- a/server/api/v1/user/index.get.ts
+++ b/server/api/v1/user/index.get.ts
@@ -1,4 +1,4 @@
-import aclManager from "~/server/internal/acls";
+import aclManager from "~~/server/internal/acls";
export default defineEventHandler(async (h3) => {
const user = await aclManager.getUserACL(h3, ["read"]);
diff --git a/server/api/v1/user/token/[id]/index.delete.ts b/server/api/v1/user/token/[id]/index.delete.ts
index 54d1be1..4a6ae8b 100644
--- a/server/api/v1/user/token/[id]/index.delete.ts
+++ b/server/api/v1/user/token/[id]/index.delete.ts
@@ -1,6 +1,6 @@
-import { APITokenMode } from "~/prisma/client/enums";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, []); // No ACLs only allows session authentication
@@ -10,14 +10,14 @@ export default defineEventHandler(async (h3) => {
if (!id)
throw createError({
statusCode: 400,
- statusMessage: "No id in router params",
+ message: "No id in router params",
});
const deleted = await prisma.aPIToken.delete({
where: { id: id, userId: userId, mode: APITokenMode.User },
})!;
if (!deleted)
- throw createError({ statusCode: 404, statusMessage: "Token not found" });
+ throw createError({ statusCode: 404, message: "Token not found" });
return;
});
diff --git a/server/api/v1/user/token/acls.get.ts b/server/api/v1/user/token/acls.get.ts
index d118809..3c351d0 100644
--- a/server/api/v1/user/token/acls.get.ts
+++ b/server/api/v1/user/token/acls.get.ts
@@ -1,5 +1,5 @@
-import aclManager from "~/server/internal/acls";
-import { userACLDescriptions } from "~/server/internal/acls/descriptions";
+import aclManager from "~~/server/internal/acls";
+import { userACLDescriptions } from "~~/server/internal/acls/descriptions";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, []); // No ACLs only allows session authentication
diff --git a/server/api/v1/user/token/index.get.ts b/server/api/v1/user/token/index.get.ts
index cff1b85..bbe1441 100644
--- a/server/api/v1/user/token/index.get.ts
+++ b/server/api/v1/user/token/index.get.ts
@@ -1,6 +1,6 @@
-import { APITokenMode } from "~/prisma/client/enums";
-import aclManager from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import aclManager from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, []); // No ACLs only allows session authentication
diff --git a/server/api/v1/user/token/index.post.ts b/server/api/v1/user/token/index.post.ts
index aafacf3..ffdb4c0 100644
--- a/server/api/v1/user/token/index.post.ts
+++ b/server/api/v1/user/token/index.post.ts
@@ -1,8 +1,8 @@
import { type } from "arktype";
-import { APITokenMode } from "~/prisma/client/enums";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import aclManager, { userACLs } from "~/server/internal/acls";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import aclManager, { userACLs } from "~~/server/internal/acls";
+import prisma from "~~/server/internal/db/database";
const CreateToken = type({
name: "string",
@@ -22,7 +22,7 @@ export default defineEventHandler(async (h3) => {
if (invalidACLs.length > 0)
throw createError({
statusCode: 400,
- statusMessage: `Invalid ACLs: ${invalidACLs.join(", ")}`,
+ message: `Invalid ACLs: ${invalidACLs.join(", ")}`,
});
const token = await prisma.aPIToken.create({
diff --git a/server/api/v2/client/chunk.post.ts b/server/api/v2/client/chunk.post.ts
index 648961b..292e2fb 100644
--- a/server/api/v2/client/chunk.post.ts
+++ b/server/api/v2/client/chunk.post.ts
@@ -1,8 +1,8 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import contextManager from "~/server/internal/downloads/coordinator";
-import libraryManager from "~/server/internal/library";
-import { logger } from "~/server/internal/logging";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import contextManager from "~~/server/internal/downloads/coordinator";
+import libraryManager from "~~/server/internal/library";
+import { logger } from "~~/server/internal/logging";
const GetChunk = type({
context: "string",
@@ -22,7 +22,7 @@ export default defineEventHandler(async (h3) => {
if (!context)
throw createError({
statusCode: 400,
- statusMessage: "Invalid download context.",
+ message: "Invalid download context.",
});
const streamFiles = [];
@@ -32,7 +32,7 @@ export default defineEventHandler(async (h3) => {
if (!manifestFile)
throw createError({
statusCode: 400,
- statusMessage: `Unknown file: ${file.filename}`,
+ message: `Unknown file: ${file.filename}`,
});
const start = manifestFile.lengths
@@ -84,7 +84,7 @@ export default defineEventHandler(async (h3) => {
);
throw createError({
statusCode: 500,
- statusMessage: "Failed to read enough from stream.",
+ message: "Failed to read enough from stream.",
});
}
}
diff --git a/server/api/v2/client/context.post.ts b/server/api/v2/client/context.post.ts
index e54356a..c3f6d4e 100644
--- a/server/api/v2/client/context.post.ts
+++ b/server/api/v2/client/context.post.ts
@@ -1,7 +1,7 @@
import { type } from "arktype";
-import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
-import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
-import contextManager from "~/server/internal/downloads/coordinator";
+import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
+import { defineClientEventHandler } from "~~/server/internal/clients/event-handler";
+import contextManager from "~~/server/internal/downloads/coordinator";
const CreateContext = type({
game: "string",
@@ -15,7 +15,7 @@ export default defineClientEventHandler(async (h3) => {
if (!context)
throw createError({
statusCode: 400,
- statusMessage: "Invalid game or version",
+ message: "Invalid game or version",
});
return { context };
diff --git a/server/arktype.ts b/server/arktype.ts
index 466851e..d9679eb 100644
--- a/server/arktype.ts
+++ b/server/arktype.ts
@@ -39,12 +39,12 @@ export async function readDropValidatedBody(
if (e instanceof ArkErrors) {
throw createError({
statusCode: 400,
- statusMessage: t("errors.invalidBody", [e.summary]),
+ message: t("errors.invalidBody", [e.summary]),
});
}
throw createError({
statusCode: 400,
- statusMessage: t("errors.invalidBody", [
+ message: t("errors.invalidBody", [
e instanceof Error ? e.message : `${e}`,
]),
});
diff --git a/server/internal/acls/descriptions.ts b/server/internal/acls/descriptions.ts
index af1a007..5fab2f0 100644
--- a/server/internal/acls/descriptions.ts
+++ b/server/internal/acls/descriptions.ts
@@ -73,6 +73,10 @@ export const systemACLDescriptions: ObjectFromList = {
"game:image:new": "Upload an image for a game.",
"game:image:delete": "Delete an image for a game.",
+ "redist:read": "Fetch redistributables on this instance.",
+ "redist:update": "Update redistributables on this instance.",
+ "redist:delete": "Delete redistributables on this instance.",
+
"company:read": "Fetch companies.",
"company:create": "Create a new company.",
"company:update": "Update existing companies.",
@@ -84,6 +88,8 @@ export const systemACLDescriptions: ObjectFromList = {
"import:game:read":
"Fetch games to be imported, and search the metadata for games.",
"import:game:new": "Import a game.",
+ "import:redist:read": "Fetch redists to be imported.",
+ "import:redist:new": "Import a redist.",
"tags:read": "Fetch all tags",
"tags:create": "Create a tag",
diff --git a/server/internal/acls/index.ts b/server/internal/acls/index.ts
index d6997c5..e8c9372 100644
--- a/server/internal/acls/index.ts
+++ b/server/internal/acls/index.ts
@@ -1,7 +1,7 @@
-import { APITokenMode } from "~/prisma/client/enums";
+import { APITokenMode } from "~~/prisma/client/enums";
import prisma from "../db/database";
import sessionHandler from "../session";
-import type { MinimumRequestObject } from "~/server/h3";
+import type { MinimumRequestObject } from "~~/server/h3";
export const userACLs = [
"read",
@@ -67,6 +67,10 @@ export const systemACLs = [
"game:image:new",
"game:image:delete",
+ "redist:read",
+ "redist:update",
+ "redist:delete",
+
"company:read",
"company:update",
"company:create",
@@ -74,9 +78,10 @@ export const systemACLs = [
"import:version:read",
"import:version:new",
-
"import:game:read",
"import:game:new",
+ "import:redist:read",
+ "import:redist:new",
"user:read",
"user:delete",
diff --git a/server/internal/auth/index.ts b/server/internal/auth/index.ts
index ee9cadc..634aad3 100644
--- a/server/internal/auth/index.ts
+++ b/server/internal/auth/index.ts
@@ -1,6 +1,6 @@
-import { AuthMec } from "~/prisma/client/enums";
+import { AuthMec } from "~~/prisma/client/enums";
import { OIDCManager } from "./oidc";
-import { logger } from "~/server/internal/logging";
+import { logger } from "~~/server/internal/logging";
class AuthManager {
private authProviders: {
diff --git a/server/internal/auth/oidc/index.ts b/server/internal/auth/oidc/index.ts
index 4508d48..7e61818 100644
--- a/server/internal/auth/oidc/index.ts
+++ b/server/internal/auth/oidc/index.ts
@@ -1,12 +1,12 @@
import { randomUUID } from "crypto";
import prisma from "../../db/database";
-import type { UserModel } from "~/prisma/client/models";
-import { AuthMec } from "~/prisma/client/enums";
+import type { UserModel } from "~~/prisma/client/models";
+import { AuthMec } from "~~/prisma/client/enums";
import objectHandler from "../../objects";
import type { Readable } from "stream";
import * as jdenticon from "jdenticon";
import { systemConfig } from "../../config/sys-conf";
-import { logger } from "~/server/internal/logging";
+import { logger } from "~~/server/internal/logging";
interface OIDCWellKnown {
authorization_endpoint: string;
diff --git a/server/internal/clients/ca.ts b/server/internal/clients/ca.ts
index 2195def..7f32736 100644
--- a/server/internal/clients/ca.ts
+++ b/server/internal/clients/ca.ts
@@ -24,7 +24,7 @@ export class CertificateAuthority {
let ca;
if (root === undefined) {
const [cert, priv] = droplet.generateRootCa();
- const bundle: CertificateBundle = { priv, cert };
+ const bundle: CertificateBundle = { priv: priv!, cert: cert! };
await store.store("ca", bundle);
ca = new CertificateAuthority(store, bundle);
} else {
@@ -50,8 +50,8 @@ export class CertificateAuthority {
caCertificate.priv,
);
const certBundle: CertificateBundle = {
- priv,
- cert,
+ priv: priv!,
+ cert: cert!,
};
return certBundle;
}
diff --git a/server/internal/clients/capabilities.ts b/server/internal/clients/capabilities.ts
index 868a9f6..3f4d43d 100644
--- a/server/internal/clients/capabilities.ts
+++ b/server/internal/clients/capabilities.ts
@@ -1,29 +1,19 @@
import type { EnumDictionary } from "../utils/types";
import prisma from "../db/database";
-import { ClientCapabilities } from "~/prisma/client/enums";
+import { ClientCapabilities } from "~~/prisma/client/enums";
-// These values are technically mapped to the database,
-// but Typescript/Prisma doesn't let me link them
-// They are also what are required by clients in the API
-// BREAKING CHANGE
-export enum InternalClientCapability {
- PeerAPI = "peerAPI",
- UserStatus = "userStatus",
- CloudSaves = "cloudSaves",
- TrackPlaytime = "trackPlaytime",
-}
-export const validCapabilities = Object.values(InternalClientCapability);
+export const validCapabilities = Object.values(ClientCapabilities);
export type CapabilityConfiguration = {
- [InternalClientCapability.PeerAPI]: object;
- [InternalClientCapability.UserStatus]: object;
- [InternalClientCapability.CloudSaves]: object;
+ [ClientCapabilities.PeerAPI]: object;
+ [ClientCapabilities.UserStatus]: object;
+ [ClientCapabilities.CloudSaves]: object;
};
class CapabilityManager {
private validationFunctions: EnumDictionary<
- InternalClientCapability,
+ ClientCapabilities,
(configuration: object) => Promise
> = {
/*
@@ -77,14 +67,14 @@ class CapabilityManager {
return valid;
},
*/
- [InternalClientCapability.PeerAPI]: async () => true,
- [InternalClientCapability.UserStatus]: async () => true, // No requirements for user status
- [InternalClientCapability.CloudSaves]: async () => true, // No requirements for cloud saves
- [InternalClientCapability.TrackPlaytime]: async () => true,
+ [ClientCapabilities.PeerAPI]: async () => true,
+ [ClientCapabilities.UserStatus]: async () => true, // No requirements for user status
+ [ClientCapabilities.CloudSaves]: async () => true, // No requirements for cloud saves
+ [ClientCapabilities.TrackPlaytime]: async () => true,
};
async validateCapabilityConfiguration(
- capability: InternalClientCapability,
+ capability: ClientCapabilities,
configuration: object,
) {
const validationFunction = this.validationFunctions[capability];
@@ -93,15 +83,15 @@ class CapabilityManager {
}
async upsertClientCapability(
- capability: InternalClientCapability,
+ capability: ClientCapabilities,
rawCapabilityConfiguration: object,
clientId: string,
) {
const upsertFunctions: EnumDictionary<
- InternalClientCapability,
+ ClientCapabilities,
() => Promise | void
> = {
- [InternalClientCapability.PeerAPI]: async function () {
+ [ClientCapabilities.PeerAPI]: async function () {
// const configuration =rawCapability as CapabilityConfiguration[InternalClientCapability.PeerAPI];
const currentClient = await prisma.client.findUnique({
@@ -139,10 +129,10 @@ class CapabilityManager {
},
});
},
- [InternalClientCapability.UserStatus]: function (): Promise | void {
+ [ClientCapabilities.UserStatus]: function (): Promise | void {
throw new Error("Function not implemented.");
},
- [InternalClientCapability.CloudSaves]: async function () {
+ [ClientCapabilities.CloudSaves]: async function () {
const currentClient = await prisma.client.findUnique({
where: { id: clientId },
select: {
@@ -162,7 +152,7 @@ class CapabilityManager {
},
});
},
- [InternalClientCapability.TrackPlaytime]: async function () {
+ [ClientCapabilities.TrackPlaytime]: async function () {
const currentClient = await prisma.client.findUnique({
where: { id: clientId },
select: {
diff --git a/server/internal/clients/event-handler.ts b/server/internal/clients/event-handler.ts
index dfbdf0d..0d8865a 100644
--- a/server/internal/clients/event-handler.ts
+++ b/server/internal/clients/event-handler.ts
@@ -1,8 +1,8 @@
-import type { ClientModel, UserModel } from "~/prisma/client/models";
+import type { ClientModel, UserModel } from "~~/prisma/client/models";
import type { EventHandlerRequest, H3Event } from "h3";
import droplet from "@drop-oss/droplet";
import prisma from "../db/database";
-import { useCertificateAuthority } from "~/server/plugins/ca";
+import { useCertificateAuthority } from "~~/server/plugins/ca";
export type EventHandlerFunction = (
h3: H3Event,
@@ -23,7 +23,7 @@ export function defineClientEventHandler(handler: EventHandlerFunction) {
if (!header) throw createError({ statusCode: 403 });
const [method, ...parts] = header.split(" ");
- let clientId: string;
+ let clientId: string | undefined;
switch (method) {
case "Debug": {
if (!import.meta.dev) throw createError({ statusCode: 403 });
@@ -31,7 +31,7 @@ export function defineClientEventHandler(handler: EventHandlerFunction) {
if (!client)
throw createError({
statusCode: 400,
- statusMessage: "No clients created.",
+ message: "No clients created.",
});
clientId = client.id;
break;
@@ -55,7 +55,7 @@ export function defineClientEventHandler(handler: EventHandlerFunction) {
// We reject the request
throw createError({
statusCode: 403,
- statusMessage: "Nonce expired",
+ message: "Nonce expired",
});
}
@@ -66,21 +66,21 @@ export function defineClientEventHandler(handler: EventHandlerFunction) {
if (!certBundle)
throw createError({
statusCode: 403,
- statusMessage: "Invalid client ID",
+ message: "Invalid client ID",
});
const valid = droplet.verifyNonce(certBundle.cert, nonce, signature);
if (!valid)
throw createError({
statusCode: 403,
- statusMessage: "Invalid nonce signature.",
+ message: "Invalid nonce signature.",
});
break;
}
default: {
throw createError({
statusCode: 403,
- statusMessage: "No authentication",
+ message: "No authentication",
});
}
}
@@ -88,12 +88,12 @@ export function defineClientEventHandler(handler: EventHandlerFunction) {
if (clientId === undefined)
throw createError({
statusCode: 500,
- statusMessage: "Failed to execute authentication pipeline.",
+ message: "Failed to execute authentication pipeline.",
});
async function fetchClient() {
const client = await prisma.client.findUnique({
- where: { id: clientId },
+ where: { id: clientId! },
});
if (!client)
throw new Error(
@@ -104,7 +104,7 @@ export function defineClientEventHandler(handler: EventHandlerFunction) {
async function fetchUser() {
const client = await prisma.client.findUnique({
- where: { id: clientId },
+ where: { id: clientId! },
select: {
user: true,
},
diff --git a/server/internal/clients/handler.ts b/server/internal/clients/handler.ts
index 960dd55..99be1c1 100644
--- a/server/internal/clients/handler.ts
+++ b/server/internal/clients/handler.ts
@@ -1,23 +1,20 @@
import { randomUUID } from "node:crypto";
import prisma from "../db/database";
-import type { Platform } from "~/prisma/client/enums";
-import { useCertificateAuthority } from "~/server/plugins/ca";
+import type { ClientCapabilities, HardwarePlatform } from "~~/prisma/client/enums";
+import { useCertificateAuthority } from "~~/server/plugins/ca";
import type {
CapabilityConfiguration,
- InternalClientCapability,
} from "./capabilities";
import capabilityManager from "./capabilities";
import type { PeerImpl } from "../tasks";
-import userStatsManager from "~/server/internal/userstats";
+import userStatsManager from "~~/server/internal/userstats";
-export enum AuthMode {
- Callback = "callback",
- Code = "code",
-}
+export const AuthModes = ["callback", "code"] as const;
+export type AuthMode = (typeof AuthModes)[number];
export interface ClientMetadata {
name: string;
- platform: Platform;
+ platform: HardwarePlatform;
capabilities: Partial;
mode: AuthMode;
}
@@ -63,9 +60,9 @@ export class ClientHandler {
});
switch (metadata.mode) {
- case AuthMode.Callback:
+ case "callback":
return `/client/authorize/${clientId}`;
- case AuthMode.Code: {
+ case "code": {
const code = randomUUID()
.replaceAll(/-/g, "")
.slice(0, 7)
@@ -81,15 +78,15 @@ export class ClientHandler {
if (!clientId)
throw createError({
statusCode: 403,
- statusMessage: "Invalid or unknown code.",
+ message: "Invalid or unknown code.",
});
const metadata = this.temporaryClientTable.get(clientId);
if (!metadata)
- throw createError({ statusCode: 500, statusMessage: "Broken code." });
+ throw createError({ statusCode: 500, message: "Broken code." });
if (metadata.peer)
throw createError({
statusCode: 400,
- statusMessage: "Pre-existing listener for this code.",
+ message: "Pre-existing listener for this code.",
});
metadata.peer = peer;
this.temporaryClientTable.set(clientId, metadata);
@@ -130,12 +127,12 @@ export class ClientHandler {
if (!client)
throw createError({
statusCode: 500,
- statusMessage: "Corrupted code, please restart the process.",
+ message: "Corrupted code, please restart the process.",
});
if (!client.peer)
throw createError({
statusCode: 400,
- statusMessage: "Client has not connected yet. Please try again later.",
+ message: "Client has not connected yet. Please try again later.",
});
client.peer.send(
JSON.stringify({ type: "token", value: `${clientId}/${token}` }),
@@ -173,7 +170,7 @@ export class ClientHandler {
metadata.data.capabilities,
)) {
await capabilityManager.upsertClientCapability(
- capability as InternalClientCapability,
+ capability as ClientCapabilities,
configuration,
client.id,
);
diff --git a/server/internal/config/application-configuration.ts b/server/internal/config/application-configuration.ts
index 697702e..4f44537 100644
--- a/server/internal/config/application-configuration.ts
+++ b/server/internal/config/application-configuration.ts
@@ -1,4 +1,4 @@
-import type { ApplicationSettingsModel } from "~/prisma/client/models";
+import type { ApplicationSettingsModel } from "~~/prisma/client/models";
import prisma from "../db/database";
class ApplicationConfiguration {
diff --git a/server/internal/db/database.ts b/server/internal/db/database.ts
index fe12a0c..05d898a 100644
--- a/server/internal/db/database.ts
+++ b/server/internal/db/database.ts
@@ -1,4 +1,4 @@
-import { PrismaClient } from "~/prisma/client/client";
+import { PrismaClient } from "~~/prisma/client/client";
// import { PrismaPg } from "@prisma/adapter-pg";
const prismaClientSingleton = () => {
diff --git a/server/internal/downloads/coordinator.ts b/server/internal/downloads/coordinator.ts
index bc2dfe5..0ccec81 100644
--- a/server/internal/downloads/coordinator.ts
+++ b/server/internal/downloads/coordinator.ts
@@ -15,12 +15,13 @@ class DownloadContextManager {
}
> = new Map();
- async createContext(game: string, versionName: string) {
- const version = await prisma.gameVersion.findUnique({
+ async createContext(game: string, versionPath: string) {
+ const version = await prisma.version.findFirst({
where: {
- gameId_versionName: {
- gameId: game,
- versionName,
+ gameId: game,
+ versionPath,
+ game: {
+ isNot: null,
},
},
include: {
@@ -38,9 +39,9 @@ class DownloadContextManager {
this.contexts.set(contextId, {
timeout: new Date(),
manifest: JSON.parse(version.dropletManifest as string) as DropManifest,
- versionName,
- libraryId: version.game.libraryId!,
- libraryPath: version.game.libraryPath,
+ versionName: versionPath,
+ libraryId: version.game!.libraryId!,
+ libraryPath: version.game!.libraryPath,
});
return contextId;
diff --git a/server/internal/downloads/manifest.ts b/server/internal/downloads/manifest.ts
index 2da9b57..b9e2305 100644
--- a/server/internal/downloads/manifest.ts
+++ b/server/internal/downloads/manifest.ts
@@ -1,4 +1,3 @@
-import type { GameVersionModel } from "~/prisma/client/models";
import prisma from "../db/database";
import { sum } from "~/utils/array";
@@ -15,11 +14,11 @@ export type DropManifest = {
export type DropManifestMetadata = {
manifest: DropManifest;
- versionName: string;
+ versionId: string;
};
export type DropGeneratedManifest = DropManifest & {
- [key: string]: { versionName: string };
+ [key: string]: { versionId: string };
};
class ManifestGenerator {
@@ -32,7 +31,7 @@ class ManifestGenerator {
Object.entries(rootManifest.manifest).map(([key, value]) => {
return [
key,
- Object.assign({}, value, { versionName: rootManifest.versionName }),
+ Object.assign({}, value, { versionId: rootManifest.versionId }),
];
}),
);
@@ -45,7 +44,7 @@ class ManifestGenerator {
for (const [filename, chunk] of Object.entries(version.manifest)) {
if (manifest[filename]) continue;
manifest[filename] = Object.assign({}, chunk, {
- versionName: version.versionName,
+ versionId: version.versionId,
});
}
}
@@ -54,14 +53,26 @@ class ManifestGenerator {
}
// Local function because eventual caching
- async generateManifest(gameId: string, versionName: string) {
- const versions: GameVersionModel[] = [];
+ async generateManifest(versionId: string) {
+ const versions = [];
const baseVersion = await prisma.gameVersion.findUnique({
where: {
- gameId_versionName: {
- gameId: gameId,
- versionName: versionName,
+ versionId,
+ version: {
+ gameId: {
+ not: null,
+ },
+ },
+ },
+ include: {
+ platform: true,
+ version: {
+ select: {
+ gameId: true,
+ dropletManifest: true,
+ versionIndex: true,
+ },
},
},
});
@@ -73,31 +84,42 @@ class ManifestGenerator {
// Start at the same index minus one, and keep grabbing them
// until we run out or we hit something that isn't a delta
// eslint-disable-next-line no-constant-condition
- for (let i = baseVersion.versionIndex - 1; true; i--) {
+ for (let i = baseVersion.version.versionIndex - 1; true; i--) {
const currentVersion = await prisma.gameVersion.findFirst({
where: {
- gameId: gameId,
- versionIndex: i,
- platform: baseVersion.platform,
+ version: {
+ gameId: baseVersion.version.gameId!,
+ versionIndex: i,
+ },
+ platform: {
+ id: baseVersion.platform.id,
+ },
+ },
+ include: {
+ version: {
+ select: {
+ dropletManifest: true,
+ },
+ },
},
});
if (!currentVersion) return undefined;
versions.push(currentVersion);
- if (!currentVersion.delta) break;
+ if (!currentVersion?.delta) break;
}
}
- const leastToMost = versions.reverse();
- const metadata: DropManifestMetadata[] = leastToMost.map((e) => {
+ versions.reverse();
+ const metadata: DropManifestMetadata[] = versions.map((gameVersion) => {
return {
manifest: JSON.parse(
- e.dropletManifest?.toString() ?? "{}",
+ gameVersion.version.dropletManifest?.toString() ?? "{}",
) as DropManifest,
- versionName: e.versionName,
+ versionId: gameVersion.versionId,
};
});
const manifest = ManifestGenerator.generateManifestFromMetadata(
- metadata[0],
+ metadata[0]!,
...metadata.slice(1),
);
diff --git a/server/internal/gamesize/index.ts b/server/internal/gamesize/index.ts
index 9e20976..17000a6 100644
--- a/server/internal/gamesize/index.ts
+++ b/server/internal/gamesize/index.ts
@@ -1,8 +1,8 @@
+import { sum } from "~/utils/array";
import cacheHandler from "../cache";
import prisma from "../db/database";
import manifestGenerator from "../downloads/manifest";
-import { sum } from "../../../utils/array";
-import type { Game, GameVersion } from "~/prisma/client/client";
+import type { Game, Version } from "~~/prisma/client/client";
export type GameSize = {
gameName: string;
@@ -15,7 +15,7 @@ export type VersionSize = GameSize & {
};
type VersionsSizes = {
- [versionName: string]: VersionSize;
+ [versionId: string]: VersionSize;
};
type GameVersionsSize = {
@@ -42,7 +42,7 @@ class GameSizeManager {
// All versions of a game combined
async getCombinedGameSize(gameId: string) {
- const versions = await prisma.gameVersion.findMany({
+ const versions = await prisma.version.findMany({
where: { gameId },
});
const sizes = await Promise.all(
@@ -57,10 +57,10 @@ class GameSizeManager {
async getGameVersionSize(
gameId: string,
- versionName?: string,
+ versionId?: string,
): Promise {
- if (!versionName) {
- const version = await prisma.gameVersion.findFirst({
+ if (!versionId) {
+ const version = await prisma.version.findFirst({
where: { gameId },
orderBy: {
versionIndex: "desc",
@@ -69,13 +69,10 @@ class GameSizeManager {
if (!version) {
return null;
}
- versionName = version.versionName;
+ versionId = version.versionId;
}
- const manifest = await manifestGenerator.generateManifest(
- gameId,
- versionName,
- );
+ const manifest = await manifestGenerator.generateManifest(versionId);
if (!manifest) {
return null;
}
@@ -84,11 +81,11 @@ class GameSizeManager {
}
private async isLatestVersion(
- gameVersions: GameVersion[],
- version: GameVersion,
+ gameVersions: Version[],
+ version: Version,
): Promise {
return gameVersions.length > 0
- ? gameVersions[0].versionName === version.versionName
+ ? gameVersions[0].versionId === version.versionId
: false;
}
@@ -101,7 +98,7 @@ class GameSizeManager {
return null;
}
const latestVersionName = Object.keys(versionsSizes).find(
- (versionName) => versionsSizes[versionName].latest,
+ (versionId) => versionsSizes[versionId].latest,
);
if (!latestVersionName) {
return null;
@@ -161,17 +158,17 @@ class GameSizeManager {
}
async cacheGameVersion(
- game: Game & { versions: GameVersion[] },
- versionName?: string,
+ game: Game & { versions: Version[] },
+ versionId?: string,
) {
- const cacheVersion = async (version: GameVersion) => {
- const size = await this.getGameVersionSize(game.id, version.versionName);
- if (!version.versionName || !size) {
+ const cacheVersion = async (version: Version) => {
+ const size = await this.getGameVersionSize(game.id, version.versionId);
+ if (!version.versionId || !size) {
return;
}
const versionsSizes = {
- [version.versionName]: {
+ [version.versionId]: {
size,
gameName: game.mName,
gameId: game.id,
@@ -186,9 +183,9 @@ class GameSizeManager {
});
};
- if (versionName) {
- const version = await prisma.gameVersion.findFirst({
- where: { gameId: game.id, versionName },
+ if (versionId) {
+ const version = await prisma.version.findFirst({
+ where: { gameId: game.id, versionId },
});
if (!version) {
return;
@@ -212,7 +209,7 @@ class GameSizeManager {
.slice(0, top);
}
- async deleteGameVersion(gameId: string, version: string) {
+ async deleteGameVersion(gameId: string, versionId: string) {
const game = await prisma.game.findFirst({ where: { id: gameId } });
if (game) {
await this.cacheCombinedGame(game);
@@ -222,7 +219,7 @@ class GameSizeManager {
return;
}
// Remove the version from the VersionsSizes object
- const { [version]: _, ...updatedVersionsSizes } = versionsSizes;
+ const { [versionId]: _, ...updatedVersionsSizes } = versionsSizes;
await this.gameVersionsSizesCache.set(gameId, updatedVersionsSizes);
}
@@ -232,5 +229,5 @@ class GameSizeManager {
}
}
-export const manager = new GameSizeManager();
-export default manager;
+export const gameSizeManager = new GameSizeManager();
+export default gameSizeManager;
diff --git a/server/internal/library/REDIST-README.md b/server/internal/library/REDIST-README.md
new file mode 100644
index 0000000..739a66d
--- /dev/null
+++ b/server/internal/library/REDIST-README.md
@@ -0,0 +1,3 @@
+# Redistributables
+
+They are called 'redist' in the codebase/database models for brevity. Additionally, because they intentionally are drop-ins for games, they are added to all the functions that deal with games, without changing the names.
\ No newline at end of file
diff --git a/server/internal/library/index.ts b/server/internal/library/index.ts
index a0514e8..960b629 100644
--- a/server/internal/library/index.ts
+++ b/server/internal/library/index.ts
@@ -9,14 +9,29 @@ import path from "path";
import prisma from "../db/database";
import { fuzzy } from "fast-fuzzy";
import taskHandler from "../tasks";
-import { parsePlatform } from "../utils/parseplatform";
import notificationSystem from "../notifications";
import { GameNotFoundError, type LibraryProvider } from "./provider";
import { logger } from "../logging";
-import type { GameModel } from "~/prisma/client/models";
import { createHash } from "node:crypto";
-import type { WorkingLibrarySource } from "~/server/api/v1/admin/library/sources/index.get";
-import gameSizeManager from "~/server/internal/gamesize";
+import type { ImportVersion } from "~~/server/api/v1/admin/import/version/index.post";
+import type {
+ GameVersionCreateInput,
+ LaunchOptionCreateManyInput,
+ VersionCreateInput,
+ VersionWhereInput,
+} from "~~/prisma/client/models";
+import type { PlatformLink } from "~~/prisma/client/client";
+import { convertIDToLink } from "../platform/link";
+import type { WorkingLibrarySource } from "~~/server/api/v1/admin/library/sources/index.get";
+import gameSizeManager from "../gamesize";
+
+export const VersionImportModes = ["game", "redist"] as const;
+export type VersionImportMode = (typeof VersionImportModes)[number];
+
+const modeToLink: { [key in VersionImportMode]: string } = {
+ game: "g",
+ redist: "r",
+};
export function createGameImportTaskId(libraryId: string, libraryPath: string) {
return createHash("md5")
@@ -57,14 +72,15 @@ class LibraryManager {
}
async fetchGamesByLibrary() {
- const results: { [key: string]: { [key: string]: GameModel } } = {};
+ const results: { [key: string]: { [key: string]: boolean } } = {};
const games = await prisma.game.findMany({});
- for (const game of games) {
- const libraryId = game.libraryId!;
- const libraryPath = game.libraryPath!;
+ const redist = await prisma.redist.findMany({});
+ for (const item of [...games, ...redist]) {
+ const libraryId = item.libraryId!;
+ const libraryPath = item.libraryPath!;
results[libraryId] ??= {};
- results[libraryId][libraryPath] = game;
+ results[libraryId][libraryPath] = true;
}
return results;
@@ -90,18 +106,31 @@ class LibraryManager {
async fetchUnimportedGameVersions(libraryId: string, libraryPath: string) {
const provider = this.libraries.get(libraryId);
if (!provider) return undefined;
- const game = await prisma.game.findUnique({
- where: {
- libraryKey: {
- libraryId,
- libraryPath,
+ const game =
+ (await prisma.game.findUnique({
+ where: {
+ libraryKey: {
+ libraryId,
+ libraryPath,
+ },
},
- },
- select: {
- id: true,
- versions: true,
- },
- });
+ select: {
+ id: true,
+ versions: true,
+ },
+ })) ??
+ (await prisma.redist.findUnique({
+ where: {
+ libraryKey: {
+ libraryId,
+ libraryPath,
+ },
+ },
+ select: {
+ id: true,
+ versions: true,
+ },
+ }));
if (!game) return undefined;
try {
@@ -121,29 +150,23 @@ class LibraryManager {
}
}
- async fetchGamesWithStatus() {
- const games = await prisma.game.findMany({
- include: {
- versions: {
- select: {
- versionName: true,
- },
- },
- library: true,
- },
- orderBy: {
- mName: "asc",
- },
- });
-
+ async fetchLibraryObjectWithStatus(
+ objects: Array<
+ {
+ libraryId: string;
+ libraryPath: string;
+ versions: Array;
+ } & T
+ >,
+ ) {
return await Promise.all(
- games.map(async (e) => {
+ objects.map(async (e) => {
const versions = await this.fetchUnimportedGameVersions(
e.libraryId ?? "",
e.libraryPath,
);
return {
- game: e,
+ value: e,
status: versions
? {
noVersions: e.versions.length == 0,
@@ -155,22 +178,220 @@ class LibraryManager {
);
}
+ async fetchGamesWithStatus() {
+ const games = await prisma.game.findMany({
+ include: {
+ versions: {
+ select: {
+ versionId: true,
+ versionName: true,
+ },
+ },
+ library: {
+ select: {
+ id: true,
+ name: true,
+ },
+ },
+ },
+ orderBy: {
+ mName: "asc",
+ },
+ });
+
+ return await this.fetchLibraryObjectWithStatus(games);
+ }
+
+ async fetchRedistsWithStatus() {
+ const redists = await prisma.redist.findMany({
+ include: {
+ versions: {
+ select: {
+ versionId: true,
+ versionName: true,
+ },
+ },
+ library: {
+ select: {
+ id: true,
+ name: true,
+ },
+ },
+ platform: true,
+ },
+ orderBy: {
+ mName: "asc",
+ },
+ });
+
+ return await this.fetchLibraryObjectWithStatus(redists);
+ }
+
+ private async fetchLibraryPath(
+ id: string,
+ mode: VersionImportMode,
+ platform?: PlatformLink,
+ ): Promise<
+ | [
+ { mName: string; libraryId: string; libraryPath: string } | null,
+ VersionWhereInput,
+ ]
+ | undefined
+ > {
+ switch (mode) {
+ case "game":
+ return [
+ await prisma.game.findUnique({
+ where: { id },
+ select: { mName: true, libraryId: true, libraryPath: true },
+ }),
+ { gameId: id, gameVersions: { some: { platform } } },
+ ];
+ case "redist":
+ return [
+ await prisma.redist.findUnique({
+ where: { id },
+ select: { mName: true, libraryId: true, libraryPath: true },
+ }),
+ { redistId: id },
+ ];
+ }
+ return undefined;
+ }
+
+ private createVersionOptions(
+ id: string,
+ currentIndex: number,
+ metadata: typeof ImportVersion.infer,
+ ): Omit<
+ VersionCreateInput,
+ "versionPath" | "versionName" | "dropletManifest"
+ > {
+ const installCreator = {
+ install: {
+ create: {
+ name: "",
+ description: "",
+ command: metadata.install!,
+ args: metadata.installArgs || "",
+ },
+ },
+ } satisfies Partial;
+
+ const uninstallCreator = {
+ uninstall: {
+ create: {
+ name: "",
+ description: "",
+ command: metadata.uninstall!,
+ args: metadata.uninstallArgs || "",
+ },
+ },
+ } satisfies Partial;
+
+ switch (metadata.mode) {
+ case "game": {
+ return {
+ versionIndex: currentIndex,
+ game: {
+ connect: {
+ id,
+ },
+ },
+ gameVersions: {
+ create: {
+ delta: metadata.delta,
+ umuIdOverride: metadata.umuId,
+
+ onlySetup: metadata.onlySetup,
+
+ launches: {
+ createMany: {
+ data: metadata.launches.map(
+ (v) =>
+ ({
+ name: v.name,
+ description: v.description,
+ command: v.launchCommand,
+ args: v.launchArgs,
+ }) satisfies LaunchOptionCreateManyInput,
+ ),
+ },
+ },
+
+ ...(metadata.install ? installCreator : undefined),
+ ...(metadata.uninstall ? uninstallCreator : undefined),
+
+ platform: {
+ connect: {
+ id: metadata.platform,
+ },
+ },
+ },
+ },
+ };
+ }
+ case "redist":
+ return {
+ versionIndex: currentIndex,
+ redist: {
+ connect: {
+ id,
+ },
+ },
+ redistVersions: {
+ create: {
+ versionIndex: currentIndex,
+ delta: metadata.delta,
+
+ launches: {
+ createMany: {
+ data: metadata.launches.map(
+ (v) =>
+ ({
+ name: v.name,
+ description: v.description,
+ command: v.launchCommand,
+ args: v.launchArgs,
+ }) satisfies LaunchOptionCreateManyInput,
+ ),
+ },
+ },
+
+ ...(metadata.install ? installCreator : undefined),
+ ...(metadata.uninstall ? uninstallCreator : undefined),
+
+ platform: {
+ connect: {
+ id: metadata.platform,
+ },
+ },
+ },
+ },
+ };
+ }
+ }
+
/**
* Fetches recommendations and extra data about the version. Doesn't actually check if it's been imported.
- * @param gameId
- * @param versionName
+ * @param id
+ * @param version
* @returns
*/
- async fetchUnimportedVersionInformation(gameId: string, versionName: string) {
- const game = await prisma.game.findUnique({
- where: { id: gameId },
- select: { libraryPath: true, libraryId: true, mName: true },
- });
- if (!game || !game.libraryId) return undefined;
+ async fetchUnimportedVersionInformation(
+ id: string,
+ mode: VersionImportMode,
+ version: string,
+ ) {
+ const value = await this.fetchLibraryPath(id, mode);
+ if (!value?.[0] || !value[0].libraryId) return undefined;
+ const [libraryDetails] = value;
- const library = this.libraries.get(game.libraryId);
+ const library = this.libraries.get(libraryDetails.libraryId);
if (!library) return undefined;
+ const userPlatforms = await prisma.userPlatform.findMany({});
+
const fileExts: { [key: string]: string[] } = {
Linux: [
// Ext for Unity games
@@ -189,13 +410,20 @@ class LibraryManager {
],
};
+ for (const platform of userPlatforms) {
+ fileExts[platform.id] = platform.fileExtensions;
+ }
+
const options: Array<{
filename: string;
platform: string;
match: number;
}> = [];
- const files = await library.versionReaddir(game.libraryPath, versionName);
+ const files = await library.versionReaddir(
+ libraryDetails.libraryPath,
+ version,
+ );
for (const filename of files) {
const basename = path.basename(filename);
const dotLocation = filename.lastIndexOf(".");
@@ -204,7 +432,7 @@ class LibraryManager {
for (const [platform, checkExts] of Object.entries(fileExts)) {
for (const checkExt of checkExts) {
if (checkExt != ext) continue;
- const fuzzyValue = fuzzy(basename, game.mName);
+ const fuzzyValue = fuzzy(basename, libraryDetails.mName);
options.push({
filename,
platform,
@@ -227,6 +455,10 @@ class LibraryManager {
})) > 0;
if (hasGame) return false;
+ const hasRedist =
+ (await prisma.redist.count({ where: { libraryId, libraryPath } })) > 0;
+ if (hasRedist) return false;
+
return true;
}
@@ -239,46 +471,70 @@ class LibraryManager {
*/
async importVersion(
- gameId: string,
- versionName: string,
- metadata: {
- platform: string;
- onlySetup: boolean;
-
- setup: string;
- setupArgs: string;
- launch: string;
- launchArgs: string;
- delta: boolean;
-
- umuId: string;
- },
+ id: string,
+ version: string,
+ metadata: typeof ImportVersion.infer,
) {
- const taskId = createVersionImportTaskId(gameId, versionName);
+ const taskId = createVersionImportTaskId(id, version);
- const platform = parsePlatform(metadata.platform);
- if (!platform) return undefined;
+ if (metadata.mode === "game") {
+ if (metadata.onlySetup) {
+ if (!metadata.install)
+ throw createError({
+ statusCode: 400,
+ message: "An install command is required in only-setup mode.",
+ });
+ } else {
+ if (!metadata.delta && metadata.launches.length == 0)
+ throw createError({
+ statusCode: 400,
+ message:
+ "At least one launch command is required in non-delta, non-setup mode.",
+ });
+ }
+ }
- const game = await prisma.game.findUnique({
- where: { id: gameId },
- select: { mName: true, libraryId: true, libraryPath: true },
+ const platform = await convertIDToLink(metadata.platform);
+ if (!platform)
+ throw createError({ statusCode: 400, message: "Invalid platform." });
+
+ const value = await this.fetchLibraryPath(id, metadata.mode, platform);
+ if (!value || !value[0])
+ throw createError({
+ statusCode: 400,
+ message: `${metadata.mode} not found.`,
+ });
+ const [libraryDetails, idFilter] = value;
+
+ const library = this.libraries.get(libraryDetails.libraryId);
+ if (!library)
+ throw createError({
+ statusCode: 500,
+ message: "Library not found but exists in database?",
+ });
+
+ const currentIndex = await prisma.version.count({
+ where: { ...idFilter },
});
- if (!game || !game.libraryId) return undefined;
- const library = this.libraries.get(game.libraryId);
- if (!library) return undefined;
+ if (metadata.delta && currentIndex == 0)
+ throw createError({
+ statusCode: 400,
+ message:
+ "At least one pre-existing version of the same platform is required for delta mode.",
+ });
taskHandler.create({
id: taskId,
taskGroup: "import:game",
- name: `Importing version ${versionName} for ${game.mName}`,
+ name: `Importing version "${metadata.name}" (${version}) for ${libraryDetails.mName}`,
acls: ["system:import:version:read"],
async run({ progress, logger }) {
// First, create the manifest via droplet.
// This takes up 90% of our progress, so we wrap it in a *0.9
const manifest = await library.generateDropletManifest(
- game.libraryPath,
- versionName,
+ libraryDetails.libraryPath,
+ version,
(err, value) => {
if (err) throw err;
progress(value * 0.9);
@@ -291,59 +547,35 @@ class LibraryManager {
logger.info("Created manifest successfully!");
- const currentIndex = await prisma.gameVersion.count({
- where: { gameId: gameId },
- });
-
// Then, create the database object
- if (metadata.onlySetup) {
- await prisma.gameVersion.create({
- data: {
- gameId: gameId,
- versionName: versionName,
- dropletManifest: manifest,
- versionIndex: currentIndex,
- delta: metadata.delta,
- umuIdOverride: metadata.umuId,
- platform: platform,
+ const createdVersion = await prisma.version.create({
+ data: {
+ versionPath: version,
+ versionName: metadata.name ?? version,
+ dropletManifest: manifest,
- onlySetup: true,
- setupCommand: metadata.setup,
- setupArgs: metadata.setupArgs.split(" "),
- },
- });
- } else {
- await prisma.gameVersion.create({
- data: {
- gameId: gameId,
- versionName: versionName,
- dropletManifest: manifest,
- versionIndex: currentIndex,
- delta: metadata.delta,
- umuIdOverride: metadata.umuId,
- platform: platform,
-
- onlySetup: false,
- setupCommand: metadata.setup,
- setupArgs: metadata.setupArgs.split(" "),
- launchCommand: metadata.launch,
- launchArgs: metadata.launchArgs.split(" "),
- },
- });
- }
+ ...libraryManager.createVersionOptions(id, currentIndex, metadata),
+ },
+ });
logger.info("Successfully created version!");
notificationSystem.systemPush({
- nonce: `version-create-${gameId}-${versionName}`,
- title: `'${game.mName}' ('${versionName}') finished importing.`,
- description: `Drop finished importing version ${versionName} for ${game.mName}.`,
- actions: [`View|/admin/library/${gameId}`],
+ nonce: `version-create-${id}-${version}`,
+ title: `'${libraryDetails.mName}' ('${version}') finished importing.`,
+ description: `Drop finished importing version ${version} for ${libraryDetails.mName}.`,
+ actions: [`View|/admin/library/${modeToLink[metadata.mode]}/${id}`],
acls: ["system:import:version:read"],
});
- await libraryManager.cacheCombinedGameSize(gameId);
- await libraryManager.cacheGameVersionSize(gameId, versionName);
+ if (metadata.mode === "game") {
+ await libraryManager.cacheCombinedGameSize(id);
+ await libraryManager.cacheGameVersionSize(
+ id,
+ createdVersion.versionId,
+ );
+ }
+
progress(100);
},
});
@@ -374,17 +606,22 @@ class LibraryManager {
return await library.readFile(game, version, filename, options);
}
- async deleteGameVersion(gameId: string, version: string) {
- await prisma.gameVersion.delete({
+ async deleteGameVersion(versionId: string) {
+ const version = await prisma.version.delete({
where: {
- gameId_versionName: {
- gameId: gameId,
- versionName: version,
- },
+ versionId,
+ },
+ include: {
+ game: true,
},
});
- await gameSizeManager.deleteGameVersion(gameId, version);
+ if (version.game) {
+ await gameSizeManager.deleteGameVersion(
+ version.game.id,
+ version.versionId,
+ );
+ }
}
async deleteGame(gameId: string) {
@@ -398,9 +635,9 @@ class LibraryManager {
async getGameVersionSize(
gameId: string,
- versionName?: string,
+ versionId?: string,
): Promise {
- return gameSizeManager.getGameVersionSize(gameId, versionName);
+ return gameSizeManager.getGameVersionSize(gameId, versionId);
}
async getBiggestGamesCombinedVersions(top: number) {
@@ -425,7 +662,7 @@ class LibraryManager {
await gameSizeManager.cacheCombinedGame(game);
}
- async cacheGameVersionSize(gameId: string, versionName: string) {
+ async cacheGameVersionSize(gameId: string, versionId: string) {
const game = await prisma.game.findFirst({
where: { id: gameId },
include: { versions: true },
@@ -433,7 +670,7 @@ class LibraryManager {
if (!game) {
return;
}
- await gameSizeManager.cacheGameVersion(game, versionName);
+ await gameSizeManager.cacheGameVersion(game, versionId);
}
}
diff --git a/server/internal/library/provider.ts b/server/internal/library/provider.ts
index 576cac9..0e89665 100644
--- a/server/internal/library/provider.ts
+++ b/server/internal/library/provider.ts
@@ -1,4 +1,4 @@
-import type { LibraryBackend } from "~/prisma/client/enums";
+import type { LibraryBackend } from "~~/prisma/client/enums";
export abstract class LibraryProvider {
constructor(_config: CFG, _id: string) {
diff --git a/server/internal/library/providers/filesystem.ts b/server/internal/library/providers/filesystem.ts
index d2f2ac3..66822bb 100644
--- a/server/internal/library/providers/filesystem.ts
+++ b/server/internal/library/providers/filesystem.ts
@@ -4,11 +4,11 @@ import {
VersionNotFoundError,
type LibraryProvider,
} from "../provider";
-import { LibraryBackend } from "~/prisma/client/enums";
+import { LibraryBackend } from "~~/prisma/client/enums";
import fs from "fs";
import path from "path";
import droplet, { DropletHandler } from "@drop-oss/droplet";
-import { fsStats } from "~/server/internal/utils/files";
+import { fsStats } from "~~/server/internal/utils/files";
export const FilesystemProviderConfig = type({
baseDir: "string",
diff --git a/server/internal/library/providers/flat.ts b/server/internal/library/providers/flat.ts
index 7c2e9a5..67a3ac7 100644
--- a/server/internal/library/providers/flat.ts
+++ b/server/internal/library/providers/flat.ts
@@ -1,12 +1,12 @@
import { ArkErrors, type } from "arktype";
import type { LibraryProvider } from "../provider";
import { VersionNotFoundError } from "../provider";
-import { LibraryBackend } from "~/prisma/client/enums";
+import { LibraryBackend } from "~~/prisma/client/enums";
import fs from "fs";
import path from "path";
import droplet from "@drop-oss/droplet";
import { DROPLET_HANDLER } from "./filesystem";
-import { fsStats } from "~/server/internal/utils/files";
+import { fsStats } from "~~/server/internal/utils/files";
export const FlatFilesystemProviderConfig = type({
baseDir: "string",
diff --git a/server/internal/metadata/giantbomb.ts b/server/internal/metadata/giantbomb.ts
index 5a78985..445fc45 100644
--- a/server/internal/metadata/giantbomb.ts
+++ b/server/internal/metadata/giantbomb.ts
@@ -1,5 +1,5 @@
-import type { CompanyModel } from "~/prisma/client/models";
-import { MetadataSource } from "~/prisma/client/enums";
+import type { CompanyModel } from "~~/prisma/client/models";
+import { MetadataSource } from "~~/prisma/client/enums";
import type { MetadataProvider } from ".";
import { MissingMetadataProviderConfig } from ".";
import type {
@@ -13,7 +13,7 @@ import type {
import axios, { type AxiosRequestConfig } from "axios";
import TurndownService from "turndown";
import { DateTime } from "luxon";
-import type { TaskRunContext } from "../tasks";
+import type { TaskRunContext } from "../tasks/utils";
interface GiantBombResponseType {
error: "OK" | string;
diff --git a/server/internal/metadata/igdb.ts b/server/internal/metadata/igdb.ts
index c135117..dc9317f 100644
--- a/server/internal/metadata/igdb.ts
+++ b/server/internal/metadata/igdb.ts
@@ -1,5 +1,5 @@
-import type { CompanyModel } from "~/prisma/client/models";
-import { MetadataSource } from "~/prisma/client/enums";
+import type { CompanyModel } from "~~/prisma/client/models";
+import { MetadataSource } from "~~/prisma/client/enums";
import type { MetadataProvider } from ".";
import { MissingMetadataProviderConfig } from ".";
import type {
@@ -13,8 +13,8 @@ import type { AxiosRequestConfig } from "axios";
import axios from "axios";
import { DateTime } from "luxon";
import * as jdenticon from "jdenticon";
-import type { TaskRunContext } from "../tasks";
-import { logger } from "~/server/internal/logging";
+import { logger } from "~~/server/internal/logging";
+import type { TaskRunContext } from "../tasks/utils";
type IGDBID = number;
diff --git a/server/internal/metadata/index.ts b/server/internal/metadata/index.ts
index 93e0e5f..0dee977 100644
--- a/server/internal/metadata/index.ts
+++ b/server/internal/metadata/index.ts
@@ -1,5 +1,5 @@
-import type { Prisma } from "~/prisma/client/client";
-import { MetadataSource } from "~/prisma/client/enums";
+import type { Prisma } from "~~/prisma/client/client";
+import { MetadataSource } from "~~/prisma/client/enums";
import prisma from "../db/database";
import type {
_FetchGameMetadataParams,
@@ -13,13 +13,14 @@ import type {
import { ObjectTransactionalHandler } from "../objects/transactional";
import { PriorityListIndexed } from "../utils/prioritylist";
import { systemConfig } from "../config/sys-conf";
-import type { TaskRunContext } from "../tasks";
-import taskHandler, { wrapTaskContext } from "../tasks";
import { randomUUID } from "crypto";
import { fuzzy } from "fast-fuzzy";
-import { logger } from "~/server/internal/logging";
-import { createGameImportTaskId } from "../library";
-import type { GameTagModel } from "~/prisma/client/models";
+import { logger } from "~~/server/internal/logging";
+import libraryManager, { createGameImportTaskId } from "../library";
+import type { GameTagModel } from "~~/prisma/client/models";
+import type { TaskRunContext} from "../tasks/utils";
+import { wrapTaskContext } from "../tasks/utils";
+import taskHandler from "../tasks";
export class MissingMetadataProviderConfig extends Error {
private providerName: string;
@@ -175,15 +176,8 @@ export class MetadataHandler {
if (!provider)
throw new Error(`Invalid metadata provider for ID "${result.sourceId}"`);
- const existing = await prisma.game.findUnique({
- where: {
- metadataKey: {
- metadataSource: provider.source(),
- metadataId: result.id,
- },
- },
- });
- if (existing) return undefined;
+ const okay = await libraryManager.checkUnimportedGamePath(libraryId, libraryPath);
+ if (!okay) return undefined;
const gameId = randomUUID();
diff --git a/server/internal/metadata/manual.ts b/server/internal/metadata/manual.ts
index 4dde413..1e1516e 100644
--- a/server/internal/metadata/manual.ts
+++ b/server/internal/metadata/manual.ts
@@ -1,4 +1,4 @@
-import { MetadataSource } from "~/prisma/client/enums";
+import { MetadataSource } from "~~/prisma/client/enums";
import type { MetadataProvider } from ".";
import type {
_FetchGameMetadataParams,
diff --git a/server/internal/metadata/pcgamingwiki.ts b/server/internal/metadata/pcgamingwiki.ts
index ab965bc..13d7a9b 100644
--- a/server/internal/metadata/pcgamingwiki.ts
+++ b/server/internal/metadata/pcgamingwiki.ts
@@ -1,5 +1,5 @@
-import type { CompanyModel } from "~/prisma/client/models";
-import { MetadataSource } from "~/prisma/client/enums";
+import type { CompanyModel } from "~~/prisma/client/models";
+import { MetadataSource } from "~~/prisma/client/enums";
import type { MetadataProvider } from ".";
import type {
GameMetadataSearchResult,
@@ -15,8 +15,8 @@ import * as jdenticon from "jdenticon";
import { DateTime } from "luxon";
import * as cheerio from "cheerio";
import { type } from "arktype";
-import type { TaskRunContext } from "../tasks";
-import { logger } from "~/server/internal/logging";
+import { logger } from "~~/server/internal/logging";
+import type { TaskRunContext } from "../tasks/utils";
interface PCGamingWikiParseRawPage {
parse: {
@@ -200,7 +200,7 @@ export class PCGamingWikiProvider implements MetadataProvider {
return url.pathname.replace("/games/", "").replace(/\/$/, "");
}
default: {
- logger.warn("Pcgamingwiki, unknown host", url.hostname);
+ logger.warn("Pcgamingwiki, unknown host: %s", url.hostname);
return undefined;
}
}
@@ -234,7 +234,7 @@ export class PCGamingWikiProvider implements MetadataProvider {
});
if (ratingObj instanceof type.errors) {
logger.info(
- "pcgamingwiki: failed to properly get review rating",
+ "pcgamingwiki: failed to properly get review rating: %s",
ratingObj.summary,
);
return undefined;
diff --git a/server/internal/metadata/steam.ts b/server/internal/metadata/steam.ts
index 5cee2a9..8eec807 100644
--- a/server/internal/metadata/steam.ts
+++ b/server/internal/metadata/steam.ts
@@ -1,4 +1,4 @@
-import { MetadataSource } from "~/prisma/client/enums";
+import { MetadataSource } from "~~/prisma/client/enums";
import type { MetadataProvider } from ".";
import type {
GameMetadataSearchResult,
@@ -8,9 +8,9 @@ import type {
CompanyMetadata,
GameMetadataRating,
} from "./types";
-import type { TaskRunContext } from "../tasks";
import axios from "axios";
import * as jdenticon from "jdenticon";
+import type { TaskRunContext } from "../tasks/utils";
/**
* Note: The Steam API is largely undocumented.
diff --git a/server/internal/metadata/types.d.ts b/server/internal/metadata/types.d.ts
index b5286a7..837e1b3 100644
--- a/server/internal/metadata/types.d.ts
+++ b/server/internal/metadata/types.d.ts
@@ -1,4 +1,4 @@
-import type { Company, GameRating } from "~/prisma/client";
+import type { Company, GameRating } from "~~/prisma/client";
import type { TransactionDataType } from "../objects/transactional";
import type { ObjectReference } from "../objects/objectHandler";
diff --git a/server/internal/notifications/index.ts b/server/internal/notifications/index.ts
index 5585087..7372977 100644
--- a/server/internal/notifications/index.ts
+++ b/server/internal/notifications/index.ts
@@ -6,7 +6,7 @@ Design goals:
2. Real-time; use websocket listeners to keep clients up-to-date
*/
-import type { NotificationModel } from "~/prisma/client/models";
+import type { NotificationModel } from "~~/prisma/client/models";
import prisma from "../db/database";
import type { GlobalACL } from "../acls";
diff --git a/server/internal/objects/fsBackend.ts b/server/internal/objects/fsBackend.ts
index aedab6a..b0297e8 100644
--- a/server/internal/objects/fsBackend.ts
+++ b/server/internal/objects/fsBackend.ts
@@ -9,7 +9,7 @@ import prisma from "../db/database";
import cacheHandler from "../cache";
import { systemConfig } from "../config/sys-conf";
import { type } from "arktype";
-import { logger } from "~/server/internal/logging";
+import { logger } from "~~/server/internal/logging";
import type pino from "pino";
export class FsObjectBackend extends ObjectBackend {
@@ -123,7 +123,7 @@ export class FsObjectBackend extends ObjectBackend {
const metadataRaw = JSON.parse(fs.readFileSync(metadataPath, "utf-8"));
const metadata = objectMetadata(metadataRaw);
if (metadata instanceof type.errors) {
- logger.error("FsObjectBackend#fetchMetadata", metadata.summary);
+ logger.error("FsObjectBackend#fetchMetadata: %s", metadata.summary);
return undefined;
}
await this.metadataCache.set(id, metadata);
@@ -194,11 +194,13 @@ export class FsObjectBackend extends ObjectBackend {
try {
fs.rmSync(filePath);
cleanupLogger.info(
- `[FsObjectBackend#cleanupMetadata]: Removed ${file}`,
+ `[FsObjectBackend#cleanupMetadata]: Removed %s`,
+ file
);
} catch (error) {
cleanupLogger.error(
- `[FsObjectBackend#cleanupMetadata]: Failed to remove ${file}`,
+ `[FsObjectBackend#cleanupMetadata]: Failed to remove %s: %s`,
+ file,
error,
);
}
diff --git a/server/internal/objects/objectHandler.ts b/server/internal/objects/objectHandler.ts
index 21ec619..7662ffb 100644
--- a/server/internal/objects/objectHandler.ts
+++ b/server/internal/objects/objectHandler.ts
@@ -32,15 +32,12 @@ export const objectMetadata = type({
});
export type ObjectMetadata = typeof objectMetadata.infer;
-export enum ObjectPermission {
- Read = "read",
- Write = "write",
- Delete = "delete",
-}
+export const ObjectPermissions = ["read", "write", "delete"] as const;
+export type ObjectPermission = (typeof ObjectPermissions)[number];
export const ObjectPermissionPriority: Array = [
- ObjectPermission.Read,
- ObjectPermission.Write,
- ObjectPermission.Delete,
+ "read",
+ "write",
+ "delete",
];
export type Object = { mime: string; data: Source };
diff --git a/server/internal/objects/transactional.ts b/server/internal/objects/transactional.ts
index bac9475..cec3756 100644
--- a/server/internal/objects/transactional.ts
+++ b/server/internal/objects/transactional.ts
@@ -5,7 +5,7 @@ This is used as a utility in metadata handling, so we only fetch the objects if
import type { Readable } from "stream";
import { randomUUID } from "node:crypto";
import objectHandler from ".";
-import type { TaskRunContext } from "../tasks";
+import type { TaskRunContext } from "../tasks/utils";
export type TransactionDataType = string | Readable | Buffer;
type TransactionTable = Map; // ID to data
diff --git a/server/internal/platform/link.ts b/server/internal/platform/link.ts
new file mode 100644
index 0000000..d71a06c
--- /dev/null
+++ b/server/internal/platform/link.ts
@@ -0,0 +1,47 @@
+import { HardwarePlatform } from "~~/prisma/client/enums";
+import prisma from "../db/database";
+import type { PlatformLink } from "~~/prisma/client/client";
+
+export async function convertIDsToPlatforms(platformIDs: string[]) {
+ const userPlatforms = await prisma.userPlatform.findMany({
+ where: {
+ id: {
+ in: platformIDs,
+ },
+ },
+ });
+
+ const platforms = platformIDs.map(
+ (e) => userPlatforms.find((v) => v.id === e) ?? (e as HardwarePlatform),
+ );
+
+ return platforms;
+}
+
+export async function convertIDToLink(
+ id: string,
+): Promise {
+ const link = await prisma.platformLink.findUnique({
+ where: { id },
+ });
+ if (link) return link;
+
+ if (HardwarePlatform[id as HardwarePlatform]) {
+ return await prisma.platformLink.create({
+ data: {
+ id,
+ },
+ });
+ }
+
+ const userPlatform = await prisma.userPlatform.findUnique({
+ where: { id },
+ });
+
+ if (!userPlatform) return undefined;
+ return await prisma.platformLink.create({
+ data: {
+ id,
+ },
+ });
+}
diff --git a/server/internal/saves/index.ts b/server/internal/saves/index.ts
index 7b76f90..a53a7c3 100644
--- a/server/internal/saves/index.ts
+++ b/server/internal/saves/index.ts
@@ -32,7 +32,7 @@ class SaveManager {
},
});
if (!save)
- throw createError({ statusCode: 404, statusMessage: "Save not found" });
+ throw createError({ statusCode: 404, message: "Save not found" });
const newSaveObjectId = randomUUID();
const newSaveStream = await objectHandler.createWithStream(
@@ -43,7 +43,7 @@ class SaveManager {
if (!newSaveStream)
throw createError({
statusCode: 500,
- statusMessage: "Failed to create writing stream to storage backend.",
+ message: "Failed to create writing stream to storage backend.",
});
let hash: string | undefined;
@@ -64,7 +64,7 @@ class SaveManager {
await objectHandler.deleteAsSystem(newSaveObjectId);
throw createError({
statusCode: 500,
- statusMessage: "Hash failed to generate",
+ message: "Hash failed to generate",
});
}
diff --git a/server/internal/screenshots/index.ts b/server/internal/screenshots/index.ts
index b41ac03..891d475 100644
--- a/server/internal/screenshots/index.ts
+++ b/server/internal/screenshots/index.ts
@@ -80,7 +80,7 @@ class ScreenshotManager {
if (!saveStream)
throw createError({
statusCode: 500,
- statusMessage: "Failed to create writing stream to storage backend.",
+ message: "Failed to create writing stream to storage backend.",
});
// pipe into object store
diff --git a/server/internal/session/index.ts b/server/internal/session/index.ts
index fa56108..eb9cb0b 100644
--- a/server/internal/session/index.ts
+++ b/server/internal/session/index.ts
@@ -2,7 +2,7 @@ import type { H3Event } from "h3";
import type { Session, SessionProvider } from "./types";
import { randomUUID } from "node:crypto";
import { parse as parseCookies } from "cookie-es";
-import type { MinimumRequestObject } from "~/server/h3";
+import type { MinimumRequestObject } from "~~/server/h3";
import type { DurationLike } from "luxon";
import { DateTime } from "luxon";
import createDBSessionHandler from "./db";
diff --git a/server/internal/tasks/group.ts b/server/internal/tasks/group.ts
index f914272..184e3da 100644
--- a/server/internal/tasks/group.ts
+++ b/server/internal/tasks/group.ts
@@ -1,22 +1,32 @@
-export const taskGroups = {
- "cleanup:invitations": {
- concurrency: false,
- },
- "cleanup:objects": {
- concurrency: false,
- },
- "cleanup:sessions": {
- concurrency: false,
- },
- "check:update": {
- concurrency: false,
- },
- "import:game": {
- concurrency: true,
- },
- debug: {
- concurrency: true,
- },
-} as const;
+export const TASK_GROUPS = [
+ "cleanup:invitations",
+ "cleanup:objects",
+ "cleanup:sessions",
+ "check:update",
+ "import:game",
+ "import:version",
+] as const;
-export type TaskGroup = keyof typeof taskGroups;
+export type TaskGroup = (typeof TASK_GROUPS)[number];
+
+export const TASK_GROUP_CONFIG: { [key in TaskGroup]: { concurrency: boolean } } =
+ {
+ "cleanup:invitations": {
+ concurrency: false
+ },
+ "cleanup:objects": {
+ concurrency: false
+ },
+ "cleanup:sessions": {
+ concurrency: false
+ },
+ "check:update": {
+ concurrency: false
+ },
+ "import:game": {
+ concurrency: true
+ },
+ "import:version": {
+ concurrency: true
+ }
+ };
diff --git a/server/internal/tasks/index.ts b/server/internal/tasks/index.ts
index 54433a9..6b8b209 100644
--- a/server/internal/tasks/index.ts
+++ b/server/internal/tasks/index.ts
@@ -1,5 +1,5 @@
import droplet from "@drop-oss/droplet";
-import type { MinimumRequestObject } from "~/server/h3";
+import type { MinimumRequestObject } from "~~/server/h3";
import type { GlobalACL } from "../acls";
import aclManager from "../acls";
@@ -7,12 +7,13 @@ import cleanupInvites from "./registry/invitations";
import cleanupSessions from "./registry/sessions";
import checkUpdate from "./registry/update";
import cleanupObjects from "./registry/objects";
-import { taskGroups, type TaskGroup } from "./group";
+import { TASK_GROUP_CONFIG, type TaskGroup } from "./group";
import prisma from "../db/database";
import { type } from "arktype";
import pino from "pino";
-import { logger } from "~/server/internal/logging";
+import { logger } from "~~/server/internal/logging";
import { Writable } from "node:stream";
+import type { TaskRunContext } from "./utils";
// a task that has been run
type FinishedTask = {
@@ -53,7 +54,6 @@ class TaskHandler {
"cleanup:invitations",
"cleanup:sessions",
"check:update",
- "debug",
];
private weeklyScheduledTasks: TaskGroup[] = ["cleanup:objects"];
@@ -82,7 +82,7 @@ class TaskHandler {
let logOffset: number = 0;
// if taskgroup disallows concurrency
- if (!taskGroups[task.taskGroup].concurrency) {
+ if (!TASK_GROUP_CONFIG[task.taskGroup].concurrency) {
for (const existingTask of this.taskPool.values()) {
// if a task is already running, we don't want to start another
if (existingTask.taskGroup === task.taskGroup) {
@@ -149,7 +149,7 @@ class TaskHandler {
}
} catch (e) {
// fallback: ignore or log error
- logger.error("Failed to parse log chunk", {
+ logger.error("Failed to parse log chunk %s", {
error: e,
chunk: chunk,
});
@@ -177,7 +177,7 @@ class TaskHandler {
const progress = (progress: number) => {
if (progress < 0 || progress > 100) {
- logger.error("Progress must be between 0 and 100", { progress });
+ logger.error("Progress must be between 0 and 100, actually %d", progress);
return;
}
const taskEntry = this.taskPool.get(task.id);
@@ -412,36 +412,6 @@ class TaskHandler {
}
}
-export type TaskRunContext = {
- progress: (progress: number) => void;
- logger: typeof logger;
-};
-
-export function wrapTaskContext(
- context: TaskRunContext,
- options: { min: number; max: number; prefix: string },
-): TaskRunContext {
- const child = context.logger.child({
- prefix: options.prefix,
- });
-
- return {
- progress(progress) {
- if (progress > 100 || progress < 0) {
- logger.warn("[wrapTaskContext] progress must be between 0 and 100");
- }
-
- // I was too tired to figure this out
- // https://stackoverflow.com/a/929107
- const oldRange = 100;
- const newRange = options.max - options.min;
- const adjustedProgress = (progress * newRange) / oldRange + options.min;
- return context.progress(adjustedProgress);
- },
- logger: child,
- };
-}
-
export interface Task {
id: string;
taskGroup: TaskGroup;
@@ -484,31 +454,6 @@ export const TaskLog = type({
level: "string",
});
-// /**
-// * Create a log message with a timestamp in the format YYYY-MM-DD HH:mm:ss.SSS UTC
-// * @param message
-// * @returns
-// */
-// function msgWithTimestamp(message: string): string {
-// const now = new Date();
-
-// const pad = (n: number, width = 2) => n.toString().padStart(width, "0");
-
-// const year = now.getUTCFullYear();
-// const month = pad(now.getUTCMonth() + 1);
-// const day = pad(now.getUTCDate());
-
-// const hours = pad(now.getUTCHours());
-// const minutes = pad(now.getUTCMinutes());
-// const seconds = pad(now.getUTCSeconds());
-// const milliseconds = pad(now.getUTCMilliseconds(), 3);
-
-// const log: typeof TaskLog.infer = {
-// timestamp: `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds} UTC`,
-// message,
-// };
-// return JSON.stringify(log);
-// }
export function defineDropTask(buildTask: BuildTask): DropTask {
return {
diff --git a/server/internal/tasks/registry/debug.ts b/server/internal/tasks/registry/debug.ts
index 9cd8a4a..faf6f8f 100644
--- a/server/internal/tasks/registry/debug.ts
+++ b/server/internal/tasks/registry/debug.ts
@@ -1,5 +1,6 @@
-import { defineDropTask } from "..";
+// import { defineDropTask } from "..";
+/*
export default defineDropTask({
buildId: () => `debug:${new Date().toISOString()}`,
name: "Debug Task",
@@ -16,3 +17,4 @@ export default defineDropTask({
}
},
});
+*/
diff --git a/server/internal/tasks/registry/invitations.ts b/server/internal/tasks/registry/invitations.ts
index a247f7b..d8df213 100644
--- a/server/internal/tasks/registry/invitations.ts
+++ b/server/internal/tasks/registry/invitations.ts
@@ -1,4 +1,4 @@
-import prisma from "~/server/internal/db/database";
+import prisma from "~~/server/internal/db/database";
import { defineDropTask } from "..";
export default defineDropTask({
diff --git a/server/internal/tasks/registry/objects.ts b/server/internal/tasks/registry/objects.ts
index 63a5e71..50724fb 100644
--- a/server/internal/tasks/registry/objects.ts
+++ b/server/internal/tasks/registry/objects.ts
@@ -1,5 +1,5 @@
-import prisma from "~/server/internal/db/database";
-import objectHandler from "~/server/internal/objects";
+import prisma from "~~/server/internal/db/database";
+import objectHandler from "~~/server/internal/objects";
import { defineDropTask } from "..";
type FieldReferenceMap = {
diff --git a/server/internal/tasks/registry/sessions.ts b/server/internal/tasks/registry/sessions.ts
index 6839829..deb6d4a 100644
--- a/server/internal/tasks/registry/sessions.ts
+++ b/server/internal/tasks/registry/sessions.ts
@@ -1,4 +1,4 @@
-import sessionHandler from "~/server/internal/session";
+import sessionHandler from "~~/server/internal/session";
import { defineDropTask } from "..";
export default defineDropTask({
diff --git a/server/internal/tasks/registry/update.ts b/server/internal/tasks/registry/update.ts
index 452fd19..16e3cfb 100644
--- a/server/internal/tasks/registry/update.ts
+++ b/server/internal/tasks/registry/update.ts
@@ -49,7 +49,7 @@ export default defineDropTask({
// if response failed somehow
if (!response.ok) {
- logger.info("Failed to check for update ", {
+ logger.info("Failed to check for update: %s", {
status: response.status,
body: response.body,
});
diff --git a/server/internal/tasks/utils.ts b/server/internal/tasks/utils.ts
new file mode 100644
index 0000000..87eb442
--- /dev/null
+++ b/server/internal/tasks/utils.ts
@@ -0,0 +1,58 @@
+import { logger } from "../logging";
+
+export type TaskRunContext = {
+ progress: (progress: number) => void;
+ logger: typeof logger;
+};
+
+export function wrapTaskContext(
+ context: TaskRunContext,
+ options: { min: number; max: number; prefix: string },
+): TaskRunContext {
+ const child = context.logger.child({
+ prefix: options.prefix,
+ });
+
+ return {
+ progress(progress) {
+ if (progress > 100 || progress < 0) {
+ logger.warn("[wrapTaskContext] progress must be between 0 and 100");
+ }
+
+ // I was too tired to figure this out
+ // https://stackoverflow.com/a/929107
+ const oldRange = 100;
+ const newRange = options.max - options.min;
+ const adjustedProgress = (progress * newRange) / oldRange + options.min;
+ return context.progress(adjustedProgress);
+ },
+ logger: child,
+ };
+}
+
+
+// /**
+// * Create a log message with a timestamp in the format YYYY-MM-DD HH:mm:ss.SSS UTC
+// * @param message
+// * @returns
+// */
+// function msgWithTimestamp(message: string): string {
+// const now = new Date();
+
+// const pad = (n: number, width = 2) => n.toString().padStart(width, "0");
+
+// const year = now.getUTCFullYear();
+// const month = pad(now.getUTCMonth() + 1);
+// const day = pad(now.getUTCDate());
+
+// const hours = pad(now.getUTCHours());
+// const minutes = pad(now.getUTCMinutes());
+// const seconds = pad(now.getUTCSeconds());
+// const milliseconds = pad(now.getUTCMilliseconds(), 3);
+
+// const log: typeof TaskLog.infer = {
+// timestamp: `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds} UTC`,
+// message,
+// };
+// return JSON.stringify(log);
+// }
diff --git a/server/internal/utils/handlefileupload.ts b/server/internal/utils/handlefileupload.ts
index 4e36c44..efef965 100644
--- a/server/internal/utils/handlefileupload.ts
+++ b/server/internal/utils/handlefileupload.ts
@@ -1,18 +1,27 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
import type { EventHandlerRequest, H3Event } from "h3";
-import type { Dump, Pull } from "../objects/transactional";
+import type { Dump, Pull, Register } from "../objects/transactional";
import { ObjectTransactionalHandler } from "../objects/transactional";
+type RecursiveType =
+ | { [key: string]: RecursiveType }
+ | string
+ | number
+ | Array;
+
export async function handleFileUpload(
h3: H3Event,
metadata: { [key: string]: string },
permissions: Array,
max = -1,
-): Promise<[string[], { [key: string]: string }, Pull, Dump] | undefined> {
+): Promise<
+ [string[], { [key: string]: RecursiveType }, Pull, Dump, Register] | undefined
+> {
const formData = await readMultipartFormData(h3);
if (!formData) return undefined;
const transactionalHandler = new ObjectTransactionalHandler();
const [add, pull, dump] = transactionalHandler.new(metadata, permissions);
- const options: { [key: string]: string } = {};
+ const options: any = {};
const ids = [];
for (const entry of formData) {
@@ -25,8 +34,15 @@ export async function handleFileUpload(
}
if (!entry.name) continue;
- options[entry.name] = entry.data.toString("utf-8");
+ const path = entry.name.split(".");
+ let v = options;
+ for (const pathPart of path.slice(0, -1)) {
+ (v as any)[pathPart] ??= {};
+ v = (v as any)[pathPart];
+ }
+
+ (v as any)[path.at(-1)!] = entry.data.toString("utf-8");
}
- return [ids, options, pull, dump];
+ return [ids, options, pull, dump, add];
}
diff --git a/server/internal/utils/parseplatform.ts b/server/internal/utils/parseplatform.ts
index 5a00e95..fdea9e1 100644
--- a/server/internal/utils/parseplatform.ts
+++ b/server/internal/utils/parseplatform.ts
@@ -1,14 +1,14 @@
-import { Platform } from "~/prisma/client/enums";
+import { HardwarePlatform } from "~~/prisma/client/enums";
export function parsePlatform(platform: string) {
switch (platform.toLowerCase()) {
case "linux":
- return Platform.Linux;
+ return HardwarePlatform.Linux;
case "windows":
- return Platform.Windows;
+ return HardwarePlatform.Windows;
case "mac":
case "macos":
- return Platform.macOS;
+ return HardwarePlatform.macOS;
}
return undefined;
diff --git a/server/internal/utils/prioritylist.ts b/server/internal/utils/prioritylist.ts
index 26be822..347d689 100644
--- a/server/internal/utils/prioritylist.ts
+++ b/server/internal/utils/prioritylist.ts
@@ -80,11 +80,12 @@ export class PriorityListIndexed extends PriorityList {
override pop(position?: number): PriorityTagged {
const value = super.pop(position);
+ if(!value) return undefined!;
const index = this.getIndex(value.object);
this.indexMap.delete(index);
- return value;
+ return value!;
}
get(index: string) {
diff --git a/server/plugins/01.system-init.ts b/server/plugins/01.system-init.ts
index edffdcc..708812a 100644
--- a/server/plugins/01.system-init.ts
+++ b/server/plugins/01.system-init.ts
@@ -1,4 +1,4 @@
-import prisma from "~/server/internal/db/database";
+import prisma from "~~/server/internal/db/database";
export default defineNitroPlugin(async (_nitro) => {
// Ensure system user exists
diff --git a/server/plugins/02.setup-admin.ts b/server/plugins/02.setup-admin.ts
index 25a8704..8babe35 100644
--- a/server/plugins/02.setup-admin.ts
+++ b/server/plugins/02.setup-admin.ts
@@ -1,5 +1,5 @@
-import { APITokenMode } from "~/prisma/client/enums";
-import prisma from "~/server/internal/db/database";
+import { APITokenMode } from "~~/prisma/client/enums";
+import prisma from "~~/server/internal/db/database";
import { systemConfig } from "../internal/config/sys-conf";
import { logger } from "../internal/logging";
diff --git a/server/plugins/03.metadata-init.ts b/server/plugins/03.metadata-init.ts
index 7a289ca..a8709a2 100644
--- a/server/plugins/03.metadata-init.ts
+++ b/server/plugins/03.metadata-init.ts
@@ -5,8 +5,8 @@ import { GiantBombProvider } from "../internal/metadata/giantbomb";
import { IGDBProvider } from "../internal/metadata/igdb";
import { ManualMetadataProvider } from "../internal/metadata/manual";
import { PCGamingWikiProvider } from "../internal/metadata/pcgamingwiki";
+import { logger } from "../internal/logging";
import { SteamProvider } from "../internal/metadata/steam";
-import { logger } from "~/server/internal/logging";
export default defineNitroPlugin(async (_nitro) => {
const metadataProviders = [
diff --git a/server/plugins/04.auth-init.ts b/server/plugins/04.auth-init.ts
index a2f3e5b..4bea184 100644
--- a/server/plugins/04.auth-init.ts
+++ b/server/plugins/04.auth-init.ts
@@ -1,4 +1,4 @@
-import authManager from "~/server/internal/auth";
+import authManager from "~~/server/internal/auth";
export default defineNitroPlugin(async () => {
await authManager.init();
diff --git a/server/plugins/05.library-init.ts b/server/plugins/05.library-init.ts
index 9891b51..8c8e761 100644
--- a/server/plugins/05.library-init.ts
+++ b/server/plugins/05.library-init.ts
@@ -1,13 +1,11 @@
-import { LibraryBackend } from "~/prisma/client/enums";
+import type { LibraryBackend } from "~~/prisma/client/enums";
import prisma from "../internal/db/database";
import type { JsonValue } from "@prisma/client/runtime/library";
import type { LibraryProvider } from "../internal/library/provider";
-import type { FilesystemProviderConfig } from "../internal/library/providers/filesystem";
import { FilesystemProvider } from "../internal/library/providers/filesystem";
import libraryManager from "../internal/library";
-import path from "path";
import { FlatFilesystemProvider } from "../internal/library/providers/flat";
-import { logger } from "~/server/internal/logging";
+import { logger } from "~~/server/internal/logging";
export const libraryConstructors: {
[key in LibraryBackend]: (
@@ -33,42 +31,6 @@ export default defineNitroPlugin(async () => {
let successes = 0;
const libraries = await prisma.library.findMany({});
- // Add migration handler
- const legacyPath = process.env.LIBRARY;
- if (legacyPath && libraries.length == 0) {
- const options: typeof FilesystemProviderConfig.infer = {
- baseDir: path.resolve(legacyPath),
- };
-
- const library = await prisma.library.create({
- data: {
- name: "Auto-created",
- backend: LibraryBackend.Filesystem,
- options,
- },
- });
-
- libraries.push(library);
-
- // Update all existing games
- await prisma.game.updateMany({
- where: {
- libraryId: null,
- },
- data: {
- libraryId: library.id,
- },
- });
- }
-
- // Delete all games that don't have a library provider after the legacy handler
- // (leftover from a bug)
- await prisma.game.deleteMany({
- where: {
- libraryId: null,
- },
- });
-
for (const library of libraries) {
const constructor = libraryConstructors[library.backend];
try {
diff --git a/server/routes/auth/callback/oidc.get.ts b/server/routes/auth/callback/oidc.get.ts
index 5aba8fd..5a9fb63 100644
--- a/server/routes/auth/callback/oidc.get.ts
+++ b/server/routes/auth/callback/oidc.get.ts
@@ -1,5 +1,5 @@
-import sessionHandler from "~/server/internal/session";
-import authManager from "~/server/internal/auth";
+import sessionHandler from "~~/server/internal/session";
+import authManager from "~~/server/internal/auth";
defineRouteMeta({
openAPI: {
@@ -20,14 +20,14 @@ export default defineEventHandler(async (h3) => {
if (!code)
throw createError({
statusCode: 400,
- statusMessage: "No code in query params.",
+ message: "No code in query params.",
});
const state = query.state?.toString();
if (!state)
throw createError({
statusCode: 400,
- statusMessage: "No state in query params.",
+ message: "No state in query params.",
});
const result = await manager.authorize(code, state);
@@ -35,7 +35,7 @@ export default defineEventHandler(async (h3) => {
if (typeof result === "string")
throw createError({
statusCode: 403,
- statusMessage: `Failed to sign in: "${result}". Please try again.`,
+ message: `Failed to sign in: "${result}". Please try again.`,
});
await sessionHandler.signin(h3, result.user.id, true);
diff --git a/server/routes/auth/oidc.get.ts b/server/routes/auth/oidc.get.ts
index 8ba7c74..d55efbe 100644
--- a/server/routes/auth/oidc.get.ts
+++ b/server/routes/auth/oidc.get.ts
@@ -1,4 +1,4 @@
-import authManager from "~/server/internal/auth";
+import authManager from "~~/server/internal/auth";
defineRouteMeta({
openAPI: {
diff --git a/server/tasks/dailyTasks.ts b/server/tasks/dailyTasks.ts
index e36735c..3715239 100644
--- a/server/tasks/dailyTasks.ts
+++ b/server/tasks/dailyTasks.ts
@@ -1,4 +1,4 @@
-import taskHandler from "~/server/internal/tasks";
+import taskHandler from "~~/server/internal/tasks";
export default defineTask({
meta: {
diff --git a/server/tsconfig.json b/server/tsconfig.json
deleted file mode 100644
index ca5c731..0000000
--- a/server/tsconfig.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "extends": "../.nuxt/tsconfig.server.json",
- "compilerOptions": {
- "exactOptionalPropertyTypes": true
- }
-}
diff --git a/tsconfig.json b/tsconfig.json
index 71aa8b8..cae87c0 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,9 @@
{
- // https://nuxt.com/docs/guide/concepts/typescript
- "extends": "./.nuxt/tsconfig.json",
- "compilerOptions": {
- "exactOptionalPropertyTypes": false
- }
+ "files": [],
+ "references": [
+ { "path": "./.nuxt/tsconfig.app.json" },
+ { "path": "./.nuxt/tsconfig.server.json" },
+ { "path": "./.nuxt/tsconfig.shared.json" },
+ { "path": "./.nuxt/tsconfig.node.json" }
+ ]
}