diff --git a/.github/workflows/setup-env.sh b/.github/workflows/setup-env.sh index 85183e2..c579455 100755 --- a/.github/workflows/setup-env.sh +++ b/.github/workflows/setup-env.sh @@ -32,5 +32,3 @@ changeEnvVar "PORT" $PORT changeEnvVar "APP_DIR" "/var/docker-web/apps/$APP_NAME" set -a && source .env && set +a -cat .env -echo $APP_NAME \ No newline at end of file diff --git a/.gitignore b/.gitignore index 721cedf..39447da 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ .nitro .cache dist +drizzle # Node dependencies node_modules diff --git a/app/app.vue b/app/app.vue index 418da9e..88a8908 100644 --- a/app/app.vue +++ b/app/app.vue @@ -1,82 +1,8 @@ - - - - diff --git a/app/components/Card.vue b/app/components/Card.vue index 2385265..e77fb77 100644 --- a/app/components/Card.vue +++ b/app/components/Card.vue @@ -1,56 +1,39 @@ \ No newline at end of file diff --git a/app/components/PlayButton.vue b/app/components/PlayButton.vue index db017bb..2f235a2 100644 --- a/app/components/PlayButton.vue +++ b/app/components/PlayButton.vue @@ -12,25 +12,12 @@ diff --git a/app/error.vue b/app/error.vue index b5cef5c..f06dc47 100644 --- a/app/error.vue +++ b/app/error.vue @@ -1,18 +1,5 @@ - - + \ No newline at end of file diff --git a/app/layouts/default.vue b/app/layouts/default.vue index 8cdcffe..ba4672f 100644 --- a/app/layouts/default.vue +++ b/app/layouts/default.vue @@ -1,55 +1,3 @@ - - - - diff --git a/app/pages/card/[slug].vue b/app/pages/card/[slug].vue new file mode 100644 index 0000000..0739064 --- /dev/null +++ b/app/pages/card/[slug].vue @@ -0,0 +1,43 @@ + + + + + diff --git a/app/pages/index.vue b/app/pages/index.vue index a094760..880773c 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -1,27 +1,5 @@ - - - - diff --git a/app/utils/colors.ts b/app/utils/colors.ts new file mode 100644 index 0000000..f8f5f45 --- /dev/null +++ b/app/utils/colors.ts @@ -0,0 +1,39 @@ +export const getYearColor = (year: number): string => { + // Palette élargie avec des différences plus marquées + const colorMap: Record = { + // Années récentes - teintes froides et claires + 2025: '#3a4a6c', // bleu-gris clair + 2024: '#1e3a7a', // bleu vif + 2023: '#1a4d5c', // bleu-vert émeraude + 2022: '#3a4a6a', // bleu-gris moyen + + // Années 2020-2021 - transition + 2021: '#3a2e6a', // bleu-violet + 2020: '#2a467a', // bleu-gris chaud + + // Années 2010-2019 - teintes moyennes + 2019: '#2a2a7a', // bleu nuit profond + 2018: '#1e2a8a', // bleu roi + 2017: '#1a5a6a', // bleu canard vif + 2016: '#1a5a4a', // vert bleuté + 2015: '#1a3a7a', // bleu marine + 2014: '#4a1e7a', // violet profond + 2013: '#1a5a4a', // vert émeraude + 2012: '#1e3a9a', // bleu ciel profond + + // Années 2000-2011 - teintes chaudes et foncées + 2011: '#1e293b', // slate-800 de base + 2010: '#2a467a', // bleu-gris chaud + 2009: '#3a4a6a', // bleu-gris moyen + 2008: '#1a3a8a', // bleu nuit clair + 2007: '#5a2a4a', // bordeaux + 2006: '#5a1e6a', // violet profond + 2005: '#3a1a7a', // bleu-violet foncé + 2004: '#2a1a5a', // bleu nuit profond + 2003: '#3a3a5a', // bleu-gris foncé + 2002: '#1a5a4a', // vert foncé + 2001: '#5a3a2a', // marron chaud + 2000: '#3a3a5a' // bleu-gris foncé + } + return colorMap[year] || '#1e293b' // slate-800 par défaut +} diff --git a/appOLDD/app.vue b/appOLDD/app.vue new file mode 100644 index 0000000..418da9e --- /dev/null +++ b/appOLDD/app.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/app/components/Box.vue b/appOLDD/components/Box.vue similarity index 99% rename from app/components/Box.vue rename to appOLDD/components/Box.vue index e36b8c2..6027339 100644 --- a/app/components/Box.vue +++ b/appOLDD/components/Box.vue @@ -43,7 +43,7 @@ diff --git a/app/components/Boxes.vue b/appOLDD/components/BoxesOLD.vue similarity index 98% rename from app/components/Boxes.vue rename to appOLDD/components/BoxesOLD.vue index cbb16d1..1879f4a 100644 --- a/app/components/Boxes.vue +++ b/appOLDD/components/BoxesOLD.vue @@ -15,7 +15,7 @@ + + \ No newline at end of file diff --git a/app/components/CinemaScreen.vue b/appOLDD/components/CinemaScreen.vue similarity index 100% rename from app/components/CinemaScreen.vue rename to appOLDD/components/CinemaScreen.vue diff --git a/app/components/Loader.vue b/appOLDD/components/Loader.vue similarity index 100% rename from app/components/Loader.vue rename to appOLDD/components/Loader.vue diff --git a/app/components/Logo.vue b/appOLDD/components/Logo.vue similarity index 100% rename from app/components/Logo.vue rename to appOLDD/components/Logo.vue diff --git a/app/components/Platine.vue b/appOLDD/components/Platine.vue similarity index 98% rename from app/components/Platine.vue rename to appOLDD/components/Platine.vue index 71cc5e5..64bd29e 100644 --- a/app/components/Platine.vue +++ b/appOLDD/components/Platine.vue @@ -27,7 +27,7 @@ + + diff --git a/app/components/Player.vue b/appOLDD/components/Player.vue similarity index 100% rename from app/components/Player.vue rename to appOLDD/components/Player.vue diff --git a/app/components/deck/Compilation.vue b/appOLDD/components/deck/Compilation.vue similarity index 99% rename from app/components/deck/Compilation.vue rename to appOLDD/components/deck/Compilation.vue index 7efc711..b34cd8a 100644 --- a/app/components/deck/Compilation.vue +++ b/appOLDD/components/deck/Compilation.vue @@ -24,7 +24,7 @@ import { useDataStore } from '~/store/data' import { useCardStore } from '~/store/card' import { usePlayerStore } from '~/store/player' import { useUiStore } from '~/store/ui' -import type { Box } from '~~/types/types' +import type { Box } from '~~/types' const uiStore = useUiStore() diff --git a/app/components/deck/Playlist.vue b/appOLDD/components/deck/Playlist.vue similarity index 99% rename from app/components/deck/Playlist.vue rename to appOLDD/components/deck/Playlist.vue index 8d36e7a..6c66495 100644 --- a/app/components/deck/Playlist.vue +++ b/appOLDD/components/deck/Playlist.vue @@ -24,7 +24,7 @@ import { useDataStore } from '~/store/data' import { useCardStore } from '~/store/card' import { usePlayerStore } from '~/store/player' import { useUiStore } from '~/store/ui' -import type { Box, Track } from '~~/types/types' +import type { Box, Track } from '~~/types' import SelectCardSuit from '~/components/ui/SelectCardSuit.vue' import SelectCardRank from '~/components/ui/SelectCardRank.vue' import SearchInput from '~/components/ui/SearchInput.vue' diff --git a/app/components/ui/Draggable.vue b/appOLDD/components/ui/Draggable.vue similarity index 100% rename from app/components/ui/Draggable.vue rename to appOLDD/components/ui/Draggable.vue diff --git a/app/components/ui/Droppable.vue b/appOLDD/components/ui/Droppable.vue similarity index 100% rename from app/components/ui/Droppable.vue rename to appOLDD/components/ui/Droppable.vue diff --git a/app/components/ui/ModalSearch.vue b/appOLDD/components/ui/ModalSearch.vue similarity index 100% rename from app/components/ui/ModalSearch.vue rename to appOLDD/components/ui/ModalSearch.vue diff --git a/app/components/ui/ModalSharer.vue b/appOLDD/components/ui/ModalSharer.vue similarity index 99% rename from app/components/ui/ModalSharer.vue rename to appOLDD/components/ui/ModalSharer.vue index 2b4418e..507bf68 100644 --- a/app/components/ui/ModalSharer.vue +++ b/appOLDD/components/ui/ModalSharer.vue @@ -58,7 +58,7 @@ diff --git a/appOLDD/layouts/default.vue b/appOLDD/layouts/default.vue new file mode 100644 index 0000000..d0ffd5a --- /dev/null +++ b/appOLDD/layouts/default.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/app/pages/box/[id].vue b/appOLDD/pages/box/[id].vue similarity index 100% rename from app/pages/box/[id].vue rename to appOLDD/pages/box/[id].vue diff --git a/app/pages/card/[id].vue b/appOLDD/pages/card/[id].vue similarity index 99% rename from app/pages/card/[id].vue rename to appOLDD/pages/card/[id].vue index a6999da..129068e 100644 --- a/app/pages/card/[id].vue +++ b/appOLDD/pages/card/[id].vue @@ -22,7 +22,7 @@ import { useRoute } from 'vue-router' import { usePlayerStore } from '~/store/player' import { useCardStore } from '~/store/card' import { useDataStore } from '~/store/data' -import type { Track } from '~~/types/types' +import type { Track } from '~~/types' const route = useRoute() const playerStore = usePlayerStore() diff --git a/appOLDD/pages/index.vue b/appOLDD/pages/index.vue new file mode 100644 index 0000000..a094760 --- /dev/null +++ b/appOLDD/pages/index.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/app/pages/story/holo.vue b/appOLDD/pages/story/holo.vue similarity index 100% rename from app/pages/story/holo.vue rename to appOLDD/pages/story/holo.vue diff --git a/app/pages/story/index.vue b/appOLDD/pages/story/index.vue similarity index 100% rename from app/pages/story/index.vue rename to appOLDD/pages/story/index.vue diff --git a/app/pages/story/mix.vue b/appOLDD/pages/story/mix.vue similarity index 100% rename from app/pages/story/mix.vue rename to appOLDD/pages/story/mix.vue diff --git a/app/pages/story/test.vue b/appOLDD/pages/story/test.vue similarity index 100% rename from app/pages/story/test.vue rename to appOLDD/pages/story/test.vue diff --git a/app/pages/track/[id].vue b/appOLDD/pages/track/[id].vue similarity index 100% rename from app/pages/track/[id].vue rename to appOLDD/pages/track/[id].vue diff --git a/app/platine-tools/disc.ts b/appOLDD/platine-tools/disc.ts similarity index 100% rename from app/platine-tools/disc.ts rename to appOLDD/platine-tools/disc.ts diff --git a/app/platine-tools/sampler.ts b/appOLDD/platine-tools/sampler.ts similarity index 100% rename from app/platine-tools/sampler.ts rename to appOLDD/platine-tools/sampler.ts diff --git a/app/plugins/body-class.ts b/appOLDD/plugins/body-class.ts similarity index 100% rename from app/plugins/body-class.ts rename to appOLDD/plugins/body-class.ts diff --git a/app/plugins/card.store.ts b/appOLDD/plugins/card.store.ts similarity index 100% rename from app/plugins/card.store.ts rename to appOLDD/plugins/card.store.ts diff --git a/app/plugins/device.client.ts b/appOLDD/plugins/device.client.ts similarity index 100% rename from app/plugins/device.client.ts rename to appOLDD/plugins/device.client.ts diff --git a/app/plugins/keyboard.shortcut.client.ts b/appOLDD/plugins/keyboard.shortcut.client.ts similarity index 100% rename from app/plugins/keyboard.shortcut.client.ts rename to appOLDD/plugins/keyboard.shortcut.client.ts diff --git a/app/router.options.ts b/appOLDD/router.options.ts similarity index 100% rename from app/router.options.ts rename to appOLDD/router.options.ts diff --git a/app/store/card.ts b/appOLDD/store/card.ts similarity index 99% rename from app/store/card.ts rename to appOLDD/store/card.ts index 4263883..ed6aea8 100644 --- a/app/store/card.ts +++ b/appOLDD/store/card.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia' -import type { Track } from '~~/types/types' +import type { Track } from '~~/types' export const useCardStore = defineStore('card', { state: () => ({ diff --git a/app/store/data.ts b/appOLDD/store/data.ts similarity index 100% rename from app/store/data.ts rename to appOLDD/store/data.ts diff --git a/app/store/platine.ts b/appOLDD/store/platine.ts similarity index 97% rename from app/store/platine.ts rename to appOLDD/store/platine.ts index f520dd5..139eb48 100644 --- a/app/store/platine.ts +++ b/appOLDD/store/platine.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia' -import type { Track } from '~~/types/types' +import type { Track } from '~~/types' import Disc from '~/platine-tools/disc' import Sampler from '~/platine-tools/sampler' import { useCardStore } from '~/store/card' @@ -74,7 +74,7 @@ export const usePlatineStore = defineStore('platine', () => { isLoadingTrack.value = true try { - await sampler.value.loadTrack(track.url) + await sampler.value.loadTrack(track.filePath) if (disc.value) { disc.value.setDuration(sampler.value.duration) updateTurns() diff --git a/app/store/player.ts b/appOLDD/store/player.ts similarity index 100% rename from app/store/player.ts rename to appOLDD/store/player.ts diff --git a/app/store/ui.ts b/appOLDD/store/ui.ts similarity index 100% rename from app/store/ui.ts rename to appOLDD/store/ui.ts diff --git a/app/store/user.ts b/appOLDD/store/user.ts similarity index 100% rename from app/store/user.ts rename to appOLDD/store/user.ts diff --git a/data/Artists.json b/data/Artists.json new file mode 100644 index 0000000..c161b72 --- /dev/null +++ b/data/Artists.json @@ -0,0 +1,146 @@ +[ + { + "id": 0, + "name": "L'efondras", + "url": "https://leffondras.bandcamp.com/music", + "coverId": "0024705317" + }, + { + "id": 1, + "name": "The kundalini genie", + "url": "https://the-kundalini-genie.bandcamp.com", + "coverId": "0012045550" + }, + { + "id": 2, + "name": "Fontaines D.C.", + "url": "https://fontainesdc.bandcamp.com", + "coverId": "0027327090" + }, + { + "id": 3, + "name": "Fontanarosa", + "url": "https://fontanarosa.bandcamp.com", + "coverId": "0035380235" + }, + { + "id": 4, + "name": "Johnny mafia", + "url": "https://johnnymafia.bandcamp.com", + "coverId": "0035009392" + }, + { + "id": 5, + "name": "New candys", + "url": "https://newcandys.bandcamp.com", + "coverId": "0039963261" + }, + { + "id": 6, + "name": "Magic shoppe", + "url": "https://magicshoppe.bandcamp.com", + "coverId": "0030748374" + }, + { + "id": 7, + "name": "Les jaguars", + "url": "https://radiomartiko.bandcamp.com/album/surf-qu-b-cois", + "coverId": "0016551336" + }, + { + "id": 8, + "name": "TRAAMS", + "url": "https://traams.bandcamp.com", + "coverId": "0028348410" + }, + { + "id": 9, + "name": "Blue orchid", + "url": "https://blue-orchid.bandcamp.com", + "coverId": "0034796193" + }, + { + "id": 10, + "name": "I love UFO", + "url": "https://bruitblanc.bandcamp.com", + "coverId": "a2203158939" + }, + { + "id": 11, + "name": "Kid Congo & The Pink Monkey Birds", + "url": "https://kidcongothepinkmonkeybirds.bandcamp.com/", + "coverId": "0017196290" + }, + { + "id": 12, + "name": "Firefriend", + "url": "https://firefriend.bandcamp.com/", + "coverId": "0031072203" + }, + { + "id": 13, + "name": "Squid", + "url": "https://squiduk.bandcamp.com/", + "coverId": "0037649385" + }, + { + "id": 14, + "name": "Lysistrata", + "url": "https://lysistrata.bandcamp.com/", + "coverId": "0033900158" + }, + { + "id": 15, + "name": "Pablo X Broadcasting Services", + "url": "https://pabloxbroadcastingservices.bandcamp.com/", + "coverId": "0036956486" + }, + { + "id": 16, + "name": "Night Beats", + "url": "https://nightbeats.bandcamp.com/", + "coverId": "0036987720" + }, + { + "id": 17, + "name": "Deltron 3030", + "url": "https://delthefunkyhomosapien.bandcamp.com/", + "coverId": "0005254781" + }, + { + "id": 18, + "name": "The Amorphous Androgynous", + "url": "https://theaa.bandcamp.com/", + "coverId": "0022226700" + }, + { + "id": 19, + "name": "Wooden Shjips", + "url": "https://woodenshjips.bandcamp.com/", + "coverId": "0012406678" + }, + { + "id": 20, + "name": "Silas J. Dirge", + "url": "https://silasjdirge.bandcamp.com/", + "coverId": "0035751570" + }, + { + "id": 21, + "name": "Secret Colours", + "url": "https://secretcolours.bandcamp.com/", + "coverId": "0010661379" + }, + { + "id": 22, + "name": "Larry McNeil And The Blue Knights", + "url": "https://www.discogs.com/artist/6528940-Larry-McNeil-And-The-Blue-Knights", + "coverId": "https://i.discogs.com/Yr05_neEXwzPwKlDeV7dimmTG34atkAMgpxbMBhHBkI/rs:fit/g:sm/q:90/h:600/w:600/czM6Ly9kaXNjb2dz/LWRhdGFiYXNlLWlt/YWdlcy9SLTEyMTEw/ODE1LTE1Mjg1NjU1/NzQtMjcyOC5qcGVn.jpeg" + }, + { + "id": 23, + "name": "Hugo Blanco", + "url": "https://elpalmasmusic.bandcamp.com/album/color-de-tr-pico-compiled-by-el-dr-gon-criollo-el-palmas", + "coverId": "0016886708" + } +] diff --git a/data/Compilations.json b/data/Compilations.json new file mode 100644 index 0000000..0a6c1be --- /dev/null +++ b/data/Compilations.json @@ -0,0 +1,44 @@ +[ + { + "id": "ES00", + "type": "compilation", + "name": "manifeste", + "description": "Zero is for manifesto", + "duration": 5264, + "sides": { + "A": { + "name": "manifeste", + "description": "Zero is for manifesto", + "duration": 2794, + "color1": "#ffffff", + "color2": "#48959d" + }, + "B": { + "name": "manifeste B", + "description": "Even Zero has a b-side", + "duration": 2470, + "color1": "#0d01b9", + "color2": "#3b7589" + } + } + }, + { + "id": "ES01", + "type": "compilation", + "name": "...", + "description": "...", + "duration": 7260, + "sides": { + "A": { + "duration": 3487, + "color1": "#c7b3aa", + "color2": "#000100" + }, + "B": { + "duration": 3773, + "color1": "#f7dd01", + "color2": "#010103" + } + } + } +] diff --git a/data/Songs.json b/data/Songs.json new file mode 100644 index 0000000..87bb5f5 --- /dev/null +++ b/data/Songs.json @@ -0,0 +1,486 @@ +[ + { + "order": 1, + "boxId": "ES00", + "side": "A", + "title": "The grinding wheel", + "artist": 0, + "start": 0, + "link": "https://arakirecords.bandcamp.com/track/the-grinding-wheel", + "coverId": "a3236746052", + "year": 2024 + }, + { + "order": 2, + "boxId": "ES00", + "side": "A", + "title": "Bleach", + "artist": 1, + "start": 392, + "link": "https://the-kundalini-genie.bandcamp.com/track/bleach-2", + "coverId": "a1714786533", + "year": 2024 + }, + { + "order": 3, + "boxId": "ES00", + "side": "A", + "title": "Televised mind", + "artist": 2, + "start": 896, + "link": "https://fontainesdc.bandcamp.com/track/televised-mind", + "coverId": "a3772806156", + "year": 2024 + }, + { + "order": 4, + "boxId": "ES00", + "side": "A", + "title": "In it", + "artist": 3, + "start": 1139, + "link": "https://howlinbananarecords.bandcamp.com/track/in-it", + "coverId": "a1720372066", + "year": 2024 + }, + { + "order": 5, + "boxId": "ES00", + "side": "A", + "title": "Bad michel", + "artist": 4, + "start": 1245, + "link": "https://johnnymafia.bandcamp.com/track/bad-michel-3", + "coverId": "a0984622869", + "year": 2024 + }, + { + "order": 6, + "boxId": "ES00", + "side": "A", + "title": "Overall", + "artist": 5, + "start": 1394, + "link": "https://newcandys.bandcamp.com/track/overall", + "coverId": "a0559661270", + "year": 2024 + }, + { + "order": 7, + "boxId": "ES00", + "side": "A", + "title": "Blowup", + "artist": 6, + "start": 1674, + "link": "https://magicshoppe.bandcamp.com/track/blowup", + "coverId": "a1444895293", + "year": 2024 + }, + { + "order": 8, + "boxId": "ES00", + "side": "A", + "title": "Guitar jet", + "artist": 7, + "start": 1880, + "link": "https://radiomartiko.bandcamp.com/track/guitare-jet", + "coverId": "a1494681687", + "year": 2024 + }, + { + "order": 9, + "boxId": "ES00", + "side": "A", + "title": "Intercontinental radio waves", + "artist": 8, + "start": 2024, + "link": "https://traams.bandcamp.com/track/intercontinental-radio-waves", + "coverId": "a0046738552", + "year": 2024 + }, + { + "order": 10, + "boxId": "ES00", + "side": "A", + "title": "Here comes the sun", + "artist": 9, + "start": 2211, + "link": "https://blue-orchid.bandcamp.com/track/here-come-the-sun", + "coverId": "a4102567047", + "year": 2024 + }, + { + "order": 11, + "boxId": "ES00", + "side": "A", + "title": "Like in the movies", + "artist": 10, + "start": 2560, + "link": "https://bruitblanc.bandcamp.com/track/like-in-the-movies-2", + "coverId": "a2203158939", + "year": 2024 + }, + { + "order": 1, + "boxId": "ES00", + "side": "B", + "title": "Ce que révèle l'éclipse", + "artist": 0, + "start": 0, + "link": "https://arakirecords.bandcamp.com/track/ce-que-r-v-le-l-clipse", + "coverId": "a3236746052", + "year": 2024 + }, + { + "order": 2, + "boxId": "ES00", + "side": "B", + "title": "Bleedin' Gums Mushrool", + "artist": 1, + "start": 263, + "link": "https://the-kundalini-genie.bandcamp.com/track/bleedin-gums-mushroom", + "coverId": "a1714786533", + "year": 2024 + }, + { + "order": 3, + "boxId": "ES00", + "side": "B", + "title": "A lucid dream", + "artist": 2, + "start": 554, + "link": "https://fontainesdc.bandcamp.com/track/a-lucid-dream", + "coverId": "a3772806156", + "year": 2024 + }, + { + "order": 4, + "boxId": "ES00", + "side": "B", + "title": "Lights off", + "artist": 3, + "start": 781, + "link": "https://howlinbananarecords.bandcamp.com/track/lights-off", + "coverId": "a1720372066", + "year": 2024 + }, + { + "order": 5, + "boxId": "ES00", + "side": "B", + "title": "I'm sentimental", + "artist": 4, + "start": 969, + "link": "https://johnnymafia.bandcamp.com/track/im-sentimental-2", + "coverId": "a2333676849", + "year": 2024 + }, + { + "order": 6, + "boxId": "ES00", + "side": "B", + "title": "Thrill or trip", + "artist": 5, + "start": 1128, + "link": "https://newcandys.bandcamp.com/track/thrill-or-trip", + "coverId": "a0559661270", + "year": 2024 + }, + { + "order": 7, + "boxId": "ES00", + "side": "B", + "title": "Redhead", + "artist": 6, + "start": 1303, + "link": "https://magicshoppe.bandcamp.com/track/redhead", + "coverId": "a0594426943", + "year": 2024 + }, + { + "order": 8, + "boxId": "ES00", + "side": "B", + "title": "Supersonic twist", + "artist": 7, + "start": 1584, + "link": "https://open.spotify.com/track/66voQIZAJ3zD3Eju2qtNjF", + "coverId": "a1494681687", + "year": 2024 + }, + { + "order": 9, + "boxId": "ES00", + "side": "B", + "title": "Flowers", + "artist": 8, + "start": 1749, + "link": "https://traams.bandcamp.com/track/flowers", + "coverId": "a3644668199", + "year": 2024 + }, + { + "order": 10, + "boxId": "ES00", + "side": "B", + "title": "The shade", + "artist": 9, + "start": 1924, + "link": "https://blue-orchid.bandcamp.com/track/the-shade", + "coverId": "a0804204790", + "year": 2024 + }, + { + "order": 11, + "boxId": "ES00", + "side": "B", + "title": "Like in the movies", + "artist": 10, + "start": 2186, + "link": "https://bruitblanc.bandcamp.com/track/like-in-the-movies", + "coverId": "a3647322740", + "year": 2024 + }, + { + "order": 1, + "boxId": "ES01", + "side": "A", + "title": "He Walked In", + "artist": 11, + "start": 0, + "link": "https://kidcongothepinkmonkeybirds.bandcamp.com/track/he-walked-in", + "coverId": "a0336300523", + "year": 2025 + }, + { + "order": 2, + "boxId": "ES01", + "side": "A", + "title": "The Third Wave", + "artist": 12, + "start": 841, + "link": "https://firefriend.bandcamp.com/track/the-third-wave", + "coverId": "a2803689859", + "year": 2025 + }, + { + "order": 3, + "boxId": "ES01", + "side": "A", + "title": "Broadcaster", + "artist": 13, + "start": 1104.5, + "link": "https://squiduk.bandcamp.com/track/broadcaster", + "coverId": "a3391719769", + "year": 2025 + }, + { + "order": 4, + "boxId": "ES01", + "side": "A", + "title": "Mourn", + "artist": 14, + "start": 1441, + "link": "https://lysistrata.bandcamp.com/track/mourn-2", + "coverId": "a0872900041", + "year": 2025 + }, + { + "order": 5, + "boxId": "ES01", + "side": "A", + "title": "Let it Blow", + "artist": 15, + "start": 1844.8, + "link": "https://pabloxbroadcastingservices.bandcamp.com/track/let-it-blow", + "coverId": "a4000148031", + "year": 2025 + }, + { + "order": 6, + "boxId": "ES01", + "side": "A", + "title": "Sunday Mourning", + "artist": 16, + "start": 2091.7, + "link": "https://nightbeats.bandcamp.com/track/sunday-mourning", + "coverId": "a0031987121", + "year": 2025 + }, + { + "order": 7, + "boxId": "ES01", + "side": "A", + "title": "3030 Instrumental", + "artist": 17, + "start": 2339.3, + "link": "https://delthefunkyhomosapien.bandcamp.com/track/3030", + "coverId": "a1948146136", + "year": 2025 + }, + { + "order": 8, + "boxId": "ES01", + "side": "A", + "title": "Immortality Break", + "artist": 18, + "start": 2530.5, + "link": "https://theaa.bandcamp.com/track/immortality-break", + "coverId": "a2749250329", + "year": 2025 + }, + { + "order": 9, + "boxId": "ES01", + "side": "A", + "title": "Lazy Bones", + "artist": 19, + "start": 2718, + "link": "https://woodenshjips.bandcamp.com/track/lazy-bones", + "coverId": "a1884221104", + "year": 2025 + }, + { + "order": 10, + "boxId": "ES01", + "side": "A", + "title": "On the Train of Aches", + "artist": 20, + "start": 2948, + "link": "https://silasjdirge.bandcamp.com/track/on-the-train-of-aches", + "coverId": "a1124177379", + "year": 2025 + }, + { + "order": 11, + "boxId": "ES01", + "side": "A", + "title": "Me", + "artist": 21, + "start": 3265, + "link": "https://secretcolours.bandcamp.com/track/me", + "coverId": "a1497022499", + "year": 2025 + }, + { + "order": 1, + "boxId": "ES01", + "side": "B", + "title": "Lady Hawke Blues", + "artist": 11, + "start": 0, + "link": "https://kidcongothepinkmonkeybirds.bandcamp.com/track/lady-hawke-blues", + "coverId": "a2532623230", + "year": 2025 + }, + { + "order": 2, + "boxId": "ES01", + "side": "B", + "title": "Dreamscapes", + "artist": 12, + "start": 235, + "link": "https://littlecloudrecords.bandcamp.com/track/dreamscapes", + "coverId": "a3498981203", + "year": 2025 + }, + { + "order": 3, + "boxId": "ES01", + "side": "B", + "title": "Crispy Skin", + "artist": 13, + "start": 644.2, + "link": "https://squiduk.bandcamp.com/track/crispy-skin-2", + "coverId": "a2516727021", + "year": 2025 + }, + { + "order": 4, + "boxId": "ES01", + "side": "B", + "title": "The Boy Who Stood Above The Earth", + "artist": 14, + "start": 1018, + "link": "https://lysistrata.bandcamp.com/track/the-boy-who-stood-above-the-earth-2", + "coverId": "a0350933426", + "year": 2025 + }, + { + "order": 5, + "boxId": "ES01", + "side": "B", + "title": "Better Off Alone", + "artist": 15, + "start": 1698, + "link": "https://pabloxbroadcastingservices.bandcamp.com/track/better-off-alone", + "coverId": "a4000148031", + "year": 2025 + }, + { + "order": 6, + "boxId": "ES01", + "side": "B", + "title": "Celebration #1", + "artist": 16, + "start": 2235, + "link": "https://nightbeats.bandcamp.com/track/celebration-1", + "coverId": "a0031987121", + "year": 2025 + }, + { + "order": 7, + "boxId": "ES01", + "side": "B", + "title": "3030 Instrumental", + "artist": 17, + "start": 2458.3, + "link": "https://delthefunkyhomosapien.bandcamp.com/track/3030", + "coverId": "a1948146136", + "year": 2025 + }, + { + "order": 8, + "boxId": "ES01", + "side": "B", + "title": "The Emptiness Of Nothingness", + "artist": 18, + "start": 2864.5, + "link": "https://theaa.bandcamp.com/track/the-emptiness-of-nothingness", + "coverId": "a1053923875", + "year": 2025 + }, + { + "order": 9, + "boxId": "ES01", + "side": "B", + "title": "Rising", + "artist": 19, + "start": 3145, + "link": "https://woodenshjips.bandcamp.com/track/rising", + "coverId": "a1884221104", + "year": 2025 + }, + { + "order": 10, + "boxId": "ES01", + "side": "B", + "title": "The Last Time", + "artist": 22, + "start": 3447, + "link": "https://www.discogs.com/release/12110815-Larry-McNeil-And-The-Blue-Knights-Jealous-Woman", + "coverId": "https://i.discogs.com/Yr05_neEXwzPwKlDeV7dimmTG34atkAMgpxbMBhHBkI/rs:fit/g:sm/q:90/h:600/w:600/czM6Ly9kaXNjb2dz/LWRhdGFiYXNlLWlt/YWdlcy9SLTEyMTEw/ODE1LTE1Mjg1NjU1/NzQtMjcyOC5qcGVn.jpeg", + "year": 2025 + }, + { + "order": 11, + "boxId": "ES01", + "side": "B", + "title": "Guajira Con Arpa", + "artist": 23, + "start": 3586, + "link": "https://elpalmasmusic.bandcamp.com/track/guajira-con-arpa", + "coverId": "a3463036407", + "year": 2025 + } +] diff --git a/data/music.db b/data/music.db new file mode 100644 index 0000000..98f1fbe Binary files /dev/null and b/data/music.db differ diff --git a/docker-compose.yml b/docker-compose.yml index 59bc46a..2d7d346 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,14 +8,18 @@ services: restart: unless-stopped working_dir: /app ports: - - "${PORT}:${PORT_EXPOSED}" + - '${PORT}:${PORT_EXPOSED}' volumes: - $MEDIA_DIR:/app/mnt/media + - evilspins:/app/data environment: - VIRTUAL_HOST: "${DOMAIN}" - LETSENCRYPT_HOST: "${DOMAIN}" - PUID: "${PUID}" - PGID: "${PGID}" + VIRTUAL_HOST: '${DOMAIN}' + LETSENCRYPT_HOST: '${DOMAIN}' + PUID: '${PUID}' + PGID: '${PGID}' + +volumes: + evilspins: networks: default: diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..37f92d2 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,11 @@ +import 'dotenv/config' +import { defineConfig } from 'drizzle-kit' + +export default defineConfig({ + out: './drizzle', + schema: './server/db/schema.ts', + dialect: 'sqlite', + dbCredentials: { + url: process.env.PATH_DB! + } +}) diff --git a/nuxt.config.ts b/nuxt.config.ts index 5635841..bb9d8dd 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -4,9 +4,26 @@ import tsconfigPaths from 'vite-tsconfig-paths' const isProd = process.env.NODE_ENV === 'production' export default defineNuxtConfig({ + runtimeConfig: { + pathFiles: process.env.PATH_FILES, + pathDb: process.env.PATH_DB + }, + nitro: { + experimental: { + tasks: true + }, + scheduledTasks: { + '*/5 * * * *': ['syncTracks'] + } + }, compatibilityDate: '2025-07-15', devtools: { enabled: true }, modules: ['@nuxt/eslint', '@nuxtjs/tailwindcss', '@pinia/nuxt'], + typescript: { + tsConfig: { + include: ['types/**/*.ts'] + } + }, vite: { plugins: [tsconfigPaths()] }, diff --git a/package.json b/package.json index 7760ac2..87f572c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { - "name": "nuxt-app", + "name": "evilspins", "type": "module", + "version": "1.0.0", "private": true, "scripts": { "build": "nuxt build", @@ -12,18 +13,18 @@ "lint:fix": "eslint . --fix", "format": "prettier --check .", "format:fix": "prettier --write .", - "migrate": "tsx server/database/migrate.ts", - "db:reset": "rm -f server/database/evilspins.db && npm run migrate" + "db:push": "drizzle-kit push", + "db:reset": "rm -rf drizzle data/music.db && drizzle-kit push", + "db:sync": "curl -X POST -H \"Content-Type: application/json\" -d '{}' http://localhost:7901/api/test/test-db-sync" }, "dependencies": { + "@libsql/client": "^0.17.0", "@nuxt/eslint": "1.9.0", "@nuxtjs/tailwindcss": "6.14.0", "@pinia/nuxt": "0.11.2", - "@types/chokidar": "^2.1.7", "atropos": "^2.0.2", - "better-sqlite3": "^12.5.0", - "chokidar": "^5.0.0", - "nuxt": "^4.2.0", + "drizzle-orm": "^0.45.1", + "nuxt": "^4.3.0", "pinia": "^3.0.3", "vue": "^3.5.18", "vue-router": "^4.5.1", @@ -32,15 +33,16 @@ "engines": { "pnpm": ">=10 <11" }, - "packageManager": "pnpm@10.27.0", + "packageManager": "pnpm@10.28.0", "devDependencies": { "@eslint/compat": "^1.4.1", "@eslint/js": "^9.39.1", "@nuxt/eslint-config": "^1.10.0", "@nuxtjs/eslint-config-typescript": "^12.1.0", - "@types/better-sqlite3": "^7.6.13", "@typescript-eslint/eslint-plugin": "^8.46.3", "@typescript-eslint/parser": "^8.46.3", + "dotenv": "^16.4.7", + "drizzle-kit": "^0.31.8", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", @@ -50,6 +52,7 @@ "patch-package": "^8.0.1", "sass-embedded": "^1.93.2", "tsx": "^4.21.0", + "typescript": "^5.7.3", "vite-tsconfig-paths": "^5.1.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 468ab21..ff7977a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,42 +8,39 @@ importers: .: dependencies: + '@libsql/client': + specifier: ^0.17.0 + version: 0.17.0 '@nuxt/eslint': specifier: 1.9.0 - version: 1.9.0(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.9.0(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@nuxtjs/tailwindcss': specifier: 6.14.0 version: 6.14.0(magicast@0.5.1)(tsx@4.21.0)(yaml@2.8.2) '@pinia/nuxt': specifier: 0.11.2 - version: 0.11.2(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))) - '@types/chokidar': - specifier: ^2.1.7 - version: 2.1.7 + version: 0.11.2(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))) atropos: specifier: ^2.0.2 version: 2.0.2 - better-sqlite3: - specifier: ^12.5.0 - version: 12.5.0 - chokidar: - specifier: ^5.0.0 - version: 5.0.0 + drizzle-orm: + specifier: ^0.45.1 + version: 0.45.1(@libsql/client@0.17.0) nuxt: - specifier: ^4.2.0 - version: 4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + specifier: ^4.3.0 + version: 4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) pinia: specifier: ^3.0.3 - version: 3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) + version: 3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)) vue: specifier: ^3.5.18 - version: 3.5.26(typescript@5.9.3) + version: 3.5.27(typescript@5.9.3) vue-router: specifier: ^4.5.1 - version: 4.6.4(vue@3.5.26(typescript@5.9.3)) + version: 4.6.4(vue@3.5.27(typescript@5.9.3)) vuedraggable: specifier: ^4.1.0 - version: 4.1.0(vue@3.5.26(typescript@5.9.3)) + version: 4.1.0(vue@3.5.27(typescript@5.9.3)) devDependencies: '@eslint/compat': specifier: ^1.4.1 @@ -53,19 +50,22 @@ importers: version: 9.39.2 '@nuxt/eslint-config': specifier: ^1.10.0 - version: 1.12.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 1.13.0(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 - version: 12.1.0(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@types/better-sqlite3': - specifier: ^7.6.13 - version: 7.6.13 + version: 12.1.0(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/eslint-plugin': specifier: ^8.46.3 - version: 8.51.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.46.3 - version: 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + dotenv: + specifier: ^16.4.7 + version: 16.6.1 + drizzle-kit: + specifier: ^0.31.8 + version: 0.31.8 eslint: specifier: ^9.39.2 version: 9.39.2(jiti@2.6.1) @@ -74,7 +74,7 @@ importers: version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4) + version: 5.5.5(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-vue: specifier: 9.3.0 version: 9.3.0(eslint@9.39.2(jiti@2.6.1)) @@ -89,13 +89,16 @@ importers: version: 8.0.1 sass-embedded: specifier: ^1.93.2 - version: 1.97.1 + version: 1.97.3 tsx: specifier: ^4.21.0 version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.9.3 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) packages: @@ -112,32 +115,32 @@ packages: peerDependencies: '@types/json-schema': ^7.0.15 - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + '@babel/code-frame@7.28.6': + resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + '@babel/compat-data@7.28.6': + resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + '@babel/core@7.28.6': + resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + '@babel/generator@7.28.6': + resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.5': - resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -150,12 +153,12 @@ packages: resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -164,12 +167,12 @@ packages: resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.27.1': - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -190,47 +193,47 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/parser@7.28.6': + resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.5': - resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + '@babel/traverse@7.28.6': + resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/types@7.28.6': + resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} engines: {node: '>=6.9.0'} - '@bomb.sh/tab@0.0.10': - resolution: {integrity: sha512-6ALS2rh/4LKn0Yxwm35V6LcgQuSiECHbqQo7+9g4rkgGyXZ0siOc8K+IuWIq/4u0Zkv2mevP9QSqgKhGIvLJMw==} + '@bomb.sh/tab@0.0.11': + resolution: {integrity: sha512-RSqyreeicYBALcMaNxIUJTBknftXsyW45VRq5gKDNwKroh0Re5SDoWwXZaphb+OTEzVdpm/BA8Uq6y0P+AtVYw==} hasBin: true peerDependencies: cac: ^6.7.14 @@ -244,8 +247,8 @@ packages: commander: optional: true - '@bufbuild/protobuf@2.10.2': - resolution: {integrity: sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A==} + '@bufbuild/protobuf@2.11.0': + resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==} '@clack/core@0.5.0': resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} @@ -256,11 +259,11 @@ packages: '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} - '@clack/prompts@1.0.0-alpha.8': - resolution: {integrity: sha512-YZGC4BmTKSF5OturNKEz/y4xNjYGmGk6NI785CQucJ7OEdX0qbMmL/zok+9bL6c7qE3WSYffyK5grh2RnkGNtQ==} + '@clack/prompts@1.0.0-alpha.9': + resolution: {integrity: sha512-sKs0UjiHFWvry4SiRfBi5Qnj0C/6AYx8aKkFPZQSuUZXgAram25ZDmhQmP7vj1aFyLpfHWtLQjWvOvcat0TOLg==} - '@cloudflare/kv-asset-handler@0.4.1': - resolution: {integrity: sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==} + '@cloudflare/kv-asset-handler@0.4.2': + resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} engines: {node: '>=18.0.0'} '@csstools/selector-resolve-nested@3.1.0': @@ -275,17 +278,20 @@ packages: peerDependencies: postcss-selector-parser: ^7.0.0 - '@dxup/nuxt@0.2.2': - resolution: {integrity: sha512-RNpJjDZs9+JcT9N87AnOuHsNM75DEd58itADNd/s1LIF6BZbTLZV0xxilJZb55lntn4TYvscTaXLCBX2fq9CXg==} + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + + '@dxup/nuxt@0.3.2': + resolution: {integrity: sha512-2f2usP4oLNsIGjPprvABe3f3GWuIhIDp0169pGLFxTDRI5A4d4sBbGpR+tD9bGZCT+1Btb6Q2GKlyv3LkDCW5g==} '@dxup/unimport@0.1.2': resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==} - '@emnapi/core@1.7.1': - resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -294,14 +300,22 @@ packages: resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.76.0': - resolution: {integrity: sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==} - engines: {node: '>=20.11.0'} + '@es-joy/jsdoccomment@0.83.0': + resolution: {integrity: sha512-e1MHSEPJ4m35zkBvNT6kcdeH1SvMaJDsPC3Xhfseg3hvF50FUE3f46Yn36jgbrPYYXezlWUQnevv23c+lx2MCA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@es-joy/resolve.exports@1.2.0': resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==} engines: {node: '>=10'} + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.is' + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.is' + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -314,6 +328,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.12': resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} @@ -326,6 +346,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.12': resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} @@ -338,6 +364,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.12': resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} @@ -350,6 +382,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.12': resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} @@ -362,6 +400,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.12': resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} @@ -374,6 +418,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} @@ -386,6 +436,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} @@ -398,6 +454,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.12': resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} @@ -410,6 +472,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.12': resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} @@ -422,6 +490,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.12': resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} @@ -434,6 +508,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.12': resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} @@ -446,6 +526,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.12': resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} @@ -458,6 +544,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.12': resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} @@ -470,6 +562,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.12': resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} @@ -482,6 +580,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.12': resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} @@ -494,6 +598,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.12': resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} @@ -518,6 +628,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} @@ -542,6 +658,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} @@ -566,6 +688,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.25.12': resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} @@ -578,6 +706,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.12': resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} @@ -590,6 +724,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.12': resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} @@ -602,6 +742,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.12': resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} @@ -614,8 +760,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -641,6 +787,10 @@ packages: resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.5.1': + resolution: {integrity: sha512-QN8067dXsXAl9HIvqws7STEviheRFojX3zek5OpC84oBxDGqizW9731ByF/ASxqQihbWrVDdZXS+Ihnsckm9dg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/config-inspector@1.4.2': resolution: {integrity: sha512-Ay8QcvV/Tq6YDeoltwZDQsQTrcS5flPkOp4ylk1WdV7L2UGotINwjatjbAIEqBTmP3G0g3Ah8dnuHC8DsnKPYQ==} hasBin: true @@ -655,6 +805,10 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@1.0.1': + resolution: {integrity: sha512-r18fEAj9uCk+VjzGt2thsbOmychS+4kxI14spVNibUO2vqKX7obOG+ymZljAwuPZl+S3clPGwCwTDtrdqTiY6Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/eslintrc@3.3.3': resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -691,8 +845,8 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@ioredis/commands@1.4.0': - resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==} + '@ioredis/commands@1.5.0': + resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==} '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} @@ -740,6 +894,63 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + '@libsql/client@0.17.0': + resolution: {integrity: sha512-TLjSU9Otdpq0SpKHl1tD1Nc9MKhrsZbCFGot3EbCxRa8m1E5R1mMwoOjKMMM31IyF7fr+hPNHLpYfwbMKNusmg==} + + '@libsql/core@0.17.0': + resolution: {integrity: sha512-hnZRnJHiS+nrhHKLGYPoJbc78FE903MSDrFJTbftxo+e52X+E0Y0fHOCVYsKWcg6XgB7BbJYUrz/xEkVTSaipw==} + + '@libsql/darwin-arm64@0.5.22': + resolution: {integrity: sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==} + cpu: [arm64] + os: [darwin] + + '@libsql/darwin-x64@0.5.22': + resolution: {integrity: sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==} + cpu: [x64] + os: [darwin] + + '@libsql/hrana-client@0.9.0': + resolution: {integrity: sha512-pxQ1986AuWfPX4oXzBvLwBnfgKDE5OMhAdR/5cZmRaB4Ygz5MecQybvwZupnRz341r2CtFmbk/BhSu7k2Lm+Jw==} + + '@libsql/isomorphic-ws@0.1.5': + resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} + + '@libsql/linux-arm-gnueabihf@0.5.22': + resolution: {integrity: sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==} + cpu: [arm] + os: [linux] + + '@libsql/linux-arm-musleabihf@0.5.22': + resolution: {integrity: sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==} + cpu: [arm] + os: [linux] + + '@libsql/linux-arm64-gnu@0.5.22': + resolution: {integrity: sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==} + cpu: [arm64] + os: [linux] + + '@libsql/linux-arm64-musl@0.5.22': + resolution: {integrity: sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==} + cpu: [arm64] + os: [linux] + + '@libsql/linux-x64-gnu@0.5.22': + resolution: {integrity: sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==} + cpu: [x64] + os: [linux] + + '@libsql/linux-x64-musl@0.5.22': + resolution: {integrity: sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==} + cpu: [x64] + os: [linux] + + '@libsql/win32-x64-msvc@0.5.22': + resolution: {integrity: sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==} + cpu: [x64] + os: [win32] + '@mapbox/node-pre-gyp@2.0.3': resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} @@ -751,6 +962,9 @@ packages: '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@neon-rs/load@0.0.4': + resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -767,8 +981,8 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@nuxt/cli@3.31.3': - resolution: {integrity: sha512-K0T1ZpBXnlb41NU/RWf1F0U0C14KzlEXCoaSgD2y8BiLoCBWcgQ1UAlRtx4cThqWbJmIxaNZZTDL0NZ9d1U7ag==} + '@nuxt/cli@3.32.0': + resolution: {integrity: sha512-n2f3SRjPlhthPvo2qWjLRRiTrUtB6WFwg0BGsvtqcqZVeQpNEU371zuKWBaFrWgqDZHV1r/aD9jrVCo+C8Pmrw==} engines: {node: ^16.10.0 || >=18.0.0} hasBin: true @@ -799,8 +1013,8 @@ packages: '@vitejs/devtools': optional: true - '@nuxt/eslint-config@1.12.1': - resolution: {integrity: sha512-fsKKtIIvVwQ5OGE30lJEhzwXxXj40ol7vR6h3eTH8sSBVZLOdmPn2BHrhoOjHTDXpLPw1AZ/8GcQfJZ2o3gcHQ==} + '@nuxt/eslint-config@1.13.0': + resolution: {integrity: sha512-b/gGtdOcRSak8xfN93InDwPopBr3SXmJ4N2XJI8zw/BZRGX1as6R9JYMpwX6QZCoIm7t1ltvXSAKsfoAtzgxWA==} peerDependencies: eslint: ^9.0.0 eslint-plugin-format: '*' @@ -817,8 +1031,8 @@ packages: eslint-plugin-format: optional: true - '@nuxt/eslint-plugin@1.12.1': - resolution: {integrity: sha512-9EBWZTgJC2oclDIL53YG6paEoaTU2SDWVPybEQ0Pe2Bm/5YSbHd//6EGLvdGwAgN+xJQmEsPunUpd4Y+NX2OCQ==} + '@nuxt/eslint-plugin@1.13.0': + resolution: {integrity: sha512-QMMFxDNaTY0ur2wAVsGC8vGHVlSONV9qPclze0xG6tUX/4G/xrDbNkSYeRIbYf6/Nk4rYFiXxS0CDUJFwUKidg==} peerDependencies: eslint: ^9.0.0 @@ -839,22 +1053,22 @@ packages: vite-plugin-eslint2: optional: true - '@nuxt/kit@3.20.2': - resolution: {integrity: sha512-laqfmMcWWNV1FsVmm1+RQUoGY8NIJvCRl0z0K8ikqPukoEry0LXMqlQ+xaf8xJRvoH2/78OhZmsEEsUBTXipcw==} + '@nuxt/kit@3.21.0': + resolution: {integrity: sha512-KMTLK/dsGaQioZzkYUvgfN9le4grNW54aNcA1jqzgVZLcFVy4jJfrJr5WZio9NT2EMfajdoZ+V28aD7BRr4Zfw==} engines: {node: '>=18.12.0'} - '@nuxt/kit@4.2.2': - resolution: {integrity: sha512-ZAgYBrPz/yhVgDznBNdQj2vhmOp31haJbO0I0iah/P9atw+OHH7NJLUZ3PK+LOz/0fblKTN1XJVSi8YQ1TQ0KA==} + '@nuxt/kit@4.3.0': + resolution: {integrity: sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==} engines: {node: '>=18.12.0'} - '@nuxt/nitro-server@4.2.2': - resolution: {integrity: sha512-lDITf4n5bHQ6a5MO7pvkpdQbPdWAUgSvztSHCfui/3ioLZsM2XntlN02ue6GSoh3oV9H4xSB3qGa+qlSjgxN0A==} + '@nuxt/nitro-server@4.3.0': + resolution: {integrity: sha512-NkI8q8211BTLfQr6m24PjBp9GGyKWJMxRGSqe5WGgpQD5BpSnlvM8l1HaaP4xn9/P4v1Hp/LxX+vYElY2fw/zw==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - nuxt: ^4.2.2 + nuxt: ^4.3.0 - '@nuxt/schema@4.2.2': - resolution: {integrity: sha512-lW/1MNpO01r5eR/VoeanQio8Lg4QpDklMOHa4mBHhhPNlBO1qiRtVYzjcnNdun3hujGauRaO9khGjv93Z5TZZA==} + '@nuxt/schema@4.3.0': + resolution: {integrity: sha512-+Ps3exseMFH3MOapbBmDdpaHpPV7wqcB6+Ir9w8h91771HwMOWrQomAZpqDvw7FtFraoD5Xw7dhSKDhkwJRSmQ==} engines: {node: ^14.18.0 || >=16.10.0} '@nuxt/telemetry@2.6.6': @@ -862,11 +1076,11 @@ packages: engines: {node: '>=18.12.0'} hasBin: true - '@nuxt/vite-builder@4.2.2': - resolution: {integrity: sha512-Bot8fpJNtHZrM4cS1iSR7bEAZ1mFLAtJvD/JOSQ6kT62F4hSFWfMubMXOwDkLK2tnn3bnAdSqGy1nLNDBCahpQ==} + '@nuxt/vite-builder@4.3.0': + resolution: {integrity: sha512-qOVevlukWUztfJ9p/OtujRxwaXIsnoTo2ZW4pPY1zQcuR1DtBtBsiePLzftoDz1VGx9JF5GAx9YyrgTn/EmcWQ==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - nuxt: 4.2.2 + nuxt: 4.3.0 rolldown: ^1.0.0-beta.38 vue: ^3.3.4 peerDependenciesMeta: @@ -886,362 +1100,452 @@ packages: '@nuxtjs/tailwindcss@6.14.0': resolution: {integrity: sha512-30RyDK++LrUVRgc2A85MktGWIZoRQgeQKjE4CjjD64OXNozyl+4ScHnnYgqVToMM6Ch2ZG2W4wV2J0EN6F0zkQ==} - '@oxc-minify/binding-android-arm64@0.102.0': - resolution: {integrity: sha512-pknM+ttJTwRr7ezn1v5K+o2P4RRjLAzKI10bjVDPybwWQ544AZW6jxm7/YDgF2yUbWEV9o7cAQPkIUOmCiW8vg==} + '@oxc-minify/binding-android-arm-eabi@0.110.0': + resolution: {integrity: sha512-43fMTO8/5bMlqfOiNSZNKUzIqeLIYuB9Hr1Ohyf58B1wU11S2dPGibTXOGNaWsfgHy99eeZ1bSgeIHy/fEYqbw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-minify/binding-android-arm64@0.110.0': + resolution: {integrity: sha512-5oQrnn9eK/ccOp80PTrNj0Vq893NPNNRryjGpOIVsYNgWFuoGCfpnKg68oEFcN8bArizYAqw4nvgHljEnar69w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-minify/binding-darwin-arm64@0.102.0': - resolution: {integrity: sha512-BDLiH41ZctNND38+GCEL3ZxFn9j7qMZJLrr6SLWMt8xlG4Sl64xTkZ0zeUy4RdVEatKKZdrRIhFZ2e5wPDQT6Q==} + '@oxc-minify/binding-darwin-arm64@0.110.0': + resolution: {integrity: sha512-dqBDgTG9tF2z2lrZp9E8wU+Godz1i8gCGSei2eFKS2hRploBOD5dmOLp1j4IMornkPvSQmbwB3uSjPq7fjx4EA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-minify/binding-darwin-x64@0.102.0': - resolution: {integrity: sha512-AcB8ZZ711w4hTDhMfMHNjT2d+hekTQ2XmNSUBqJdXB+a2bJbE50UCRq/nxXl44zkjaQTit3lcQbFvhk2wwKcpw==} + '@oxc-minify/binding-darwin-x64@0.110.0': + resolution: {integrity: sha512-U0AqabqaooDOpYmeeOye8wClv8PSScELXgOfYqyqgrwH9J9KrpCE1jL8Rlqgz68QbL4mPw3V6sKiiHssI4CLeQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-minify/binding-freebsd-x64@0.102.0': - resolution: {integrity: sha512-UlLEN9mR5QaviYVMWZQsN9DgAH3qyV67XUXDEzSrbVMLsqHsVHhFU8ZIeO0fxWTQW/cgpvldvKp9/+RdrggqWw==} + '@oxc-minify/binding-freebsd-x64@0.110.0': + resolution: {integrity: sha512-H0w8o/Wo1072WSdLfhwwrpFpwZnPpjQODlHuRYkTfsSSSJbTxQtjJd4uxk7YJsRv5RQp69y0I7zvdH6f8Xueyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-minify/binding-linux-arm-gnueabihf@0.102.0': - resolution: {integrity: sha512-CWyCwedZrUt47n56/RwHSwKXxVI3p98hB0ntLaBNeH5qjjBujs9uOh4bQ0aAlzUWunT77b3/Y+xcQnmV42HN4A==} + '@oxc-minify/binding-linux-arm-gnueabihf@0.110.0': + resolution: {integrity: sha512-qd6sW0AvEVYZhbVVMGtmKZw3b1zDYGIW+54Uh42moWRAj6i4Jhk/LGr6r9YNZpOINeuvZfkFuEeDD/jbu7xPUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-minify/binding-linux-arm64-gnu@0.102.0': - resolution: {integrity: sha512-W/DCw+Ys8rXj4j38ylJ2l6Kvp6SV+eO5SUWA11imz7yCWntNL001KJyGQ9PJNUFHg0jbxe3yqm4M50v6miWzeA==} + '@oxc-minify/binding-linux-arm-musleabihf@0.110.0': + resolution: {integrity: sha512-7WXP0aXMrWSn0ScppUBi3jf68ebfBG0eri8kxLmBOVSBj6jw1repzkHMITJMBeLr5d0tT/51qFEptiAk2EP2iA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-minify/binding-linux-arm64-gnu@0.110.0': + resolution: {integrity: sha512-LYfADrq5x1W5gs+u9OIbMbDQNYkAECTXX0ufnAuf3oGmO51rF98kGFR5qJqC/6/csokDyT3wwTpxhE0TkcF/Og==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-minify/binding-linux-arm64-musl@0.102.0': - resolution: {integrity: sha512-DyH/t/zSZHuX4Nn239oBteeMC4OP7B13EyXWX18Qg8aJoZ+lZo90WPGOvhP04zII33jJ7di+vrtAUhsX64lp+A==} + '@oxc-minify/binding-linux-arm64-musl@0.110.0': + resolution: {integrity: sha512-53GjCVY8kvymk9P6qNDh6zyblcehF5QHstq9QgCjv13ONGRnSHjeds0PxIwiihD7h295bxsWs84DN39syLPH4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-minify/binding-linux-riscv64-gnu@0.102.0': - resolution: {integrity: sha512-CMvzrmOg+Gs44E7TRK/IgrHYp+wwVJxVV8niUrDR2b3SsrCO3NQz5LI+7bM1qDbWnuu5Cl1aiitoMfjRY61dSg==} + '@oxc-minify/binding-linux-ppc64-gnu@0.110.0': + resolution: {integrity: sha512-li8XcN81dxbJDMBESnTgGhoiAQ+CNIdM0QGscZ4duVPjCry1RpX+5FJySFbGqG3pk4s9ZzlL/vtQtbRzZIZOzg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-minify/binding-linux-riscv64-gnu@0.110.0': + resolution: {integrity: sha512-SweKfsnLKShu6UFV8mwuj1d1wmlNoL/FlAxPUzwjEBgwiT2HQkY24KnjBH+TIA+//1O83kzmWKvvs4OuEhdIEQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-minify/binding-linux-s390x-gnu@0.102.0': - resolution: {integrity: sha512-tZWr6j2s0ddm9MTfWTI3myaAArg9GDy4UgvpF00kMQAjLcGUNhEEQbB9Bd9KtCvDQzaan8HQs0GVWUp+DWrymw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - - '@oxc-minify/binding-linux-x64-gnu@0.102.0': - resolution: {integrity: sha512-0YEKmAIun1bS+Iy5Shx6WOTSj3GuilVuctJjc5/vP8/EMTZ/RI8j0eq0Mu3UFPoT/bMULL3MBXuHuEIXmq7Ddg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@oxc-minify/binding-linux-x64-musl@0.102.0': - resolution: {integrity: sha512-Ew4QDpEsXoV+pG5+bJpheEy3GH436GBe6ASPB0X27Hh9cQ2gb1NVZ7cY7xJj68+fizwS/PtT8GHoG3uxyH17Pg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@oxc-minify/binding-openharmony-arm64@0.102.0': - resolution: {integrity: sha512-wYPXS8IOu/sXiP3CGHJNPzZo4hfPAwJKevcFH2syvU2zyqUxym7hx6smfcK/mgJBiX7VchwArdGRwrEQKcBSaQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@oxc-minify/binding-wasm32-wasi@0.102.0': - resolution: {integrity: sha512-52SepCb9e+8cVisGa9S/F14K8PxW0AnbV1j4KEYi8uwfkUIxeDNKRHVHzPoBXNrr0yxW0EHLn/3i8J7a2YCpWw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@oxc-minify/binding-win32-arm64-msvc@0.102.0': - resolution: {integrity: sha512-kLs6H1y6sDBKcIimkNwu5th28SLkyvFpHNxdLtCChda0KIGeIXNSiupy5BqEutY+VlWJivKT1OV3Ev3KC5Euzg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@oxc-minify/binding-win32-x64-msvc@0.102.0': - resolution: {integrity: sha512-XdyJZdSMN8rbBXH10CrFuU+Q9jIP2+MnxHmNzjK4+bldbTI1UxqwjUMS9bKVC5VCaIEZhh8IE8x4Vf8gmCgrKQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@oxc-parser/binding-android-arm64@0.102.0': - resolution: {integrity: sha512-pD2if3w3cxPvYbsBSTbhxAYGDaG6WVwnqYG0mYRQ142D6SJ6BpNs7YVQrqpRA2AJQCmzaPP5TRp/koFLebagfQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@oxc-parser/binding-darwin-arm64@0.102.0': - resolution: {integrity: sha512-RzMN6f6MrjjpQC2Dandyod3iOscofYBpHaTecmoRRbC5sJMwsurkqUMHzoJX9F6IM87kn8m/JcClnoOfx5Sesw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@oxc-parser/binding-darwin-x64@0.102.0': - resolution: {integrity: sha512-Sr2/3K6GEcejY+HgWp5HaxRPzW5XHe9IfGKVn9OhLt8fzVLnXbK5/GjXj7JjMCNKI3G3ZPZDG2Dgm6CX3MaHCA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@oxc-parser/binding-freebsd-x64@0.102.0': - resolution: {integrity: sha512-s9F2N0KJCGEpuBW6ChpFfR06m2Id9ReaHSl8DCca4HvFNt8SJFPp8fq42n2PZy68rtkremQasM0JDrK2BoBeBQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@oxc-parser/binding-linux-arm-gnueabihf@0.102.0': - resolution: {integrity: sha512-zRCIOWzLbqhfY4g8KIZDyYfO2Fl5ltxdQI1v2GlePj66vFWRl8cf4qcBGzxKfsH3wCZHAhmWd1Ht59mnrfH/UQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxc-parser/binding-linux-arm64-gnu@0.102.0': - resolution: {integrity: sha512-5n5RbHgfjulRhKB0pW5p0X/NkQeOpI4uI9WHgIZbORUDATGFC8yeyPA6xYGEs+S3MyEAFxl4v544UEIWwqAgsA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@oxc-parser/binding-linux-arm64-musl@0.102.0': - resolution: {integrity: sha512-/XWcmglH/VJ4yKAGTLRgPKSSikh3xciNxkwGiURt8dS30b+3pwc4ZZmudMu0tQ3mjSu0o7V9APZLMpbHK8Bp5w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@oxc-parser/binding-linux-riscv64-gnu@0.102.0': - resolution: {integrity: sha512-2jtIq4nswvy6xdqv1ndWyvVlaRpS0yqomLCvvHdCFx3pFXo5Aoq4RZ39kgvFWrbAtpeYSYeAGFnwgnqjx9ftdw==} + '@oxc-minify/binding-linux-riscv64-musl@0.110.0': + resolution: {integrity: sha512-oH8G4aFMP8XyTsEpdANC5PQyHgSeGlopHZuW1rpyYcaErg5YaK0vXjQ4EM5HVvPm+feBV24JjxgakTnZoF3aOQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-parser/binding-linux-s390x-gnu@0.102.0': - resolution: {integrity: sha512-Yp6HX/574mvYryiqj0jNvNTJqo4pdAsNP2LPBTxlDQ1cU3lPd7DUA4MQZadaeLI8+AGB2Pn50mPuPyEwFIxeFg==} + '@oxc-minify/binding-linux-s390x-gnu@0.110.0': + resolution: {integrity: sha512-W9na+Vza7XVUlpf8wMt4QBfH35KeTENEmnpPUq3NSlbQHz8lSlSvhAafvo43NcKvHAXV3ckD/mUf2VkqSdbklg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxc-parser/binding-linux-x64-gnu@0.102.0': - resolution: {integrity: sha512-R4b0xZpDRhoNB2XZy0kLTSYm0ZmWeKjTii9fcv1Mk3/SIGPrrglwt4U6zEtwK54Dfi4Bve5JnQYduigR/gyDzw==} + '@oxc-minify/binding-linux-x64-gnu@0.110.0': + resolution: {integrity: sha512-XJdA4mmmXOjJxSRgNJXsDP7Xe8h3gQhmb56hUcCrvq5d+h5UcEi2pR8rxsdIrS8QmkLuBA3eHkGK8E27D7DTgQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-parser/binding-linux-x64-musl@0.102.0': - resolution: {integrity: sha512-xM5A+03Ti3jvWYZoqaBRS3lusvnvIQjA46Fc9aBE/MHgvKgHSkrGEluLWg/33QEwBwxupkH25Pxc1yu97oZCtg==} + '@oxc-minify/binding-linux-x64-musl@0.110.0': + resolution: {integrity: sha512-QqzvALuOTtSckI8x467R4GNArzYDb/yEh6aNzLoeaY1O7vfT7SPDwlOEcchaTznutpeS9Dy8gUS/AfqtUHaufw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-parser/binding-openharmony-arm64@0.102.0': - resolution: {integrity: sha512-AieLlsliblyaTFq7Iw9Nc618tgwV02JT4fQ6VIUd/3ZzbluHIHfPjIXa6Sds+04krw5TvCS8lsegtDYAyzcyhg==} + '@oxc-minify/binding-openharmony-arm64@0.110.0': + resolution: {integrity: sha512-gAMssLs2Q3+uhLZxanh1DF+27Kaug3cf4PXb9AB7XK81DR+LVcKySXaoGYoOs20Co0fFSphd6rRzKge2qDK3dA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.102.0': - resolution: {integrity: sha512-w6HRyArs1PBb9rDsQSHlooe31buUlUI2iY8sBzp62jZ1tmvaJo9EIVTQlRNDkwJmk9DF9uEyIJ82EkZcCZTs9A==} + '@oxc-minify/binding-wasm32-wasi@0.110.0': + resolution: {integrity: sha512-7Wqi5Zjl022bs2zXq+ICdalDPeDuCH/Nhbi8q2isLihAonMVIT0YH2hqqnNEylRNGYck+FJ6gRZwMpGCgrNxPg==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.102.0': - resolution: {integrity: sha512-pqP5UuLiiFONQxqGiUFMdsfybaK1EOK4AXiPlvOvacLaatSEPObZGpyCkAcj9aZcvvNwYdeY9cxGM9IT3togaA==} + '@oxc-minify/binding-win32-arm64-msvc@0.110.0': + resolution: {integrity: sha512-ZPx+0Tj4dqn41ecyoGotlvekQKy6JxJCixn9Rw7h/dafZ3eDuBcEVh3c2ZoldXXsyMIt5ywI8IWzFZsjNedd5Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.102.0': - resolution: {integrity: sha512-ntMcL35wuLR1A145rLSmm7m7j8JBZGkROoB9Du0KFIFcfi/w1qk75BdCeiTl3HAKrreAnuhW3QOGs6mJhntowA==} + '@oxc-minify/binding-win32-ia32-msvc@0.110.0': + resolution: {integrity: sha512-H0Oyd3RWBfpEyvJIrFK94RYiY7KKSQl11Ym7LMDwLEagelIAfRCkt1amHZhFa/S3ZRoaOJFXzEw4YKeSsjVFsg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-minify/binding-win32-x64-msvc@0.110.0': + resolution: {integrity: sha512-Hr3nK90+qXKJ2kepXwFIcNfQQIOBecB4FFCyaMMypthoEEhVP08heRynj4eSXZ8NL9hLjs3fQzH8PJXfpznRnQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.102.0': - resolution: {integrity: sha512-8Skrw405g+/UJPKWJ1twIk3BIH2nXdiVlVNtYT23AXVwpsd79es4K+KYt06Fbnkc5BaTvk/COT2JuCLYdwnCdA==} + '@oxc-parser/binding-android-arm-eabi@0.110.0': + resolution: {integrity: sha512-g6+kHTI/BRDJszaZkSgyu0pGuMIVYJ7/v0I4C9BkTeGn1LxF9GWI6jE22dBEELXMWbG7FTyNlD9RCuWlStAx6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] - '@oxc-transform/binding-android-arm64@0.102.0': - resolution: {integrity: sha512-JLBT7EiExsGmB6LuBBnm6qTfg0rLSxBU+F7xjqy6UXYpL7zhqelGJL7IAq6Pu5UYFT55zVlXXmgzLOXQfpQjXA==} + '@oxc-parser/binding-android-arm64@0.110.0': + resolution: {integrity: sha512-tbr+uWFVUN6p9LYlR0cPyFA24HWlnRYU+oldWlEGis/tdMtya3BubQcKdylhFhhDLaW6ChCJfxogQranElGVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform/binding-darwin-arm64@0.102.0': - resolution: {integrity: sha512-xmsBCk/NwE0khy8h6wLEexiS5abCp1ZqJUNHsAovJdGgIW21oGwhiC3VYg1vNLbq+zEXwOHuphVuNEYfBwyNTw==} + '@oxc-parser/binding-darwin-arm64@0.110.0': + resolution: {integrity: sha512-jPBsXPc8hwmsUQyLMg7a5Ll/j/8rWCDFoB8WzLP6C0qQKX0zWQxbfSdLFg9GGNPuRo8J8ma9WfBQN5RmbFxNJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.102.0': - resolution: {integrity: sha512-EhBsiq8hSd5BRjlWACB9MxTUiZT2He1s1b3tRP8k3lB8ZTt6sXnDXIWhxRmmM0h//xe6IJ2HuMlbvjXPo/tATg==} + '@oxc-parser/binding-darwin-x64@0.110.0': + resolution: {integrity: sha512-jt5G1eZj4sdMGc7Q0c6kfPRmqY1Mn3yzo6xuRr8EXozkh93O8KGFflABY7t56WIrmP+cloaCQkLcjlm6vdhzcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform/binding-freebsd-x64@0.102.0': - resolution: {integrity: sha512-eujvuYf0x7BFgKyFecbXUa2JBEXT4Ss6vmyrrhVdN07jaeJRiobaKAmeNXBkanoWL2KQLELJbSBgs1ykWYTkzg==} + '@oxc-parser/binding-freebsd-x64@0.110.0': + resolution: {integrity: sha512-VJ7Hwf4dg7uf8b/DrLEhE6lgnNTfBZbTqXQBG3n0oCBoreE1c5aWf1la+o7fJjjTpACRts/vAZ2ngFNNqEFpJw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-linux-arm-gnueabihf@0.102.0': - resolution: {integrity: sha512-2x7Ro356PHBVp1SS/dOsHBSnrfs5MlPYwhdKg35t6qixt2bv1kzEH0tDmn4TNEbdjOirmvOXoCTEWUvh8A4f4Q==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.110.0': + resolution: {integrity: sha512-w3OZ0pLKktM7k4qEbVj3dHnCvSMFnWugYxHfhpwncYUOxwDNL3mw++EOIrw997QYiEuJ+H6Od8K6mbj1p6Ae8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.102.0': - resolution: {integrity: sha512-Rz/RbPvT4QwcHKIQ/cOt6Lwl4c7AhK2b6whZfyL6oJ7Uz8UiVl1BCwk8thedrB5h+FEykmaPHoriW1hmBev60g==} + '@oxc-parser/binding-linux-arm-musleabihf@0.110.0': + resolution: {integrity: sha512-BIaoW4W6QKb8Q6p3DErDtsAuDRAnr0W+gtwo7fQQkbAJpoPII0ZJXZn+tcQGCyNGKWSsilRNWHyd/XZfXXXpzw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.110.0': + resolution: {integrity: sha512-3EQDJze28t0HdxXjMKBU6utNscXJePg2YV0Kd/ZnHx24VcIyfkNH6NKzBh0NeaWHovDTkpzYHPtF2tOevtbbfw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-arm64-musl@0.102.0': - resolution: {integrity: sha512-I08iWABrN7zakn3wuNIBWY3hALQGsDLPQbZT1mXws7tyiQqJNGe49uS0/O50QhX3KXj+mbRGsmjVXLXGJE1CVQ==} + '@oxc-parser/binding-linux-arm64-musl@0.110.0': + resolution: {integrity: sha512-5xwm1hPrGGvjCVtTWNGJ39MmQGnyipoIDShneGBgSrnDh0XX+COAO7AZKajgNipqgNq5rGEItpzFkMtSDyx0bQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-riscv64-gnu@0.102.0': - resolution: {integrity: sha512-9+SYW1ARAF6Oj/82ayoqKRe8SI7O1qvzs3Y0kijvhIqAaaZWcFRjI5DToyWRAbnzTtHlMcSllZLXNYdmxBjFxA==} + '@oxc-parser/binding-linux-ppc64-gnu@0.110.0': + resolution: {integrity: sha512-I8Xop7z+enuvW1xe0AcRQ9XqFNkUYgeXusyGjCyW6TstRb62P90h+nL1AoGaUMy0E0518DJam5vRYVRgXaAzYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-gnu@0.110.0': + resolution: {integrity: sha512-XPM0jpght/AuHnweNaIo0twpId6rWFs8NrTkMijxcsRQMzNBeSQQgYm9ErrutmKQS6gb8XNAEIkYXHgPmhdDPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-transform/binding-linux-s390x-gnu@0.102.0': - resolution: {integrity: sha512-HV9nTyQw0TTKYPu+gBhaJBioomiM9O4LcGXi+s5IylCGG6imP0/U13q/9xJnP267QFmiWWqnnSFcv0QAWCyh8A==} + '@oxc-parser/binding-linux-riscv64-musl@0.110.0': + resolution: {integrity: sha512-ylJIuJyMzAqR191QeCwZLEkyo4Sx817TNILjNhT0W1EDQusGicOYKSsGXM/2DHCNYGcidV+MQ8pUVzNeVmuM6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-s390x-gnu@0.110.0': + resolution: {integrity: sha512-DL6oR0PfYor9tBX9xlAxMUVwfm6+sKTL4H+KiQ6JKP3xkJTwBIdDCgeN2AjMht1D3N40uUwVq3v8/2fqnZRgLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxc-transform/binding-linux-x64-gnu@0.102.0': - resolution: {integrity: sha512-4wcZ08mmdFk8OjsnglyeYGu5PW3TDh87AmcMOi7tZJ3cpJjfzwDfY27KTEUx6G880OpjAiF36OFSPwdKTKgp2g==} + '@oxc-parser/binding-linux-x64-gnu@0.110.0': + resolution: {integrity: sha512-+e6ws5JLpFehdK+wh6q8icx1iM3Ao+9dtItVWFcRiXxSvGcIlS9viWcMvXKrmcsyVDUf81dnvuMSBigNslxhIQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-transform/binding-linux-x64-musl@0.102.0': - resolution: {integrity: sha512-rUHZSZBw0FUnUgOhL/Rs7xJz9KjH2eFur/0df6Lwq/isgJc/ggtBtFoZ+y4Fb8ON87a3Y2gS2LT7SEctX0XdPQ==} + '@oxc-parser/binding-linux-x64-musl@0.110.0': + resolution: {integrity: sha512-6DiYhVdXKOzB01+j/tyrB6/d2o6b4XYFQvcbBRNbVHIimS6nl992y3V3mGG3NaA+uCZAzhT3M3btTdKAxE4A3A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-transform/binding-openharmony-arm64@0.102.0': - resolution: {integrity: sha512-98y4tccTQ/pA+r2KA/MEJIZ7J8TNTJ4aCT4rX8kWK4pGOko2YsfY3Ru9DVHlLDwmVj7wP8Z4JNxdBrAXRvK+0g==} + '@oxc-parser/binding-openharmony-arm64@0.110.0': + resolution: {integrity: sha512-U9KEK7tXdHrXl2eZpoHYGWj31ZSvdGiaXwjkJzeRN0elt89PXi+VcryRh6BAFbEz1EQpTteyMDwDXMgJVWM85A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-transform/binding-wasm32-wasi@0.102.0': - resolution: {integrity: sha512-M6myOXxHty3L2TJEB1NlJPtQm0c0LmivAxcGv/+DSDadOoB/UnOUbjM8W2Utlh5IYS9ARSOjqHtBiPYLWJ15XA==} + '@oxc-parser/binding-wasm32-wasi@0.110.0': + resolution: {integrity: sha512-cK2j/GbXGxP7k4qDM0OGjkbPrIOj8n9+U/27joH/M19z+jrQ5u1lvlvbAK/Aw2LnqE0waADnnuAc0MFab+Ea8w==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-transform/binding-win32-arm64-msvc@0.102.0': - resolution: {integrity: sha512-jzaA1lLiMXiJs4r7E0BHRxTPiwAkpoCfSNRr8npK/SqL4UQE4cSz3WDTX5wJWRrN2U+xqsDGefeYzH4reI8sgw==} + '@oxc-parser/binding-win32-arm64-msvc@0.110.0': + resolution: {integrity: sha512-ZW393ysGT5oZeGJRyw2JAz4tIfyTjVCSxuZoh8e+7J7e0QPDH/SAmyxJXb/aMxarIVa3OcYZ5p/Q6eooHZ0i1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.102.0': - resolution: {integrity: sha512-eYOm6mch+1cP9qlNkMdorfBFY8aEOxY/isqrreLmEWqF/hyXA0SbLKDigTbvh3JFKny/gXlHoCKckqfua4cwtg==} + '@oxc-parser/binding-win32-ia32-msvc@0.110.0': + resolution: {integrity: sha512-NM50LT1PEnlMlw+z/TFVkWaDOF/s5DRHbU3XhEESNhDDT9qYA8N9B1V/FYxVr1ngu28JGK2HtkjpWKlKoF4E2Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.110.0': + resolution: {integrity: sha512-w1SzoXNaY59tbTz8/YhImByuj7kXP5EfPtv4+PPwPrvLrOWt8BOpK0wN8ysXqyWCdHv9vS1UBRrNd/aSp4Dy8A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@parcel/watcher-android-arm64@2.5.1': - resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + '@oxc-project/types@0.110.0': + resolution: {integrity: sha512-6Ct21OIlrEnFEJk5LT4e63pk3btsI6/TusD/GStLi7wYlGJNOl1GI9qvXAnRAxQU9zqA2Oz+UwhfTOU2rPZVow==} + + '@oxc-transform/binding-android-arm-eabi@0.110.0': + resolution: {integrity: sha512-sE9dxvqqAax1YYJ3t7j+h5ZSI9jl6dYuDfngl6ieZUrIy5P89/8JKVgAzgp8o3wQSo7ndpJvYsi1K4ZqrmbP7w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-transform/binding-android-arm64@0.110.0': + resolution: {integrity: sha512-nqtbP4aMCtsCZ6qpHlHaQoWVHSBtlKzwaAgwEOvR+9DWqHjk31BHvpGiDXlMeed6CVNpl3lCbWgygb3RcSjcfw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-transform/binding-darwin-arm64@0.110.0': + resolution: {integrity: sha512-oeSeHnL4Z4cMXtc8V0/rwoVn0dgwlS9q0j6LcHn9dIhtFEdp3W0iSBF8YmMQA+E7sILeLDjsHmHE4Kp0sOScXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-transform/binding-darwin-x64@0.110.0': + resolution: {integrity: sha512-nL9K5x7OuZydobAGPylsEW9d4APs2qEkIBLMgQPA+kY8dtVD3IR87QsTbs4l4DBQYyun/+ay6qVCDlxqxdX2Jg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-transform/binding-freebsd-x64@0.110.0': + resolution: {integrity: sha512-GS29zXXirDQhZEUq8xKJ1azAWMuUy3Ih3W5Bc5ddk12LRthO5wRLFcKIyeHpAXCoXymQ+LmxbMtbPf84GPxouw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-transform/binding-linux-arm-gnueabihf@0.110.0': + resolution: {integrity: sha512-glzDHak8ISyZJemCUi7RCvzNSl+MQ1ly9RceT2qRufhUsvNZ4C/2QLJ1HJwd2N6E88bO4laYn+RofdRzNnGGEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-transform/binding-linux-arm-musleabihf@0.110.0': + resolution: {integrity: sha512-8JThvgJ2FRoTVfbp7e4wqeZqCZbtudM06SfZmNzND9kPNu/LVYygIR+72RWs+xm4bWkuYHg/islo/boNPtMT5Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-transform/binding-linux-arm64-gnu@0.110.0': + resolution: {integrity: sha512-IRh21Ub/g4bkHoErZ0AUWMlWfoZaS0A6EaOVtbcY70RSYIMlrsbjiFwJCzM+b/1DD1rXbH5tsGcH7GweTbfRqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-arm64-musl@0.110.0': + resolution: {integrity: sha512-e5JN94/oy+wevk76q+LMr+2klTTcO60uXa+Wkq558Ms7mdF2TvkKFI++d/JeiuIwJLTi/BxQ4qdT5FWcsHM/ug==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-ppc64-gnu@0.110.0': + resolution: {integrity: sha512-Y3/Tnnz1GvDpmv8FXBIKtdZPsdZklOEPdrL6NHrN5i2u54BOkybFaDSptgWF53wOrJlTrcmAVSE6fRKK9XCM2Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-transform/binding-linux-riscv64-gnu@0.110.0': + resolution: {integrity: sha512-Y0E35iA9/v9jlkNcP6tMJ+ZFOS0rLsWDqG6rU9z+X2R3fBFJBO9UARIK6ngx8upxk81y1TFR2CmBFhupfYdH6Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-transform/binding-linux-riscv64-musl@0.110.0': + resolution: {integrity: sha512-JOUSYFfHjBUs7xp2FHmZHb8eTYD/oEu0NklS6JgUauqnoXZHiTLPLVW2o2uVCqldnabYHcomuwI2iqVFYJNhTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-transform/binding-linux-s390x-gnu@0.110.0': + resolution: {integrity: sha512-7blgoXF9D3Ngzb7eun23pNrHJpoV/TtE6LObwlZ3Nmb4oZ6Z+yMvBVaoW68NarbmvNGfZ95zrOjgm6cVETLYBA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxc-transform/binding-linux-x64-gnu@0.110.0': + resolution: {integrity: sha512-YQ2joGWCVDZVEU2cD/r/w49hVjDm/Qu1BvC/7zs8LvprzdLS/HyMXGF2oA0puw0b+AqgYaz3bhwKB2xexHyITQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-linux-x64-musl@0.110.0': + resolution: {integrity: sha512-fkjr5qE632ULmNgvFXWDR/8668WxERz3tU7TQFp6JebPBneColitjSkdx6VKNVXEoMmQnOvBIGeP5tUNT384oA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-openharmony-arm64@0.110.0': + resolution: {integrity: sha512-HWH9Zj+lMrdSTqFRCZsvDWMz7OnMjbdGsm3xURXWfRZpuaz0bVvyuZNDQXc4FyyhRDsemICaJbU1bgeIpUJDGw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-transform/binding-wasm32-wasi@0.110.0': + resolution: {integrity: sha512-ejdxHmYfIcHDPhZUe3WklViLt9mDEJE5BzcW7+R1vc5i/5JFA8D0l7NUSsHBJ7FB8Bu9gF+5iMDm6cXGAgaghw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-transform/binding-win32-arm64-msvc@0.110.0': + resolution: {integrity: sha512-9VTwpXCZs7xkV+mKhQ62dVk7KLnLXtEUxNS2T4nLz3iMl1IJbA4h5oltK0JoobtiUAnbkV53QmMVGW8+Nh3bDQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-transform/binding-win32-ia32-msvc@0.110.0': + resolution: {integrity: sha512-5y0fzuNON7/F2hh2P94vANFaRPJ/3DI1hVl5rseCT8VUVqOGIjWaza0YS/D1g6t1WwycW2LWDMi2raOKoWU5GQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-transform/binding-win32-x64-msvc@0.110.0': + resolution: {integrity: sha512-QROrowwlrApI1fEScMknGWKM6GTM/Z2xwMnDqvSaEmzNazBsDUlE08Jasw610hFEsYAVU2K5sp/YaCa9ORdP4A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.1': - resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.1': - resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.1': - resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.1': - resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-musl@2.5.1': - resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.5.1': - resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.5.1': - resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-wasm@2.5.1': - resolution: {integrity: sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==} + '@parcel/watcher-wasm@2.5.6': + resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==} engines: {node: '>= 10.0.0'} bundledDependencies: - napi-wasm - '@parcel/watcher-win32-arm64@2.5.1': - resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.1': - resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.1': - resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.1': - resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} '@pinia/nuxt@0.11.2': @@ -1272,20 +1576,20 @@ packages: '@rolldown/pluginutils@1.0.0-beta.53': resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} - '@rolldown/pluginutils@1.0.0-beta.58': - resolution: {integrity: sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w==} + '@rolldown/pluginutils@1.0.0-rc.1': + resolution: {integrity: sha512-UTBjtTxVOhodhzFVp/ayITaTETRHPUPYZPXQe0WU0wOgxghMojXxYjOiPOauKIYNWJAWS2fd7gJgGQK8GU8vDA==} - '@rollup/plugin-alias@5.1.1': - resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} - engines: {node: '>=14.0.0'} + '@rollup/plugin-alias@6.0.0': + resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} + engines: {node: '>=20.19.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + rollup: '>=4.0.0' peerDependenciesMeta: rollup: optional: true - '@rollup/plugin-commonjs@28.0.9': - resolution: {integrity: sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==} + '@rollup/plugin-commonjs@29.0.0': + resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -1347,113 +1651,128 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.54.0': - resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} + '@rollup/rollup-android-arm-eabi@4.56.0': + resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.54.0': - resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} + '@rollup/rollup-android-arm64@4.56.0': + resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.54.0': - resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} + '@rollup/rollup-darwin-arm64@4.56.0': + resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.54.0': - resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} + '@rollup/rollup-darwin-x64@4.56.0': + resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.54.0': - resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} + '@rollup/rollup-freebsd-arm64@4.56.0': + resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.54.0': - resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} + '@rollup/rollup-freebsd-x64@4.56.0': + resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': - resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.56.0': + resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.54.0': - resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} + '@rollup/rollup-linux-arm-musleabihf@4.56.0': + resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.54.0': - resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} + '@rollup/rollup-linux-arm64-gnu@4.56.0': + resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.54.0': - resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} + '@rollup/rollup-linux-arm64-musl@4.56.0': + resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.54.0': - resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} + '@rollup/rollup-linux-loong64-gnu@4.56.0': + resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.54.0': - resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} + '@rollup/rollup-linux-loong64-musl@4.56.0': + resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.56.0': + resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.54.0': - resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} + '@rollup/rollup-linux-ppc64-musl@4.56.0': + resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.56.0': + resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.54.0': - resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} + '@rollup/rollup-linux-riscv64-musl@4.56.0': + resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.54.0': - resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} + '@rollup/rollup-linux-s390x-gnu@4.56.0': + resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.54.0': - resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} + '@rollup/rollup-linux-x64-gnu@4.56.0': + resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.54.0': - resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} + '@rollup/rollup-linux-x64-musl@4.56.0': + resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.54.0': - resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} + '@rollup/rollup-openbsd-x64@4.56.0': + resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.56.0': + resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.54.0': - resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} + '@rollup/rollup-win32-arm64-msvc@4.56.0': + resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.54.0': - resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} + '@rollup/rollup-win32-ia32-msvc@4.56.0': + resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.54.0': - resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} + '@rollup/rollup-win32-x64-gnu@4.56.0': + resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.54.0': - resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} + '@rollup/rollup-win32-x64-msvc@4.56.0': + resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==} cpu: [x64] os: [win32] @@ -1475,8 +1794,8 @@ packages: '@speed-highlight/core@1.2.14': resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} - '@stylistic/eslint-plugin@5.6.1': - resolution: {integrity: sha512-JCs+MqoXfXrRPGbGmho/zGS/jMcn3ieKl/A8YImqib76C8kjgZwq5uUFzc30lJkMvcchuRn6/v8IApLxli3Jyw==} + '@stylistic/eslint-plugin@5.7.1': + resolution: {integrity: sha512-zjTUwIsEfT+k9BmXwq1QEFYsb4afBlsI1AXFyWQBgggMzwBFOuu92pGrE5OFx90IOjNl+lUbQoTG7f8S0PkOdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' @@ -1484,13 +1803,6 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/better-sqlite3@7.6.13': - resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} - - '@types/chokidar@2.1.7': - resolution: {integrity: sha512-A7/MFHf6KF7peCzjEC1BBTF8jpmZTokb3vr/A0NxRGfwRLK3Ws+Hq6ugVn6cJIMfM6wkCak/aplWrxbTcu8oig==} - deprecated: This is a stub types definition. chokidar provides its own type definitions, so you do not need this installed. - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1500,8 +1812,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@25.0.3': - resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} + '@types/node@25.0.10': + resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1516,6 +1828,9 @@ packages: '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@typescript-eslint/eslint-plugin@6.21.0': resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1527,11 +1842,11 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.51.0': - resolution: {integrity: sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==} + '@typescript-eslint/eslint-plugin@8.53.1': + resolution: {integrity: sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.51.0 + '@typescript-eslint/parser': ^8.53.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -1545,15 +1860,15 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.51.0': - resolution: {integrity: sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==} + '@typescript-eslint/parser@8.53.1': + resolution: {integrity: sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.51.0': - resolution: {integrity: sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==} + '@typescript-eslint/project-service@8.53.1': + resolution: {integrity: sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1562,12 +1877,12 @@ packages: resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@8.51.0': - resolution: {integrity: sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==} + '@typescript-eslint/scope-manager@8.53.1': + resolution: {integrity: sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.51.0': - resolution: {integrity: sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==} + '@typescript-eslint/tsconfig-utils@8.53.1': + resolution: {integrity: sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1582,8 +1897,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.51.0': - resolution: {integrity: sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q==} + '@typescript-eslint/type-utils@8.53.1': + resolution: {integrity: sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1593,8 +1908,8 @@ packages: resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@8.51.0': - resolution: {integrity: sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==} + '@typescript-eslint/types@8.53.1': + resolution: {integrity: sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@6.21.0': @@ -1606,8 +1921,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.51.0': - resolution: {integrity: sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==} + '@typescript-eslint/typescript-estree@8.53.1': + resolution: {integrity: sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1618,8 +1933,8 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@8.51.0': - resolution: {integrity: sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==} + '@typescript-eslint/utils@8.53.1': + resolution: {integrity: sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1629,12 +1944,12 @@ packages: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@8.51.0': - resolution: {integrity: sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==} + '@typescript-eslint/visitor-keys@8.53.1': + resolution: {integrity: sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unhead/vue@2.1.1': - resolution: {integrity: sha512-WYa8ORhfv7lWDSoNpkMKhbW1Dbsux/3HqMcVkZS3xZ2/c/VrcChLj+IMadpCd1WNR0srITfRJhBYZ1i9hON5Qw==} + '@unhead/vue@2.1.2': + resolution: {integrity: sha512-w5yxH/fkkLWAFAOnMSIbvAikNHYn6pgC7zGF/BasXf+K3CO1cYIPFehYAk5jpcsbiNPMc3goyyw1prGLoyD14g==} peerDependencies: vue: '>=3.5.18' @@ -1733,9 +2048,9 @@ packages: cpu: [x64] os: [win32] - '@vercel/nft@0.30.4': - resolution: {integrity: sha512-wE6eAGSXScra60N2l6jWvNtVK0m+sh873CpfZW4KI2v8EHuUQp+mSEi4T+IcdPCSEDgCdAS/7bizbhQlkjzrSA==} - engines: {node: '>=18'} + '@vercel/nft@1.3.0': + resolution: {integrity: sha512-i4EYGkCsIjzu4vorDUbqglZc5eFtQI2syHb++9ZUDm6TU4edVywGpVnYDein35x9sevONOn9/UabfQXuNXtuzQ==} + engines: {node: '>=20'} hasBin: true '@vitejs/plugin-vue-jsx@5.1.3': @@ -1758,8 +2073,8 @@ packages: '@volar/source-map@2.4.27': resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} - '@vue-macros/common@3.1.1': - resolution: {integrity: sha512-afW2DMjgCBVs33mWRlz7YsGHzoEEupnl0DK5ZTKsgziAlLh5syc5m+GM7eqeYrgiQpwMaVxa1fk73caCvPxyAw==} + '@vue-macros/common@3.1.2': + resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} engines: {node: '>=20.19.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 @@ -1783,17 +2098,17 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.26': - resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==} + '@vue/compiler-core@3.5.27': + resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==} - '@vue/compiler-dom@3.5.26': - resolution: {integrity: sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==} + '@vue/compiler-dom@3.5.27': + resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==} - '@vue/compiler-sfc@3.5.26': - resolution: {integrity: sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==} + '@vue/compiler-sfc@3.5.27': + resolution: {integrity: sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==} - '@vue/compiler-ssr@3.5.26': - resolution: {integrity: sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==} + '@vue/compiler-ssr@3.5.27': + resolution: {integrity: sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==} '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} @@ -1818,25 +2133,25 @@ packages: '@vue/devtools-shared@8.0.5': resolution: {integrity: sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==} - '@vue/language-core@3.2.1': - resolution: {integrity: sha512-g6oSenpnGMtpxHGAwKuu7HJJkNZpemK/zg3vZzZbJ6cnnXq1ssxuNrXSsAHYM3NvH8p4IkTw+NLmuxyeYz4r8A==} + '@vue/language-core@3.2.3': + resolution: {integrity: sha512-VpN/GnYDzGLh44AI6i1OB/WsLXo6vwnl0EWHBelGc4TyC0yEq6azwNaed/+Tgr8anFlSdWYnMEkyHJDPe7ii7A==} - '@vue/reactivity@3.5.26': - resolution: {integrity: sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==} + '@vue/reactivity@3.5.27': + resolution: {integrity: sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==} - '@vue/runtime-core@3.5.26': - resolution: {integrity: sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==} + '@vue/runtime-core@3.5.27': + resolution: {integrity: sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==} - '@vue/runtime-dom@3.5.26': - resolution: {integrity: sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==} + '@vue/runtime-dom@3.5.27': + resolution: {integrity: sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==} - '@vue/server-renderer@3.5.26': - resolution: {integrity: sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==} + '@vue/server-renderer@3.5.27': + resolution: {integrity: sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==} peerDependencies: - vue: 3.5.26 + vue: 3.5.27 - '@vue/shared@3.5.26': - resolution: {integrity: sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==} + '@vue/shared@3.5.27': + resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==} '@yarnpkg/lockfile@1.1.0': resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} @@ -2010,14 +2325,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.11: - resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} + baseline-browser-mapping@2.9.18: + resolution: {integrity: sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==} hasBin: true - better-sqlite3@12.5.0: - resolution: {integrity: sha512-WwCZ/5Diz7rsF29o27o0Gcc1Du+l7Zsv7SYtVPG0X3G/uUI1LqdxrQI7c9Hs2FWpqXXERjW9hp6g3/tH7DlVKg==} - engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -2028,9 +2339,6 @@ packages: birpc@2.9.0: resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -2049,9 +2357,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-builder@0.2.0: - resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} - buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} @@ -2059,9 +2364,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -2125,8 +2427,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001762: - resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==} + caniuse-lite@1.0.30001766: + resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -2147,9 +2449,6 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -2165,6 +2464,9 @@ packages: citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + citty@0.2.0: + resolution: {integrity: sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -2217,6 +2519,10 @@ packages: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} + comment-parser@1.4.5: + resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==} + engines: {node: '>= 12.0.0'} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -2268,8 +2574,8 @@ packages: copy-paste@2.2.0: resolution: {integrity: sha512-jqSL4r9DSeiIvJZStLzY/sMLt9ToTM7RsK237lYOTG+KcbQJHGala3R1TUpa8h1p9adswVgIdV4qGbseVhL4lg==} - core-js-compat@3.47.0: - resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} + core-js-compat@3.48.0: + resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2287,6 +2593,9 @@ packages: resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==} engines: {node: '>=18.0'} + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2294,8 +2603,8 @@ packages: crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} - css-declaration-sorter@7.3.0: - resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==} + css-declaration-sorter@7.3.1: + resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.0.9 @@ -2345,6 +2654,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -2397,17 +2710,9 @@ packages: supports-color: optional: true - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2464,23 +2769,22 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true + detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.6.1: - resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==} + devalue@5.6.2: + resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - diff@8.0.2: - resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + diff@8.0.3: + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} engines: {node: '>=0.3.1'} dir-glob@3.0.1: @@ -2519,6 +2823,102 @@ packages: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} + drizzle-kit@0.31.8: + resolution: {integrity: sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==} + hasBin: true + + drizzle-orm@0.45.1: + resolution: {integrity: sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1.13' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@upstash/redis': '>=1.34.7' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + gel: '>=2' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@upstash/redis': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + gel: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2532,8 +2932,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.267: - resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + electron-to-chromium@1.5.278: + resolution: {integrity: sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2549,15 +2949,12 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@7.0.0: - resolution: {integrity: sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} error-ex@1.3.4: @@ -2581,8 +2978,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -2600,6 +2997,16 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} @@ -2652,6 +3059,9 @@ packages: eslint-flat-config-utils@2.1.4: resolution: {integrity: sha512-bEnmU5gqzS+4O+id9vrbP43vByjF+8KOs+QuuV4OlqAuXmnRW2zfI/Rza1fQvdihQ5h4DUo0NqFAiViD4mSrzQ==} + eslint-flat-config-utils@3.0.0: + resolution: {integrity: sha512-bzTam/pSnPANR0GUz4g7lo4fyzlQZwuz/h8ytsSS4w59N/JlXH/l7jmyNVBLxPz3B9/9ntz5ZLevGpazyDXJQQ==} + eslint-import-context@0.1.9: resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -2725,6 +3135,12 @@ packages: typescript: optional: true + eslint-plugin-import-lite@0.5.0: + resolution: {integrity: sha512-7uBvxuQj+VlYmZSYSHcm33QgmZnvMLP2nQiWaLtjhJ5x1zKcskOqjolL+dJC13XY+ktQqBgidAnnQMELfRaXQg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=9.0.0' + eslint-plugin-import-x@4.16.1: resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2754,9 +3170,9 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-jsdoc@61.5.0: - resolution: {integrity: sha512-PR81eOGq4S7diVnV9xzFSBE4CDENRQGP0Lckkek8AdHtbj+6Bm0cItwlFnxsLFriJHspiE3mpu8U20eODyToIg==} - engines: {node: '>=20.11.0'} + eslint-plugin-jsdoc@62.4.1: + resolution: {integrity: sha512-HgX2iN4j104D/mCUqRbhtzSZbph+KO9jfMHiIJjJ19Q+IwLQ5Na2IqvOJYq4S+4kgvEk1w6KYF4vVus6H2wcHg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -2772,8 +3188,8 @@ packages: peerDependencies: eslint: '>=5.16.0' - eslint-plugin-prettier@5.5.4: - resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + eslint-plugin-prettier@5.5.5: + resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -2798,6 +3214,12 @@ packages: peerDependencies: eslint: '>=8.44.0' + eslint-plugin-regexp@3.0.0: + resolution: {integrity: sha512-iW7hgAV8NOG6E2dz+VeKpq67YLQ9jaajOKYpoOSic2/q8y9BMdXBKkSR9gcMtbqEhNQzdW41E3wWzvhp8ExYwQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: '>=9.38.0' + eslint-plugin-unicorn@44.0.2: resolution: {integrity: sha512-GLIDX1wmeEqpGaKcnMcqRvMVsoabeF0Ton0EX4Th5u6Kmf7RM9WBl705AXFEsns56ESkEs0uyelLuUTvz9Tr0w==} engines: {node: '>=14.18'} @@ -2816,8 +3238,8 @@ packages: peerDependencies: eslint: '>=9.38.0' - eslint-plugin-vue@10.6.2: - resolution: {integrity: sha512-nA5yUs/B1KmKzvC42fyD0+l9Yd+LtEpVhWRbXuDj0e+ZURcTtyRbMDWUeJmTAh2wC6jC83raS63anNM2YT3NPw==} + eslint-plugin-vue@10.7.0: + resolution: {integrity: sha512-r2XFCK4qlo1sxEoAMIoTTX0PZAdla0JJDt1fmYiworZUX67WeEGqm+JbyAg3M+pGiJ5U6Mp5WQbontXWtIW7TA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -2887,6 +3309,10 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.0: + resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint@9.39.2: resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2901,12 +3327,16 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.1.0: + resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -2946,10 +3376,6 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -2972,8 +3398,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-npm-meta@0.4.7: - resolution: {integrity: sha512-aZU3i3eRcSb2NCq8i6N6IlyiTyF6vqAqzBGl2NBF6ngNx/GIqfYbkLDIKZ4z4P0o/RmtsFnVqHwdrSm13o4tnQ==} + fast-npm-meta@0.4.8: + resolution: {integrity: sha512-ybZVlDZ2PkO79dosM+6CLZfKWRH8MF0PiWlw8M4mVWJl8IEJrPfxYc7Tsu830Dwj/R96LKXfePGTSzKWbPJ08w==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2987,6 +3413,10 @@ packages: picomatch: optional: true + 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'} @@ -3032,6 +3462,10 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} @@ -3043,9 +3477,6 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3120,9 +3551,6 @@ packages: git-url-parse@16.1.0: resolution: {integrity: sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==} - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3135,6 +3563,10 @@ packages: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true + glob@13.0.0: + resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} + engines: {node: 20 || >=22} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3155,6 +3587,10 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} + globals@17.1.0: + resolution: {integrity: sha512-8HoIcWI5fCvG5NADj4bDav+er9B9JMj2vyL2pI8D0eismKyUvPLTSs+Ln3wqhwcp306i73iyVnEKx3F6T47TGw==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -3163,8 +3599,8 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@15.0.0: - resolution: {integrity: sha512-oB4vkQGqlMl682wL1IlWd02tXCbquGWM4voPEI85QmNKCaw8zGTm1f1rubFgkg3Eli2PtKlFgrnmUqasbQWlkw==} + globby@16.1.0: + resolution: {integrity: sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==} engines: {node: '>=20'} globrex@0.1.2: @@ -3184,8 +3620,8 @@ packages: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - h3@1.15.4: - resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + h3@1.15.5: + resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} @@ -3217,6 +3653,9 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hookable@6.0.1: + resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -3304,9 +3743,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@4.1.1: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3315,8 +3751,8 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ioredis@5.8.2: - resolution: {integrity: sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==} + ioredis@5.9.2: + resolution: {integrity: sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==} engines: {node: '>=12.22.0'} iron-webcrypto@1.2.1: @@ -3524,6 +3960,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + js-base64@3.7.8: + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3542,8 +3981,8 @@ packages: resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.10.0: - resolution: {integrity: sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==} + jsdoc-type-pratt-parser@7.1.0: + resolution: {integrity: sha512-SX7q7XyCwzM/MEDCYz0l8GgGbJAACGFII9+WfNYr5SLEKukHWRy2Jk3iWRe7P+lpYJNs7oQ+OSei4JtKGUjd7A==} engines: {node: '>=20.0.0'} jsesc@3.0.2: @@ -3646,6 +4085,11 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libsql@0.5.22: + resolution: {integrity: sha512-NscWthMQt7fpU8lqd7LXMvT9pi+KhhmTHAJWUB/Lj6MWa0MKFv0F2V4C6WKKpjCVZl0VwcDz4nOI3CyaT1DDiA==} + cpu: [x64, arm64, wasm32, arm] + os: [darwin, linux, win32] + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -3696,12 +4140,16 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3763,11 +4211,6 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - mime@4.1.0: resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} engines: {node: '>=16'} @@ -3777,10 +4220,6 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - mimic-response@3.1.0: - 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'} @@ -3818,9 +4257,6 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} @@ -3853,9 +4289,6 @@ packages: nanotar@0.2.0: resolution: {integrity: sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==} - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -3868,8 +4301,8 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - nitropack@2.12.9: - resolution: {integrity: sha512-t6qqNBn2UDGMWogQuORjbL2UPevB8PvIPsPHmqvWpeGOlPr4P8Oc5oA8t3wFwGmaolM2M/s2SwT23nx9yARmOg==} + nitropack@2.13.1: + resolution: {integrity: sha512-2dDj89C4wC2uzG7guF3CnyG+zwkZosPEp7FFBGHB3AJo11AywOolWhyQJFHDzve8COvGxJaqscye9wW2IrUsNw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3878,13 +4311,14 @@ packages: xml2js: optional: true - node-abi@3.85.0: - resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==} - engines: {node: '>=10'} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + 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.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -3897,6 +4331,10 @@ 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.3: resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} engines: {node: '>= 6.13.0'} @@ -3934,8 +4372,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nuxt@4.2.2: - resolution: {integrity: sha512-n6oYFikgLEb70J4+K19jAzfx4exZcRSRX7yZn09P5qlf2Z59VNOBqNmaZO5ObzvyGUZ308SZfL629/Q2v2FVjw==} + nuxt@4.3.0: + resolution: {integrity: sha512-99Iw3E3L5/2QtJyV4errZ0axkX/S9IAFK0AHm0pmRHkCu37OFn8mz2P4/CYTt6B/TG3mcKbXAVaeuF2FsAc1cA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3947,9 +4385,9 @@ packages: '@types/node': optional: true - nypm@0.6.2: - resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} - engines: {node: ^14.16.0 || >=16.10.0} + nypm@0.6.4: + resolution: {integrity: sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw==} + engines: {node: '>=18'} hasBin: true object-assign@4.1.1: @@ -4034,20 +4472,20 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-minify@0.102.0: - resolution: {integrity: sha512-FphAHDyTCNepQbiQTSyWFMbNc9zdUmj1WBsoLwvZhWm7rEe/IeIKYKRhy75lWOjwFsi5/i4Qucq43hgs3n2Exw==} + oxc-minify@0.110.0: + resolution: {integrity: sha512-KWGTzPo83QmGrXC4ml83PM9HDwUPtZFfasiclUvTV4i3/0j7xRRqINVkrL77CbQnoWura3CMxkRofjQKVDuhBw==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-parser@0.102.0: - resolution: {integrity: sha512-xMiyHgr2FZsphQ12ZCsXRvSYzmKXCm1ejmyG4GDZIiKOmhyt5iKtWq0klOfFsEQ6jcgbwrUdwcCVYzr1F+h5og==} + oxc-parser@0.110.0: + resolution: {integrity: sha512-GijUR3K1Ln/QwMyYXRsBtOyzqGaCs9ce5pOug1UtrMg8dSiE7VuuRuIcyYD4nyJbasat3K0YljiKt/PSFPdSBA==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-transform@0.102.0: - resolution: {integrity: sha512-MR5ohiBS6/kvxRpmUZ3LIDTTJBEC4xLAEZXfYr7vrA0eP7WHewQaNQPFDgT4Bee89TdmVQ5ZKrifGwxLjSyHHw==} + oxc-transform@0.110.0: + resolution: {integrity: sha512-/fymQNzzUoKZweH0nC5yvbI2eR0yWYusT9TEKDYVgOgYrf9Qmdez9lUFyvxKR9ycx+PTHi/reIOzqf3wkShQsw==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-walker@0.6.0: - resolution: {integrity: sha512-BA3hlxq5+Sgzp7TCQF52XDXCK5mwoIZuIuxv/+JuuTzOs2RXkLqWZgZ69d8pJDDjnL7wiREZTWHBzFp/UWH88Q==} + oxc-walker@0.7.0: + resolution: {integrity: sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==} peerDependencies: oxc-parser: '>=0.98.0' @@ -4145,6 +4583,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -4152,10 +4594,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -4165,8 +4603,8 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - perfect-debounce@2.0.0: - resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4433,11 +4871,6 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - hasBin: true - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4446,8 +4879,8 @@ packages: resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier@3.7.4: - resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -4462,6 +4895,9 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + promise-limit@2.7.0: + resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -4469,9 +4905,6 @@ packages: protocols@2.0.2: resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4495,10 +4928,6 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -4513,10 +4942,6 @@ packages: readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - readable-stream@4.7.0: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4629,11 +5054,14 @@ packages: rollup: optional: true - rollup@4.54.0: - resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} + rollup@4.56.0: + resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rou3@0.7.12: + resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} + run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -4668,122 +5096,123 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.97.1: - resolution: {integrity: sha512-0au5gUNibfob7W/g+ycBx74O22CL8vwHiZdEDY6J0uzMkHPiSJk//h0iRf5AUnMArFHJjFd3urIiQIaoRKYa1Q==} + sass-embedded-all-unknown@1.97.3: + resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.97.1: - resolution: {integrity: sha512-h62DmOiS2Jn87s8+8GhJcMerJnTKa1IsIa9iIKjLiqbAvBDKCGUs027RugZkM+Zx7I+vhPq86PUXBYZ9EkRxdw==} + sass-embedded-android-arm64@1.97.3: + resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.97.1: - resolution: {integrity: sha512-B5dlv4utJ+yC8ZpBeWTHwSZPVKRlqA8pcaD0FAzeNm/DelIFgQUQtt0UwgYoAI6wDIiie5uSVpMK9l2DaCbiBQ==} + sass-embedded-android-arm@1.97.3: + resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.97.1: - resolution: {integrity: sha512-tGup88vgaXPnUHEgDMujrt5rfYadvkiVjRb/45FJTx2hQFoGVbmUXz5XqUFjIIbEjQ3kAJqp86A2jy11s43UiQ==} + sass-embedded-android-riscv64@1.97.3: + resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.97.1: - resolution: {integrity: sha512-CAzKjjzu90LZduye2O9+UGX1oScMyF5/RVOa5CxACKALeIS+3XL3LVdV47kwKPoBv5B1aFUvGLscY0CR7jBAbg==} + sass-embedded-android-x64@1.97.3: + resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.97.1: - resolution: {integrity: sha512-tyDzspzh5PbqdAFGtVKUXuf0up6Lff3c1U8J7+4Y7jW6AWRBnq95vTzIIxfnNifGCTI2fW5e7GAZpYygKpNwcw==} + sass-embedded-darwin-arm64@1.97.3: + resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.97.1: - resolution: {integrity: sha512-FMrRuSPI2ICt2M2SYaLbiG4yxn86D6ae+XtrRdrrBMhWprAcB7Iyu67bgRzZkipMZNIKKeTR7EUvJHgZzi5ixQ==} + sass-embedded-darwin-x64@1.97.3: + resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.97.1: - resolution: {integrity: sha512-im80gfDWRivw9Su3r3YaZmJaCATcJgu3CsCSLodPk1b1R2+X/E12zEQayvrl05EGT9PDwTtuiqKgS4ND4xjwVg==} + sass-embedded-linux-arm64@1.97.3: + resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.97.1: - resolution: {integrity: sha512-48VxaTUApLyx1NXFdZhKqI/7FYLmz8Ju3Ki2V/p+mhn5raHgAiYeFgn8O1WGxTOh+hBb9y3FdSR5a8MNTbmKMQ==} + sass-embedded-linux-arm@1.97.3: + resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.97.1: - resolution: {integrity: sha512-kD35WSD9o0279Ptwid3Jnbovo1FYnuG2mayYk9z4ZI4mweXEK6vTu+tlvCE/MdF/zFKSj11qaxaH+uzXe2cO5A==} + sass-embedded-linux-musl-arm64@1.97.3: + resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.97.1: - resolution: {integrity: sha512-FUFs466t3PVViVOKY/60JgLLtl61Pf7OW+g5BeEfuqVcSvYUECVHeiYHtX1fT78PEVa0h9tHpM6XpWti+7WYFA==} + sass-embedded-linux-musl-arm@1.97.3: + resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.97.1: - resolution: {integrity: sha512-ZgpYps5YHuhA2+KiLkPukRbS5298QObgUhPll/gm5i0LOZleKCwrFELpVPcbhsSBuxqji2uaag5OL+n3JRBVVg==} + sass-embedded-linux-musl-riscv64@1.97.3: + resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.97.1: - resolution: {integrity: sha512-wcAigOyyvZ6o1zVypWV7QLZqpOEVnlBqJr9MbpnRIm74qFTSbAEmShoh8yMXBymzuVSmEbThxAwW01/TLf62tA==} + sass-embedded-linux-musl-x64@1.97.3: + resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.97.1: - resolution: {integrity: sha512-9j1qE1ZrLMuGb+LUmBzw93Z4TNfqlRkkxjPVZy6u5vIggeSfvGbte7eRoYBNWX6SFew/yBCL90KXIirWFSGrlQ==} + sass-embedded-linux-riscv64@1.97.3: + resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.97.1: - resolution: {integrity: sha512-7nrLFYMH/UgvEgXR5JxQJ6y9N4IJmnFnYoDxN0nw0jUp+CQWQL4EJ4RqAKTGelneueRbccvt2sEyPK+X0KJ9Jg==} + sass-embedded-linux-x64@1.97.3: + resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.97.1: - resolution: {integrity: sha512-oPSeKc7vS2dx3ZJHiUhHKcyqNq0GWzAiR8zMVpPd/kVMl5ZfVyw+5HTCxxWDBGkX02lNpou27JkeBPCaneYGAQ==} + sass-embedded-unknown-all@1.97.3: + resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.97.1: - resolution: {integrity: sha512-L5j7J6CbZgHGwcfVedMVpM3z5MYeighcyZE8GF2DVmjWzZI3JtPKNY11wNTD/P9o1Uql10YPOKhGH0iWIXOT7Q==} + sass-embedded-win32-arm64@1.97.3: + resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.97.1: - resolution: {integrity: sha512-rfaZAKXU8cW3E7gvdafyD6YtgbEcsDeT99OEiHXRT0UGFuXT8qCOjpAwIKaOA3XXr2d8S42xx6cXcaZ1a+1fgw==} + sass-embedded-win32-x64@1.97.3: + resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.97.1: - resolution: {integrity: sha512-wH3CbOThHYGX0bUyqFf7laLKyhVWIFc2lHynitkqMIUCtX2ixH9mQh0bN7+hkUu5BFt/SXvEMjFbkEbBMpQiSQ==} + sass-embedded@1.97.3: + resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} engines: {node: '>=16.0.0'} hasBin: true - sass@1.97.1: - resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==} + sass@1.97.3: + resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} engines: {node: '>=14.0.0'} hasBin: true - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + sax@1.4.4: + resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + engines: {node: '>=11.0.0'} scslre@0.3.0: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} @@ -4812,8 +5241,8 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - seroval@1.4.2: - resolution: {integrity: sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==} + seroval@1.5.0: + resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} engines: {node: '>=10'} serve-placeholder@2.0.2: @@ -4873,12 +5302,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-git@3.30.0: resolution: {integrity: sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==} @@ -4941,8 +5364,8 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} - srvx@0.9.8: - resolution: {integrity: sha512-RZaxTKJEE/14HYn8COLuUOJAt0U55N9l1Xf6jj+T0GoA01EUH1Xz5JtSUOI+EHn+AEgPCVn7gk6jHJffrr06fQ==} + srvx@0.10.1: + resolution: {integrity: sha512-A//xtfak4eESMWWydSRFUVvCTQbSwivnGCEf8YGPe2eHU0+Z6znfUTCPF0a7oV3sObSOcrXHlL6Bs9vVctfXdg==} engines: {node: '>=20.16.0'} hasBin: true @@ -5024,10 +5447,6 @@ packages: resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -5082,8 +5501,8 @@ packages: resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} engines: {node: '>=16.0.0'} - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + synckit@0.11.12: + resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} system-architecture@0.1.0: @@ -5106,22 +5525,15 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + tar@7.5.6: + resolution: {integrity: sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==} engines: {node: '>=18'} - terser@5.44.1: - resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} + terser@5.46.0: + resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} engines: {node: '>=10'} hasBin: true @@ -5175,8 +5587,8 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-api-utils@2.3.0: - resolution: {integrity: sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -5209,9 +5621,6 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -5228,8 +5637,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@5.3.1: - resolution: {integrity: sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==} + type-fest@5.4.1: + resolution: {integrity: sha512-xygQcmneDyzsEuKZrFbRMne5HDqMs++aFzefrJTgEIKjQ3rekM+RPfFCVq2Gp1VIDqddoYeppCj4Pcb+RZW0GQ==} engines: {node: '>=20'} type-is@1.6.18: @@ -5260,8 +5669,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} @@ -5282,8 +5691,8 @@ packages: unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} - unhead@2.1.1: - resolution: {integrity: sha512-NOt8n2KybAOxSLfNXegAVai4SGU8bPKqWnqCzNAvnRH2i8mW+0bbFjN/L75LBgCSTiOjJSpANe5w2V34Grr7Cw==} + unhead@2.1.2: + resolution: {integrity: sha512-vSihrxyb+zsEUfEbraZBCjdE0p/WSoc2NGDrpwwSNAwuPxhYK1nH3eegf02IENLpn1sUhL8IoO84JWmRQ6tILA==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -5293,6 +5702,10 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + unimport@5.6.0: resolution: {integrity: sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A==} engines: {node: '>=18.12.0'} @@ -5325,8 +5738,8 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unstorage@1.17.3: - resolution: {integrity: sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==} + unstorage@1.17.4: + resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -5334,14 +5747,14 @@ packages: '@azure/identity': ^4.6.0 '@azure/keyvault-secrets': ^4.9.0 '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@capacitor/preferences': ^6 || ^7 || ^8 '@deno/kv': '>=0.9.0' '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 '@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 + '@vercel/kv': ^1 || ^2 || ^3 aws4fetch: ^1.0.20 db0: '>=0.2.1' idb-keyval: ^6.2.1 @@ -5395,8 +5808,8 @@ packages: resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} hasBin: true - unwasm@0.3.11: - resolution: {integrity: sha512-Vhp5gb1tusSQw5of/g3Q697srYgMXvwMgXMjcG4ZNga02fDX9coxJ9fAb0Ci38hM2Hv/U1FXRPGgjP2BYqhNoQ==} + unwasm@0.5.3: + resolution: {integrity: sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==} update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} @@ -5433,8 +5846,8 @@ packages: peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 - vite-node@5.2.0: - resolution: {integrity: sha512-7UT39YxUukIA97zWPXUGb0SGSiLexEGlavMwU3HDE6+d/HJhKLjLqu4eX2qv6SQiocdhKLRcusroDwXHQ6CnRQ==} + vite-node@5.3.0: + resolution: {integrity: sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -5499,8 +5912,8 @@ packages: vite: optional: true - vite@7.3.0: - resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5565,8 +5978,8 @@ packages: peerDependencies: vue: ^3.5.0 - vue@3.5.26: - resolution: {integrity: sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==} + vue@3.5.27: + resolution: {integrity: sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5578,6 +5991,10 @@ packages: peerDependencies: vue: ^3.0.1 + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -5599,8 +6016,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} which@2.0.2: @@ -5628,8 +6045,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5708,25 +6125,25 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.1 - '@babel/code-frame@7.27.1': + '@babel/code-frame@7.28.6': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} + '@babel/compat-data@7.28.6': {} - '@babel/core@7.28.5': + '@babel/core@7.28.6': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -5736,35 +6153,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.5': + '@babel/generator@7.28.6': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 - '@babel/helper-compilation-targets@7.27.2': + '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.28.5 + '@babel/compat-data': 7.28.6 '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.6 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.6 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -5773,46 +6190,46 @@ snapshots: '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 + '@babel/core': 7.28.6 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 - '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': + '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.6 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 transitivePeerDependencies: - supports-color @@ -5822,65 +6239,65 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.4': + '@babel/helpers@7.28.6': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 - '@babel/parser@7.28.5': + '@babel/parser@7.28.6': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.6 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) transitivePeerDependencies: - supports-color - '@babel/template@7.27.2': + '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 - '@babel/traverse@7.28.5': + '@babel/traverse@7.28.6': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.5': + '@babel/types@7.28.6': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@bomb.sh/tab@0.0.10(cac@6.7.14)(citty@0.1.6)': + '@bomb.sh/tab@0.0.11(cac@6.7.14)(citty@0.1.6)': optionalDependencies: cac: 6.7.14 citty: 0.1.6 - '@bufbuild/protobuf@2.10.2': {} + '@bufbuild/protobuf@2.11.0': {} '@clack/core@0.5.0': dependencies: @@ -5898,15 +6315,13 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@1.0.0-alpha.8': + '@clack/prompts@1.0.0-alpha.9': dependencies: '@clack/core': 1.0.0-alpha.7 picocolors: 1.1.1 sisteransi: 1.0.5 - '@cloudflare/kv-asset-handler@0.4.1': - dependencies: - mime: 3.0.0 + '@cloudflare/kv-asset-handler@0.4.2': {} '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': dependencies: @@ -5916,11 +6331,13 @@ snapshots: dependencies: postcss-selector-parser: 7.1.1 - '@dxup/nuxt@0.2.2(magicast@0.5.1)': + '@drizzle-team/brocli@0.10.2': {} + + '@dxup/nuxt@0.3.2(magicast@0.5.1)': dependencies: '@dxup/unimport': 0.1.2 - '@nuxt/kit': 4.2.2(magicast@0.5.1) - chokidar: 4.0.3 + '@nuxt/kit': 4.3.0(magicast@0.5.1) + chokidar: 5.0.0 pathe: 2.0.3 tinyglobby: 0.2.15 transitivePeerDependencies: @@ -5928,13 +6345,13 @@ snapshots: '@dxup/unimport@0.1.2': {} - '@emnapi/core@1.7.1': + '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 optional: true @@ -5947,117 +6364,175 @@ snapshots: '@es-joy/jsdoccomment@0.56.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/types': 8.53.1 comment-parser: 1.4.1 - esquery: 1.6.0 + esquery: 1.7.0 jsdoc-type-pratt-parser: 5.1.1 - '@es-joy/jsdoccomment@0.76.0': + '@es-joy/jsdoccomment@0.83.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.51.0 - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.10.0 + '@typescript-eslint/types': 8.53.1 + comment-parser: 1.4.5 + esquery: 1.7.0 + jsdoc-type-pratt-parser: 7.1.0 '@es-joy/resolve.exports@1.2.0': {} + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.13.0 + '@esbuild/aix-ppc64@0.25.12': optional: true '@esbuild/aix-ppc64@0.27.2': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + '@esbuild/android-arm64@0.25.12': optional: true '@esbuild/android-arm64@0.27.2': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + '@esbuild/android-arm@0.25.12': optional: true '@esbuild/android-arm@0.27.2': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + '@esbuild/android-x64@0.25.12': optional: true '@esbuild/android-x64@0.27.2': optional: true + '@esbuild/darwin-arm64@0.18.20': + optional: true + '@esbuild/darwin-arm64@0.25.12': optional: true '@esbuild/darwin-arm64@0.27.2': optional: true + '@esbuild/darwin-x64@0.18.20': + optional: true + '@esbuild/darwin-x64@0.25.12': optional: true '@esbuild/darwin-x64@0.27.2': optional: true + '@esbuild/freebsd-arm64@0.18.20': + optional: true + '@esbuild/freebsd-arm64@0.25.12': optional: true '@esbuild/freebsd-arm64@0.27.2': optional: true + '@esbuild/freebsd-x64@0.18.20': + optional: true + '@esbuild/freebsd-x64@0.25.12': optional: true '@esbuild/freebsd-x64@0.27.2': optional: true + '@esbuild/linux-arm64@0.18.20': + optional: true + '@esbuild/linux-arm64@0.25.12': optional: true '@esbuild/linux-arm64@0.27.2': optional: true + '@esbuild/linux-arm@0.18.20': + optional: true + '@esbuild/linux-arm@0.25.12': optional: true '@esbuild/linux-arm@0.27.2': optional: true + '@esbuild/linux-ia32@0.18.20': + optional: true + '@esbuild/linux-ia32@0.25.12': optional: true '@esbuild/linux-ia32@0.27.2': optional: true + '@esbuild/linux-loong64@0.18.20': + optional: true + '@esbuild/linux-loong64@0.25.12': optional: true '@esbuild/linux-loong64@0.27.2': optional: true + '@esbuild/linux-mips64el@0.18.20': + optional: true + '@esbuild/linux-mips64el@0.25.12': optional: true '@esbuild/linux-mips64el@0.27.2': optional: true + '@esbuild/linux-ppc64@0.18.20': + optional: true + '@esbuild/linux-ppc64@0.25.12': optional: true '@esbuild/linux-ppc64@0.27.2': optional: true + '@esbuild/linux-riscv64@0.18.20': + optional: true + '@esbuild/linux-riscv64@0.25.12': optional: true '@esbuild/linux-riscv64@0.27.2': optional: true + '@esbuild/linux-s390x@0.18.20': + optional: true + '@esbuild/linux-s390x@0.25.12': optional: true '@esbuild/linux-s390x@0.27.2': optional: true + '@esbuild/linux-x64@0.18.20': + optional: true + '@esbuild/linux-x64@0.25.12': optional: true @@ -6070,6 +6545,9 @@ snapshots: '@esbuild/netbsd-arm64@0.27.2': optional: true + '@esbuild/netbsd-x64@0.18.20': + optional: true + '@esbuild/netbsd-x64@0.25.12': optional: true @@ -6082,6 +6560,9 @@ snapshots: '@esbuild/openbsd-arm64@0.27.2': optional: true + '@esbuild/openbsd-x64@0.18.20': + optional: true + '@esbuild/openbsd-x64@0.25.12': optional: true @@ -6094,31 +6575,43 @@ snapshots: '@esbuild/openharmony-arm64@0.27.2': optional: true + '@esbuild/sunos-x64@0.18.20': + optional: true + '@esbuild/sunos-x64@0.25.12': optional: true '@esbuild/sunos-x64@0.27.2': optional: true + '@esbuild/win32-arm64@0.18.20': + optional: true + '@esbuild/win32-arm64@0.25.12': optional: true '@esbuild/win32-arm64@0.27.2': optional: true + '@esbuild/win32-ia32@0.18.20': + optional: true + '@esbuild/win32-ia32@0.25.12': optional: true '@esbuild/win32-ia32@0.27.2': optional: true + '@esbuild/win32-x64@0.18.20': + optional: true + '@esbuild/win32-x64@0.25.12': optional: true '@esbuild/win32-x64@0.27.2': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': dependencies: eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 @@ -6143,6 +6636,10 @@ snapshots: dependencies: '@eslint/core': 0.17.0 + '@eslint/config-helpers@0.5.1': + dependencies: + '@eslint/core': 1.0.1 + '@eslint/config-inspector@1.4.2(eslint@9.39.2(jiti@2.6.1))': dependencies: ansis: 4.2.0 @@ -6151,9 +6648,9 @@ snapshots: chokidar: 4.0.3 esbuild: 0.27.2 eslint: 9.39.2(jiti@2.6.1) - h3: 1.15.4 + h3: 1.15.5 tinyglobby: 0.2.15 - ws: 8.18.3 + ws: 8.19.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -6166,6 +6663,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@1.0.1': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 @@ -6205,7 +6706,7 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@ioredis/commands@1.4.0': {} + '@ioredis/commands@1.5.0': {} '@isaacs/balanced-match@4.0.1': {} @@ -6268,6 +6769,68 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} + '@libsql/client@0.17.0': + dependencies: + '@libsql/core': 0.17.0 + '@libsql/hrana-client': 0.9.0 + js-base64: 3.7.8 + libsql: 0.5.22 + promise-limit: 2.7.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@libsql/core@0.17.0': + dependencies: + js-base64: 3.7.8 + + '@libsql/darwin-arm64@0.5.22': + optional: true + + '@libsql/darwin-x64@0.5.22': + optional: true + + '@libsql/hrana-client@0.9.0': + dependencies: + '@libsql/isomorphic-ws': 0.1.5 + cross-fetch: 4.1.0 + js-base64: 3.7.8 + node-fetch: 3.3.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@libsql/isomorphic-ws@0.1.5': + dependencies: + '@types/ws': 8.18.1 + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/linux-arm-gnueabihf@0.5.22': + optional: true + + '@libsql/linux-arm-musleabihf@0.5.22': + optional: true + + '@libsql/linux-arm64-gnu@0.5.22': + optional: true + + '@libsql/linux-arm64-musl@0.5.22': + optional: true + + '@libsql/linux-x64-gnu@0.5.22': + optional: true + + '@libsql/linux-x64-musl@0.5.22': + optional: true + + '@libsql/win32-x64-msvc@0.5.22': + optional: true + '@mapbox/node-pre-gyp@2.0.3': dependencies: consola: 3.4.2 @@ -6276,25 +6839,27 @@ snapshots: node-fetch: 2.7.0 nopt: 8.1.0 semver: 7.7.3 - tar: 7.5.2 + tar: 7.5.6 transitivePeerDependencies: - encoding - supports-color '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.7.1 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.7.1 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true + '@neon-rs/load@0.0.4': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6309,10 +6874,10 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@nuxt/cli@3.31.3(cac@6.7.14)(magicast@0.5.1)': + '@nuxt/cli@3.32.0(cac@6.7.14)(magicast@0.5.1)': dependencies: - '@bomb.sh/tab': 0.0.10(cac@6.7.14)(citty@0.1.6) - '@clack/prompts': 1.0.0-alpha.8 + '@bomb.sh/tab': 0.0.11(cac@6.7.14)(citty@0.1.6) + '@clack/prompts': 1.0.0-alpha.9 c12: 3.3.3(magicast@0.5.1) citty: 0.1.6 confbox: 0.2.2 @@ -6325,18 +6890,18 @@ snapshots: giget: 2.0.0 jiti: 2.6.1 listhen: 1.9.0 - nypm: 0.6.2 + nypm: 0.6.4 ofetch: 1.5.1 ohash: 2.0.11 pathe: 2.0.3 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 pkg-types: 2.3.0 scule: 1.3.0 semver: 7.7.3 - srvx: 0.9.8 + srvx: 0.10.1 std-env: 3.10.0 tinyexec: 1.0.2 - ufo: 1.6.1 + ufo: 1.6.3 youch: 4.1.0-beta.13 transitivePeerDependencies: - cac @@ -6346,26 +6911,26 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@2.7.0(magicast@0.5.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@nuxt/devtools-kit@2.7.0(magicast@0.5.1)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@nuxt/kit': 3.20.2(magicast@0.5.1) + '@nuxt/kit': 3.21.0(magicast@0.5.1) execa: 8.0.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - magicast - '@nuxt/devtools-kit@3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@nuxt/devtools-kit@3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@nuxt/kit': 4.2.2(magicast@0.5.1) + '@nuxt/kit': 4.3.0(magicast@0.5.1) execa: 8.0.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - magicast '@nuxt/devtools-wizard@3.1.1': dependencies: consola: 3.4.2 - diff: 8.0.2 + diff: 8.0.3 execa: 8.0.1 magicast: 0.5.1 pathe: 2.0.3 @@ -6373,19 +6938,19 @@ snapshots: prompts: 2.4.2 semver: 7.7.3 - '@nuxt/devtools@3.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@nuxt/devtools@3.1.1(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))': dependencies: - '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@nuxt/devtools-wizard': 3.1.1 - '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@vue/devtools-core': 8.0.5(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@nuxt/kit': 4.3.0(magicast@0.5.1) + '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) '@vue/devtools-kit': 8.0.5 birpc: 2.9.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.7 + fast-npm-meta: 0.4.8 get-port-please: 3.2.0 hookable: 5.5.3 image-meta: 0.2.2 @@ -6393,48 +6958,48 @@ snapshots: launch-editor: 2.12.0 local-pkg: 1.1.2 magicast: 0.5.1 - nypm: 0.6.2 + nypm: 0.6.4 ohash: 2.0.11 pathe: 2.0.3 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 pkg-types: 2.3.0 semver: 7.7.3 simple-git: 3.30.0 sirv: 3.0.2 structured-clone-es: 1.0.0 tinyglobby: 0.2.15 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) - vite-plugin-vue-tracer: 1.2.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.0(magicast@0.5.1))(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) which: 5.0.0 - ws: 8.18.3 + ws: 8.19.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - vue - '@nuxt/eslint-config@1.12.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@nuxt/eslint-config@1.13.0(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 '@eslint/js': 9.39.2 - '@nuxt/eslint-plugin': 1.12.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@stylistic/eslint-plugin': 5.6.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/eslint-plugin': 8.51.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@nuxt/eslint-plugin': 1.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@stylistic/eslint-plugin': 5.7.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-config-flat-gitignore: 2.1.0(eslint@9.39.2(jiti@2.6.1)) - eslint-flat-config-utils: 2.1.4 + eslint-flat-config-utils: 3.0.0 eslint-merge-processors: 2.0.0(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import-lite: 0.3.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-jsdoc: 61.5.0(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import-lite: 0.5.0(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-jsdoc: 62.4.1(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-regexp: 3.0.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-unicorn: 62.0.0(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1)) - globals: 16.5.0 + eslint-plugin-vue: 10.7.0(@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1)) + globals: 17.1.0 local-pkg: 1.1.2 pathe: 2.0.3 vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@2.6.1)) @@ -6445,26 +7010,26 @@ snapshots: - supports-color - typescript - '@nuxt/eslint-config@1.9.0(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@nuxt/eslint-config@1.9.0(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 '@eslint/js': 9.39.2 '@nuxt/eslint-plugin': 1.9.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@stylistic/eslint-plugin': 5.6.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/eslint-plugin': 8.51.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@stylistic/eslint-plugin': 5.7.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-config-flat-gitignore: 2.1.0(eslint@9.39.2(jiti@2.6.1)) eslint-flat-config-utils: 2.1.4 eslint-merge-processors: 2.0.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-import-lite: 0.3.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsdoc: 54.7.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-regexp: 2.10.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-unicorn: 60.0.0(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-vue: 10.7.0(@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1)) globals: 16.5.0 local-pkg: 1.1.2 pathe: 2.0.3 @@ -6476,10 +7041,10 @@ snapshots: - supports-color - typescript - '@nuxt/eslint-plugin@1.12.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@nuxt/eslint-plugin@1.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) transitivePeerDependencies: - supports-color @@ -6487,20 +7052,20 @@ snapshots: '@nuxt/eslint-plugin@1.9.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) transitivePeerDependencies: - supports-color - typescript - '@nuxt/eslint@1.9.0(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@nuxt/eslint@1.9.0(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@eslint/config-inspector': 1.4.2(eslint@9.39.2(jiti@2.6.1)) - '@nuxt/devtools-kit': 2.7.0(magicast@0.5.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) - '@nuxt/eslint-config': 1.9.0(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@nuxt/devtools-kit': 2.7.0(magicast@0.5.1)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@nuxt/eslint-config': 1.9.0(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@nuxt/eslint-plugin': 1.9.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@nuxt/kit': 4.2.2(magicast@0.5.1) + '@nuxt/kit': 4.3.0(magicast@0.5.1) chokidar: 4.0.3 eslint: 9.39.2(jiti@2.6.1) eslint-flat-config-utils: 2.1.4 @@ -6522,7 +7087,7 @@ snapshots: - utf-8-validate - vite - '@nuxt/kit@3.20.2(magicast@0.5.1)': + '@nuxt/kit@3.21.0(magicast@0.5.1)': dependencies: c12: 3.3.3(magicast@0.5.1) consola: 3.4.2 @@ -6542,13 +7107,13 @@ snapshots: scule: 1.3.0 semver: 7.7.3 tinyglobby: 0.2.15 - ufo: 1.6.1 + ufo: 1.6.3 unctx: 2.5.0 untyped: 2.0.0 transitivePeerDependencies: - magicast - '@nuxt/kit@4.2.2(magicast@0.5.1)': + '@nuxt/kit@4.3.0(magicast@0.5.1)': dependencies: c12: 3.3.3(magicast@0.5.1) consola: 3.4.2 @@ -6567,39 +7132,40 @@ snapshots: scule: 1.3.0 semver: 7.7.3 tinyglobby: 0.2.15 - ufo: 1.6.1 + ufo: 1.6.3 unctx: 2.5.0 untyped: 2.0.0 transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.2.2(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(typescript@5.9.3)': + '@nuxt/nitro-server@4.3.0(@libsql/client@0.17.0)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(typescript@5.9.3)': dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@unhead/vue': 2.1.1(vue@3.5.26(typescript@5.9.3)) - '@vue/shared': 3.5.26 + '@nuxt/kit': 4.3.0(magicast@0.5.1) + '@unhead/vue': 2.1.2(vue@3.5.27(typescript@5.9.3)) + '@vue/shared': 3.5.27 consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 - devalue: 5.6.1 + devalue: 5.6.2 errx: 0.1.0 escape-string-regexp: 5.0.0 exsolve: 1.0.8 - h3: 1.15.4 + h3: 1.15.5 impound: 1.0.0 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.12.9(better-sqlite3@12.5.0) - nuxt: 4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + nitropack: 2.13.1(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)) + nuxt: 4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 - radix3: 1.1.2 + rou3: 0.7.12 std-env: 3.10.0 - ufo: 1.6.1 + ufo: 1.6.3 unctx: 2.5.0 - unstorage: 1.17.3(db0@0.3.4(better-sqlite3@12.5.0))(ioredis@5.8.2) - vue: 3.5.26(typescript@5.9.3) + unstorage: 1.17.4(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(ioredis@5.9.2) + vue: 3.5.27(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 transitivePeerDependencies: @@ -6637,9 +7203,9 @@ snapshots: - uploadthing - xml2js - '@nuxt/schema@4.2.2': + '@nuxt/schema@4.3.0': dependencies: - '@vue/shared': 3.5.26 + '@vue/shared': 3.5.27 defu: 6.1.4 pathe: 2.0.3 pkg-types: 2.3.0 @@ -6647,7 +7213,7 @@ snapshots: '@nuxt/telemetry@2.6.6(magicast@0.5.1)': dependencies: - '@nuxt/kit': 3.20.2(magicast@0.5.1) + '@nuxt/kit': 3.21.0(magicast@0.5.1) citty: 0.1.6 consola: 3.4.2 destr: 2.0.5 @@ -6662,12 +7228,12 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/vite-builder@4.2.2(@types/node@25.0.3)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2)': + '@nuxt/vite-builder@4.3.0(@types/node@25.0.10)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))(yaml@2.8.2)': dependencies: - '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@rollup/plugin-replace': 6.0.3(rollup@4.54.0) - '@vitejs/plugin-vue': 6.0.3(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.3(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@nuxt/kit': 4.3.0(magicast@0.5.1) + '@rollup/plugin-replace': 6.0.3(rollup@4.56.0) + '@vitejs/plugin-vue': 6.0.3(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.3(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) autoprefixer: 10.4.23(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.2(postcss@8.5.6) @@ -6676,25 +7242,24 @@ snapshots: escape-string-regexp: 5.0.0 exsolve: 1.0.8 get-port-please: 3.2.0 - h3: 1.15.4 jiti: 2.6.1 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + nuxt: 4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 - rollup-plugin-visualizer: 6.0.5(rollup@4.54.0) - seroval: 1.4.2 + rollup-plugin-visualizer: 6.0.5(rollup@4.56.0) + seroval: 1.5.0 std-env: 3.10.0 - ufo: 1.6.1 + ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 5.2.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) - vue: 3.5.26(typescript@5.9.3) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 5.3.0(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vue: 3.5.27(typescript@5.9.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: - '@biomejs/biome' @@ -6721,14 +7286,14 @@ snapshots: - vue-tsc - yaml - '@nuxtjs/eslint-config-typescript@12.1.0(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@nuxtjs/eslint-config-typescript@12.1.0(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': 6.21.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-vue: 9.33.0(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - eslint-import-resolver-webpack @@ -6755,12 +7320,12 @@ snapshots: '@nuxtjs/tailwindcss@6.14.0(magicast@0.5.1)(tsx@4.21.0)(yaml@2.8.2)': dependencies: - '@nuxt/kit': 3.20.2(magicast@0.5.1) + '@nuxt/kit': 3.21.0(magicast@0.5.1) autoprefixer: 10.4.23(postcss@8.5.6) c12: 3.3.3(magicast@0.5.1) consola: 3.4.2 defu: 6.1.4 - h3: 1.15.4 + h3: 1.15.5 klona: 2.0.6 ohash: 2.0.11 pathe: 2.0.3 @@ -6769,7 +7334,7 @@ snapshots: postcss-nesting: 13.0.2(postcss@8.5.6) tailwind-config-viewer: 2.0.4(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) - ufo: 1.6.1 + ufo: 1.6.3 unctx: 2.5.0 transitivePeerDependencies: - magicast @@ -6777,218 +7342,263 @@ snapshots: - tsx - yaml - '@oxc-minify/binding-android-arm64@0.102.0': + '@oxc-minify/binding-android-arm-eabi@0.110.0': optional: true - '@oxc-minify/binding-darwin-arm64@0.102.0': + '@oxc-minify/binding-android-arm64@0.110.0': optional: true - '@oxc-minify/binding-darwin-x64@0.102.0': + '@oxc-minify/binding-darwin-arm64@0.110.0': optional: true - '@oxc-minify/binding-freebsd-x64@0.102.0': + '@oxc-minify/binding-darwin-x64@0.110.0': optional: true - '@oxc-minify/binding-linux-arm-gnueabihf@0.102.0': + '@oxc-minify/binding-freebsd-x64@0.110.0': optional: true - '@oxc-minify/binding-linux-arm64-gnu@0.102.0': + '@oxc-minify/binding-linux-arm-gnueabihf@0.110.0': optional: true - '@oxc-minify/binding-linux-arm64-musl@0.102.0': + '@oxc-minify/binding-linux-arm-musleabihf@0.110.0': optional: true - '@oxc-minify/binding-linux-riscv64-gnu@0.102.0': + '@oxc-minify/binding-linux-arm64-gnu@0.110.0': optional: true - '@oxc-minify/binding-linux-s390x-gnu@0.102.0': + '@oxc-minify/binding-linux-arm64-musl@0.110.0': optional: true - '@oxc-minify/binding-linux-x64-gnu@0.102.0': + '@oxc-minify/binding-linux-ppc64-gnu@0.110.0': optional: true - '@oxc-minify/binding-linux-x64-musl@0.102.0': + '@oxc-minify/binding-linux-riscv64-gnu@0.110.0': optional: true - '@oxc-minify/binding-openharmony-arm64@0.102.0': + '@oxc-minify/binding-linux-riscv64-musl@0.110.0': optional: true - '@oxc-minify/binding-wasm32-wasi@0.102.0': + '@oxc-minify/binding-linux-s390x-gnu@0.110.0': + optional: true + + '@oxc-minify/binding-linux-x64-gnu@0.110.0': + optional: true + + '@oxc-minify/binding-linux-x64-musl@0.110.0': + optional: true + + '@oxc-minify/binding-openharmony-arm64@0.110.0': + optional: true + + '@oxc-minify/binding-wasm32-wasi@0.110.0': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@oxc-minify/binding-win32-arm64-msvc@0.102.0': + '@oxc-minify/binding-win32-arm64-msvc@0.110.0': optional: true - '@oxc-minify/binding-win32-x64-msvc@0.102.0': + '@oxc-minify/binding-win32-ia32-msvc@0.110.0': optional: true - '@oxc-parser/binding-android-arm64@0.102.0': + '@oxc-minify/binding-win32-x64-msvc@0.110.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.102.0': + '@oxc-parser/binding-android-arm-eabi@0.110.0': optional: true - '@oxc-parser/binding-darwin-x64@0.102.0': + '@oxc-parser/binding-android-arm64@0.110.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.102.0': + '@oxc-parser/binding-darwin-arm64@0.110.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.102.0': + '@oxc-parser/binding-darwin-x64@0.110.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.102.0': + '@oxc-parser/binding-freebsd-x64@0.110.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.102.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.110.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.102.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.110.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.102.0': + '@oxc-parser/binding-linux-arm64-gnu@0.110.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.102.0': + '@oxc-parser/binding-linux-arm64-musl@0.110.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.102.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.110.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.102.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.110.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.102.0': + '@oxc-parser/binding-linux-riscv64-musl@0.110.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.110.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.110.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.110.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.110.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.110.0': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.102.0': + '@oxc-parser/binding-win32-arm64-msvc@0.110.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.102.0': + '@oxc-parser/binding-win32-ia32-msvc@0.110.0': optional: true - '@oxc-project/types@0.102.0': {} - - '@oxc-transform/binding-android-arm64@0.102.0': + '@oxc-parser/binding-win32-x64-msvc@0.110.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.102.0': + '@oxc-project/types@0.110.0': {} + + '@oxc-transform/binding-android-arm-eabi@0.110.0': optional: true - '@oxc-transform/binding-darwin-x64@0.102.0': + '@oxc-transform/binding-android-arm64@0.110.0': optional: true - '@oxc-transform/binding-freebsd-x64@0.102.0': + '@oxc-transform/binding-darwin-arm64@0.110.0': optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.102.0': + '@oxc-transform/binding-darwin-x64@0.110.0': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.102.0': + '@oxc-transform/binding-freebsd-x64@0.110.0': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.102.0': + '@oxc-transform/binding-linux-arm-gnueabihf@0.110.0': optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.102.0': + '@oxc-transform/binding-linux-arm-musleabihf@0.110.0': optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.102.0': + '@oxc-transform/binding-linux-arm64-gnu@0.110.0': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.102.0': + '@oxc-transform/binding-linux-arm64-musl@0.110.0': optional: true - '@oxc-transform/binding-linux-x64-musl@0.102.0': + '@oxc-transform/binding-linux-ppc64-gnu@0.110.0': optional: true - '@oxc-transform/binding-openharmony-arm64@0.102.0': + '@oxc-transform/binding-linux-riscv64-gnu@0.110.0': optional: true - '@oxc-transform/binding-wasm32-wasi@0.102.0': + '@oxc-transform/binding-linux-riscv64-musl@0.110.0': + optional: true + + '@oxc-transform/binding-linux-s390x-gnu@0.110.0': + optional: true + + '@oxc-transform/binding-linux-x64-gnu@0.110.0': + optional: true + + '@oxc-transform/binding-linux-x64-musl@0.110.0': + optional: true + + '@oxc-transform/binding-openharmony-arm64@0.110.0': + optional: true + + '@oxc-transform/binding-wasm32-wasi@0.110.0': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.102.0': + '@oxc-transform/binding-win32-arm64-msvc@0.110.0': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.102.0': + '@oxc-transform/binding-win32-ia32-msvc@0.110.0': optional: true - '@parcel/watcher-android-arm64@2.5.1': + '@oxc-transform/binding-win32-x64-msvc@0.110.0': optional: true - '@parcel/watcher-darwin-arm64@2.5.1': + '@parcel/watcher-android-arm64@2.5.6': optional: true - '@parcel/watcher-darwin-x64@2.5.1': + '@parcel/watcher-darwin-arm64@2.5.6': optional: true - '@parcel/watcher-freebsd-x64@2.5.1': + '@parcel/watcher-darwin-x64@2.5.6': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.1': + '@parcel/watcher-freebsd-x64@2.5.6': optional: true - '@parcel/watcher-linux-arm-musl@2.5.1': + '@parcel/watcher-linux-arm-glibc@2.5.6': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.1': + '@parcel/watcher-linux-arm-musl@2.5.6': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.1': + '@parcel/watcher-linux-arm64-glibc@2.5.6': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.1': + '@parcel/watcher-linux-arm64-musl@2.5.6': optional: true - '@parcel/watcher-linux-x64-musl@2.5.1': + '@parcel/watcher-linux-x64-glibc@2.5.6': optional: true - '@parcel/watcher-wasm@2.5.1': + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-wasm@2.5.6': dependencies: is-glob: 4.0.3 - micromatch: 4.0.8 + picomatch: 4.0.3 - '@parcel/watcher-win32-arm64@2.5.1': + '@parcel/watcher-win32-arm64@2.5.6': optional: true - '@parcel/watcher-win32-ia32@2.5.1': + '@parcel/watcher-win32-ia32@2.5.6': optional: true - '@parcel/watcher-win32-x64@2.5.1': + '@parcel/watcher-win32-x64@2.5.6': optional: true - '@parcel/watcher@2.5.1': + '@parcel/watcher@2.5.6': dependencies: - detect-libc: 1.0.3 + detect-libc: 2.1.2 is-glob: 4.0.3 - micromatch: 4.0.8 node-addon-api: 7.1.1 + picomatch: 4.0.3 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.1 - '@parcel/watcher-darwin-arm64': 2.5.1 - '@parcel/watcher-darwin-x64': 2.5.1 - '@parcel/watcher-freebsd-x64': 2.5.1 - '@parcel/watcher-linux-arm-glibc': 2.5.1 - '@parcel/watcher-linux-arm-musl': 2.5.1 - '@parcel/watcher-linux-arm64-glibc': 2.5.1 - '@parcel/watcher-linux-arm64-musl': 2.5.1 - '@parcel/watcher-linux-x64-glibc': 2.5.1 - '@parcel/watcher-linux-x64-musl': 2.5.1 - '@parcel/watcher-win32-arm64': 2.5.1 - '@parcel/watcher-win32-ia32': 2.5.1 - '@parcel/watcher-win32-x64': 2.5.1 + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 - '@pinia/nuxt@0.11.2(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)))': + '@pinia/nuxt@0.11.2(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)))': dependencies: - '@nuxt/kit': 3.20.2(magicast@0.5.1) - pinia: 3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) + '@nuxt/kit': 3.21.0(magicast@0.5.1) + pinia: 3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)) transitivePeerDependencies: - magicast @@ -7013,15 +7623,15 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.53': {} - '@rolldown/pluginutils@1.0.0-beta.58': {} + '@rolldown/pluginutils@1.0.0-rc.1': {} - '@rollup/plugin-alias@5.1.1(rollup@4.54.0)': + '@rollup/plugin-alias@6.0.0(rollup@4.56.0)': optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/plugin-commonjs@28.0.9(rollup@4.54.0)': + '@rollup/plugin-commonjs@29.0.0(rollup@4.56.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -7029,119 +7639,128 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/plugin-inject@5.0.5(rollup@4.54.0)': + '@rollup/plugin-inject@5.0.5(rollup@4.56.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/plugin-json@6.1.0(rollup@4.54.0)': + '@rollup/plugin-json@6.1.0(rollup@4.56.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.54.0)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.56.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/plugin-replace@6.0.3(rollup@4.54.0)': + '@rollup/plugin-replace@6.0.3(rollup@4.56.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) magic-string: 0.30.21 optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/plugin-terser@0.4.4(rollup@4.54.0)': + '@rollup/plugin-terser@0.4.4(rollup@4.56.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.44.1 + terser: 5.46.0 optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/pluginutils@5.3.0(rollup@4.54.0)': + '@rollup/pluginutils@5.3.0(rollup@4.56.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - '@rollup/rollup-android-arm-eabi@4.54.0': + '@rollup/rollup-android-arm-eabi@4.56.0': optional: true - '@rollup/rollup-android-arm64@4.54.0': + '@rollup/rollup-android-arm64@4.56.0': optional: true - '@rollup/rollup-darwin-arm64@4.54.0': + '@rollup/rollup-darwin-arm64@4.56.0': optional: true - '@rollup/rollup-darwin-x64@4.54.0': + '@rollup/rollup-darwin-x64@4.56.0': optional: true - '@rollup/rollup-freebsd-arm64@4.54.0': + '@rollup/rollup-freebsd-arm64@4.56.0': optional: true - '@rollup/rollup-freebsd-x64@4.54.0': + '@rollup/rollup-freebsd-x64@4.56.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + '@rollup/rollup-linux-arm-gnueabihf@4.56.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.54.0': + '@rollup/rollup-linux-arm-musleabihf@4.56.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.54.0': + '@rollup/rollup-linux-arm64-gnu@4.56.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.54.0': + '@rollup/rollup-linux-arm64-musl@4.56.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-gnu@4.56.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-musl@4.56.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.54.0': + '@rollup/rollup-linux-ppc64-gnu@4.56.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.54.0': + '@rollup/rollup-linux-ppc64-musl@4.56.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-gnu@4.56.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-musl@4.56.0': optional: true - '@rollup/rollup-linux-x64-musl@4.54.0': + '@rollup/rollup-linux-s390x-gnu@4.56.0': optional: true - '@rollup/rollup-openharmony-arm64@4.54.0': + '@rollup/rollup-linux-x64-gnu@4.56.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.54.0': + '@rollup/rollup-linux-x64-musl@4.56.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.54.0': + '@rollup/rollup-openbsd-x64@4.56.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.54.0': + '@rollup/rollup-openharmony-arm64@4.56.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.54.0': + '@rollup/rollup-win32-arm64-msvc@4.56.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.56.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.56.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.56.0': optional: true '@rtsao/scc@1.1.0': {} @@ -7154,10 +7773,10 @@ snapshots: '@speed-highlight/core@1.2.14': {} - '@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/types': 8.51.0 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/types': 8.53.1 eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -7169,21 +7788,13 @@ snapshots: tslib: 2.8.1 optional: true - '@types/better-sqlite3@7.6.13': - dependencies: - '@types/node': 25.0.3 - - '@types/chokidar@2.1.7': - dependencies: - chokidar: 5.0.0 - '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/node@25.0.3': + '@types/node@25.0.10': dependencies: undici-types: 7.16.0 @@ -7197,6 +7808,10 @@ snapshots: '@types/semver@7.7.1': {} + '@types/ws@8.18.1': + dependencies: + '@types/node': 25.0.10 + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -7217,18 +7832,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.51.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.51.0 - '@typescript-eslint/type-utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.51.0 + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.53.1 + '@typescript-eslint/type-utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.53.1 eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7246,22 +7861,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.51.0 - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/typescript-estree': 8.51.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.51.0 + '@typescript-eslint/scope-manager': 8.53.1 + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.53.1 debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.51.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.53.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.51.0(typescript@5.9.3) - '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.9.3) + '@typescript-eslint/types': 8.53.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: @@ -7272,12 +7887,12 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/scope-manager@8.51.0': + '@typescript-eslint/scope-manager@8.53.1': dependencies: - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/visitor-keys': 8.51.0 + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/visitor-keys': 8.53.1 - '@typescript-eslint/tsconfig-utils@8.51.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.53.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -7293,21 +7908,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/typescript-estree': 8.51.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/types@8.51.0': {} + '@typescript-eslint/types@8.53.1': {} '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)': dependencies: @@ -7324,24 +7939,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.51.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.53.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.51.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.51.0(typescript@5.9.3) - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/visitor-keys': 8.51.0 + '@typescript-eslint/project-service': 8.53.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.9.3) + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/visitor-keys': 8.53.1 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/utils@6.21.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@types/json-schema': 7.0.15 '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 6.21.0 @@ -7353,12 +7968,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.51.0 - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/typescript-estree': 8.51.0(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.53.1 + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -7369,16 +7984,16 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.51.0': + '@typescript-eslint/visitor-keys@8.53.1': dependencies: - '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/types': 8.53.1 eslint-visitor-keys: 4.2.1 - '@unhead/vue@2.1.1(vue@3.5.26(typescript@5.9.3))': + '@unhead/vue@2.1.2(vue@3.5.27(typescript@5.9.3))': dependencies: - hookable: 5.5.3 - unhead: 2.1.1 - vue: 3.5.26(typescript@5.9.3) + hookable: 6.0.1 + unhead: 2.1.2 + vue: 3.5.27(typescript@5.9.3) '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -7439,16 +8054,16 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vercel/nft@0.30.4(rollup@4.54.0)': + '@vercel/nft@1.3.0(rollup@4.56.0)': dependencies: '@mapbox/node-pre-gyp': 2.0.3 - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.56.0) acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 - glob: 10.5.0 + glob: 13.0.0 graceful-fs: 4.2.11 node-gyp-build: 4.8.4 picomatch: 4.0.3 @@ -7458,23 +8073,23 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.3(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.3(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.58 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.28.5) - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vue: 3.5.26(typescript@5.9.3) + '@babel/core': 7.28.6 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) + '@rolldown/pluginutils': 1.0.0-rc.1 + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.28.6) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vue: 3.5.27(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.3(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.3(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.53 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vue: 3.5.26(typescript@5.9.3) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vue: 3.5.27(typescript@5.9.3) '@volar/language-core@2.4.27': dependencies: @@ -7482,74 +8097,74 @@ snapshots: '@volar/source-map@2.4.27': {} - '@vue-macros/common@3.1.1(vue@3.5.26(typescript@5.9.3))': + '@vue-macros/common@3.1.2(vue@3.5.27(typescript@5.9.3))': dependencies: - '@vue/compiler-sfc': 3.5.26 + '@vue/compiler-sfc': 3.5.27 ast-kit: 2.2.0 local-pkg: 1.1.2 magic-string-ast: 1.0.3 unplugin-utils: 0.3.1 optionalDependencies: - vue: 3.5.26(typescript@5.9.3) + vue: 3.5.27(typescript@5.9.3) '@vue/babel-helper-vue-transform-on@2.0.1': {} - '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.28.5)': + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.28.6)': 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.5) - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) + '@babel/template': 7.28.6 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 '@vue/babel-helper-vue-transform-on': 2.0.1 - '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.28.5) - '@vue/shared': 3.5.26 + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.28.6) + '@vue/shared': 3.5.27 optionalDependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.6 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.28.5)': + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.28.6)': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/parser': 7.28.5 - '@vue/compiler-sfc': 3.5.26 + '@babel/code-frame': 7.28.6 + '@babel/core': 7.28.6 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/parser': 7.28.6 + '@vue/compiler-sfc': 3.5.27 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.26': + '@vue/compiler-core@3.5.27': dependencies: - '@babel/parser': 7.28.5 - '@vue/shared': 3.5.26 - entities: 7.0.0 + '@babel/parser': 7.28.6 + '@vue/shared': 3.5.27 + entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.26': + '@vue/compiler-dom@3.5.27': dependencies: - '@vue/compiler-core': 3.5.26 - '@vue/shared': 3.5.26 + '@vue/compiler-core': 3.5.27 + '@vue/shared': 3.5.27 - '@vue/compiler-sfc@3.5.26': + '@vue/compiler-sfc@3.5.27': dependencies: - '@babel/parser': 7.28.5 - '@vue/compiler-core': 3.5.26 - '@vue/compiler-dom': 3.5.26 - '@vue/compiler-ssr': 3.5.26 - '@vue/shared': 3.5.26 + '@babel/parser': 7.28.6 + '@vue/compiler-core': 3.5.27 + '@vue/compiler-dom': 3.5.27 + '@vue/compiler-ssr': 3.5.27 + '@vue/shared': 3.5.27 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.26': + '@vue/compiler-ssr@3.5.27': dependencies: - '@vue/compiler-dom': 3.5.26 - '@vue/shared': 3.5.26 + '@vue/compiler-dom': 3.5.27 + '@vue/shared': 3.5.27 '@vue/devtools-api@6.6.4': {} @@ -7557,15 +8172,15 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.9 - '@vue/devtools-core@8.0.5(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) - vue: 3.5.26(typescript@5.9.3) + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vue: 3.5.27(typescript@5.9.3) transitivePeerDependencies: - vite @@ -7585,7 +8200,7 @@ snapshots: birpc: 2.9.0 hookable: 5.5.3 mitt: 3.0.1 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 speakingurl: 14.0.1 superjson: 2.2.6 @@ -7597,39 +8212,39 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/language-core@3.2.1': + '@vue/language-core@3.2.3': dependencies: '@volar/language-core': 2.4.27 - '@vue/compiler-dom': 3.5.26 - '@vue/shared': 3.5.26 + '@vue/compiler-dom': 3.5.27 + '@vue/shared': 3.5.27 alien-signals: 3.1.2 muggle-string: 0.4.1 path-browserify: 1.0.1 picomatch: 4.0.3 - '@vue/reactivity@3.5.26': + '@vue/reactivity@3.5.27': dependencies: - '@vue/shared': 3.5.26 + '@vue/shared': 3.5.27 - '@vue/runtime-core@3.5.26': + '@vue/runtime-core@3.5.27': dependencies: - '@vue/reactivity': 3.5.26 - '@vue/shared': 3.5.26 + '@vue/reactivity': 3.5.27 + '@vue/shared': 3.5.27 - '@vue/runtime-dom@3.5.26': + '@vue/runtime-dom@3.5.27': dependencies: - '@vue/reactivity': 3.5.26 - '@vue/runtime-core': 3.5.26 - '@vue/shared': 3.5.26 + '@vue/reactivity': 3.5.27 + '@vue/runtime-core': 3.5.27 + '@vue/shared': 3.5.27 csstype: 3.2.3 - '@vue/server-renderer@3.5.26(vue@3.5.26(typescript@5.9.3))': + '@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3))': dependencies: - '@vue/compiler-ssr': 3.5.26 - '@vue/shared': 3.5.26 - vue: 3.5.26(typescript@5.9.3) + '@vue/compiler-ssr': 3.5.27 + '@vue/shared': 3.5.27 + vue: 3.5.27(typescript@5.9.3) - '@vue/shared@3.5.26': {} + '@vue/shared@3.5.27': {} '@yarnpkg/lockfile@1.1.0': {} @@ -7690,7 +8305,7 @@ snapshots: graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 - lodash: 4.17.21 + lodash: 4.17.23 normalize-path: 3.0.0 readable-stream: 4.7.0 @@ -7767,12 +8382,12 @@ snapshots: ast-kit@2.2.0: dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.28.6 pathe: 2.0.3 ast-walker-scope@0.8.3: dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.28.6 ast-kit: 2.2.0 async-function@1.0.0: {} @@ -7788,7 +8403,7 @@ snapshots: autoprefixer@10.4.23(postcss@8.5.6): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001762 + caniuse-lite: 1.0.30001766 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 @@ -7806,12 +8421,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.9.11: {} - - better-sqlite3@12.5.0: - dependencies: - bindings: 1.5.0 - prebuild-install: 7.1.3 + baseline-browser-mapping@2.9.18: {} binary-extensions@2.3.0: {} @@ -7821,12 +8431,6 @@ snapshots: birpc@2.9.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - boolbase@1.0.0: {} brace-expansion@1.1.12: @@ -7844,23 +8448,16 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.11 - caniuse-lite: 1.0.30001762 - electron-to-chromium: 1.5.267 + baseline-browser-mapping: 2.9.18 + caniuse-lite: 1.0.30001766 + electron-to-chromium: 1.5.278 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) - buffer-builder@0.2.0: {} - buffer-crc32@1.0.0: {} buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -7894,7 +8491,7 @@ snapshots: jiti: 2.6.1 ohash: 2.0.11 pathe: 2.0.3 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 pkg-types: 2.3.0 rc9: 2.1.2 optionalDependencies: @@ -7931,11 +8528,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001762 + caniuse-lite: 1.0.30001766 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001762: {} + caniuse-lite@1.0.30001766: {} chalk@4.1.2: dependencies: @@ -7964,8 +8561,6 @@ snapshots: dependencies: readdirp: 5.0.0 - chownr@1.1.4: {} - chownr@3.0.0: {} ci-info@3.9.0: {} @@ -7976,6 +8571,8 @@ snapshots: dependencies: consola: 3.4.2 + citty@0.2.0: {} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -8016,6 +8613,8 @@ snapshots: comment-parser@1.4.1: {} + comment-parser@1.4.5: {} + commondir@1.0.1: {} compatx@0.2.0: {} @@ -8061,7 +8660,7 @@ snapshots: dependencies: iconv-lite: 0.4.24 - core-js-compat@3.47.0: + core-js-compat@3.48.0: dependencies: browserslist: 4.28.1 @@ -8076,6 +8675,12 @@ snapshots: croner@9.1.0: {} + cross-fetch@4.1.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -8086,7 +8691,7 @@ snapshots: dependencies: uncrypto: 0.1.3 - css-declaration-sorter@7.3.0(postcss@8.5.6): + css-declaration-sorter@7.3.1(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -8115,7 +8720,7 @@ snapshots: cssnano-preset-default@7.0.10(postcss@8.5.6): dependencies: browserslist: 4.28.1 - css-declaration-sorter: 7.3.0(postcss@8.5.6) + css-declaration-sorter: 7.3.1(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) @@ -8162,6 +8767,8 @@ snapshots: csstype@3.2.3: {} + data-uri-to-buffer@4.0.1: {} + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -8180,9 +8787,10 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - db0@0.3.4(better-sqlite3@12.5.0): + db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)): optionalDependencies: - better-sqlite3: 12.5.0 + '@libsql/client': 0.17.0 + drizzle-orm: 0.45.1(@libsql/client@0.17.0) debug@3.2.7: dependencies: @@ -8192,14 +8800,8 @@ snapshots: dependencies: ms: 2.1.3 - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - deep-equal@1.0.1: {} - deep-extend@0.6.0: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -8241,15 +8843,15 @@ snapshots: destroy@1.2.0: {} - detect-libc@1.0.3: {} + detect-libc@2.0.2: {} detect-libc@2.1.2: {} - devalue@5.6.1: {} + devalue@5.6.2: {} didyoumean@1.2.2: {} - diff@8.0.2: {} + diff@8.0.3: {} dir-glob@3.0.1: dependencies: @@ -8281,12 +8883,25 @@ snapshots: dot-prop@10.1.0: dependencies: - type-fest: 5.3.1 + type-fest: 5.4.1 dotenv@16.6.1: {} dotenv@17.2.3: {} + drizzle-kit@0.31.8: + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) + transitivePeerDependencies: + - supports-color + + drizzle-orm@0.45.1(@libsql/client@0.17.0): + optionalDependencies: + '@libsql/client': 0.17.0 + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -8299,7 +8914,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.267: {} + electron-to-chromium@1.5.278: {} emoji-regex@8.0.0: {} @@ -8309,13 +8924,9 @@ snapshots: encodeurl@2.0.0: {} - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - entities@4.5.0: {} - entities@7.0.0: {} + entities@7.0.1: {} error-ex@1.3.4: dependencies: @@ -8380,13 +8991,13 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} es-object-atoms@1.1.1: dependencies: @@ -8409,6 +9020,38 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + esbuild-register@3.6.0(esbuild@0.25.12): + dependencies: + debug: 4.4.3 + esbuild: 0.25.12 + transitivePeerDependencies: + - supports-color + + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -8489,7 +9132,7 @@ snapshots: eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0)(eslint-plugin-n@15.7.0(eslint@9.39.2(jiti@2.6.1)))(eslint-plugin-promise@6.6.0(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-n: 15.7.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-promise: 6.6.0(eslint@9.39.2(jiti@2.6.1)) @@ -8497,6 +9140,11 @@ snapshots: dependencies: pathe: 2.0.3 + eslint-flat-config-utils@3.0.0: + dependencies: + '@eslint/config-helpers': 0.5.1 + pathe: 2.0.3 + eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: get-tsconfig: 4.13.0 @@ -8512,7 +9160,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 @@ -8523,8 +9171,8 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -8532,11 +9180,11 @@ snapshots: dependencies: eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -8560,10 +9208,14 @@ snapshots: optionalDependencies: typescript: 5.9.3 - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import-lite@0.5.0(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.51.0 - comment-parser: 1.4.1 + eslint: 9.39.2(jiti@2.6.1) + + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + dependencies: + '@typescript-eslint/types': 8.53.1 + comment-parser: 1.4.5 debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) @@ -8573,7 +9225,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color @@ -8589,7 +9241,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -8607,7 +9259,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -8618,7 +9270,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -8630,7 +9282,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -8645,24 +9297,24 @@ snapshots: escape-string-regexp: 4.0.0 eslint: 9.39.2(jiti@2.6.1) espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 parse-imports-exports: 0.2.4 semver: 7.7.3 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@61.5.0(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-jsdoc@62.4.1(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@es-joy/jsdoccomment': 0.76.0 + '@es-joy/jsdoccomment': 0.83.0 '@es-joy/resolve.exports': 1.2.0 are-docs-informative: 0.0.2 - comment-parser: 1.4.1 + comment-parser: 1.4.5 debug: 4.4.3 escape-string-regexp: 4.0.0 eslint: 9.39.2(jiti@2.6.1) - espree: 10.4.0 - esquery: 1.6.0 + espree: 11.1.0 + esquery: 1.7.0 html-entities: 2.6.0 object-deep-merge: 2.0.0 parse-imports-exports: 0.2.4 @@ -8694,12 +9346,12 @@ snapshots: resolve: 1.22.11 semver: 6.3.1 - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4): + eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.8.1): dependencies: eslint: 9.39.2(jiti@2.6.1) - prettier: 3.7.4 + prettier: 3.8.1 prettier-linter-helpers: 1.0.1 - synckit: 0.11.11 + synckit: 0.11.12 optionalDependencies: eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) @@ -8709,15 +9361,26 @@ snapshots: eslint-plugin-regexp@2.10.0(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - comment-parser: 1.4.1 + comment-parser: 1.4.5 eslint: 9.39.2(jiti@2.6.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 + eslint-plugin-regexp@3.0.0(eslint@9.39.2(jiti@2.6.1)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + comment-parser: 1.4.5 + eslint: 9.39.2(jiti@2.6.1) + jsdoc-type-pratt-parser: 7.1.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + scslre: 0.3.0 + eslint-plugin-unicorn@44.0.2(eslint@9.39.2(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -8725,10 +9388,10 @@ snapshots: clean-regexp: 1.0.0 eslint: 9.39.2(jiti@2.6.1) eslint-utils: 3.0.0(eslint@9.39.2(jiti@2.6.1)) - esquery: 1.6.0 + esquery: 1.7.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 - lodash: 4.17.21 + lodash: 4.17.23 pluralize: 8.0.0 read-pkg-up: 7.0.1 regexp-tree: 0.1.27 @@ -8739,14 +9402,14 @@ snapshots: eslint-plugin-unicorn@60.0.0(eslint@9.39.2(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.1 clean-regexp: 1.0.0 - core-js-compat: 3.47.0 + core-js-compat: 3.48.0 eslint: 9.39.2(jiti@2.6.1) - esquery: 1.6.0 + esquery: 1.7.0 find-up-simple: 1.0.1 globals: 16.5.0 indent-string: 5.0.0 @@ -8761,14 +9424,14 @@ snapshots: eslint-plugin-unicorn@62.0.0(eslint@9.39.2(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@eslint/plugin-kit': 0.4.1 change-case: 5.4.4 ci-info: 4.3.1 clean-regexp: 1.0.0 - core-js-compat: 3.47.0 + core-js-compat: 3.48.0 eslint: 9.39.2(jiti@2.6.1) - esquery: 1.6.0 + esquery: 1.7.0 find-up-simple: 1.0.1 globals: 16.5.0 indent-string: 5.0.0 @@ -8780,9 +9443,9 @@ snapshots: semver: 7.7.3 strip-indent: 4.1.1 - eslint-plugin-vue@10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))): + eslint-plugin-vue@10.7.0(@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) eslint: 9.39.2(jiti@2.6.1) natural-compare: 1.4.0 nth-check: 2.1.1 @@ -8791,8 +9454,8 @@ snapshots: vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@2.6.1)) xml-name-validator: 4.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.6.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/parser': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@stylistic/eslint-plugin': 5.7.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-vue@9.3.0(eslint@9.39.2(jiti@2.6.1)): dependencies: @@ -8809,7 +9472,7 @@ snapshots: eslint-plugin-vue@9.33.0(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) eslint: 9.39.2(jiti@2.6.1) globals: 13.24.0 natural-compare: 1.4.0 @@ -8821,9 +9484,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@vue/compiler-sfc': 3.5.26 + '@vue/compiler-sfc': 3.5.27 eslint: 9.39.2(jiti@2.6.1) eslint-scope@7.2.2: @@ -8859,9 +9522,11 @@ snapshots: eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.0: {} + eslint@9.39.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 @@ -8881,7 +9546,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -8906,13 +9571,19 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + espree@11.1.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 5.0.0 + espree@9.6.1: dependencies: acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 3.4.3 - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -8954,8 +9625,6 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - expand-template@2.0.3: {} - exsolve@1.0.8: {} fast-deep-equal@3.1.3: {} @@ -8976,7 +9645,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-npm-meta@0.4.7: {} + fast-npm-meta@0.4.8: {} fastq@1.20.1: dependencies: @@ -8986,6 +9655,11 @@ snapshots: optionalDependencies: picomatch: 4.0.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 @@ -9034,14 +9708,16 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + fraction.js@5.3.4: {} fresh@0.5.2: {} fresh@2.0.0: {} - fs-constants@1.0.0: {} - fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -9119,7 +9795,7 @@ snapshots: consola: 3.4.2 defu: 6.1.4 node-fetch-native: 1.6.7 - nypm: 0.6.2 + nypm: 0.6.4 pathe: 2.0.3 git-up@8.1.1: @@ -9131,8 +9807,6 @@ snapshots: dependencies: git-up: 8.1.1 - github-from-package@0.0.0: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -9150,6 +9824,12 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@13.0.0: + dependencies: + minimatch: 10.1.1 + minipass: 7.1.2 + path-scurry: 2.0.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -9171,6 +9851,8 @@ snapshots: globals@16.5.0: {} + globals@17.1.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -9185,14 +9867,14 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globby@15.0.0: + globby@16.1.0: dependencies: '@sindresorhus/merge-streams': 4.0.0 fast-glob: 3.3.3 ignore: 7.0.5 - path-type: 6.0.0 + is-path-inside: 4.0.0 slash: 5.1.0 - unicorn-magic: 0.3.0 + unicorn-magic: 0.4.0 globrex@0.1.2: {} @@ -9206,7 +9888,7 @@ snapshots: dependencies: duplexer: 0.1.2 - h3@1.15.4: + h3@1.15.5: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 @@ -9215,7 +9897,7 @@ snapshots: iron-webcrypto: 1.2.1 node-mock-http: 1.0.4 radix3: 1.1.2 - ufo: 1.6.1 + ufo: 1.6.3 uncrypto: 0.1.3 has-bigints@1.1.0: {} @@ -9242,6 +9924,8 @@ snapshots: hookable@5.5.3: {} + hookable@6.0.1: {} + hosted-git-info@2.8.9: {} html-entities@2.6.0: {} @@ -9329,8 +10013,6 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - ini@4.1.1: {} internal-slot@1.1.0: @@ -9339,9 +10021,9 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ioredis@5.8.2: + ioredis@5.9.2: dependencies: - '@ioredis/commands': 1.4.0 + '@ioredis/commands': 1.5.0 cluster-key-slot: 1.1.2 debug: 4.4.3 denque: 2.1.0 @@ -9499,7 +10181,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 is-weakmap@2.0.2: {} @@ -9544,6 +10226,8 @@ snapshots: jiti@2.6.1: {} + js-base64@3.7.8: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -9556,7 +10240,7 @@ snapshots: jsdoc-type-pratt-parser@5.1.1: {} - jsdoc-type-pratt-parser@6.10.0: {} + jsdoc-type-pratt-parser@7.1.0: {} jsesc@3.0.2: {} @@ -9681,28 +10365,43 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libsql@0.5.22: + dependencies: + '@neon-rs/load': 0.0.4 + detect-libc: 2.0.2 + optionalDependencies: + '@libsql/darwin-arm64': 0.5.22 + '@libsql/darwin-x64': 0.5.22 + '@libsql/linux-arm-gnueabihf': 0.5.22 + '@libsql/linux-arm-musleabihf': 0.5.22 + '@libsql/linux-arm64-gnu': 0.5.22 + '@libsql/linux-arm64-musl': 0.5.22 + '@libsql/linux-x64-gnu': 0.5.22 + '@libsql/linux-x64-musl': 0.5.22 + '@libsql/win32-x64-msvc': 0.5.22 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} listhen@1.9.0: dependencies: - '@parcel/watcher': 2.5.1 - '@parcel/watcher-wasm': 2.5.1 + '@parcel/watcher': 2.5.6 + '@parcel/watcher-wasm': 2.5.6 citty: 0.1.6 clipboardy: 4.0.0 consola: 3.4.2 crossws: 0.3.5 defu: 6.1.4 get-port-please: 3.2.0 - h3: 1.15.4 + h3: 1.15.5 http-shutdown: 1.2.2 jiti: 2.6.1 mlly: 1.8.0 node-forge: 1.3.3 pathe: 1.1.2 std-env: 3.10.0 - ufo: 1.6.1 + ufo: 1.6.3 untun: 0.1.3 uqr: 0.1.2 @@ -9738,10 +10437,12 @@ snapshots: lodash.uniq@4.5.0: {} - lodash@4.17.21: {} + lodash@4.17.23: {} lru-cache@10.4.3: {} + lru-cache@11.2.4: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -9753,7 +10454,7 @@ snapshots: mlly: 1.8.0 regexp-tree: 0.1.27 type-level-regexp: 0.1.17 - ufo: 1.6.1 + ufo: 1.6.3 unplugin: 2.3.11 magic-string-ast@1.0.3: @@ -9766,8 +10467,8 @@ snapshots: magicast@0.5.1: dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 source-map-js: 1.2.1 math-intrinsics@1.1.0: {} @@ -9801,14 +10502,10 @@ snapshots: dependencies: mime-db: 1.54.0 - mime@3.0.0: {} - mime@4.1.0: {} mimic-fn@4.0.0: {} - mimic-response@3.1.0: {} - min-indent@1.0.1: {} minimatch@10.1.1: @@ -9841,14 +10538,12 @@ snapshots: mitt@3.0.1: {} - mkdirp-classic@0.5.3: {} - mlly@1.8.0: dependencies: acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.1 + ufo: 1.6.3 mocked-exports@0.1.1: {} @@ -9870,28 +10565,26 @@ snapshots: nanotar@0.2.0: {} - napi-build-utils@2.0.0: {} - napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} negotiator@0.6.3: {} - nitropack@2.12.9(better-sqlite3@12.5.0): + nitropack@2.13.1(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)): dependencies: - '@cloudflare/kv-asset-handler': 0.4.1 - '@rollup/plugin-alias': 5.1.1(rollup@4.54.0) - '@rollup/plugin-commonjs': 28.0.9(rollup@4.54.0) - '@rollup/plugin-inject': 5.0.5(rollup@4.54.0) - '@rollup/plugin-json': 6.1.0(rollup@4.54.0) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.54.0) - '@rollup/plugin-replace': 6.0.3(rollup@4.54.0) - '@rollup/plugin-terser': 0.4.4(rollup@4.54.0) - '@vercel/nft': 0.30.4(rollup@4.54.0) + '@cloudflare/kv-asset-handler': 0.4.2 + '@rollup/plugin-alias': 6.0.0(rollup@4.56.0) + '@rollup/plugin-commonjs': 29.0.0(rollup@4.56.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.56.0) + '@rollup/plugin-json': 6.1.0(rollup@4.56.0) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.56.0) + '@rollup/plugin-replace': 6.0.3(rollup@4.56.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.56.0) + '@vercel/nft': 1.3.0(rollup@4.56.0) archiver: 7.0.1 c12: 3.3.3(magicast@0.5.1) - chokidar: 4.0.3 + chokidar: 5.0.0 citty: 0.1.6 compatx: 0.2.0 confbox: 0.2.2 @@ -9899,20 +10592,20 @@ snapshots: cookie-es: 2.0.0 croner: 9.1.0 crossws: 0.3.5 - db0: 0.3.4(better-sqlite3@12.5.0) + db0: 0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)) defu: 6.1.4 destr: 2.0.5 dot-prop: 10.1.0 - esbuild: 0.25.12 + esbuild: 0.27.2 escape-string-regexp: 5.0.0 etag: 1.8.1 exsolve: 1.0.8 - globby: 15.0.0 + globby: 16.1.0 gzip-size: 7.0.0 - h3: 1.15.4 + h3: 1.15.5 hookable: 5.5.3 httpxy: 0.1.7 - ioredis: 5.8.2 + ioredis: 5.9.2 jiti: 2.6.1 klona: 2.0.6 knitwork: 1.3.0 @@ -9926,28 +10619,28 @@ snapshots: ofetch: 1.5.1 ohash: 2.0.11 pathe: 2.0.3 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 pkg-types: 2.3.0 pretty-bytes: 7.1.0 radix3: 1.1.2 - rollup: 4.54.0 - rollup-plugin-visualizer: 6.0.5(rollup@4.54.0) + rollup: 4.56.0 + rollup-plugin-visualizer: 6.0.5(rollup@4.56.0) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 serve-static: 2.2.1 source-map: 0.7.6 std-env: 3.10.0 - ufo: 1.6.1 + ufo: 1.6.3 ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.5.0 unenv: 2.0.0-rc.24 unimport: 5.6.0 unplugin-utils: 0.3.1 - unstorage: 1.17.3(db0@0.3.4(better-sqlite3@12.5.0))(ioredis@5.8.2) + unstorage: 1.17.4(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(ioredis@5.9.2) untyped: 2.0.0 - unwasm: 0.3.11 + unwasm: 0.5.3 youch: 4.1.0-beta.13 youch-core: 0.3.3 transitivePeerDependencies: @@ -9980,18 +10673,22 @@ snapshots: - supports-color - uploadthing - node-abi@3.85.0: - dependencies: - semver: 7.7.3 - node-addon-api@7.1.1: {} + node-domexception@1.0.0: {} + 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.3: {} node-gyp-build@4.8.4: {} @@ -10026,18 +10723,18 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2): + nuxt@4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2): dependencies: - '@dxup/nuxt': 0.2.2(magicast@0.5.1) - '@nuxt/cli': 3.31.3(cac@6.7.14)(magicast@0.5.1) - '@nuxt/devtools': 3.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) - '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@nuxt/nitro-server': 4.2.2(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(typescript@5.9.3) - '@nuxt/schema': 4.2.2 + '@dxup/nuxt': 0.3.2(magicast@0.5.1) + '@nuxt/cli': 3.32.0(cac@6.7.14)(magicast@0.5.1) + '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) + '@nuxt/kit': 4.3.0(magicast@0.5.1) + '@nuxt/nitro-server': 4.3.0(@libsql/client@0.17.0)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(typescript@5.9.3) + '@nuxt/schema': 4.3.0 '@nuxt/telemetry': 2.6.6(magicast@0.5.1) - '@nuxt/vite-builder': 4.2.2(@types/node@25.0.3)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.2(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.26)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2) - '@unhead/vue': 2.1.1(vue@3.5.26(typescript@5.9.3)) - '@vue/shared': 3.5.26 + '@nuxt/vite-builder': 4.3.0(@types/node@25.0.10)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.3.0(@libsql/client@0.17.0)(@parcel/watcher@2.5.6)(@types/node@25.0.10)(@vue/compiler-sfc@3.5.27)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(drizzle-orm@0.45.1(@libsql/client@0.17.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.56.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))(yaml@2.8.2) + '@unhead/vue': 2.1.2(vue@3.5.27(typescript@5.9.3)) + '@vue/shared': 3.5.27 c12: 3.3.3(magicast@0.5.1) chokidar: 5.0.0 compatx: 0.2.0 @@ -10045,11 +10742,11 @@ snapshots: cookie-es: 2.0.0 defu: 6.1.4 destr: 2.0.5 - devalue: 5.6.1 + devalue: 5.6.2 errx: 0.1.0 escape-string-regexp: 5.0.0 exsolve: 1.0.8 - h3: 1.15.4 + h3: 1.15.5 hookable: 5.5.3 ignore: 7.0.5 impound: 1.0.0 @@ -10059,35 +10756,35 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 nanotar: 0.2.0 - nypm: 0.6.2 + nypm: 0.6.4 ofetch: 1.5.1 ohash: 2.0.11 on-change: 6.0.1 - oxc-minify: 0.102.0 - oxc-parser: 0.102.0 - oxc-transform: 0.102.0 - oxc-walker: 0.6.0(oxc-parser@0.102.0) + oxc-minify: 0.110.0 + oxc-parser: 0.110.0 + oxc-transform: 0.110.0 + oxc-walker: 0.7.0(oxc-parser@0.110.0) pathe: 2.0.3 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 pkg-types: 2.3.0 - radix3: 1.1.2 + rou3: 0.7.12 scule: 1.3.0 semver: 7.7.3 std-env: 3.10.0 tinyglobby: 0.2.15 - ufo: 1.6.1 + ufo: 1.6.3 ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.5.0 unimport: 5.6.0 unplugin: 2.3.11 - unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.26)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) + unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) untyped: 2.0.0 - vue: 3.5.26(typescript@5.9.3) - vue-router: 4.6.4(vue@3.5.26(typescript@5.9.3)) + vue: 3.5.27(typescript@5.9.3) + vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3)) optionalDependencies: - '@parcel/watcher': 2.5.1 - '@types/node': 25.0.3 + '@parcel/watcher': 2.5.6 + '@types/node': 25.0.10 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10149,12 +10846,10 @@ snapshots: - xml2js - yaml - nypm@0.6.2: + nypm@0.6.4: dependencies: - citty: 0.1.6 - consola: 3.4.2 + citty: 0.2.0 pathe: 2.0.3 - pkg-types: 2.3.0 tinyexec: 1.0.2 object-assign@4.1.1: {} @@ -10202,7 +10897,7 @@ snapshots: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 - ufo: 1.6.1 + ufo: 1.6.3 ohash@2.0.11: {} @@ -10255,66 +10950,81 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-minify@0.102.0: + oxc-minify@0.110.0: optionalDependencies: - '@oxc-minify/binding-android-arm64': 0.102.0 - '@oxc-minify/binding-darwin-arm64': 0.102.0 - '@oxc-minify/binding-darwin-x64': 0.102.0 - '@oxc-minify/binding-freebsd-x64': 0.102.0 - '@oxc-minify/binding-linux-arm-gnueabihf': 0.102.0 - '@oxc-minify/binding-linux-arm64-gnu': 0.102.0 - '@oxc-minify/binding-linux-arm64-musl': 0.102.0 - '@oxc-minify/binding-linux-riscv64-gnu': 0.102.0 - '@oxc-minify/binding-linux-s390x-gnu': 0.102.0 - '@oxc-minify/binding-linux-x64-gnu': 0.102.0 - '@oxc-minify/binding-linux-x64-musl': 0.102.0 - '@oxc-minify/binding-openharmony-arm64': 0.102.0 - '@oxc-minify/binding-wasm32-wasi': 0.102.0 - '@oxc-minify/binding-win32-arm64-msvc': 0.102.0 - '@oxc-minify/binding-win32-x64-msvc': 0.102.0 + '@oxc-minify/binding-android-arm-eabi': 0.110.0 + '@oxc-minify/binding-android-arm64': 0.110.0 + '@oxc-minify/binding-darwin-arm64': 0.110.0 + '@oxc-minify/binding-darwin-x64': 0.110.0 + '@oxc-minify/binding-freebsd-x64': 0.110.0 + '@oxc-minify/binding-linux-arm-gnueabihf': 0.110.0 + '@oxc-minify/binding-linux-arm-musleabihf': 0.110.0 + '@oxc-minify/binding-linux-arm64-gnu': 0.110.0 + '@oxc-minify/binding-linux-arm64-musl': 0.110.0 + '@oxc-minify/binding-linux-ppc64-gnu': 0.110.0 + '@oxc-minify/binding-linux-riscv64-gnu': 0.110.0 + '@oxc-minify/binding-linux-riscv64-musl': 0.110.0 + '@oxc-minify/binding-linux-s390x-gnu': 0.110.0 + '@oxc-minify/binding-linux-x64-gnu': 0.110.0 + '@oxc-minify/binding-linux-x64-musl': 0.110.0 + '@oxc-minify/binding-openharmony-arm64': 0.110.0 + '@oxc-minify/binding-wasm32-wasi': 0.110.0 + '@oxc-minify/binding-win32-arm64-msvc': 0.110.0 + '@oxc-minify/binding-win32-ia32-msvc': 0.110.0 + '@oxc-minify/binding-win32-x64-msvc': 0.110.0 - oxc-parser@0.102.0: + oxc-parser@0.110.0: dependencies: - '@oxc-project/types': 0.102.0 + '@oxc-project/types': 0.110.0 optionalDependencies: - '@oxc-parser/binding-android-arm64': 0.102.0 - '@oxc-parser/binding-darwin-arm64': 0.102.0 - '@oxc-parser/binding-darwin-x64': 0.102.0 - '@oxc-parser/binding-freebsd-x64': 0.102.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.102.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.102.0 - '@oxc-parser/binding-linux-arm64-musl': 0.102.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.102.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.102.0 - '@oxc-parser/binding-linux-x64-gnu': 0.102.0 - '@oxc-parser/binding-linux-x64-musl': 0.102.0 - '@oxc-parser/binding-openharmony-arm64': 0.102.0 - '@oxc-parser/binding-wasm32-wasi': 0.102.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.102.0 - '@oxc-parser/binding-win32-x64-msvc': 0.102.0 + '@oxc-parser/binding-android-arm-eabi': 0.110.0 + '@oxc-parser/binding-android-arm64': 0.110.0 + '@oxc-parser/binding-darwin-arm64': 0.110.0 + '@oxc-parser/binding-darwin-x64': 0.110.0 + '@oxc-parser/binding-freebsd-x64': 0.110.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.110.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.110.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.110.0 + '@oxc-parser/binding-linux-arm64-musl': 0.110.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.110.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.110.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.110.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.110.0 + '@oxc-parser/binding-linux-x64-gnu': 0.110.0 + '@oxc-parser/binding-linux-x64-musl': 0.110.0 + '@oxc-parser/binding-openharmony-arm64': 0.110.0 + '@oxc-parser/binding-wasm32-wasi': 0.110.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.110.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.110.0 + '@oxc-parser/binding-win32-x64-msvc': 0.110.0 - oxc-transform@0.102.0: + oxc-transform@0.110.0: optionalDependencies: - '@oxc-transform/binding-android-arm64': 0.102.0 - '@oxc-transform/binding-darwin-arm64': 0.102.0 - '@oxc-transform/binding-darwin-x64': 0.102.0 - '@oxc-transform/binding-freebsd-x64': 0.102.0 - '@oxc-transform/binding-linux-arm-gnueabihf': 0.102.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.102.0 - '@oxc-transform/binding-linux-arm64-musl': 0.102.0 - '@oxc-transform/binding-linux-riscv64-gnu': 0.102.0 - '@oxc-transform/binding-linux-s390x-gnu': 0.102.0 - '@oxc-transform/binding-linux-x64-gnu': 0.102.0 - '@oxc-transform/binding-linux-x64-musl': 0.102.0 - '@oxc-transform/binding-openharmony-arm64': 0.102.0 - '@oxc-transform/binding-wasm32-wasi': 0.102.0 - '@oxc-transform/binding-win32-arm64-msvc': 0.102.0 - '@oxc-transform/binding-win32-x64-msvc': 0.102.0 + '@oxc-transform/binding-android-arm-eabi': 0.110.0 + '@oxc-transform/binding-android-arm64': 0.110.0 + '@oxc-transform/binding-darwin-arm64': 0.110.0 + '@oxc-transform/binding-darwin-x64': 0.110.0 + '@oxc-transform/binding-freebsd-x64': 0.110.0 + '@oxc-transform/binding-linux-arm-gnueabihf': 0.110.0 + '@oxc-transform/binding-linux-arm-musleabihf': 0.110.0 + '@oxc-transform/binding-linux-arm64-gnu': 0.110.0 + '@oxc-transform/binding-linux-arm64-musl': 0.110.0 + '@oxc-transform/binding-linux-ppc64-gnu': 0.110.0 + '@oxc-transform/binding-linux-riscv64-gnu': 0.110.0 + '@oxc-transform/binding-linux-riscv64-musl': 0.110.0 + '@oxc-transform/binding-linux-s390x-gnu': 0.110.0 + '@oxc-transform/binding-linux-x64-gnu': 0.110.0 + '@oxc-transform/binding-linux-x64-musl': 0.110.0 + '@oxc-transform/binding-openharmony-arm64': 0.110.0 + '@oxc-transform/binding-wasm32-wasi': 0.110.0 + '@oxc-transform/binding-win32-arm64-msvc': 0.110.0 + '@oxc-transform/binding-win32-ia32-msvc': 0.110.0 + '@oxc-transform/binding-win32-x64-msvc': 0.110.0 - oxc-walker@0.6.0(oxc-parser@0.102.0): + oxc-walker@0.7.0(oxc-parser@0.110.0): dependencies: magic-regexp: 0.10.0 - oxc-parser: 0.102.0 + oxc-parser: 0.110.0 p-limit@2.3.0: dependencies: @@ -10356,7 +11066,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.28.6 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -10410,19 +11120,22 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.4 + minipass: 7.1.2 + path-to-regexp@6.3.0: {} path-type@4.0.0: {} - path-type@6.0.0: {} - pathe@1.1.2: {} pathe@2.0.3: {} perfect-debounce@1.0.0: {} - perfect-debounce@2.0.0: {} + perfect-debounce@2.1.0: {} picocolors@1.1.1: {} @@ -10432,10 +11145,10 @@ snapshots: pify@2.3.0: {} - pinia@3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)): + pinia@3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)): dependencies: '@vue/devtools-api': 7.7.9 - vue: 3.5.26(typescript@5.9.3) + vue: 3.5.27(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -10664,28 +11377,13 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - 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.85.0 - pump: 3.0.3 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.4 - tunnel-agent: 0.6.0 - prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 - prettier@3.7.4: {} + prettier@3.8.1: {} pretty-bytes@7.1.0: {} @@ -10693,6 +11391,8 @@ snapshots: process@0.11.10: {} + promise-limit@2.7.0: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -10700,11 +11400,6 @@ snapshots: protocols@2.0.2: {} - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - punycode@2.3.1: {} quansync@0.2.11: {} @@ -10724,13 +11419,6 @@ snapshots: defu: 6.1.4 destr: 2.0.5 - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -10758,12 +11446,6 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 @@ -10862,43 +11544,48 @@ snapshots: rfdc@1.4.1: {} - rollup-plugin-visualizer@6.0.5(rollup@4.54.0): + rollup-plugin-visualizer@6.0.5(rollup@4.56.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.54.0 + rollup: 4.56.0 - rollup@4.54.0: + rollup@4.56.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.54.0 - '@rollup/rollup-android-arm64': 4.54.0 - '@rollup/rollup-darwin-arm64': 4.54.0 - '@rollup/rollup-darwin-x64': 4.54.0 - '@rollup/rollup-freebsd-arm64': 4.54.0 - '@rollup/rollup-freebsd-x64': 4.54.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 - '@rollup/rollup-linux-arm-musleabihf': 4.54.0 - '@rollup/rollup-linux-arm64-gnu': 4.54.0 - '@rollup/rollup-linux-arm64-musl': 4.54.0 - '@rollup/rollup-linux-loong64-gnu': 4.54.0 - '@rollup/rollup-linux-ppc64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-musl': 4.54.0 - '@rollup/rollup-linux-s390x-gnu': 4.54.0 - '@rollup/rollup-linux-x64-gnu': 4.54.0 - '@rollup/rollup-linux-x64-musl': 4.54.0 - '@rollup/rollup-openharmony-arm64': 4.54.0 - '@rollup/rollup-win32-arm64-msvc': 4.54.0 - '@rollup/rollup-win32-ia32-msvc': 4.54.0 - '@rollup/rollup-win32-x64-gnu': 4.54.0 - '@rollup/rollup-win32-x64-msvc': 4.54.0 + '@rollup/rollup-android-arm-eabi': 4.56.0 + '@rollup/rollup-android-arm64': 4.56.0 + '@rollup/rollup-darwin-arm64': 4.56.0 + '@rollup/rollup-darwin-x64': 4.56.0 + '@rollup/rollup-freebsd-arm64': 4.56.0 + '@rollup/rollup-freebsd-x64': 4.56.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.56.0 + '@rollup/rollup-linux-arm-musleabihf': 4.56.0 + '@rollup/rollup-linux-arm64-gnu': 4.56.0 + '@rollup/rollup-linux-arm64-musl': 4.56.0 + '@rollup/rollup-linux-loong64-gnu': 4.56.0 + '@rollup/rollup-linux-loong64-musl': 4.56.0 + '@rollup/rollup-linux-ppc64-gnu': 4.56.0 + '@rollup/rollup-linux-ppc64-musl': 4.56.0 + '@rollup/rollup-linux-riscv64-gnu': 4.56.0 + '@rollup/rollup-linux-riscv64-musl': 4.56.0 + '@rollup/rollup-linux-s390x-gnu': 4.56.0 + '@rollup/rollup-linux-x64-gnu': 4.56.0 + '@rollup/rollup-linux-x64-musl': 4.56.0 + '@rollup/rollup-openbsd-x64': 4.56.0 + '@rollup/rollup-openharmony-arm64': 4.56.0 + '@rollup/rollup-win32-arm64-msvc': 4.56.0 + '@rollup/rollup-win32-ia32-msvc': 4.56.0 + '@rollup/rollup-win32-x64-gnu': 4.56.0 + '@rollup/rollup-win32-x64-msvc': 4.56.0 fsevents: 2.3.3 + rou3@0.7.12: {} + run-applescript@7.1.0: {} run-parallel@1.2.0: @@ -10938,68 +11625,67 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.97.1: + sass-embedded-all-unknown@1.97.3: dependencies: - sass: 1.97.1 + sass: 1.97.3 optional: true - sass-embedded-android-arm64@1.97.1: + sass-embedded-android-arm64@1.97.3: optional: true - sass-embedded-android-arm@1.97.1: + sass-embedded-android-arm@1.97.3: optional: true - sass-embedded-android-riscv64@1.97.1: + sass-embedded-android-riscv64@1.97.3: optional: true - sass-embedded-android-x64@1.97.1: + sass-embedded-android-x64@1.97.3: optional: true - sass-embedded-darwin-arm64@1.97.1: + sass-embedded-darwin-arm64@1.97.3: optional: true - sass-embedded-darwin-x64@1.97.1: + sass-embedded-darwin-x64@1.97.3: optional: true - sass-embedded-linux-arm64@1.97.1: + sass-embedded-linux-arm64@1.97.3: optional: true - sass-embedded-linux-arm@1.97.1: + sass-embedded-linux-arm@1.97.3: optional: true - sass-embedded-linux-musl-arm64@1.97.1: + sass-embedded-linux-musl-arm64@1.97.3: optional: true - sass-embedded-linux-musl-arm@1.97.1: + sass-embedded-linux-musl-arm@1.97.3: optional: true - sass-embedded-linux-musl-riscv64@1.97.1: + sass-embedded-linux-musl-riscv64@1.97.3: optional: true - sass-embedded-linux-musl-x64@1.97.1: + sass-embedded-linux-musl-x64@1.97.3: optional: true - sass-embedded-linux-riscv64@1.97.1: + sass-embedded-linux-riscv64@1.97.3: optional: true - sass-embedded-linux-x64@1.97.1: + sass-embedded-linux-x64@1.97.3: optional: true - sass-embedded-unknown-all@1.97.1: + sass-embedded-unknown-all@1.97.3: dependencies: - sass: 1.97.1 + sass: 1.97.3 optional: true - sass-embedded-win32-arm64@1.97.1: + sass-embedded-win32-arm64@1.97.3: optional: true - sass-embedded-win32-x64@1.97.1: + sass-embedded-win32-x64@1.97.3: optional: true - sass-embedded@1.97.1: + sass-embedded@1.97.3: dependencies: - '@bufbuild/protobuf': 2.10.2 - buffer-builder: 0.2.0 + '@bufbuild/protobuf': 2.11.0 colorjs.io: 0.5.2 immutable: 5.1.4 rxjs: 7.8.2 @@ -11007,35 +11693,35 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.97.1 - sass-embedded-android-arm: 1.97.1 - sass-embedded-android-arm64: 1.97.1 - sass-embedded-android-riscv64: 1.97.1 - sass-embedded-android-x64: 1.97.1 - sass-embedded-darwin-arm64: 1.97.1 - sass-embedded-darwin-x64: 1.97.1 - sass-embedded-linux-arm: 1.97.1 - sass-embedded-linux-arm64: 1.97.1 - sass-embedded-linux-musl-arm: 1.97.1 - sass-embedded-linux-musl-arm64: 1.97.1 - sass-embedded-linux-musl-riscv64: 1.97.1 - sass-embedded-linux-musl-x64: 1.97.1 - sass-embedded-linux-riscv64: 1.97.1 - sass-embedded-linux-x64: 1.97.1 - sass-embedded-unknown-all: 1.97.1 - sass-embedded-win32-arm64: 1.97.1 - sass-embedded-win32-x64: 1.97.1 + sass-embedded-all-unknown: 1.97.3 + sass-embedded-android-arm: 1.97.3 + sass-embedded-android-arm64: 1.97.3 + sass-embedded-android-riscv64: 1.97.3 + sass-embedded-android-x64: 1.97.3 + sass-embedded-darwin-arm64: 1.97.3 + sass-embedded-darwin-x64: 1.97.3 + sass-embedded-linux-arm: 1.97.3 + sass-embedded-linux-arm64: 1.97.3 + sass-embedded-linux-musl-arm: 1.97.3 + sass-embedded-linux-musl-arm64: 1.97.3 + sass-embedded-linux-musl-riscv64: 1.97.3 + sass-embedded-linux-musl-x64: 1.97.3 + sass-embedded-linux-riscv64: 1.97.3 + sass-embedded-linux-x64: 1.97.3 + sass-embedded-unknown-all: 1.97.3 + sass-embedded-win32-arm64: 1.97.3 + sass-embedded-win32-x64: 1.97.3 - sass@1.97.1: + sass@1.97.3: dependencies: chokidar: 4.0.3 immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.1 + '@parcel/watcher': 2.5.6 optional: true - sax@1.4.3: {} + sax@1.4.4: {} scslre@0.3.0: dependencies: @@ -11071,7 +11757,7 @@ snapshots: dependencies: randombytes: 2.1.0 - seroval@1.4.2: {} + seroval@1.5.0: {} serve-placeholder@2.0.2: dependencies: @@ -11150,14 +11836,6 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - simple-git@3.30.0: dependencies: '@kwsites/file-exists': 1.1.1 @@ -11216,7 +11894,7 @@ snapshots: speakingurl@14.0.1: {} - srvx@0.9.8: {} + srvx@0.10.1: {} stable-hash-x@0.2.0: {} @@ -11305,8 +11983,6 @@ snapshots: strip-indent@4.1.1: {} - strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} strip-literal@3.1.0: @@ -11355,7 +12031,7 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.4.3 + sax: 1.4.4 sync-child-process@1.0.2: dependencies: @@ -11363,7 +12039,7 @@ snapshots: sync-message-port@1.1.3: {} - synckit@0.11.11: + synckit@0.11.12: dependencies: '@pkgr/core': 0.2.9 @@ -11413,21 +12089,6 @@ snapshots: - tsx - yaml - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.3 - tar-stream: 2.2.0 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - tar-stream@3.1.7: dependencies: b4a: 1.7.3 @@ -11437,7 +12098,7 @@ snapshots: - bare-abort-controller - react-native-b4a - tar@7.5.2: + tar@7.5.6: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -11445,7 +12106,7 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - terser@5.44.1: + terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 @@ -11496,7 +12157,7 @@ snapshots: dependencies: typescript: 5.9.3 - ts-api-utils@2.3.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -11524,10 +12185,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -11538,7 +12195,7 @@ snapshots: type-fest@0.8.1: {} - type-fest@5.3.1: + type-fest@5.4.1: dependencies: tagged-tag: 1.0.0 @@ -11584,7 +12241,7 @@ snapshots: typescript@5.9.3: {} - ufo@1.6.1: {} + ufo@1.6.3: {} ultrahtml@1.6.0: {} @@ -11610,14 +12267,16 @@ snapshots: dependencies: pathe: 2.0.3 - unhead@2.1.1: + unhead@2.1.2: dependencies: - hookable: 5.5.3 + hookable: 6.0.1 unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} + unicorn-magic@0.4.0: {} + unimport@5.6.0: dependencies: acorn: 8.15.0 @@ -11647,12 +12306,12 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.3 - unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.26)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)): + unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)): dependencies: - '@babel/generator': 7.28.5 - '@vue-macros/common': 3.1.1(vue@3.5.26(typescript@5.9.3)) - '@vue/compiler-sfc': 3.5.26 - '@vue/language-core': 3.2.1 + '@babel/generator': 7.28.6 + '@vue-macros/common': 3.1.2(vue@3.5.27(typescript@5.9.3)) + '@vue/compiler-sfc': 3.5.27 + '@vue/language-core': 3.2.3 ast-walker-scope: 0.8.3 chokidar: 5.0.0 json5: 2.2.3 @@ -11668,7 +12327,7 @@ snapshots: unplugin-utils: 0.3.1 yaml: 2.8.2 optionalDependencies: - vue-router: 4.6.4(vue@3.5.26(typescript@5.9.3)) + vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3)) transitivePeerDependencies: - vue @@ -11703,19 +12362,19 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unstorage@1.17.3(db0@0.3.4(better-sqlite3@12.5.0))(ioredis@5.8.2): + unstorage@1.17.4(db0@0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)))(ioredis@5.9.2): dependencies: anymatch: 3.1.3 - chokidar: 4.0.3 + chokidar: 5.0.0 destr: 2.0.5 - h3: 1.15.4 - lru-cache: 10.4.3 + h3: 1.15.5 + lru-cache: 11.2.4 node-fetch-native: 1.6.7 ofetch: 1.5.1 - ufo: 1.6.1 + ufo: 1.6.3 optionalDependencies: - db0: 0.3.4(better-sqlite3@12.5.0) - ioredis: 5.8.2 + db0: 0.3.4(@libsql/client@0.17.0)(drizzle-orm@0.45.1(@libsql/client@0.17.0)) + ioredis: 5.9.2 untun@0.1.3: dependencies: @@ -11731,14 +12390,14 @@ snapshots: knitwork: 1.3.0 scule: 1.3.0 - unwasm@0.3.11: + unwasm@0.5.3: dependencies: + exsolve: 1.0.8 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.0 pathe: 2.0.3 pkg-types: 2.3.0 - unplugin: 2.3.11 update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: @@ -11763,23 +12422,23 @@ snapshots: vary@1.1.2: {} - vite-dev-rpc@1.1.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: birpc: 2.9.0 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vite-hot-client: 2.1.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - vite-hot-client@2.1.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node@5.2.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@5.3.0(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 - es-module-lexer: 1.7.0 + es-module-lexer: 2.0.0 obug: 2.1.1 pathe: 2.0.3 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -11793,75 +12452,75 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-checker@0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.28.6 chokidar: 4.0.3 npm-run-path: 6.0.0 picocolors: 1.1.1 picomatch: 4.0.3 tiny-invariant: 1.3.3 tinyglobby: 0.2.15 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.39.2(jiti@2.6.1) optionator: 0.9.4 typescript: 5.9.3 - vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.0(magicast@0.5.1))(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: ansis: 4.2.0 debug: 4.4.3 error-stack-parser-es: 1.0.5 ohash: 2.0.11 open: 10.2.0 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vite-dev-rpc: 1.1.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) optionalDependencies: - '@nuxt/kit': 4.2.2(magicast@0.5.1) + '@nuxt/kit': 4.3.0(magicast@0.5.1) transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.2.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)): + vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vue: 3.5.26(typescript@5.9.3) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vue: 3.5.27(typescript@5.9.3) - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - typescript - vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(sass-embedded@1.97.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.54.0 + rollup: 4.56.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.0.3 + '@types/node': 25.0.10 fsevents: 2.3.3 jiti: 2.6.1 - sass: 1.97.1 - sass-embedded: 1.97.1 - terser: 5.44.1 + sass: 1.97.3 + sass-embedded: 1.97.3 + terser: 5.46.0 tsx: 4.21.0 yaml: 2.8.2 @@ -11869,7 +12528,7 @@ snapshots: vue-bundle-renderer@2.2.0: dependencies: - ufo: 1.6.1 + ufo: 1.6.3 vue-devtools-stub@0.1.0: {} @@ -11880,7 +12539,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -11892,31 +12551,33 @@ snapshots: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.6.0 - lodash: 4.17.21 + esquery: 1.7.0 + lodash: 4.17.23 semver: 7.7.3 transitivePeerDependencies: - supports-color - vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)): + vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.26(typescript@5.9.3) + vue: 3.5.27(typescript@5.9.3) - vue@3.5.26(typescript@5.9.3): + vue@3.5.27(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.5.26 - '@vue/compiler-sfc': 3.5.26 - '@vue/runtime-dom': 3.5.26 - '@vue/server-renderer': 3.5.26(vue@3.5.26(typescript@5.9.3)) - '@vue/shared': 3.5.26 + '@vue/compiler-dom': 3.5.27 + '@vue/compiler-sfc': 3.5.27 + '@vue/runtime-dom': 3.5.27 + '@vue/server-renderer': 3.5.27(vue@3.5.27(typescript@5.9.3)) + '@vue/shared': 3.5.27 optionalDependencies: typescript: 5.9.3 - vuedraggable@4.1.0(vue@3.5.26(typescript@5.9.3)): + vuedraggable@4.1.0(vue@3.5.27(typescript@5.9.3)): dependencies: sortablejs: 1.14.0 - vue: 3.5.26(typescript@5.9.3) + vue: 3.5.27(typescript@5.9.3) + + web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} @@ -11949,7 +12610,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 which-collection@1.0.2: dependencies: @@ -11958,7 +12619,7 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.19: + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 @@ -11992,7 +12653,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.18.3: {} + ws@8.19.0: {} wsl-utils@0.1.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..be79590 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +ignoredBuiltDependencies: + - esbuild + +onlyBuiltDependencies: + - '@parcel/watcher' + - better-sqlite3 + - unrs-resolver diff --git a/public/cassette.svg b/public/cassette.svg new file mode 100644 index 0000000..001134d --- /dev/null +++ b/public/cassette.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/disc.svg b/public/disc.svg new file mode 100644 index 0000000..643b406 --- /dev/null +++ b/public/disc.svg @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/scripts/update-esid.ts b/scripts/update-esid.ts new file mode 100644 index 0000000..47aea2a --- /dev/null +++ b/scripts/update-esid.ts @@ -0,0 +1,65 @@ +import { db } from '../server/services/db' +import { tracks, compilations, playlists, sql } from '../server/schema' +import { eq, and } from 'drizzle-orm' + +async function updateEsid() { + console.log('🚀 Démarrage de la mise à jour des esid') + + try { + // 1. Mettre à jour les esid pour les compilations + console.log('📋 Mise à jour des esid pour les compilations...') + await db.run(sql` + UPDATE tracks + SET esid = ( + SELECT c.box_id || c.side || t."order" + FROM compilations c + WHERE c.id = tracks.source_id AND tracks.source_type = 'compilation' + ) + WHERE source_type = 'compilation'; + `) + + // 2. Mettre à jour les esid pour les playlists + console.log('📋 Mise à jour des esid pour les playlists...') + + // Récupérer toutes les playlists + const allPlaylists = await db.select().from(playlists).all() + + for (const playlist of allPlaylists) { + // Récupérer les tracks de la playlist triés par ordre + const playlistTracks = await db + .select() + .from(tracks) + .where(and(eq(tracks.sourceType, 'playlist'), eq(tracks.sourceId, playlist.id))) + .orderBy(tracks.order) + + // Mettre à jour chaque track avec le bon esid + for (let i = 0; i < playlistTracks.length; i++) { + const track = playlistTracks[i] + const esidSuffix = + i < 26 + ? String.fromCharCode(65 + i) // A-Z pour les 26 premières pistes + : (i + 1).toString() // Numéros pour les suivantes + + await db + .update(tracks) + .set({ esid: `${playlist.name}${esidSuffix}` }) + .where(eq(tracks.id, track.id)) + } + + console.log(`✅ Playlist ${playlist.name} mise à jour (${playlistTracks.length} pistes)`) + } + + console.log('\n✅ Tous les esid ont été mis à jour avec succès !') + } catch (error) { + console.error('❌ Erreur lors de la mise à jour des esid:', error) + process.exit(1) + } +} + +// Exécuter le script +updateEsid() + .then(() => process.exit(0)) + .catch((error) => { + console.error('Erreur inattendue:', error) + process.exit(1) + }) diff --git a/server/MIGRATION_GUIDE.md b/server/MIGRATION_GUIDE.md deleted file mode 100644 index 2599f26..0000000 --- a/server/MIGRATION_GUIDE.md +++ /dev/null @@ -1,168 +0,0 @@ -# Migration vers SQLite - Guide d'utilisation - -## 📦 Installation - -```bash -pnpm add better-sqlite3 -pnpm add -D @types/better-sqlite3 -``` - -## 🚀 Migration des données - -### 1. Exécuter la migration - -```bash -pnpm tsx server/database/migrate.ts -``` - -Cette commande va : - -- Créer la base de données SQLite dans `server/database/evilspins.db` -- Créer les tables (boxes, sides, artists, tracks) -- Importer toutes vos données existantes - -### 2. Vérifier la migration - -Lancez votre serveur Nuxt : - -```bash -pnpm dev -``` - -Testez les nouveaux endpoints : - -```bash -# Récupérer toutes les boxes -curl http://localhost:3000/api/boxes - -# Récupérer tous les artistes -curl http://localhost:3000/api/artists - -# Récupérer les tracks de compilation (première page) -curl http://localhost:3000/api/tracks/compilation - -# Filtrer par boxId -curl http://localhost:3000/api/tracks/compilation?boxId=ES00 - -# Pagination -curl http://localhost:3000/api/tracks/compilation?page=2&limit=10 -``` - -## 📁 Structure créée - -``` -server/ -├── database/ -│ ├── evilspins.db # Base SQLite (créée automatiquement) -│ ├── schema.sql # Schéma de la base -│ └── migrate.ts # Script de migration -├── utils/ -│ └── database.ts # Utilitaire de connexion -└── api/ - ├── boxes.ts # ✅ Nouveau (SQLite) - ├── artists.ts # ✅ Nouveau (SQLite) - └── tracks/ - ├── compilation.ts # ✅ Nouveau (SQLite avec pagination) - └── playlist.ts # ⚠️ À adapter -``` - -## 🔄 Côté client : utiliser la pagination - -Exemple pour charger les tracks progressivement : - -```typescript -// Au lieu de charger tout d'un coup -const { data } = await useFetch('/api/tracks/compilation') - -// Maintenant avec pagination -const { data } = await useFetch('/api/tracks/compilation', { - query: { - page: 1, - limit: 50, - boxId: 'ES00', - side: 'A' - } -}) - -// data.tracks -> tableau de tracks -// data.pagination -> { page, limit, total, totalPages } -``` - -## 📊 Avantages obtenus - -✅ **Performances** : Plus de chargement massif, pagination efficace -✅ **Scalabilité** : Peut gérer des milliers de tracks sans ralentir -✅ **Filtrage** : Recherche et filtres côté serveur (ultra rapide) -✅ **Déploiement** : Un seul fichier `.db` à déployer - -## 🔧 À faire ensuite - -### 1. Adapter l'endpoint playlist - -L'endpoint `tracks/playlist.ts` lit des fichiers sur disque. Options : - -**Option A** : Scanner le dossier au démarrage et insérer dans SQLite -**Option B** : Garder la lecture filesystem mais optimiser avec un cache - -### 2. Modifier le frontend - -Mettre à jour vos composants Vue pour utiliser la pagination : - -```vue - -``` - -### 3. Ajouter des fonctionnalités - -Exemples de requêtes possibles maintenant : - -```typescript -// Recherche par titre -GET /api/tracks/compilation?search=love - -// Tracks d'un artiste -GET /api/tracks/compilation?artistId=5 - -// Tri personnalisé -GET /api/tracks/compilation?sortBy=title&order=asc -``` - -## 🐛 Dépannage - -### Erreur "Cannot find module 'better-sqlite3'" - -```bash -pnpm add better-sqlite3 -``` - -### La base ne se crée pas - -Vérifiez les permissions : - -```bash -chmod -R 755 server/database -``` - -### Données manquantes après migration - -Re-exécutez la migration : - -```bash -pnpm tsx scripts/migrate.ts -``` - -## 📝 Notes - -- La base SQLite est créée automatiquement au premier lancement -- Elle est incluse dans `.gitignore` par défaut (à ajuster selon vos besoins) -- Pour un déploiement, commitez le fichier `.db` OU re-exécutez la migration en production diff --git a/server/api/artists.ts b/server/api/artists.ts deleted file mode 100644 index 8690f4a..0000000 --- a/server/api/artists.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { eventHandler } from 'h3' -import { getDatabase } from '../utils/database' - -export default eventHandler(() => { - const db = getDatabase() - - const artists = db - .prepare( - ` - SELECT id, name, url, cover_id - FROM artists - ORDER BY id - ` - ) - .all() - - return artists.map((artist: any) => ({ - id: artist.id, - name: artist.name, - url: artist.url, - coverId: `https://f4.bcbits.com/img/${artist.cover_id}_4.jpg` - })) -}) diff --git a/server/api/boxes.ts b/server/api/boxes.ts deleted file mode 100644 index 69327bf..0000000 --- a/server/api/boxes.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { eventHandler } from 'h3' -import { getDatabase } from '../utils/database' - -export default eventHandler(() => { - const db = getDatabase() - - // Récupérer les boxes - const boxes = db - .prepare( - ` - SELECT id, type, name, description, state, duration, active_side, color1, color2 - FROM boxes - ORDER BY id - ` - ) - .all() - - // Récupérer les sides pour chaque box - const sides = db - .prepare( - ` - SELECT box_id, side, name, description, duration, color1, color2 - FROM sides - ` - ) - .all() - - // Grouper les sides par box_id - const sidesByBoxId: Record = {} - for (const side of sides) { - if (!sidesByBoxId[side.box_id]) { - sidesByBoxId[side.box_id] = {} - } - sidesByBoxId[side.box_id][side.side] = { - name: side.name, - description: side.description, - duration: side.duration, - color1: side.color1, - color2: side.color2 - } - } - - // Formater les résultats - return boxes.map((box: any) => ({ - id: box.id, - type: box.type, - name: box.name, - description: box.description, - state: box.state, - duration: box.duration, - activeSide: box.active_side, - ...(box.type === 'compilation' - ? { - sides: sidesByBoxId[box.id] || {} - } - : { - color1: box.color1, - color2: box.color2 - }) - })) -}) diff --git a/server/api/card/[slug].ts b/server/api/card/[slug].ts new file mode 100644 index 0000000..5448ebc --- /dev/null +++ b/server/api/card/[slug].ts @@ -0,0 +1,41 @@ +import { eq } from 'drizzle-orm' +import { useDB, schema } from '../../db' + +export default eventHandler(async (event) => { + const slug = getRouterParam(event, 'slug') + + if (!slug) { + throw createError({ + statusCode: 400, + statusMessage: 'ESID manquant dans la requête' + }) + } + + const db = useDB() + const card = await db.select().from(schema.cards).where(eq(schema.cards.slug, slug)).get() + + if (!card) { + throw createError({ + statusCode: 404, + statusMessage: 'Morceau non trouvé' + }) + } + + return { + id: card.id, + esid: card.esid, + title: card.title, + artist: card.artist, + url_audio: card.url_audio, + url_image: card.url_image, + year: card.year, + month: card.month, + day: card.day, + hour: card.hour, + slug: card.slug, + suit: card.suit, + rank: card.rank, + createdAt: card.createdAt, + updatedAt: card.updatedAt + } +}) diff --git a/server/api/cards/[esid].ts b/server/api/cards/[esid].ts new file mode 100644 index 0000000..e4e5406 --- /dev/null +++ b/server/api/cards/[esid].ts @@ -0,0 +1,41 @@ +import { eq } from 'drizzle-orm' +import { useDB, schema } from '../../db' + +export default eventHandler(async (event) => { + const esid = getRouterParam(event, 'esid') + + if (!esid) { + throw createError({ + statusCode: 400, + statusMessage: 'ESID manquant dans la requête' + }) + } + + const db = useDB() + const card = await db.select().from(schema.cards).where(eq(schema.cards.esid, esid)).get() + + if (!card) { + throw createError({ + statusCode: 404, + statusMessage: 'Morceau non trouvé' + }) + } + + return { + id: card.id, + esid: card.esid, + title: card.title, + artist: card.artist, + url_audio: card.url_audio, + url_image: card.url_image, + year: card.year, + month: card.month, + day: card.day, + hour: card.hour, + slug: card.slug, + suit: card.suit, + rank: card.rank, + createdAt: card.createdAt, + updatedAt: card.updatedAt + } +}) diff --git a/server/api/cards/index.ts b/server/api/cards/index.ts new file mode 100644 index 0000000..451290e --- /dev/null +++ b/server/api/cards/index.ts @@ -0,0 +1,84 @@ +import { and, eq, ilike, or, sql } from 'drizzle-orm' +import { useDB, schema } from '../../db' + +const PAGE_SIZE = 20 // Nombre d'éléments par page + +export default defineEventHandler(async (event) => { + const query = getQuery(event) + const page = Number(query.page) || 1 + const search = query.search?.toString() + const cardRank = query.rank?.toString() + const cardSuit = query.suit?.toString() + const year = query.year?.toString() + + const db = useDB() + const offset = (page - 1) * PAGE_SIZE + + // Log pour débogage + console.log('Requête avec paramètres:', { search, cardRank, cardSuit, year }) + console.log('Schéma des cards:', Object.keys(schema.cards)) + + // Construction des conditions de filtrage + const conditions = [] + + if (search) { + const searchTerm = `%${search}%` + conditions.push( + or(ilike(schema.cards.title, searchTerm), ilike(schema.cards.artist, searchTerm)) + ) + } + + if (cardRank) { + conditions.push(eq(schema.cards.rank, cardRank)) + } + + if (cardSuit) { + conditions.push(eq(schema.cards.suit, cardSuit)) + } + + if (year) { + conditions.push(eq(schema.cards.year, year)) + } + + // Requête pour le comptage total + const countQuery = db + .select({ count: sql`count(*)` }) + .from(schema.cards) + .$dynamic() + + // Log pour débogage SQL + console.log('Requête de comptage SQL:', countQuery.toSQL()) + + // Requête pour les données paginées + const cardsQuery = db + .select() + .from(schema.cards) + .$dynamic() + .limit(PAGE_SIZE) + .offset(offset) + .orderBy(schema.cards.title) + + // Application des conditions si elles existent + if (conditions.length > 0) { + const where = and(...conditions) + countQuery.where(where) + cardsQuery.where(where) + } + + const [countResult, cards] = await Promise.all([countQuery, cardsQuery]) + + const totalItems = countResult[0]?.count || 0 + const totalPages = Math.ceil(totalItems / PAGE_SIZE) + + return { + data: cards, + pagination: { + currentPage: page, + pageSize: PAGE_SIZE, + totalItems, + totalPages, + hasNextPage: page < totalPages, + hasPreviousPage: page > 1 + } + } +}) diff --git a/server/api/sync-cards.post.ts b/server/api/sync-cards.post.ts new file mode 100644 index 0000000..60504c8 --- /dev/null +++ b/server/api/sync-cards.post.ts @@ -0,0 +1,27 @@ +import { syncCardsWithDatabase } from '../services/cardSync.service' + +export default defineEventHandler(async (event) => { + const config = useRuntimeConfig() + const folderPath = config.pathFiles || process.env.PATH_FILES + + if (!folderPath) { + throw createError({ + statusCode: 500, + message: 'PATH_FILES not configured' + }) + } + + try { + const result = await syncCardsWithDatabase(folderPath) + + return { + success: true, + ...result + } + } catch (error: any) { + throw createError({ + statusCode: 500, + message: error.message + }) + } +}) diff --git a/server/api/test/test-db-sync.post.ts b/server/api/test/test-db-sync.post.ts new file mode 100644 index 0000000..5f3cbaa --- /dev/null +++ b/server/api/test/test-db-sync.post.ts @@ -0,0 +1,21 @@ +import { syncCardsWithDatabase } from '../../services/cardSync.service' + +export default defineEventHandler(async (event) => { + const config = useRuntimeConfig() + const folderPath = config.pathFiles || process.env.PATH_FILES || 'mnt/media/files/music' + + try { + const result = await syncCardsWithDatabase(folderPath) + + return { + success: true, + ...result + } + } catch (error: any) { + return { + success: false, + error: error.message, + stack: error.stack + } + } +}) diff --git a/server/api/test/test-scanner.get.ts b/server/api/test/test-scanner.get.ts new file mode 100644 index 0000000..ce41dc0 --- /dev/null +++ b/server/api/test/test-scanner.get.ts @@ -0,0 +1,29 @@ +import { scanMusicFolder } from '../../utils/fileScanner' + +export default defineEventHandler(async (event) => { + const config = useRuntimeConfig() + const folderPath = config.pathFiles || process.env.PATH_FILES || 'mnt/media/files/music' + + try { + // Test 1: Vérifier que le dossier existe + const { access } = await import('node:fs/promises') + await access(folderPath) + + // Test 2: Scanner le dossier + const cards = await scanMusicFolder(folderPath) + + return { + success: true, + folderPath, + cardsFound: cards.length, + cards: cards.slice(0, 5), // Afficher seulement les 5 premiers + sample: cards[0] // Un exemple complet + } + } catch (error: any) { + return { + success: false, + error: error.message, + folderPath + } + } +}) diff --git a/server/api/tracks/compilation.ts b/server/api/tracks/compilation.ts deleted file mode 100644 index d9b5b9c..0000000 --- a/server/api/tracks/compilation.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { eventHandler, getQuery } from 'h3' -import { getDatabase } from '../../utils/database' - -export default eventHandler((event) => { - const db = getDatabase() - const query = getQuery(event) - - // Paramètres de pagination - const page = parseInt(query.page as string) || 1 - const limit = parseInt(query.limit as string) || 50 - const offset = (page - 1) * limit - - // Filtres optionnels - const boxId = query.boxId as string | undefined - const side = query.side as string | undefined - - // Construction de la requête - let sql = ` - SELECT - t.id, - t.box_id, - t.side, - t.track_order, - t.title, - t.artist_id, - t.start, - t.link, - t.cover_id, - t.url, - t.type, - a.name as artist_name - FROM tracks t - LEFT JOIN artists a ON t.artist_id = a.id - WHERE t.type = 'compilation' - ` - - const params: any[] = [] - - if (boxId) { - sql += ' AND t.box_id = ?' - params.push(boxId) - } - - if (side) { - sql += ' AND t.side = ?' - params.push(side) - } - - sql += ' ORDER BY t.box_id, t.side, t.track_order' - sql += ' LIMIT ? OFFSET ?' - params.push(limit, offset) - - const tracks = db.prepare(sql).all(...params) - - // Compter le total pour la pagination - let countSql = "SELECT COUNT(*) as total FROM tracks WHERE type = 'compilation'" - const countParams: any[] = [] - - if (boxId) { - countSql += ' AND box_id = ?' - countParams.push(boxId) - } - - if (side) { - countSql += ' AND side = ?' - countParams.push(side) - } - - const { total } = db.prepare(countSql).get(...countParams) as { total: number } - - return { - tracks: tracks.map((track: any) => ({ - id: track.id, - boxId: track.box_id, - side: track.side, - order: track.track_order, - title: track.title, - artist: track.artist_id, - artistName: track.artist_name, - start: track.start, - link: track.link, - coverId: track.cover_id, - url: track.url, - type: track.type - })), - pagination: { - page, - limit, - total, - totalPages: Math.ceil(total / limit) - } - } -}) diff --git a/server/api/tracks/playlist.ts b/server/api/tracks/playlist.ts deleted file mode 100644 index 6fa12a4..0000000 --- a/server/api/tracks/playlist.ts +++ /dev/null @@ -1,93 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { eventHandler } from 'h3' -import { getCardFromDate } from '../../../utils/cards' - -export default eventHandler(async (event) => { - const dirPath = path.join(process.cwd(), '/mnt/media/files/music') - const urlPrefix = `https://files.erudi.fr/music` - - try { - let allTracks: any[] = [] - - const items = await fs.promises.readdir(dirPath, { withFileTypes: true }) - - // Process files - const files = items - .filter((item) => item.isFile() && !item.name.startsWith('.') && !item.name.endsWith('.jpg')) - .map((item) => item.name) - - // Process folders - const folders = items - .filter((item) => item.isDirectory() && !item.name.startsWith('.')) - .map((folder, index) => ({ - id: `folder-${index}`, - boxId: 'ESFOLDER', - title: folder.name.replace(/_/g, ' ').trim(), - type: 'folder', - order: 0, - date: new Date(), - card: getCardFromDate(new Date()) - })) - - const tracks = files.map((file, index) => { - const EXT_RE = /\.(mp3|flac|wav|opus)$/i - const nameWithoutExt = file.replace(EXT_RE, '') - - // On split sur __ - const parts = nameWithoutExt.split('__') - let stamp = parts[0] || '' - let artist = parts[1] || '' - let title = parts[2] || '' - - title = title.replaceAll('_', ' ') - artist = artist.replaceAll('_', ' ') - - // Parser la date depuis le stamp - let year = 2020, - month = 1, - day = 1, - hour = 0 - if (stamp.length === 10) { - year = Number(stamp.slice(0, 4)) - month = Number(stamp.slice(4, 6)) - day = Number(stamp.slice(6, 8)) - hour = Number(stamp.slice(8, 10)) - } - - const date = new Date(year, month - 1, day, hour) - const card = getCardFromDate(date) - const url = `${urlPrefix}/${encodeURIComponent(file)}` - const coverId = `${urlPrefix}/cover/${encodeURIComponent(file).replace(EXT_RE, '.jpg')}` - - return { - id: Number(`${year}${index + 1}`), - boxId: `ESPLAYLIST`, - year, - date, - title: title.trim(), - artist: artist.trim(), - url, - coverId, - card, - order: 0, - type: 'playlist' - } - }) - - tracks.sort((a, b) => b.date.getTime() - a.date.getTime()) - // Combine folders and tracks - const allItems = [...folders, ...tracks] - - // Sort by date (newest first) and assign order - allItems.sort((a, b) => b.date.getTime() - a.date.getTime()) - allItems.forEach((item, i) => (item.order = i + 1)) - - return allItems - } catch (error) { - return { - success: false, - error: (error as Error).message - } - } -}) diff --git a/server/api/tracks/search.ts b/server/api/tracks/search.ts deleted file mode 100644 index 4f98bdf..0000000 --- a/server/api/tracks/search.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { eventHandler, getQuery } from 'h3' -import { getDatabase } from '../../utils/database' - -export default eventHandler((event) => { - const db = getDatabase() - const query = getQuery(event) - - const search = (query.search as string) || '' - const page = parseInt(query.page as string) || 1 - const limit = parseInt(query.limit as string) || 50 - const offset = (page - 1) * limit - - // Construction de la requête de recherche - let sql = ` - SELECT - t.id, - t.box_id, - t.side, - t.track_order, - t.title, - t.artist_id, - t.start, - t.link, - t.cover_id, - t.url, - t.type, - a.name as artist_name, - a.url as artist_url - FROM tracks t - LEFT JOIN artists a ON t.artist_id = a.id - WHERE 1=1 - ` - - const params: any[] = [] - - // Recherche par titre ou artiste - if (search) { - sql += ` AND (t.title LIKE ? OR a.name LIKE ?)` - const searchPattern = `%${search}%` - params.push(searchPattern, searchPattern) - } - - sql += ' ORDER BY t.box_id, t.track_order' - sql += ' LIMIT ? OFFSET ?' - params.push(limit, offset) - - const tracks = db.prepare(sql).all(...params) - - // Compter le total - let countSql = ` - SELECT COUNT(*) as total - FROM tracks t - LEFT JOIN artists a ON t.artist_id = a.id - WHERE 1=1 - ` - - const countParams: any[] = [] - - if (search) { - countSql += ` AND (t.title LIKE ? OR a.name LIKE ?)` - const searchPattern = `%${search}%` - countParams.push(searchPattern, searchPattern) - } - - const { total } = db.prepare(countSql).get(...countParams) as { total: number } - - return { - tracks: tracks.map((track: any) => ({ - id: track.id, - boxId: track.box_id, - side: track.side, - order: track.track_order, - title: track.title, - artist: track.artist_id, - artistName: track.artist_name, - artistUrl: track.artist_url, - start: track.start, - link: track.link, - coverId: track.cover_id, - url: track.url, - type: track.type - })), - pagination: { - page, - limit, - total, - totalPages: Math.ceil(total / limit) - }, - search - } -}) diff --git a/server/database/evilspins.db b/server/database/evilspins.db deleted file mode 100644 index a6d2f9b..0000000 Binary files a/server/database/evilspins.db and /dev/null differ diff --git a/server/database/migrate.ts b/server/database/migrate.ts deleted file mode 100644 index 6465732..0000000 --- a/server/database/migrate.ts +++ /dev/null @@ -1,678 +0,0 @@ -import { getDatabase } from '../utils/database' - -// Import des données depuis vos anciens fichiers -const boxes = [ - { - id: 'ES01', - type: 'compilation', - name: '...', - description: '...', - state: 'box-hidden', - duration: 3487 + 3773, - sides: { - A: { - name: '...', - description: '...', - duration: 3487, - color1: '#c7b3aa', - color2: '#000100' - }, - B: { - name: '... B', - description: '...', - duration: 3773, - color1: '#f7dd01', - color2: '#010103' - } - }, - activeSide: 'A' - }, - { - id: 'ES00', - type: 'compilation', - name: 'manifeste', - description: 'Zero is for manifesto', - state: 'box-hidden', - duration: 2794 + 2470, - sides: { - A: { - name: 'manifeste', - description: 'Zero is for manifesto', - duration: 2794, - color1: '#ffffff', - color2: '#48959d' - }, - B: { - name: 'manifeste B', - description: 'Even Zero has a b-side', - duration: 2470, - color1: '#0d01b9', - color2: '#3b7589' - } - }, - activeSide: 'A' - }, - { - id: 'ESPLAYLIST', - type: 'playlist', - name: 'playlists', - duration: 0, - description: '♠♦♣♥', - state: 'box-hidden', - activeSide: 'A', - color1: '#fdec50ff', - color2: '#fdec50ff' - } -] - -const artists = [ - { id: 0, name: "L'efondras", url: 'https://leffondras.bandcamp.com/music', coverId: '0024705317' }, - { - id: 1, - name: 'The kundalini genie', - url: 'https://the-kundalini-genie.bandcamp.com', - coverId: '0012045550' - }, - { id: 2, name: 'Fontaines D.C.', url: 'https://fontainesdc.bandcamp.com', coverId: '0027327090' }, - { id: 3, name: 'Fontanarosa', url: 'https://fontanarosa.bandcamp.com', coverId: '0035380235' }, - { id: 4, name: 'Johnny mafia', url: 'https://johnnymafia.bandcamp.com', coverId: '0035009392' }, - { id: 5, name: 'New candys', url: 'https://newcandys.bandcamp.com', coverId: '0039963261' }, - { id: 6, name: 'Magic shoppe', url: 'https://magicshoppe.bandcamp.com', coverId: '0030748374' }, - { - id: 7, - name: 'Les jaguars', - url: 'https://radiomartiko.bandcamp.com/album/surf-qu-b-cois', - coverId: '0016551336' - }, - { id: 8, name: 'TRAAMS', url: 'https://traams.bandcamp.com', coverId: '0028348410' }, - { id: 9, name: 'Blue orchid', url: 'https://blue-orchid.bandcamp.com', coverId: '0034796193' }, - { id: 10, name: 'I love UFO', url: 'https://bruitblanc.bandcamp.com', coverId: 'a2203158939' }, - { - id: 11, - name: 'Kid Congo & The Pink Monkey Birds', - url: 'https://kidcongothepinkmonkeybirds.bandcamp.com/', - coverId: '0017196290' - }, - { id: 12, name: 'Firefriend', url: 'https://firefriend.bandcamp.com/', coverId: '0031072203' }, - { id: 13, name: 'Squid', url: 'https://squiduk.bandcamp.com/', coverId: '0037649385' }, - { id: 14, name: 'Lysistrata', url: 'https://lysistrata.bandcamp.com/', coverId: '0033900158' }, - { - id: 15, - name: 'Pablo X Broadcasting Services', - url: 'https://pabloxbroadcastingservices.bandcamp.com/', - coverId: '0036956486' - }, - { id: 16, name: 'Night Beats', url: 'https://nightbeats.bandcamp.com/', coverId: '0036987720' }, - { id: 17, name: 'Deltron 3030', url: 'https://delthefunkyhomosapien.bandcamp.com/', coverId: '0005254781' }, - { - id: 18, - name: 'The Amorphous Androgynous', - url: 'https://theaa.bandcamp.com/', - coverId: '0022226700' - }, - { id: 19, name: 'Wooden Shjips', url: 'https://woodenshjips.bandcamp.com/', coverId: '0012406678' }, - { id: 20, name: 'Silas J. Dirge', url: 'https://silasjdirge.bandcamp.com/', coverId: '0035751570' }, - { id: 21, name: 'Secret Colours', url: 'https://secretcolours.bandcamp.com/', coverId: '0010661379' }, - { - id: 22, - name: 'Larry McNeil And The Blue Knights', - url: 'https://www.discogs.com/artist/6528940-Larry-McNeil-And-The-Blue-Knights', - coverId: - 'https://i.discogs.com/Yr05_neEXwzPwKlDeV7dimmTG34atkAMgpxbMBhHBkI/rs:fit/g:sm/q:90/h:600/w:600/czM6Ly9kaXNjb2dz/LWRhdGFiYXNlLWlt/YWdlcy9SLTEyMTEw/ODE1LTE1Mjg1NjU1/NzQtMjcyOC5qcGVn.jpeg' - }, - { - id: 23, - name: 'Hugo Blanco', - url: 'https://elpalmasmusic.bandcamp.com/album/color-de-tr-pico-compiled-by-el-dr-gon-criollo-el-palmas', - coverId: '0016886708' - } -] - -const tracks = [ - { - order: 1, - boxId: 'ES00', - side: 'A', - title: 'The grinding wheel', - artist: 0, - start: 0, - link: 'https://arakirecords.bandcamp.com/track/the-grinding-wheel', - coverId: 'a3236746052' - }, - { - order: 2, - boxId: 'ES00', - side: 'A', - title: 'Bleach', - artist: 1, - start: 392, - link: 'https://the-kundalini-genie.bandcamp.com/track/bleach-2', - coverId: 'a1714786533' - }, - { - order: 3, - boxId: 'ES00', - side: 'A', - title: 'Televised mind', - artist: 2, - start: 896, - link: 'https://fontainesdc.bandcamp.com/track/televised-mind', - coverId: 'a3772806156' - }, - { - order: 4, - boxId: 'ES00', - side: 'A', - title: 'In it', - artist: 3, - start: 1139, - link: 'https://howlinbananarecords.bandcamp.com/track/in-it', - coverId: 'a1720372066' - }, - { - order: 5, - boxId: 'ES00', - side: 'A', - title: 'Bad michel', - artist: 4, - start: 1245, - link: 'https://johnnymafia.bandcamp.com/track/bad-michel-3', - coverId: 'a0984622869' - }, - { - order: 6, - boxId: 'ES00', - side: 'A', - title: 'Overall', - artist: 5, - start: 1394, - link: 'https://newcandys.bandcamp.com/track/overall', - coverId: 'a0559661270' - }, - { - order: 7, - boxId: 'ES00', - side: 'A', - title: 'Blowup', - artist: 6, - start: 1674, - link: 'https://magicshoppe.bandcamp.com/track/blowup', - coverId: 'a1444895293' - }, - { - order: 8, - boxId: 'ES00', - side: 'A', - title: 'Guitar jet', - artist: 7, - start: 1880, - link: 'https://radiomartiko.bandcamp.com/track/guitare-jet', - coverId: 'a1494681687' - }, - { - order: 9, - boxId: 'ES00', - side: 'A', - title: 'Intercontinental radio waves', - artist: 8, - start: 2024, - link: 'https://traams.bandcamp.com/track/intercontinental-radio-waves', - coverId: 'a0046738552' - }, - { - order: 10, - boxId: 'ES00', - side: 'A', - title: 'Here comes the sun', - artist: 9, - start: 2211, - link: 'https://blue-orchid.bandcamp.com/track/here-come-the-sun', - coverId: 'a4102567047' - }, - { - order: 11, - boxId: 'ES00', - side: 'A', - title: 'Like in the movies', - artist: 10, - start: 2560, - link: 'https://bruitblanc.bandcamp.com/track/like-in-the-movies-2', - coverId: 'a2203158939' - }, - { - order: 1, - boxId: 'ES00', - side: 'B', - title: "Ce que révèle l'éclipse", - artist: 0, - start: 0, - link: 'https://arakirecords.bandcamp.com/track/ce-que-r-v-le-l-clipse', - coverId: 'a3236746052' - }, - { - order: 2, - boxId: 'ES00', - side: 'B', - title: "Bleedin' Gums Mushrool", - artist: 1, - start: 263, - link: 'https://the-kundalini-genie.bandcamp.com/track/bleedin-gums-mushroom', - coverId: 'a1714786533' - }, - { - order: 3, - boxId: 'ES00', - side: 'B', - title: 'A lucid dream', - artist: 2, - start: 554, - link: 'https://fontainesdc.bandcamp.com/track/a-lucid-dream', - coverId: 'a3772806156' - }, - { - order: 4, - boxId: 'ES00', - side: 'B', - title: 'Lights off', - artist: 3, - start: 781, - link: 'https://howlinbananarecords.bandcamp.com/track/lights-off', - coverId: 'a1720372066' - }, - { - order: 5, - boxId: 'ES00', - side: 'B', - title: "I'm sentimental", - artist: 4, - start: 969, - link: 'https://johnnymafia.bandcamp.com/track/im-sentimental-2', - coverId: 'a2333676849' - }, - { - order: 6, - boxId: 'ES00', - side: 'B', - title: 'Thrill or trip', - artist: 5, - start: 1128, - link: 'https://newcandys.bandcamp.com/track/thrill-or-trip', - coverId: 'a0559661270' - }, - { - order: 7, - boxId: 'ES00', - side: 'B', - title: 'Redhead', - artist: 6, - start: 1303, - link: 'https://magicshoppe.bandcamp.com/track/redhead', - coverId: 'a0594426943' - }, - { - order: 8, - boxId: 'ES00', - side: 'B', - title: 'Supersonic twist', - artist: 7, - start: 1584, - link: 'https://open.spotify.com/track/66voQIZAJ3zD3Eju2qtNjF', - coverId: 'a1494681687' - }, - { - order: 9, - boxId: 'ES00', - side: 'B', - title: 'Flowers', - artist: 8, - start: 1749, - link: 'https://traams.bandcamp.com/track/flowers', - coverId: 'a3644668199' - }, - { - order: 10, - boxId: 'ES00', - side: 'B', - title: 'The shade', - artist: 9, - start: 1924, - link: 'https://blue-orchid.bandcamp.com/track/the-shade', - coverId: 'a0804204790' - }, - { - order: 11, - boxId: 'ES00', - side: 'B', - title: 'Like in the movies', - artist: 10, - start: 2186, - link: 'https://bruitblanc.bandcamp.com/track/like-in-the-movies', - coverId: 'a3647322740' - }, - { - order: 1, - boxId: 'ES01', - side: 'A', - title: 'He Walked In', - artist: 11, - start: 0, - link: 'https://kidcongothepinkmonkeybirds.bandcamp.com/track/he-walked-in', - coverId: 'a0336300523' - }, - { - order: 2, - boxId: 'ES01', - side: 'A', - title: 'The Third Wave', - artist: 12, - start: 841, - link: 'https://firefriend.bandcamp.com/track/the-third-wave', - coverId: 'a2803689859' - }, - { - order: 3, - boxId: 'ES01', - side: 'A', - title: 'Broadcaster', - artist: 13, - start: 1104.5, - link: 'https://squiduk.bandcamp.com/track/broadcaster', - coverId: 'a3391719769' - }, - { - order: 4, - boxId: 'ES01', - side: 'A', - title: 'Mourn', - artist: 14, - start: 1441, - link: 'https://lysistrata.bandcamp.com/track/mourn-2', - coverId: 'a0872900041' - }, - { - order: 5, - boxId: 'ES01', - side: 'A', - title: 'Let it Blow', - artist: 15, - start: 1844.8, - link: 'https://pabloxbroadcastingservices.bandcamp.com/track/let-it-blow', - coverId: 'a4000148031' - }, - { - order: 6, - boxId: 'ES01', - side: 'A', - title: 'Sunday Mourning', - artist: 16, - start: 2091.7, - link: 'https://nightbeats.bandcamp.com/track/sunday-mourning', - coverId: 'a0031987121' - }, - { - order: 7, - boxId: 'ES01', - side: 'A', - title: '3030 Instrumental', - artist: 17, - start: 2339.3, - link: 'https://delthefunkyhomosapien.bandcamp.com/track/3030', - coverId: 'a1948146136' - }, - { - order: 8, - boxId: 'ES01', - side: 'A', - title: 'Immortality Break', - artist: 18, - start: 2530.5, - link: 'https://theaa.bandcamp.com/track/immortality-break', - coverId: 'a2749250329' - }, - { - order: 9, - boxId: 'ES01', - side: 'A', - title: 'Lazy Bones', - artist: 19, - start: 2718, - link: 'https://woodenshjips.bandcamp.com/track/lazy-bones', - coverId: 'a1884221104' - }, - { - order: 10, - boxId: 'ES01', - side: 'A', - title: 'On the Train of Aches', - artist: 20, - start: 2948, - link: 'https://silasjdirge.bandcamp.com/track/on-the-train-of-aches', - coverId: 'a1124177379' - }, - { - order: 11, - boxId: 'ES01', - side: 'A', - title: 'Me', - artist: 21, - start: 3265, - link: 'https://secretcolours.bandcamp.com/track/me', - coverId: 'a1497022499' - }, - { - order: 1, - boxId: 'ES01', - side: 'B', - title: 'Lady Hawke Blues', - artist: 11, - start: 0, - link: 'https://kidcongothepinkmonkeybirds.bandcamp.com/track/lady-hawke-blues', - coverId: 'a2532623230' - }, - { - order: 2, - boxId: 'ES01', - side: 'B', - title: 'Dreamscapes', - artist: 12, - start: 235, - link: 'https://littlecloudrecords.bandcamp.com/track/dreamscapes', - coverId: 'a3498981203' - }, - { - order: 3, - boxId: 'ES01', - side: 'B', - title: 'Crispy Skin', - artist: 13, - start: 644.2, - link: 'https://squiduk.bandcamp.com/track/crispy-skin-2', - coverId: 'a2516727021' - }, - { - order: 4, - boxId: 'ES01', - side: 'B', - title: 'The Boy Who Stood Above The Earth', - artist: 14, - start: 1018, - link: 'https://lysistrata.bandcamp.com/track/the-boy-who-stood-above-the-earth-2', - coverId: 'a0350933426' - }, - { - order: 5, - boxId: 'ES01', - side: 'B', - title: 'Better Off Alone', - artist: 15, - start: 1698, - link: 'https://pabloxbroadcastingservices.bandcamp.com/track/better-off-alone', - coverId: 'a4000148031' - }, - { - order: 6, - boxId: 'ES01', - side: 'B', - title: 'Celebration #1', - artist: 16, - start: 2235, - link: 'https://nightbeats.bandcamp.com/track/celebration-1', - coverId: 'a0031987121' - }, - { - order: 7, - boxId: 'ES01', - side: 'B', - title: '3030 Instrumental', - artist: 17, - start: 2458.3, - link: 'https://delthefunkyhomosapien.bandcamp.com/track/3030', - coverId: 'a1948146136' - }, - { - order: 8, - boxId: 'ES01', - side: 'B', - title: 'The Emptiness Of Nothingness', - artist: 18, - start: 2864.5, - link: 'https://theaa.bandcamp.com/track/the-emptiness-of-nothingness', - coverId: 'a1053923875' - }, - { - order: 9, - boxId: 'ES01', - side: 'B', - title: 'Rising', - artist: 19, - start: 3145, - link: 'https://woodenshjips.bandcamp.com/track/rising', - coverId: 'a1884221104' - }, - { - order: 10, - boxId: 'ES01', - side: 'B', - title: 'The Last Time', - artist: 22, - start: 3447, - link: 'https://www.discogs.com/release/12110815-Larry-McNeil-And-The-Blue-Knights-Jealous-Woman', - coverId: - 'https://i.discogs.com/Yr05_neEXwzPwKlDeV7dimmTG34atkAMgpxbMBhHBkI/rs:fit/g:sm/q:90/h:600/w:600/czM6Ly9kaXNjb2dz/LWRhdGFiYXNlLWlt/YWdlcy9SLTEyMTEw/ODE1LTE1Mjg1NjU1/NzQtMjcyOC5qcGVn.jpeg' - }, - { - order: 11, - boxId: 'ES01', - side: 'B', - title: 'Guajira Con Arpa', - artist: 23, - start: 3586, - link: 'https://elpalmasmusic.bandcamp.com/track/guajira-con-arpa', - coverId: 'a3463036407' - } -] - -export async function migrate() { - console.log('🚀 Début de la migration...') - - const db = getDatabase() - - // Vider les tables existantes - db.exec('DELETE FROM tracks') - db.exec('DELETE FROM sides') - db.exec('DELETE FROM artists') - db.exec('DELETE FROM boxes') - - console.log('🗑️ Tables vidées') - - // Insérer les boxes - const insertBox = db.prepare(` - INSERT INTO boxes (id, type, name, description, state, duration, active_side, color1, color2) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) - `) - - const insertSide = db.prepare(` - INSERT INTO sides (box_id, side, name, description, duration, color1, color2) - VALUES (?, ?, ?, ?, ?, ?, ?) - `) - - for (const box of boxes) { - insertBox.run( - box.id, - box.type, - box.name, - box.description, - box.state, - box.duration, - box.activeSide, - box.color1 || null, - box.color2 || null - ) - - // Insérer les sides si c'est une compilation - if (box.sides) { - for (const [sideName, sideData] of Object.entries(box.sides)) { - insertSide.run( - box.id, - sideName, - sideData.name, - sideData.description, - sideData.duration, - sideData.color1, - sideData.color2 - ) - } - } - } - - console.log(`✅ ${boxes.length} boxes insérées`) - - // Insérer les artists - const insertArtist = db.prepare(` - INSERT INTO artists (id, name, url, cover_id) - VALUES (?, ?, ?, ?) - `) - - for (const artist of artists) { - insertArtist.run(artist.id, artist.name, artist.url, artist.coverId) - } - - console.log(`✅ ${artists.length} artistes insérés`) - - // Insérer les tracks - const insertTrack = db.prepare(` - INSERT INTO tracks (box_id, side, track_order, title, artist_id, start, link, cover_id, url, type) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `) - - for (const track of tracks) { - const url = `https://files.erudi.fr/evilspins/${track.boxId}${track.side}.mp3` - const coverId = `https://f4.bcbits.com/img/${track.coverId}_4.jpg` - - insertTrack.run( - track.boxId, - track.side, - track.order, - track.title, - track.artist, - track.start, - track.link, - coverId, - url, - 'compilation' - ) - } - - console.log(`✅ ${tracks.length} tracks insérées`) - console.log('🎉 Migration terminée avec succès !') -} - -// Exécuter la migration si appelé directement -if (import.meta.url === `file://${process.argv[1]}`) { - migrate() - .then(() => process.exit(0)) - .catch((err) => { - console.error('❌ Erreur lors de la migration:', err) - process.exit(1) - }) -} diff --git a/server/database/schema.sql b/server/database/schema.sql deleted file mode 100644 index b73fa43..0000000 --- a/server/database/schema.sql +++ /dev/null @@ -1,63 +0,0 @@ --- Boxes table -CREATE TABLE IF NOT EXISTS boxes ( - id TEXT PRIMARY KEY, - type TEXT NOT NULL, - name TEXT NOT NULL, - description TEXT, - state TEXT, - duration INTEGER, - active_side TEXT, - color1 TEXT, - color2 TEXT, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP -); - --- Sides table (pour les compilations qui ont A et B) -CREATE TABLE IF NOT EXISTS sides ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - box_id TEXT NOT NULL, - side TEXT NOT NULL, - name TEXT, - description TEXT, - duration INTEGER, - color1 TEXT, - color2 TEXT, - FOREIGN KEY (box_id) REFERENCES boxes(id) ON DELETE CASCADE, - UNIQUE(box_id, side) -); - --- Artists table -CREATE TABLE IF NOT EXISTS artists ( - id INTEGER PRIMARY KEY, - name TEXT NOT NULL, - url TEXT, - cover_id TEXT, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP -); - --- Tracks table -CREATE TABLE IF NOT EXISTS tracks ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - box_id TEXT NOT NULL, - side TEXT, - track_order INTEGER, - title TEXT NOT NULL, - artist_id INTEGER, - start INTEGER, - link TEXT, - cover_id TEXT, - url TEXT, - type TEXT, - year INTEGER, - date DATETIME, - card TEXT, - FOREIGN KEY (box_id) REFERENCES boxes(id) ON DELETE CASCADE, - FOREIGN KEY (artist_id) REFERENCES artists(id) ON DELETE SET NULL -); - --- Index pour les requêtes fréquentes -CREATE INDEX IF NOT EXISTS idx_tracks_box_id ON tracks(box_id); -CREATE INDEX IF NOT EXISTS idx_tracks_artist_id ON tracks(artist_id); -CREATE INDEX IF NOT EXISTS idx_tracks_type ON tracks(type); -CREATE INDEX IF NOT EXISTS idx_tracks_year ON tracks(year); -CREATE INDEX IF NOT EXISTS idx_sides_box_id ON sides(box_id); diff --git a/server/db/index.ts b/server/db/index.ts new file mode 100644 index 0000000..a2bee19 --- /dev/null +++ b/server/db/index.ts @@ -0,0 +1,32 @@ +import { drizzle } from 'drizzle-orm/libsql' +import * as schema from './schema' + +let _db: ReturnType | null = null + +export function useDB() { + if (_db) return _db + + const config = useRuntimeConfig() + let dbPath = config.pathDb || process.env.PATH_DB + + if (!dbPath) { + throw new Error('PATH_DB is not configured') + } + + // Convertir le chemin en URL file:// si ce n'est pas déjà une URL + if (!dbPath.startsWith('file:') && !dbPath.startsWith('libsql:') && !dbPath.startsWith('http')) { + // Si c'est un chemin relatif, le rendre absolu + if (!dbPath.startsWith('/')) { + dbPath = `file:${process.cwd()}/${dbPath}` + } else { + dbPath = `file:${dbPath}` + } + } + + console.log('🗄️ Connexion à la DB:', dbPath) + + _db = drizzle(dbPath, { schema }) + return _db +} + +export { schema } diff --git a/server/db/schema.ts b/server/db/schema.ts new file mode 100644 index 0000000..5dd7be6 --- /dev/null +++ b/server/db/schema.ts @@ -0,0 +1,23 @@ +import { sqliteTable, text, int } from 'drizzle-orm/sqlite-core' + +export const cards = sqliteTable('cards', { + id: int('id').primaryKey({ autoIncrement: true }), + esid: text('esid').notNull(), + url_audio: text('url_audio').notNull(), + url_image: text('url_image').notNull(), + year: text('year').notNull(), + month: text('month').notNull(), + day: text('day').notNull(), + hour: text('hour').notNull(), + artist: text('artist').notNull(), + title: text('title').notNull(), + slug: text('slug').notNull(), + suit: text('suit').notNull(), + rank: text('rank').notNull(), + createdAt: int('created_at', { mode: 'timestamp' }) + .notNull() + .$defaultFn(() => new Date()), + updatedAt: int('updated_at', { mode: 'timestamp' }) + .notNull() + .$defaultFn(() => new Date()) +}) diff --git a/server/db/start.prompt b/server/db/start.prompt new file mode 100644 index 0000000..5560a3a --- /dev/null +++ b/server/db/start.prompt @@ -0,0 +1,586 @@ +Je développe une application musicale en Node.js qui gère des morceaux de musique (tracks). Voici l'architecture actuelle des données :Tracks : Morceaux de musique stockés sous forme de fichiers audio. +Playlists : Ensembles de tracks regroupés dans un dossier spécifique sur le disque (ex. : un dossier par playlist). Actuellement, à chaque requête, le serveur scanne récursivement le dossier pour lister les tracks, ce qui génère la playlist dynamiquement. +Compilations : Ensembles de tracks mixés ensemble, représentant un seul fichier audio unifié. Actuellement, les compilations sont hardcodées dans le code (pas de scan dynamique). + +Problèmes actuels :Performances : Le scan des dossiers pour les playlists prend ~6 secondes par requête, ce qui est inacceptable pour une bonne UX. +Manque d'uniformité : Les playlists sont générées dynamiquement (lourd), tandis que les compilations sont statiques (hardcodées), rendant la maintenance difficile. +Pas de persistance : Aucune base de données, donc pas de cache ni de requêtes rapides. + +Objectifs :Utiliser une base de données SQLite comme cache pour stocker les métadonnées des tracks, playlists et compilations, afin d'éviter les scans disque à chaque requête. +Uniformiser l'architecture : Stocker à la fois les playlists (issues de scans de dossiers) et les compilations en base. +Améliorer les performances : Les requêtes doivent renvoyer les données depuis la DB en <1 seconde, avec un scan disque initial ou périodique pour mise à jour. +ORM : Utiliser Drizzle ORM pour interagir avec SQLite (facile à setup en Node.js). +Schéma DB suggéré (à affiner si needed) : +Table tracks : id, title, artist, duration, file_path (chemin du fichier), source_type ('playlist' ou 'compilation'), source_id (FK vers playlist ou compilation). +Table compilations : id, name, file_path (chemin du fichier mixé), tracks_list (JSON ou relation many-to-many si needed). + +Contraintes techniques :DB : SQLite uniquement (fichier local, pas de serveur). +Environnement : Node.js (version récente, ex. 18+). Pas d'installation de paquets incompatibles. Deployable dans une app Nuxt 4, la partie typescript sera écrite dans le dossier server prevu dans nuxt avec h3. +Gestion des mises à jour : Implémenter un mécanisme pour re-scanner les dossiers playlists seulement si des changements sont détectés (ex. : via fs.watch ou comparaison de timestamps). Pour les compilations, permettre un import manuel ou initial. +Population initiale : Au démarrage de l'app, scanner les dossiers playlists et importer les compilations hardcodées actuelles en DB. + +Output attendu :Étapes détaillées pour implémenter cela (setup DB, schéma avec Drizzle, code pour population initiale et mises à jour). +Exemples de code Node.js : Setup de Drizzle avec SQLite. +Fonctions pour scanner le dossier playlists +Exemples de requêtes (ex. : getPlaylistById depuis DB, avec fallback sur scan si cache invalide). +Gestion des erreurs et optimisations perf. + +Si possible, un schéma DB en SQL ou Drizzle schema.ts. +Assure-toi que la solution est scalable pour ~1000 tracks initiaux, et teste les perfs dans tes exemples. + + +voici ma structure de projet actuelle : + +compilation : +import { eventHandler } from 'h3' + +export default eventHandler(() => { + const tracks = [ + { + order: 1, + boxId: 'ES00', + side: 'A', + title: 'The grinding wheel', + artist: 0, + start: 0, + link: 'https://arakirecords.bandcamp.com/track/the-grinding-wheel', + coverId: 'a3236746052' + }, + { + order: 2, + boxId: 'ES00', + side: 'A', + title: 'Bleach', + artist: 1, + start: 392, + link: 'https://the-kundalini-genie.bandcamp.com/track/bleach-2', + coverId: 'a1714786533' + }, + { + order: 3, + boxId: 'ES00', + side: 'A', + title: 'Televised mind', + artist: 2, + start: 896, + link: 'https://fontainesdc.bandcamp.com/track/televised-mind', + coverId: 'a3772806156' + }, + { + order: 4, + boxId: 'ES00', + side: 'A', + title: 'In it', + artist: 3, + start: 1139, + link: 'https://howlinbananarecords.bandcamp.com/track/in-it', + coverId: 'a1720372066' + }, + { + order: 5, + boxId: 'ES00', + side: 'A', + title: 'Bad michel', + artist: 4, + start: 1245, + link: 'https://johnnymafia.bandcamp.com/track/bad-michel-3', + coverId: 'a0984622869' + }, + { + order: 6, + boxId: 'ES00', + side: 'A', + title: 'Overall', + artist: 5, + start: 1394, + link: 'https://newcandys.bandcamp.com/track/overall', + coverId: 'a0559661270' + }, + { + order: 7, + boxId: 'ES00', + side: 'A', + title: 'Blowup', + artist: 6, + start: 1674, + link: 'https://magicshoppe.bandcamp.com/track/blowup', + coverId: 'a1444895293' + }, + { + order: 8, + boxId: 'ES00', + side: 'A', + title: 'Guitar jet', + artist: 7, + start: 1880, + link: 'https://radiomartiko.bandcamp.com/track/guitare-jet', + coverId: 'a1494681687' + }, + { + order: 9, + boxId: 'ES00', + side: 'A', + title: 'Intercontinental radio waves', + artist: 8, + start: 2024, + link: 'https://traams.bandcamp.com/track/intercontinental-radio-waves', + coverId: 'a0046738552' + }, + { + order: 10, + boxId: 'ES00', + side: 'A', + title: 'Here comes the sun', + artist: 9, + start: 2211, + link: 'https://blue-orchid.bandcamp.com/track/here-come-the-sun', + coverId: 'a4102567047' + }, + { + order: 11, + boxId: 'ES00', + side: 'A', + title: 'Like in the movies', + artist: 10, + start: 2560, + link: 'https://bruitblanc.bandcamp.com/track/like-in-the-movies-2', + coverId: 'a2203158939' + }, + { + order: 1, + boxId: 'ES00', + side: 'B', + title: "Ce que révèle l'éclipse", + artist: 0, + start: 0, + link: 'https://arakirecords.bandcamp.com/track/ce-que-r-v-le-l-clipse', + coverId: 'a3236746052' + }, + { + order: 2, + boxId: 'ES00', + side: 'B', + title: "Bleedin' Gums Mushrool", + artist: 1, + start: 263, + link: 'https://the-kundalini-genie.bandcamp.com/track/bleedin-gums-mushroom', + coverId: 'a1714786533' + }, + { + order: 3, + boxId: 'ES00', + side: 'B', + title: 'A lucid dream', + artist: 2, + start: 554, + link: 'https://fontainesdc.bandcamp.com/track/a-lucid-dream', + coverId: 'a3772806156' + }, + { + order: 4, + boxId: 'ES00', + side: 'B', + title: 'Lights off', + artist: 3, + start: 781, + link: 'https://howlinbananarecords.bandcamp.com/track/lights-off', + coverId: 'a1720372066' + }, + { + order: 5, + boxId: 'ES00', + side: 'B', + title: "I'm sentimental", + artist: 4, + start: 969, + link: 'https://johnnymafia.bandcamp.com/track/im-sentimental-2', + coverId: 'a2333676849' + }, + { + order: 6, + boxId: 'ES00', + side: 'B', + title: 'Thrill or trip', + artist: 5, + start: 1128, + link: 'https://newcandys.bandcamp.com/track/thrill-or-trip', + coverId: 'a0559661270' + }, + { + order: 7, + boxId: 'ES00', + side: 'B', + title: 'Redhead', + artist: 6, + start: 1303, + link: 'https://magicshoppe.bandcamp.com/track/redhead', + coverId: 'a0594426943' + }, + { + order: 8, + boxId: 'ES00', + side: 'B', + title: 'Supersonic twist', + artist: 7, + start: 1584, + link: 'https://open.spotify.com/track/66voQIZAJ3zD3Eju2qtNjF', + coverId: 'a1494681687' + }, + { + order: 9, + boxId: 'ES00', + side: 'B', + title: 'Flowers', + artist: 8, + start: 1749, + link: 'https://traams.bandcamp.com/track/flowers', + coverId: 'a3644668199' + }, + { + order: 10, + boxId: 'ES00', + side: 'B', + title: 'The shade', + artist: 9, + start: 1924, + link: 'https://blue-orchid.bandcamp.com/track/the-shade', + coverId: 'a0804204790' + }, + { + order: 11, + boxId: 'ES00', + side: 'B', + title: 'Like in the movies', + artist: 10, + start: 2186, + link: 'https://bruitblanc.bandcamp.com/track/like-in-the-movies', + coverId: 'a3647322740' + }, + { + order: 1, + boxId: 'ES01', + side: 'A', + title: 'He Walked In', + artist: 11, + start: 0, + link: 'https://kidcongothepinkmonkeybirds.bandcamp.com/track/he-walked-in', + coverId: 'a0336300523' + }, + { + order: 2, + boxId: 'ES01', + side: 'A', + title: 'The Third Wave', + artist: 12, + start: 841, + link: 'https://firefriend.bandcamp.com/track/the-third-wave', + coverId: 'a2803689859' + }, + { + order: 3, + boxId: 'ES01', + side: 'A', + title: 'Broadcaster', + artist: 13, + start: 1104.5, + link: 'https://squiduk.bandcamp.com/track/broadcaster', + coverId: 'a3391719769' + }, + { + order: 4, + boxId: 'ES01', + side: 'A', + title: 'Mourn', + artist: 14, + start: 1441, + link: 'https://lysistrata.bandcamp.com/track/mourn-2', + coverId: 'a0872900041' + }, + { + order: 5, + boxId: 'ES01', + side: 'A', + title: 'Let it Blow', + artist: 15, + start: 1844.8, + link: 'https://pabloxbroadcastingservices.bandcamp.com/track/let-it-blow', + coverId: 'a4000148031' + }, + { + order: 6, + boxId: 'ES01', + side: 'A', + title: 'Sunday Mourning', + artist: 16, + start: 2091.7, + link: 'https://nightbeats.bandcamp.com/track/sunday-mourning', + coverId: 'a0031987121' + }, + { + order: 7, + boxId: 'ES01', + side: 'A', + title: '3030 Instrumental', + artist: 17, + start: 2339.3, + link: 'https://delthefunkyhomosapien.bandcamp.com/track/3030', + coverId: 'a1948146136' + }, + { + order: 8, + boxId: 'ES01', + side: 'A', + title: 'Immortality Break', + artist: 18, + start: 2530.5, + link: 'https://theaa.bandcamp.com/track/immortality-break', + coverId: 'a2749250329' + }, + { + order: 9, + boxId: 'ES01', + side: 'A', + title: 'Lazy Bones', + artist: 19, + start: 2718, + link: 'https://woodenshjips.bandcamp.com/track/lazy-bones', + coverId: 'a1884221104' + }, + { + order: 10, + boxId: 'ES01', + side: 'A', + title: 'On the Train of Aches', + artist: 20, + start: 2948, + link: 'https://silasjdirge.bandcamp.com/track/on-the-train-of-aches', + coverId: 'a1124177379' + }, + { + order: 11, + boxId: 'ES01', + side: 'A', + title: 'Me', + artist: 21, + start: 3265, + link: 'https://secretcolours.bandcamp.com/track/me', + coverId: 'a1497022499' + }, + { + order: 1, + boxId: 'ES01', + side: 'B', + title: 'Lady Hawke Blues', + artist: 11, + start: 0, + link: 'https://kidcongothepinkmonkeybirds.bandcamp.com/track/lady-hawke-blues', + coverId: 'a2532623230' + }, + { + order: 2, + boxId: 'ES01', + side: 'B', + title: 'Dreamscapes', + artist: 12, + start: 235, + link: 'https://littlecloudrecords.bandcamp.com/track/dreamscapes', + coverId: 'a3498981203' + }, + { + order: 3, + boxId: 'ES01', + side: 'B', + title: 'Crispy Skin', + artist: 13, + start: 644.2, + link: 'https://squiduk.bandcamp.com/track/crispy-skin-2', + coverId: 'a2516727021' + }, + { + order: 4, + boxId: 'ES01', + side: 'B', + title: 'The Boy Who Stood Above The Earth', + artist: 14, + start: 1018, + link: 'https://lysistrata.bandcamp.com/track/the-boy-who-stood-above-the-earth-2', + coverId: 'a0350933426' + }, + { + order: 5, + boxId: 'ES01', + side: 'B', + title: 'Better Off Alone', + artist: 15, + start: 1698, + link: 'https://pabloxbroadcastingservices.bandcamp.com/track/better-off-alone', + coverId: 'a4000148031' + }, + { + order: 6, + boxId: 'ES01', + side: 'B', + title: 'Celebration #1', + artist: 16, + start: 2235, + link: 'https://nightbeats.bandcamp.com/track/celebration-1', + coverId: 'a0031987121' + }, + { + order: 7, + boxId: 'ES01', + side: 'B', + title: '3030 Instrumental', + artist: 17, + start: 2458.3, + link: 'https://delthefunkyhomosapien.bandcamp.com/track/3030', + coverId: 'a1948146136' + }, + { + order: 8, + boxId: 'ES01', + side: 'B', + title: 'The Emptiness Of Nothingness', + artist: 18, + start: 2864.5, + link: 'https://theaa.bandcamp.com/track/the-emptiness-of-nothingness', + coverId: 'a1053923875' + }, + { + order: 9, + boxId: 'ES01', + side: 'B', + title: 'Rising', + artist: 19, + start: 3145, + link: 'https://woodenshjips.bandcamp.com/track/rising', + coverId: 'a1884221104' + }, + { + order: 10, + boxId: 'ES01', + side: 'B', + title: 'The Last Time', + artist: 22, + start: 3447, + link: 'https://www.discogs.com/release/12110815-Larry-McNeil-And-The-Blue-Knights-Jealous-Woman', + coverId: + 'https://i.discogs.com/Yr05_neEXwzPwKlDeV7dimmTG34atkAMgpxbMBhHBkI/rs:fit/g:sm/q:90/h:600/w:600/czM6Ly9kaXNjb2dz/LWRhdGFiYXNlLWlt/YWdlcy9SLTEyMTEw/ODE1LTE1Mjg1NjU1/NzQtMjcyOC5qcGVn.jpeg' + }, + { + order: 11, + boxId: 'ES01', + side: 'B', + title: 'Guajira Con Arpa', + artist: 23, + start: 3586, + link: 'https://elpalmasmusic.bandcamp.com/track/guajira-con-arpa', + coverId: 'a3463036407' + } + ] + + return tracks.map((track, index) => ({ + id: index + 1, + ...track, + filePath: `https://files.erudi.fr/evilspins/${track.boxId}${track.side}.mp3`, + coverId: `https://f4.bcbits.com/img/${track.coverId}_4.jpg`, + type: 'compilation' + })) +}) + + +playlist: +import fs from 'fs' +import path from 'path' +import 'dotenv/config' +import { eventHandler } from 'h3' +import { getCardFromDate } from '../../../utils/cards' + +export default eventHandler(async (event) => { + const dirPath = path.join(process.env.AUDIO_FILES_BASE_PATH) + const urlPrefix = `https://files.erudi.fr/music` + + try { + let allTracks: any[] = [] + + const items = await fs.promises.readdir(dirPath, { withFileTypes: true }) + + // Process files + const files = items + .filter((item) => item.isFile() && !item.name.startsWith('.') && !item.name.endsWith('.jpg')) + .map((item) => item.name) + + // Process folders + const folders = items + .filter((item) => item.isDirectory() && !item.name.startsWith('.')) + .map((folder, index) => ({ + id: `folder-${index}`, + boxId: 'ESFOLDER', + title: folder.name.replace(/_/g, ' ').trim(), + type: 'folder', + order: 0, + date: new Date(), + card: getCardFromDate(new Date()) + })) + + const tracks = files.map((file, index) => { + const EXT_RE = /\.(mp3|flac|wav|opus)$/i + const nameWithoutExt = file.replace(EXT_RE, '') + + // On split sur __ + const parts = nameWithoutExt.split('__') + let stamp = parts[0] || '' + let artist = parts[1] || '' + let title = parts[2] || '' + + title = title.replaceAll('_', ' ') + artist = artist.replaceAll('_', ' ') + + // Parser la date depuis le stamp + let year = 2020, + month = 1, + day = 1, + hour = 0 + if (stamp.length === 10) { + year = Number(stamp.slice(0, 4)) + month = Number(stamp.slice(4, 6)) + day = Number(stamp.slice(6, 8)) + hour = Number(stamp.slice(8, 10)) + } + + const date = new Date(year, month - 1, day, hour) + const card = getCardFromDate(date) + const filePath = `${urlPrefix}/${encodeURIComponent(file)}` + const coverId = `${urlPrefix}/cover/${encodeURIComponent(file).replace(EXT_RE, '.jpg')}` + + return { + id: Number(`${year}${index + 1}`), + boxId: `ESPLAYLIST`, + year, + date, + title: title.trim(), + artist: artist.trim(), + filePath, + coverId, + card, + order: 0, + type: 'playlist' + } + }) + + tracks.sort((a, b) => b.date.getTime() - a.date.getTime()) + // Combine folders and tracks + const allItems = [...folders, ...tracks] + + // Sort by date (newest first) and assign order + allItems.sort((a, b) => b.date.getTime() - a.date.getTime()) + allItems.forEach((item, i) => (item.order = i + 1)) + + return allItems + } catch (error) { + return { + success: false, + error: (error as Error).message + } + } +}) diff --git a/server/plugins/initialSync.ts b/server/plugins/initialSync.ts new file mode 100644 index 0000000..5950ea9 --- /dev/null +++ b/server/plugins/initialSync.ts @@ -0,0 +1,21 @@ +import { syncCardsWithDatabase } from '../services/cardSync.service' + +export default defineNitroPlugin(async (nitroApp) => { + const config = useRuntimeConfig() + const folderPath = config.pathFiles || process.env.PATH_FILES + + if (!folderPath) { + console.warn('⚠️ PATH_FILES non configuré') + return + } + + // Sync au démarrage + console.log('🚀 Synchronisation initiale au démarrage...') + + try { + const result = await syncCardsWithDatabase(folderPath) + console.log('✅ Synchronisation initiale terminée:', result) + } catch (error: any) { + console.error('❌ Erreur lors de la sync initiale:', error) + } +}) diff --git a/server/services/cardSync.service.ts b/server/services/cardSync.service.ts new file mode 100644 index 0000000..b877368 --- /dev/null +++ b/server/services/cardSync.service.ts @@ -0,0 +1,58 @@ +import { eq, notInArray } from 'drizzle-orm' +import { useDB, schema } from '../db' +import { scanMusicFolder } from '../utils/fileScanner' + +const { cards } = schema + +export async function syncCardsWithDatabase(folderPath: string) { + const db = useDB() + const scannedCards = await scanMusicFolder(folderPath) + + console.log(`📁 ${scannedCards.length} cards trouvées dans le dossier`) + + // 1. Récupérer les cards existantes en DB + const existingCards = await db.select().from(cards).all() + const existingEsids = new Set(existingCards.map((t) => t.esid)) + + // 2. Identifier les nouvelles cards à ajouter + const cardsToInsert = scannedCards.filter((card) => !existingEsids.has(card.esid)) + + // 3. Identifier les cards à supprimer + const scannedEsids = new Set(scannedCards.map((t) => t.esid)) + const cardsToDelete = existingCards.filter((t) => !scannedEsids.has(t.esid)) + + // 4. Insérer les nouvelles cards + if (cardsToInsert.length > 0) { + // Dans la fonction syncCardsWithDatabase + await db.insert(cards).values( + cardsToInsert.map((card) => ({ + url_audio: card.url_audio, + url_image: card.url_image, + year: card.year, + month: card.month, + day: card.day, + hour: card.hour, + artist: card.artist, + title: card.title, + esid: card.esid, + slug: card.slug, + createdAt: card.createdAt, + suit: card.suit, + rank: card.rank + })) + ) + console.log(`✅ ${cardsToInsert.length} cards ajoutées`) + } + + // 5. Supprimer les cards obsolètes avec une requête distincte pour chaque esid + for (const cardToDelete of cardsToDelete) { + await db.delete(cards).where(eq(cards.esid, cardToDelete.esid)) + console.log(`🗑️ ${cardsToDelete.length} cards supprimées`) + } + + return { + added: cardsToInsert.length, + deleted: cardsToDelete.length, + total: scannedCards.length + } +} diff --git a/server/services/playlist-sync.service.ts b/server/services/playlist-sync.service.ts deleted file mode 100644 index f0bd2f4..0000000 --- a/server/services/playlist-sync.service.ts +++ /dev/null @@ -1,163 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { Database } from 'sqlite' -import { fileURLToPath } from 'url' -import chokidar from 'chokidar' -import { db } from '../database' - -const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) -const PLAYLISTS_DIR = path.join(process.cwd(), 'public/ESPLAYLISTS') -const AUDIO_EXTENSIONS = ['.mp3', '.wav', '.ogg', '.m4a', '.flac'] - -export class PlaylistSyncService { - private watcher: chokidar.FSWatcher | null = null - - constructor(private db: Database) {} - - async initialize() { - await this.scanPlaylists() - this.setupWatcher() - } - - private async scanPlaylists() { - try { - if (!fs.existsSync(PLAYLISTS_DIR)) { - console.warn(`Playlists directory not found: ${PLAYLISTS_DIR}`) - return - } - - const playlists = fs - .readdirSync(PLAYLISTS_DIR, { withFileTypes: true }) - .filter((dirent) => dirent.isDirectory()) - .map((dirent) => dirent.name) - - for (const playlistName of playlists) { - await this.syncPlaylist(playlistName) - } - } catch (error) { - console.error('Error scanning playlists:', error) - } - } - - private async syncPlaylist(playlistName: string) { - const playlistPath = path.join(PLAYLISTS_DIR, playlistName) - - try { - const stats = fs.statSync(playlistPath) - - // Vérifier ou créer la playlist dans la base de données - let playlist = await this.db.get('SELECT * FROM playlists WHERE name = ?', [playlistName]) - - if (!playlist) { - const result = await this.db.run( - 'INSERT INTO playlists (name, path, last_modified) VALUES (?, ?, ?)', - [playlistName, playlistPath, new Date(stats.mtime).toISOString()] - ) - playlist = await this.db.get('SELECT * FROM playlists WHERE id = ?', [result.lastID]) - } - - // Récupérer les pistes actuelles - const currentTracks = fs - .readdirSync(playlistPath) - .filter((file) => { - const ext = path.extname(file).toLowerCase() - return AUDIO_EXTENSIONS.includes(ext) - }) - .map((file, index) => ({ - path: path.join(playlistName, file), - order: index - })) - - // Mettre à jour les pistes dans la base de données - await this.db.run('BEGIN TRANSACTION') - try { - // Supprimer les anciennes entrées - await this.db.run('DELETE FROM playlist_tracks WHERE playlist_id = ?', [playlist.id]) - - // Ajouter les nouvelles pistes - for (const track of currentTracks) { - await this.db.run( - 'INSERT INTO playlist_tracks (playlist_id, track_path, track_order) VALUES (?, ?, ?)', - [playlist.id, track.path, track.order] - ) - } - - // Mettre à jour la date de modification - await this.db.run('UPDATE playlists SET last_modified = ? WHERE id = ?', [ - new Date().toISOString(), - playlist.id - ]) - - await this.db.run('COMMIT') - console.log(`Playlist "${playlistName}" synchronized with ${currentTracks.length} tracks`) - } catch (error) { - await this.db.run('ROLLBACK') - console.error(`Error syncing playlist ${playlistName}:`, error) - } - } catch (error) { - console.error(`Error accessing playlist directory ${playlistPath}:`, error) - } - } - - private setupWatcher() { - if (!fs.existsSync(PLAYLISTS_DIR)) { - console.warn(`Playlists directory not found, watcher not started: ${PLAYLISTS_DIR}`) - return - } - - this.watcher = chokidar.watch(PLAYLISTS_DIR, { - ignored: /(^|[\/\\])\../, // ignore les fichiers cachés - persistent: true, - ignoreInitial: true, - depth: 2 // surveille un seul niveau de sous-dossiers - }) - - this.watcher - .on('add', (filePath) => this.handleFileChange('add', filePath)) - .on('change', (filePath) => this.handleFileChange('change', filePath)) - .on('unlink', (filePath) => this.handleFileChange('unlink', filePath)) - .on('addDir', (dirPath) => this.handleDirChange('addDir', dirPath)) - .on('unlinkDir', (dirPath) => this.handleDirChange('unlinkDir', dirPath)) - .on('error', (error) => console.error('Watcher error:', error)) - } - - private async handleFileChange(event: string, filePath: string) { - const relativePath = path.relative(PLAYLISTS_DIR, filePath) - const playlistName = path.dirname(relativePath) - const ext = path.extname(filePath).toLowerCase() - - // Ignorer les fichiers qui ne sont pas des fichiers audio - if (playlistName === '.' || !AUDIO_EXTENSIONS.includes(ext)) { - return - } - - console.log(`File ${event}: ${relativePath}`) - await this.syncPlaylist(playlistName) - } - - private async handleDirChange(event: string, dirPath: string) { - const relativePath = path.relative(PLAYLISTS_DIR, dirPath) - - if (relativePath === '') return // Ignorer le dossier racine - - console.log(`Directory ${event}: ${relativePath}`) - if (event === 'addDir') { - await this.syncPlaylist(relativePath) - } else if (event === 'unlinkDir') { - // Supprimer la playlist de la base de données - await this.db.run('DELETE FROM playlists WHERE name = ?', [relativePath]) - console.log(`Removed playlist from database: ${relativePath}`) - } - } - - close() { - if (this.watcher) { - return this.watcher.close() - } - return Promise.resolve() - } -} - -// Singleton instance -export const playlistSyncService = new PlaylistSyncService(db) diff --git a/server/tasks/syncCards.ts b/server/tasks/syncCards.ts new file mode 100644 index 0000000..030feba --- /dev/null +++ b/server/tasks/syncCards.ts @@ -0,0 +1,23 @@ +import { syncCardsWithDatabase } from '../services/cardSync.service' + +export default defineTask({ + meta: { + name: 'sync-tracks', + description: 'Synchronise les tracks avec le système de fichiers' + }, + async run() { + const config = useRuntimeConfig() + const folderPath = config.pathFiles || process.env.PATH_FILES || 'mnt/media/files/music' + + console.log('⏰ [TASK] Démarrage de la synchronisation planifiée...') + + try { + const result = await syncCardsWithDatabase(folderPath) + console.log('✅ [TASK] Synchronisation terminée:', result) + return { result } + } catch (error: any) { + console.error('❌ [TASK] Erreur lors de la synchronisation:', error) + return { error: error.message } + } + } +}) diff --git a/server/tsconfig.json b/server/tsconfig.json deleted file mode 100644 index b9ed69c..0000000 --- a/server/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../.nuxt/tsconfig.server.json" -} diff --git a/server/types/database.ts b/server/types/database.ts deleted file mode 100644 index 3926a36..0000000 --- a/server/types/database.ts +++ /dev/null @@ -1,82 +0,0 @@ -// Types pour les tables de la base de données - -export interface Box { - id: string - type: 'compilation' | 'playlist' - name: string - description?: string - state?: string - duration: number - activeSide?: string - color1?: string - color2?: string - createdAt?: string -} - -export interface Side { - id: number - boxId: string - side: string - name?: string - description?: string - duration: number - color1?: string - color2?: string -} - -export interface Artist { - id: number - name: string - url?: string - coverId?: string - createdAt?: string -} - -export interface Track { - id: number - boxId: string - side?: string - trackOrder: number - title: string - artistId?: number - start: number - link?: string - coverId?: string - url?: string - type: 'compilation' | 'playlist' - year?: number - date?: string - card?: string -} - -// Types pour les réponses API - -export interface BoxWithSides extends Box { - sides?: Record> -} - -export interface TrackWithArtist extends Track { - artistName?: string - artistUrl?: string -} - -export interface PaginatedResponse { - items: T[] - pagination: { - page: number - limit: number - total: number - totalPages: number - } -} - -export interface TracksSearchResponse { - tracks: TrackWithArtist[] - pagination: { - page: number - limit: number - total: number - totalPages: number - } - search?: string -} diff --git a/server/utils/database.ts b/server/utils/database.ts deleted file mode 100644 index e84ee5f..0000000 --- a/server/utils/database.ts +++ /dev/null @@ -1,63 +0,0 @@ -import Database from 'better-sqlite3' -import fs from 'fs' -import path from 'path' - -let db: Database.Database | null = null - -export function getDatabase(): Database.Database { - if (db) return db - - const dbDir = path.join(process.cwd(), 'server/database') - const dbPath = path.join(dbDir, 'evilspins.db') - - // Créer le dossier si nécessaire - if (!fs.existsSync(dbDir)) { - fs.mkdirSync(dbDir, { recursive: true }) - } - - // Connexion à la base - db = new Database(dbPath, { - verbose: process.env.NODE_ENV === 'development' ? console.log : undefined - }) - - // Activer les clés étrangères - db.pragma('foreign_keys = ON') - - // Initialiser le schéma si la DB est vide - initializeSchema(db) - - return db -} - -function initializeSchema(database: Database.Database) { - const schemaPath = path.join(process.cwd(), 'server/database/schema.sql') - - // Vérifier si les tables existent déjà - const tableCheck = database - .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='tracks'") - .get() - - if (!tableCheck) { - console.log('🔧 Initialisation du schéma de la base de données...') - const schema = fs.readFileSync(schemaPath, 'utf-8') - - // Exécuter chaque statement SQL - const statements = schema - .split(';') - .map((s) => s.trim()) - .filter((s) => s.length > 0) - - for (const statement of statements) { - database.exec(statement) - } - - console.log('✅ Schéma initialisé avec succès') - } -} - -export function closeDatabase() { - if (db) { - db.close() - db = null - } -} diff --git a/server/utils/fileScanner.ts b/server/utils/fileScanner.ts new file mode 100644 index 0000000..2550ce7 --- /dev/null +++ b/server/utils/fileScanner.ts @@ -0,0 +1,119 @@ +import { readdir, readFile } from 'node:fs/promises' +import { join, extname, basename } from 'node:path' +import { createHash } from 'node:crypto' +import { slugify } from './slugify' +import { getCardFromDate } from './getCardFromDate' +import type { Card } from '@/types/types' + +const listAudioExts = ['.mp3', '.opus', 'flac'] +const listImageExts = ['.jpg', '.jpeg', '.webp'] + +export async function scanMusicFolder(folderPath: string): Promise { + try { + const files = await readdir(folderPath) + const cardMap = new Map() + + // D'abord, on traite tous les fichiers audio + for (const file of files) { + const ext = extname(file).toLowerCase() + + // On ne traite que les fichiers audio + if (!listAudioExts.includes(ext)) continue + + const parsed = await parseFilename(join(folderPath, file)) + if (parsed) { + // On vérifie s'il existe une image avec le même nom de base + const baseName = basename(file, ext) + let imageUrl = '' + + // On cherche une image correspondante + for (const imgExt of listImageExts) { + const potentialImage = baseName + imgExt + if (files.includes(potentialImage)) { + imageUrl = process.env.URL_PREFIX + baseName + imgExt + break + } + } + + cardMap.set(parsed.esid, { + ...parsed, + url_audio: process.env.URL_PREFIX + baseName + ext, + url_image: imageUrl, + suit: parsed.suit, + rank: parsed.rank + }) + } + } + + return Array.from(cardMap.values()) + } catch (error) { + console.error('Erreur lors du scan du dossier:', error) + throw error + } +} + +async function parseFilename( + filename: string +): Promise | null> { + // Format: yyyymmddhh__artist__title.ext + const nameWithoutExt = basename(filename, extname(filename)) + const parts = nameWithoutExt.split('__') + + if (parts.length !== 3) { + console.warn(`Nom de fichier invalide: ${filename}`) + return null + } + + const [datetime, artist, title] = parts + + if (!datetime || !artist || !title) { + console.warn(`Format de fichier invalide: ${filename} - manque des parties`) + return null + } + + if (datetime.length !== 10) { + console.warn(`Format de date invalide: ${filename}`) + return null + } + + // Utilisation d'un hash basé sur le contenu du fichier pour un ESID stable + let fileHash = '' + try { + const fileContent = await readFile(filename) + fileHash = createHash('md5').update(fileContent).digest('hex').substring(0, 8) + } catch (error) { + console.warn(`Impossible de lire le fichier pour générer le hash: ${filename}`) + fileHash = createHash('md5').update(filename).digest('hex').substring(0, 8) + } + + const year = datetime.substring(0, 4) + const month = datetime.substring(4, 6) + const day = datetime.substring(6, 8) + const hour = datetime.substring(8, 10) + // Créer l'ID unique pour la card + const esid = createHash('md5') + .update(`${year}${month}${day}${hour}${artist}${title}`) + .digest('hex') + + const date = new Date( + parseInt(year, 10), + parseInt(month, 10) - 1, + parseInt(day, 10), + parseInt(hour, 10) + ) + const card = getCardFromDate(date) + + return { + year, + month, + day, + hour, + artist: artist.replace(/_/g, ' '), // Remplacer les _ par des espaces + title: title.replace(/_/g, ' '), + esid, + slug: slugify(`${artist} ${title}`), + createdAt: date, + suit: card.suit, + rank: card.rank + } +} diff --git a/utils/cards.ts b/server/utils/getCardFromDate.ts similarity index 56% rename from utils/cards.ts rename to server/utils/getCardFromDate.ts index d6bc5d9..cb60899 100644 --- a/utils/cards.ts +++ b/server/utils/getCardFromDate.ts @@ -1,11 +1,11 @@ -import type { CardSuit, CardRank } from '~/types/cards' +import type { Suit, Rank } from '../../types/types' -export function getCardFromDate(date: Date): { suit: CardSuit; rank: CardRank } { +export function getCardFromDate(date: Date): { suit: Suit; rank: Rank } { const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() - const suit: CardSuit = + const suit: Suit = month >= 12 || month <= 2 ? '♠' : month >= 3 && month <= 5 @@ -14,7 +14,7 @@ export function getCardFromDate(date: Date): { suit: CardSuit; rank: CardRank } ? '♦' : '♣' - const ranks: CardRank[] = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] + const ranks: Rank[] = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] const rank = ranks[(day + hour) % ranks.length] return { suit, rank } diff --git a/server/utils/slugify.ts b/server/utils/slugify.ts new file mode 100644 index 0000000..afc16f6 --- /dev/null +++ b/server/utils/slugify.ts @@ -0,0 +1,9 @@ +export function slugify(str: string): string { + return str + .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-+/, '') + .replace(/-+$/, '') +} diff --git a/tsconfig.app.json b/tsconfig.app.json index dfbd8c7..6cca84d 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -18,12 +18,15 @@ } }, "include": [ - "**/*.ts", - "**/*.d.ts", - "**/*.tsx", - "**/*.vue", - ".nuxt/**/*.ts", - "./types/**/*.d.ts" + "./components/**/*.js", + "./components/**/*.ts", + "./components/**/*.jsx", + "./components/**/*.tsx", + "./components/**/*.vue", + "./app.vue", + "./error.vue", + "./types/**/*.ts" ], + "typeRoots": ["./node_modules/@types", "./types"], "exclude": ["node_modules", ".output", "dist"] } diff --git a/types/types.ts b/types/types.ts index 4d24fbd..783261a 100644 --- a/types/types.ts +++ b/types/types.ts @@ -1,54 +1,18 @@ -// types.ts -export type BoxType = 'playlist' | 'compilation' - -export interface BoxSide { - duration: number - color1: string - color2: string - name?: string - description?: string -} - -export interface Box { - id: string - type: BoxType - name: string - description: string - state: BoxState - duration: number - tracks?: Track[] - sides?: { - A: BoxSide - B: BoxSide - } - activeSide: 'A' | 'B' -} - -export interface Artist { - id: number - name: string - url: string - coverId: string -} -export interface Track { - id: number - side?: 'A' | 'B' - order?: number - boxId: string +export interface Card { + url_audio: string + url_image: string + year: number + month: string + day: string + hour: string + artist: string title: string - artist?: Artist | number | string - start?: number - duration?: number - url: string - coverId?: string - date?: Date - card?: { suit: CardSuit; rank: CardRank } - link?: string - type: BoxType - year?: number - color: string + esid: string + slug: string + createdAt: Date + suit: Suit + rank: Rank } -export type BoxState = 'box-hidden' | 'box-list' | 'box-selected' -export type CardSuit = '♠' | '♣' | '♦' | '♥' -export type CardRank = 'A' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | 'J' | 'Q' | 'K' +export type Suit = '♠' | '♣' | '♦' | '♥' +export type Rank = 'A' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | 'J' | 'Q' | 'K' diff --git a/utils/tabManager.ts b/utils/tabManager.ts new file mode 100644 index 0000000..da1237f --- /dev/null +++ b/utils/tabManager.ts @@ -0,0 +1,52 @@ +// Gestionnaire d'onglets pour les cartes NFC +export function openOrFocusCard(slug: string) { + const url = `${window.location.origin}/card/${slug}` + + // Vérifier si un onglet est déjà ouvert + const isTabOpen = localStorage.getItem('nfc-active-tab') === 'true' + + if (isTabOpen) { + // Si un onglet est déjà ouvert, on envoie un message pour le rafraîchir + const channel = new BroadcastChannel('nfc-channel') + channel.postMessage({ + type: 'nfc-focus', + slug: slug, + timestamp: Date.now() + }) + + // On se concentre sur l'onglet existant + window.focus() + + // On ferme le canal après un court délai + setTimeout(() => channel.close(), 1000) + + // On empêche l'ouverture d'un nouvel onglet + return false + } + + // Aucun onglet ouvert, on en ouvre un nouveau + window.open(url, '_blank') + return true +} + +// Fonction pour formater l'URL à utiliser dans la carte NFC +export function getNfcCardUrl(slug: string): string { + return `javascript:(function(){ + const url = '${window.location.origin}/card/${slug}'; + const isTabOpen = localStorage.getItem('nfc-active-tab') === 'true'; + + if (isTabOpen) { + const channel = new BroadcastChannel('nfc-channel'); + channel.postMessage({ + type: 'nfc-focus', + slug: '${slug}', + timestamp: Date.now() + }); + setTimeout(() => channel.close(), 1000); + window.focus(); + window.location.href = url; + } else { + window.open(url, '_blank'); + } + })();` +}