From f5bf7c6f89275ae9ba6566fd602d31b20c6ca950 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 8 Sep 2025 17:33:05 +0100 Subject: [PATCH] feat: add linkedin token generator --- nuxt.config.ts | 3 + package.json | 5 +- pnpm-lock.yaml | 1004 ++--------------- scripts/linkedin-auth.ts | 347 ++++++ scripts/{youtube-auth.mjs => youtube-auth.ts} | 194 ++-- 5 files changed, 572 insertions(+), 981 deletions(-) create mode 100644 scripts/linkedin-auth.ts rename scripts/{youtube-auth.mjs => youtube-auth.ts} (67%) diff --git a/nuxt.config.ts b/nuxt.config.ts index 521f193a..eaec3354 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -237,6 +237,9 @@ export default defineNuxtConfig({ }, typescript: { + nodeTsConfig: { + include: ['../scripts'], + }, hoist: ['vite'], }, diff --git a/package.json b/package.json index 6eadfe5b..02cb595a 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,9 @@ "test:e2e": "playwright test test/e2e", "test:e2e:update": "docker run --rm --network host -v $(pwd):/work/ -v /tmp/playwright-nm:/work/node_modules -w /work/ -it mcr.microsoft.com/playwright:v1.52.0-noble bash -c 'corepack enable && pnpm i && pnpm playwright test test/e2e --update-snapshots'", "postinstall": "nuxt prepare && pnpm simple-git-hooks install", - "auth:youtube": "node --env-file=.env scripts/youtube-auth.mjs", + "auth:linkedin": "node --env-file=.env scripts/linkedin-auth.ts", + "auth:youtube": "node --env-file=.env scripts/youtube-auth.ts", + "auth:youtube:refresh": "node --env-file=.env scripts/youtube-auth.ts refresh", "import-streambeats": "node --env-file=.env scripts/import-streambeats.mjs", "import-streambeats:dry-run": "node --env-file=.env scripts/import-streambeats.mjs --dry-run" }, @@ -48,6 +50,7 @@ "@unocss/postcss": "^66.1.3", "@unocss/reset": "^66.1.3", "@vercel/blob": "^1.1.1", + "citty": "^0.1.6", "defu": "^6.1.4", "exsolve": "^1.0.5", "feed": "^5.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9cad5b9..a1f5f94e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,6 +88,9 @@ importers: '@vercel/blob': specifier: ^1.1.1 version: 1.1.1 + citty: + specifier: ^0.1.6 + version: 0.1.6 defu: specifier: ^6.1.4 version: 6.1.4 @@ -372,10 +375,6 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.4': resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} @@ -480,11 +479,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.4': resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} @@ -949,10 +943,6 @@ packages: resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} @@ -1221,12 +1211,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.9': resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} @@ -1239,12 +1223,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.9': resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} @@ -1257,12 +1235,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.9': resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} @@ -1275,12 +1247,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.9': resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} @@ -1293,12 +1259,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.9': resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} @@ -1311,12 +1271,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.9': resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} @@ -1329,12 +1283,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.9': resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} @@ -1347,12 +1295,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} @@ -1365,12 +1307,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.9': resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} @@ -1383,12 +1319,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.9': resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} @@ -1401,12 +1331,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.9': resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} @@ -1419,12 +1343,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.9': resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} @@ -1437,12 +1355,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.9': resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} @@ -1455,12 +1367,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.9': resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} @@ -1473,12 +1379,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.9': resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} @@ -1491,12 +1391,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.9': resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} @@ -1509,24 +1403,12 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.9': resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.9': resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} @@ -1539,24 +1421,12 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.9': resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} @@ -1569,24 +1439,12 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/openharmony-arm64@0.25.9': resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} @@ -1599,12 +1457,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.9': resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} @@ -1617,12 +1469,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.9': resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} @@ -1635,12 +1481,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.9': resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} @@ -1653,24 +1493,12 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.9': resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.8.0': resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1712,10 +1540,6 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.34.0': - resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.35.0': resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2095,11 +1919,6 @@ packages: '@nuxt/devalue@2.0.2': resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} - '@nuxt/devtools-kit@2.6.2': - resolution: {integrity: sha512-esErdMQ0u3wXXogKQ3IE2m0fxv52w6CzPsfsXF4o5ZVrUQrQaH58ygupDAQTYdlGTgtqmEA6KkHTGG5cM6yxeg==} - peerDependencies: - vite: '>=6.0' - '@nuxt/devtools-kit@2.6.3': resolution: {integrity: sha512-cDmai3Ws6AbJlYy1p4CCwc718cfbqtAjXe6oEc6q03zoJnvX1PsvKUfmU+yuowfqTSR6DZRmH4SjCBWuMjgaKQ==} peerDependencies: @@ -3119,15 +2938,6 @@ packages: react: ^16.9 || ^17 || ^18 || ^19 react-dom: ^16.9 || ^17 || ^18 || ^19 - '@sanity/insert-menu@2.0.1': - resolution: {integrity: sha512-PBHua3RJ+YAH71YJwDgh31XROoytl28jipaJk3H2i9Btt0GwzpyaCKaqRTNWsf4k+dQ4HMFw1URrtt4WCCQTPw==} - engines: {node: '>=20.19'} - peerDependencies: - '@sanity/types': '*' - react: ^18.3 || >=19.0.0-rc - react-dom: ^18.3 || >=19.0.0-rc - react-is: ^18.3 || >=19.0.0-rc - '@sanity/insert-menu@2.0.2': resolution: {integrity: sha512-ltR9DNOIAQRbwuch68U3f4YM+7rTqI5WAkMle/T/VBLe3peYeqL9QyOLthynR3gfZLZR8jFU8nryH5c2xZmOxg==} engines: {node: '>=20.19'} @@ -3181,12 +2991,6 @@ packages: '@sanity/mutator@4.6.1': resolution: {integrity: sha512-e7dB9APjAAPBlxTdEG+idWIv4EOMagZ48S7IQO977ngAt/44zU1lQj/FuVohXVBnK8737kJY0YhSkWOkeJCGtA==} - '@sanity/presentation-comlink@1.0.28': - resolution: {integrity: sha512-3LqQQ9MZy4Vut65XYsW0mPFF3gdv/8OKQy3m7zuSIc1HkQNbSLqbD+o7KaBfDnpXQxfk6HXS2zJyrJRO87us1A==} - engines: {node: '>=18'} - peerDependencies: - '@sanity/client': ^7.8.2 - '@sanity/presentation-comlink@1.0.29': resolution: {integrity: sha512-IPXRqlgDEmuGMfgeovyQqgVt9X49OlZs8gOdeKM7lSj/KIBzx/X+m6MtnDdUOZpYLqROF2mIbYTmyyo3PsNmkg==} engines: {node: '>=18'} @@ -3271,28 +3075,12 @@ packages: react: ^18 || ^19.0.0 styled-components: ^6.1.15 - '@sanity/visual-editing-csm@2.0.22': - resolution: {integrity: sha512-bXV7wAit5EvCIFdWzYieMzN+8BrsLCIoMWbJpguHn0zLRZ42QBVlpDHe+UwrF+ul4uiAQrhMn7TLomrv762z4g==} - engines: {node: '>=18'} - peerDependencies: - '@sanity/client': ^7.8.1 - '@sanity/visual-editing-csm@2.0.23': resolution: {integrity: sha512-R4r67uphMwAWkdKbA/Uveay0+q7JzDkhb/t8JPuDxteSAkM0JxbJ3cSSN7CxPMHvCVNksFPpMfCq82MalVRyCw==} engines: {node: '>=18'} peerDependencies: '@sanity/client': ^7.8.1 - '@sanity/visual-editing-types@1.1.5': - resolution: {integrity: sha512-jDQyO59R9TG7QC6XQ5n8PVWCVRdebez1ws9d8j1HVmPzjIhWRkyQbA/xrfrtYDPo/vuVD8wUbkXOh1TScITVXQ==} - engines: {node: '>=18'} - peerDependencies: - '@sanity/client': ^7.8.1 - '@sanity/types': '*' - peerDependenciesMeta: - '@sanity/types': - optional: true - '@sanity/visual-editing-types@1.1.6': resolution: {integrity: sha512-CJlbFdQa0PeMhdX6mzmnu1QAhojrd/vLpPaeOFlGNXwCEgQTEoK9nR4510SQqkX6skx0uvb0YICc8M0nWVCsbw==} engines: {node: '>=18'} @@ -3371,42 +3159,24 @@ packages: '@shikijs/core@3.12.2': resolution: {integrity: sha512-L1Safnhra3tX/oJK5kYHaWmLEBJi1irASwewzY3taX5ibyXyMkkSDZlq01qigjryOBwrXSdFgTiZ3ryzSNeu7Q==} - '@shikijs/core@3.8.0': - resolution: {integrity: sha512-gWt8NNZFurL6FMESO4lEsmspDh0H1fyUibhx1NnEH/S3kOXgYiWa6ZFqy+dcjBLhZqCXsepuUaL1QFXk6PrpsQ==} - '@shikijs/engine-javascript@3.12.2': resolution: {integrity: sha512-Nm3/azSsaVS7hk6EwtHEnTythjQfwvrO5tKqMlaH9TwG1P+PNaR8M0EAKZ+GaH2DFwvcr4iSfTveyxMIvXEHMw==} - '@shikijs/engine-javascript@3.8.0': - resolution: {integrity: sha512-IBULFFpQ1N5Cg/C7jPCGnjIKz72CcRtD0BIbNhSuXPUOxLG0bF1URsP/uLfxQFQ9ORfunCQwL7UuSX1RSRBwUQ==} - '@shikijs/engine-oniguruma@3.12.2': resolution: {integrity: sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==} - '@shikijs/engine-oniguruma@3.8.0': - resolution: {integrity: sha512-Tx7kR0oFzqa+rY7t80LjN8ZVtHO3a4+33EUnBVx2qYP3fGxoI9H0bvnln5ySelz9SIUTsS0/Qn+9dg5zcUMsUw==} - '@shikijs/langs@3.12.2': resolution: {integrity: sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==} - '@shikijs/langs@3.8.0': - resolution: {integrity: sha512-mfGYuUgjQ5GgXinB5spjGlBVhG2crKRpKkfADlp8r9k/XvZhtNXxyOToSnCEnF0QNiZnJjlt5MmU9PmhRdwAbg==} - '@shikijs/themes@3.12.2': resolution: {integrity: sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==} - '@shikijs/themes@3.8.0': - resolution: {integrity: sha512-yaZiLuyO23sXe16JFU76KyUMTZCJi4EMQKIrdQt7okoTzI4yAaJhVXT2Uy4k8yBIEFRiia5dtD7gC1t8m6y3oQ==} - '@shikijs/transformers@3.12.2': resolution: {integrity: sha512-+z1aMq4N5RoNGY8i7qnTYmG2MBYzFmwkm/yOd6cjEI7OVzcldVvzQCfxU1YbIVgsyB0xHVc2jFe1JhgoXyUoSQ==} '@shikijs/types@3.12.2': resolution: {integrity: sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==} - '@shikijs/types@3.8.0': - resolution: {integrity: sha512-I/b/aNg0rP+kznVDo7s3UK8jMcqEGTtoPDdQ+JlQ2bcJIyu/e2iRvl42GLIDMK03/W1YOHOuhlhQ7aM+XbKUeg==} - '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3555,9 +3325,6 @@ packages: '@types/node@20.19.0': resolution: {integrity: sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==} - '@types/node@24.0.15': - resolution: {integrity: sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==} - '@types/node@24.3.1': resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} @@ -3687,10 +3454,6 @@ packages: resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.39.0': - resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.39.1': resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3776,15 +3539,9 @@ packages: resolution: {integrity: sha512-eL9P+WDX42B6ZkNGGSkMgOyR99xeuJ2Gkj0uarhag5kaRwvwHLn/CJptZ7/oZLLIn0uTH8TQ6MG8ErhK0ymewA==} engines: {node: '>=14'} - '@unocss/core@66.3.3': - resolution: {integrity: sha512-6WFLd92TJelVQARtCGaF+EgEoHKIVe43gkGXVoWILu0HUDRWdhv+cpcyX0RTJV22Y976AxeneU7/zmhAh+CXNg==} - '@unocss/core@66.5.1': resolution: {integrity: sha512-BUgN87sUIffco1d+1IuV4a1gKTI1YAFa7CTjxglLUAnopXPPJ+Q77G10zoBoFLzutiIOYLsesa3hzbQvDhosnA==} - '@unocss/extractor-arbitrary-variants@66.3.3': - resolution: {integrity: sha512-TXzjH6FcITQ8V2x7ETHgVOlAHf3ll/ysxL+W4fMROm8jP/o7jvsg36tRfOwU0sDGo/qoCPux82ix9e6/JW0oqQ==} - '@unocss/extractor-arbitrary-variants@66.5.1': resolution: {integrity: sha512-SpI2uv6bWyPyY3Tv7CxsFnHBjSTlNRcPCnfvD8gSKbAt7R+RqV0nrdkv7wSW+Woc5TYl8PClLEFSBIvo0c1h9Q==} @@ -3806,9 +3563,6 @@ packages: '@unocss/preset-icons@66.5.1': resolution: {integrity: sha512-vxlnPSzTaQZmLKcmVPhCWC6rpgpHCUSD7aFsn7jW3iZ/jTIwc4kgQjnOJZdL443LF5mxBqF15+Cm9hZRnvrWNw==} - '@unocss/preset-mini@66.3.3': - resolution: {integrity: sha512-pz8rgvHRYS/6fsZNtG7iArLzwANnLy5GkHY/lbuqkWhO2S2Nf7kpJCbR/uV/XeuFsLnYcZW3NLOmelfvZvJamA==} - '@unocss/preset-mini@66.5.1': resolution: {integrity: sha512-kBEbA0kEXRtoHQ98o4b6f9sp1u5BanPzi+GMnWdmOWvbLAiLw1vcgXGPTX3sO+gzIMrwu0Famw6xiztWzAFjWQ==} @@ -3824,9 +3578,6 @@ packages: '@unocss/preset-web-fonts@66.5.1': resolution: {integrity: sha512-XKrkoN7ncqJxRHDMxAqTCroBcqSPgryDUZIlLhhQ4mHilSp29AdYO1RgG6Ok04w9HNmqzo3d8A8v6Z5yGrGF0w==} - '@unocss/preset-wind3@66.3.3': - resolution: {integrity: sha512-iXmjvPqvmPTo4z7epQDqHxzlGRsbLJEgfETqTrRJeagvFG7Gs+ajS8cQhbf6wL01dSRHjvhVXi3MsIvqfHHXOw==} - '@unocss/preset-wind3@66.5.1': resolution: {integrity: sha512-L1yMmKpwUWYUnScQq5jMTGvfMy/GBqVj40VS5afyOlzWnBeSkc/y4AxeW/khzGwqE/QaFcLWXiXwQVJIyxN02Q==} @@ -3839,10 +3590,6 @@ packages: '@unocss/reset@66.5.1': resolution: {integrity: sha512-NXDjDUn3cjATkxr7bbPdVnKkUHzEq6wSC1IRpnO8ISAXCw6JGPjuk3WJVYxHhnAlszhDxdqxVBjWRZ+zzVmrZw==} - '@unocss/rule-utils@66.3.3': - resolution: {integrity: sha512-QKgVGV5nRRnK44/reUKFLAc5UGyl98vz3hrfk8JI8pVza58vmQWTdAB2rIpNJ5a5j+EkWfDOUlGQaOrIeYGLdg==} - engines: {node: '>=14'} - '@unocss/rule-utils@66.5.1': resolution: {integrity: sha512-GuBKHrDv3bdq5N1HfOr1tD864vI1EIiovBVJSfg7x9ERA4jJSnyMpGk/hbLuDIXF25EnVdZ1lFhEpJgur9+9sw==} engines: {node: '>=14'} @@ -4593,11 +4340,6 @@ packages: browserify-zlib@0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} - browserslist@4.25.2: - resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.25.4: resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -4633,14 +4375,6 @@ packages: peerDependencies: esbuild: '>=0.18' - c12@3.1.0: - resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - c12@3.2.0: resolution: {integrity: sha512-ixkEtbYafL56E6HiFuonMm1ZjoKtIo7TH68/uiEq4DAwv9NcUX2nJ95F8TrbMeNjqIkZpruo3ojXQJ+MGG5gcQ==} peerDependencies: @@ -4692,9 +4426,6 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001735: - resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} - caniuse-lite@1.0.30001741: resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} @@ -4731,10 +4462,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.0: resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -5008,9 +4735,6 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} - core-js-compat@3.45.0: - resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} - core-js-compat@3.45.1: resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} @@ -5469,9 +5193,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.203: - resolution: {integrity: sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==} - electron-to-chromium@1.5.214: resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==} @@ -5586,11 +5307,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.9: resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} @@ -5891,14 +5607,6 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -6950,10 +6658,6 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - jiti@2.5.1: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true @@ -6981,10 +6685,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdoc-type-pratt-parser@4.1.0: - resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} - engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@4.8.0: resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} engines: {node: '>=12.0.0'} @@ -7175,10 +6875,6 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} - local-pkg@1.1.1: - resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} - engines: {node: '>=14'} - local-pkg@1.1.2: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} @@ -7734,9 +7430,6 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-fetch-native@1.6.6: - resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} - node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -7764,18 +7457,9 @@ packages: node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - node-mock-http@1.0.1: - resolution: {integrity: sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==} - - node-mock-http@1.0.2: - resolution: {integrity: sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==} - node-mock-http@1.0.3: resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-releases@2.0.20: resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} @@ -7859,11 +7543,6 @@ packages: nwsapi@2.2.22: resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} - nypm@0.6.0: - resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - nypm@0.6.1: resolution: {integrity: sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==} engines: {node: ^14.16.0 || >=16.10.0} @@ -8231,9 +7910,6 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -8558,9 +8234,6 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} - quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} @@ -9106,9 +8779,6 @@ packages: shiki@3.12.2: resolution: {integrity: sha512-uIrKI+f9IPz1zDT+GMz+0RjzKJiijVr6WDWm9Pe3NNY6QigKCfifCEv9v9R2mDASKKjzjQ2QpFLcxaR3iHSnMA==} - shiki@3.8.0: - resolution: {integrity: sha512-yPqK0y68t20aakv+3aMTpUMJZd6UHaBY2/SBUDowh9M70gVUwqT0bf7Kz5CWG0AXfHtFvXCHhBBHVAzdp0ILoQ==} - side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -9154,10 +8824,6 @@ packages: simple-wcswidth@1.1.2: resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} - sirv@3.0.1: - resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} - engines: {node: '>=18'} - sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -9454,12 +9120,6 @@ packages: postcss-html: ^1.0.0 stylelint: '>=14.0.0' - stylelint-config-recommended@16.0.0: - resolution: {integrity: sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==} - engines: {node: '>=18.12.0'} - peerDependencies: - stylelint: ^16.16.0 - stylelint-config-recommended@17.0.0: resolution: {integrity: sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==} engines: {node: '>=18.12.0'} @@ -9831,9 +9491,6 @@ packages: undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} - undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} @@ -9981,65 +9638,6 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unstorage@1.16.1: - resolution: {integrity: sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==} - peerDependencies: - '@azure/app-configuration': ^1.8.0 - '@azure/cosmos': ^4.2.0 - '@azure/data-tables': ^13.3.0 - '@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 - '@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/kv': ^1.0.1 - aws4fetch: ^1.0.20 - db0: '>=0.2.1' - idb-keyval: ^6.2.1 - ioredis: ^5.4.2 - uploadthing: ^7.4.4 - peerDependenciesMeta: - '@azure/app-configuration': - optional: true - '@azure/cosmos': - optional: true - '@azure/data-tables': - optional: true - '@azure/identity': - optional: true - '@azure/keyvault-secrets': - optional: true - '@azure/storage-blob': - optional: true - '@capacitor/preferences': - optional: true - '@deno/kv': - optional: true - '@netlify/blobs': - optional: true - '@planetscale/database': - optional: true - '@upstash/redis': - optional: true - '@vercel/blob': - optional: true - '@vercel/kv': - optional: true - aws4fetch: - optional: true - db0: - optional: true - idb-keyval: - optional: true - ioredis: - optional: true - uploadthing: - optional: true - unstorage@1.17.1: resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} peerDependencies: @@ -10113,9 +9711,6 @@ packages: unwasm@0.3.11: resolution: {integrity: sha512-Vhp5gb1tusSQw5of/g3Q697srYgMXvwMgXMjcG4ZNga02fDX9coxJ9fAb0Ci38hM2Hv/U1FXRPGgjP2BYqhNoQ==} - unwasm@0.3.9: - resolution: {integrity: sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==} - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -10300,46 +9895,6 @@ packages: vite: optional: true - vite@7.0.5: - resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@7.1.4: resolution: {integrity: sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -10673,9 +10228,6 @@ packages: engines: {node: '>= 0.10.0'} hasBin: true - xstate@5.20.2: - resolution: {integrity: sha512-GZmLmc+WPKfFRxuTDAxCg0cUhS/ZnWaRD86DO8MKizeK4a050jd5k7UNnIQ2jJDWRig2/r0tmVXeezUNIhoz5Q==} - xstate@5.21.0: resolution: {integrity: sha512-y4wmqxjyAa0tgz4k3m/MgTF1kDOahE5+xLfWt5eh1sk+43DatLhKlI8lQDJZpvihZavjbD3TUgy2PRMphhhqgQ==} @@ -10925,8 +10477,6 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} - '@babel/compat-data@7.28.4': {} '@babel/core@7.28.4': @@ -10963,7 +10513,7 @@ snapshots: '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 browserslist: 4.25.4 lru-cache: 5.1.1 @@ -11079,10 +10629,6 @@ snapshots: dependencies: '@babel/types': 7.28.4 - '@babel/parser@7.28.3': - dependencies: - '@babel/types': 7.28.2 - '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 @@ -11655,14 +11201,14 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.7 + '@babel/parser': 7.28.4 '@babel/types': 7.28.4 '@babel/traverse@7.27.7': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 - '@babel/parser': 7.27.7 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 debug: 4.4.1(supports-color@8.1.1) @@ -11682,11 +11228,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -11836,7 +11377,7 @@ snapshots: '@commitlint/format@19.8.1': dependencies: '@commitlint/types': 19.8.1 - chalk: 5.4.1 + chalk: 5.6.0 '@commitlint/is-ignored@19.8.1': dependencies: @@ -11856,7 +11397,7 @@ snapshots: '@commitlint/execute-rule': 19.8.1 '@commitlint/resolve-extends': 19.8.1 '@commitlint/types': 19.8.1 - chalk: 5.4.1 + chalk: 5.6.0 cosmiconfig: 9.0.0(typescript@5.9.2) cosmiconfig-typescript-loader: 6.1.0(@types/node@24.3.1)(cosmiconfig@9.0.0(typescript@5.9.2))(typescript@5.9.2) lodash.isplainobject: 4.0.6 @@ -11907,7 +11448,7 @@ snapshots: '@commitlint/types@19.8.1': dependencies: '@types/conventional-commits-parser': 5.0.1 - chalk: 5.4.1 + chalk: 5.6.0 '@cspotcode/source-map-support@0.8.1': dependencies: @@ -12019,205 +11560,133 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.25.8': - optional: true - '@esbuild/aix-ppc64@0.25.9': optional: true '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.25.8': - optional: true - '@esbuild/android-arm64@0.25.9': optional: true '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.25.8': - optional: true - '@esbuild/android-arm@0.25.9': optional: true '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.25.8': - optional: true - '@esbuild/android-x64@0.25.9': optional: true '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.25.8': - optional: true - '@esbuild/darwin-arm64@0.25.9': optional: true '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.25.8': - optional: true - '@esbuild/darwin-x64@0.25.9': optional: true '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.25.8': - optional: true - '@esbuild/freebsd-arm64@0.25.9': optional: true '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.25.8': - optional: true - '@esbuild/freebsd-x64@0.25.9': optional: true '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.25.8': - optional: true - '@esbuild/linux-arm64@0.25.9': optional: true '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.25.8': - optional: true - '@esbuild/linux-arm@0.25.9': optional: true '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.25.8': - optional: true - '@esbuild/linux-ia32@0.25.9': optional: true '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.25.8': - optional: true - '@esbuild/linux-loong64@0.25.9': optional: true '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.25.8': - optional: true - '@esbuild/linux-mips64el@0.25.9': optional: true '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.25.8': - optional: true - '@esbuild/linux-ppc64@0.25.9': optional: true '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.25.8': - optional: true - '@esbuild/linux-riscv64@0.25.9': optional: true '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.25.8': - optional: true - '@esbuild/linux-s390x@0.25.9': optional: true '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.25.8': - optional: true - '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.8': - optional: true - '@esbuild/netbsd-arm64@0.25.9': optional: true '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.25.8': - optional: true - '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.8': - optional: true - '@esbuild/openbsd-arm64@0.25.9': optional: true '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.25.8': - optional: true - '@esbuild/openbsd-x64@0.25.9': optional: true - '@esbuild/openharmony-arm64@0.25.8': - optional: true - '@esbuild/openharmony-arm64@0.25.9': optional: true '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.25.8': - optional: true - '@esbuild/sunos-x64@0.25.9': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.25.8': + '@esbuild/win32-arm64@0.21.5': optional: true '@esbuild/win32-arm64@0.25.9': @@ -12226,26 +11695,15 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.25.8': - optional: true - '@esbuild/win32-ia32@0.25.9': optional: true '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.25.8': - optional: true - '@esbuild/win32-x64@0.25.9': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.35.0(jiti@2.5.1))': - dependencies: - eslint: 9.35.0(jiti@2.5.1) - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': dependencies: eslint: 9.35.0(jiti@2.5.1) @@ -12308,8 +11766,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.34.0': {} - '@eslint/js@9.35.0': {} '@eslint/object-schema@2.1.6': {} @@ -12742,17 +12198,17 @@ snapshots: dependencies: '@nuxt/kit': 4.1.1(magicast@0.3.5) '@nuxtjs/mdc': 0.17.3(magicast@0.3.5) - '@shikijs/langs': 3.8.0 + '@shikijs/langs': 3.12.2 '@sqlite.org/sqlite-wasm': 3.50.1-build1 '@webcontainer/env': 1.1.1 - c12: 3.1.0(magicast@0.3.5) + c12: 3.2.0(magicast@0.3.5) chokidar: 4.0.3 consola: 3.4.2 db0: 0.3.2(better-sqlite3@11.10.0) defu: 6.1.4 destr: 2.0.5 git-url-parse: 16.1.0 - jiti: 2.4.2 + jiti: 2.5.1 json-schema-to-typescript: 15.0.4 knitwork: 1.2.0 listhen: 1.9.0 @@ -12767,17 +12223,17 @@ snapshots: minimark: 0.2.0 minimatch: 10.0.3 nuxt-component-meta: 0.12.1(magicast@0.3.5)(vue-component-type-helpers@2.2.10) - nypm: 0.6.0 + nypm: 0.6.1 ohash: 2.0.11 pathe: 2.0.3 - pkg-types: 2.2.0 + pkg-types: 2.3.0 remark-mdc: 3.6.0 scule: 1.3.0 - shiki: 3.8.0 + shiki: 3.12.2 slugify: 1.6.6 socket.io-client: 4.8.1 tar: 7.4.3 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 ufo: 1.6.1 unified: 11.0.5 unist-util-stringify-position: 4.0.0 @@ -12798,14 +12254,6 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': - dependencies: - '@nuxt/kit': 4.1.1(magicast@0.3.5) - execa: 8.0.1 - vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) - transitivePeerDependencies: - - magicast - '@nuxt/devtools-kit@2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': dependencies: '@nuxt/kit': 4.1.1(magicast@0.3.5) @@ -12854,7 +12302,7 @@ snapshots: simple-git: 3.28.0 sirv: 3.0.2 structured-clone-es: 1.0.0 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) vite-plugin-inspect: 11.3.3(@nuxt/kit@4.1.1(magicast@0.3.5))(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) vite-plugin-vue-tracer: 1.0.0(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2)) @@ -12870,7 +12318,7 @@ snapshots: dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 - '@eslint/js': 9.34.0 + '@eslint/js': 9.35.0 '@nuxt/eslint-plugin': 1.9.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@stylistic/eslint-plugin': 5.2.3(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) @@ -12887,7 +12335,7 @@ snapshots: eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.35.0(jiti@2.5.1))) eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.35.0(jiti@2.5.1)) globals: 16.3.0 - local-pkg: 1.1.1 + local-pkg: 1.1.2 pathe: 2.0.3 vue-eslint-parser: 10.2.0(eslint@9.35.0(jiti@2.5.1)) transitivePeerDependencies: @@ -12909,7 +12357,7 @@ snapshots: '@nuxt/eslint@1.9.0(@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1))(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': dependencies: '@eslint/config-inspector': 1.2.0(eslint@9.35.0(jiti@2.5.1)) - '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) + '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) '@nuxt/eslint-config': 1.9.0(@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@nuxt/eslint-plugin': 1.9.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@nuxt/kit': 4.1.1(magicast@0.3.5) @@ -12936,26 +12384,26 @@ snapshots: '@nuxt/fonts@0.11.4(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0)(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': dependencies: - '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) + '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) '@nuxt/kit': 4.1.1(magicast@0.3.5) consola: 3.4.2 css-tree: 3.1.0 defu: 6.1.4 - esbuild: 0.25.8 + esbuild: 0.25.9 fontaine: 0.6.0 h3: 1.15.4 - jiti: 2.4.2 + jiti: 2.5.1 magic-regexp: 0.10.0 magic-string: 0.30.19 - node-fetch-native: 1.6.6 + node-fetch-native: 1.6.7 ohash: 2.0.11 pathe: 2.0.3 - sirv: 3.0.1 - tinyglobby: 0.2.14 + sirv: 3.0.2 + tinyglobby: 0.2.15 ufo: 1.6.1 unifont: 0.4.1 unplugin: 2.3.10 - unstorage: 1.16.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0) + unstorage: 1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12969,6 +12417,7 @@ snapshots: - '@planetscale/database' - '@upstash/redis' - '@vercel/blob' + - '@vercel/functions' - '@vercel/kv' - aws4fetch - db0 @@ -13115,7 +12564,7 @@ snapshots: '@nuxt/test-utils@3.19.2(@playwright/test@1.55.0)(@vue/test-utils@2.4.6)(happy-dom@18.0.1)(jsdom@26.1.0)(magicast@0.3.5)(playwright-core@1.55.0)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0)(terser@5.44.0)(yaml@2.8.1))': dependencies: '@nuxt/kit': 4.1.1(magicast@0.3.5) - c12: 3.1.0(magicast@0.3.5) + c12: 3.2.0(magicast@0.3.5) consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 @@ -13123,10 +12572,10 @@ snapshots: fake-indexeddb: 6.0.1 get-port-please: 3.2.0 h3: 1.15.4 - local-pkg: 1.1.1 + local-pkg: 1.1.2 magic-string: 0.30.19 - node-fetch-native: 1.6.6 - node-mock-http: 1.0.1 + node-fetch-native: 1.6.7 + node-mock-http: 1.0.3 ofetch: 1.4.1 pathe: 2.0.3 perfect-debounce: 1.0.0 @@ -13296,8 +12745,8 @@ snapshots: '@sanity/client': 7.11.0(debug@4.4.1) '@sanity/comlink': 3.0.9 '@sanity/core-loader': 1.8.15(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) - '@sanity/presentation-comlink': 1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) - '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0(debug@4.4.1)) + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) + '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0) '@sanity/visual-editing': 3.0.2(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.2) consola: 3.4.2 defu: 6.1.4 @@ -14014,14 +13463,14 @@ snapshots: dependencies: rxjs: 7.8.2 uuid: 11.1.0 - xstate: 5.20.2 + xstate: 5.21.0 '@sanity/core-loader@1.8.15(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2)': dependencies: '@sanity/client': 7.11.0(debug@4.4.1) '@sanity/comlink': 3.0.9 - '@sanity/presentation-comlink': 1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) - '@sanity/visual-editing-csm': 2.0.22(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) + '@sanity/visual-editing-csm': 2.0.23(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) transitivePeerDependencies: - '@sanity/types' - debug @@ -14128,20 +13577,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@sanity/insert-menu@2.0.1(@sanity/types@4.6.1(@types/react@18.3.24))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': - dependencies: - '@sanity/icons': 3.7.4(react@18.3.1) - '@sanity/types': 4.6.1(@types/react@18.3.24)(debug@4.4.1) - '@sanity/ui': 3.0.14(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - lodash: 4.17.21 - react: 18.3.1 - react-compiler-runtime: 19.1.0-rc.2(react@18.3.1) - react-dom: 18.3.1(react@18.3.1) - react-is: 19.1.1 - transitivePeerDependencies: - - '@emotion/is-prop-valid' - - styled-components - '@sanity/insert-menu@2.0.2(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: '@sanity/icons': 3.7.4(react@18.3.1) @@ -14188,7 +13623,7 @@ snapshots: - '@types/react' - supports-color - '@sanity/mutate@0.11.0-canary.4(xstate@5.20.2)': + '@sanity/mutate@0.11.0-canary.4(xstate@5.21.0)': dependencies: '@sanity/client': 6.29.1 '@sanity/diff-match-patch': 3.2.0 @@ -14198,7 +13633,7 @@ snapshots: mendoza: 3.0.8 rxjs: 7.8.2 optionalDependencies: - xstate: 5.20.2 + xstate: 5.21.0 transitivePeerDependencies: - debug @@ -14237,23 +13672,15 @@ snapshots: - '@types/react' - supports-color - '@sanity/presentation-comlink@1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))': - dependencies: - '@sanity/client': 7.11.0(debug@4.4.1) - '@sanity/comlink': 3.0.9 - '@sanity/visual-editing-types': 1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) - transitivePeerDependencies: - - '@sanity/types' - - '@sanity/presentation-comlink@1.0.29(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': + '@sanity/presentation-comlink@1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': dependencies: '@sanity/client': 7.11.0(debug@4.4.1) '@sanity/comlink': 3.0.9 - '@sanity/visual-editing-types': 1.1.6(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) + '@sanity/visual-editing-types': 1.1.6(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) transitivePeerDependencies: - '@sanity/types' - '@sanity/preview-url-secret@2.1.14(@sanity/client@7.11.0(debug@4.4.1))': + '@sanity/preview-url-secret@2.1.14(@sanity/client@7.11.0)': dependencies: '@sanity/client': 7.11.0(debug@4.4.1) '@sanity/uuid': 3.0.2 @@ -14473,31 +13900,16 @@ snapshots: - react-dom - react-is - '@sanity/visual-editing-csm@2.0.22(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2)': - dependencies: - '@sanity/client': 7.11.0(debug@4.4.1) - '@sanity/visual-editing-types': 1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) - valibot: 1.1.0(typescript@5.9.2) - transitivePeerDependencies: - - '@sanity/types' - - typescript - '@sanity/visual-editing-csm@2.0.23(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2)': dependencies: '@sanity/client': 7.11.0(debug@4.4.1) - '@sanity/visual-editing-types': 1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) + '@sanity/visual-editing-types': 1.1.6(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) valibot: 1.1.0(typescript@5.9.2) transitivePeerDependencies: - '@sanity/types' - typescript - '@sanity/visual-editing-types@1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))': - dependencies: - '@sanity/client': 7.11.0(debug@4.4.1) - optionalDependencies: - '@sanity/types': 4.6.1(@types/react@18.3.24)(debug@4.4.1) - - '@sanity/visual-editing-types@1.1.6(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': + '@sanity/visual-editing-types@1.1.6(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': dependencies: '@sanity/client': 7.11.0(debug@4.4.1) optionalDependencies: @@ -14507,10 +13919,10 @@ snapshots: dependencies: '@sanity/comlink': 3.0.9 '@sanity/icons': 3.7.4(react@18.3.1) - '@sanity/insert-menu': 2.0.1(@sanity/types@4.6.1(@types/react@18.3.24))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@sanity/mutate': 0.11.0-canary.4(xstate@5.20.2) - '@sanity/presentation-comlink': 1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) - '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0(debug@4.4.1)) + '@sanity/insert-menu': 2.0.2(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@sanity/mutate': 0.11.0-canary.4(xstate@5.21.0) + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) + '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0) '@sanity/ui': 3.0.14(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/visual-editing-csm': 2.0.23(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) '@vercel/stega': 0.1.2 @@ -14523,7 +13935,7 @@ snapshots: scroll-into-view-if-needed: 3.1.0 styled-components: 6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) use-effect-event: 2.0.3(react@18.3.1) - xstate: 5.20.2 + xstate: 5.21.0 optionalDependencies: '@sanity/client': 7.11.0(debug@4.4.1) transitivePeerDependencies: @@ -14578,51 +13990,25 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.12.2': dependencies: '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-javascript@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.12.2': dependencies: '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.12.2': dependencies: '@shikijs/types': 3.12.2 - '@shikijs/langs@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - '@shikijs/themes@3.12.2': dependencies: '@shikijs/types': 3.12.2 - '@shikijs/themes@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - '@shikijs/transformers@3.12.2': dependencies: '@shikijs/core': 3.12.2 @@ -14633,11 +14019,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.8.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@10.0.2': {} '@shuding/opentype.js@1.4.0-beta.0': @@ -14666,8 +14047,8 @@ snapshots: '@stylistic/eslint-plugin@5.2.3(eslint@9.35.0(jiti@2.5.1))': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/types': 8.39.0 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@typescript-eslint/types': 8.39.1 eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -14729,7 +14110,7 @@ snapshots: '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 24.0.15 + '@types/node': 24.3.1 '@types/debug@4.1.12': dependencies: @@ -14787,10 +14168,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@24.0.15': - dependencies: - undici-types: 7.8.0 - '@types/node@24.3.1': dependencies: undici-types: 7.10.0 @@ -14949,8 +14326,6 @@ snapshots: '@typescript-eslint/types@8.32.1': {} - '@typescript-eslint/types@8.39.0': {} - '@typescript-eslint/types@8.39.1': {} '@typescript-eslint/typescript-estree@8.32.1(typescript@5.9.2)': @@ -14985,7 +14360,7 @@ snapshots: '@typescript-eslint/utils@8.32.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.9.2) @@ -14996,7 +14371,7 @@ snapshots: '@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.39.1 '@typescript-eslint/types': 8.39.1 '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) @@ -15079,14 +14454,8 @@ snapshots: '@unocss/core': 66.5.1 unconfig: 7.3.3 - '@unocss/core@66.3.3': {} - '@unocss/core@66.5.1': {} - '@unocss/extractor-arbitrary-variants@66.3.3': - dependencies: - '@unocss/core': 66.3.3 - '@unocss/extractor-arbitrary-variants@66.5.1': dependencies: '@unocss/core': 66.5.1 @@ -15144,12 +14513,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@unocss/preset-mini@66.3.3': - dependencies: - '@unocss/core': 66.3.3 - '@unocss/extractor-arbitrary-variants': 66.3.3 - '@unocss/rule-utils': 66.3.3 - '@unocss/preset-mini@66.5.1': dependencies: '@unocss/core': 66.5.1 @@ -15175,12 +14538,6 @@ snapshots: '@unocss/core': 66.5.1 ofetch: 1.4.1 - '@unocss/preset-wind3@66.3.3': - dependencies: - '@unocss/core': 66.3.3 - '@unocss/preset-mini': 66.3.3 - '@unocss/rule-utils': 66.3.3 - '@unocss/preset-wind3@66.5.1': dependencies: '@unocss/core': 66.5.1 @@ -15200,11 +14557,6 @@ snapshots: '@unocss/reset@66.5.1': {} - '@unocss/rule-utils@66.3.3': - dependencies: - '@unocss/core': 66.3.3 - magic-string: 0.30.19 - '@unocss/rule-utils@66.5.1': dependencies: '@unocss/core': 66.5.1 @@ -15387,13 +14739,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -15499,7 +14851,7 @@ snapshots: '@vue/compiler-sfc@3.5.21': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@vue/compiler-core': 3.5.21 '@vue/compiler-dom': 3.5.21 '@vue/compiler-ssr': 3.5.21 @@ -16104,13 +15456,6 @@ snapshots: dependencies: pako: 0.2.9 - browserslist@4.25.2: - dependencies: - caniuse-lite: 1.0.30001735 - electron-to-chromium: 1.5.203 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.2) - browserslist@4.25.4: dependencies: caniuse-lite: 1.0.30001741 @@ -16145,23 +15490,6 @@ snapshots: esbuild: 0.25.9 load-tsconfig: 0.2.5 - c12@3.1.0(magicast@0.3.5): - dependencies: - chokidar: 4.0.3 - confbox: 0.2.2 - defu: 6.1.4 - dotenv: 16.6.1 - exsolve: 1.0.7 - giget: 2.0.0 - jiti: 2.4.2 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.3.0 - rc9: 2.1.2 - optionalDependencies: - magicast: 0.3.5 - c12@3.2.0(magicast@0.3.5): dependencies: chokidar: 4.0.3 @@ -16230,8 +15558,6 @@ snapshots: lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001735: {} - caniuse-lite@1.0.30001741: {} capital-case@1.0.4: @@ -16281,8 +15607,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.4.1: {} - chalk@5.6.0: {} change-case@4.1.2: @@ -16344,7 +15668,7 @@ snapshots: chrome-launcher@1.2.0: dependencies: - '@types/node': 24.0.15 + '@types/node': 24.3.1 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 2.0.1 @@ -16558,10 +15882,6 @@ snapshots: dependencies: is-what: 4.1.16 - core-js-compat@3.45.0: - dependencies: - browserslist: 4.25.2 - core-js-compat@3.45.1: dependencies: browserslist: 4.25.4 @@ -16980,8 +16300,6 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.203: {} - electron-to-chromium@1.5.214: {} emoji-regex-xs@2.0.1: {} @@ -17173,35 +16491,6 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.25.8: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 - esbuild@0.25.9: optionalDependencies: '@esbuild/aix-ppc64': 0.25.9 @@ -17272,15 +16561,15 @@ snapshots: eslint-plugin-import-lite@0.3.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/types': 8.39.0 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@typescript-eslint/types': 8.39.1 eslint: 9.35.0(jiti@2.5.1) optionalDependencies: typescript: 5.9.2 eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/types': 8.39.1 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) @@ -17359,11 +16648,11 @@ snapshots: eslint-plugin-regexp@2.10.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 eslint: 9.35.0(jiti@2.5.1) - jsdoc-type-pratt-parser: 4.1.0 + jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 @@ -17371,12 +16660,12 @@ snapshots: eslint-plugin-unicorn@60.0.0(eslint@9.35.0(jiti@2.5.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 eslint: 9.35.0(jiti@2.5.1) esquery: 1.6.0 find-up-simple: 1.0.1 @@ -17392,7 +16681,7 @@ snapshots: eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.35.0(jiti@2.5.1))): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) eslint: 9.35.0(jiti@2.5.1) natural-compare: 1.4.0 nth-check: 2.1.1 @@ -17606,10 +16895,6 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.6(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -17910,7 +17195,7 @@ snapshots: citty: 0.1.6 consola: 3.4.2 defu: 6.1.4 - node-fetch-native: 1.6.6 + node-fetch-native: 1.6.7 nypm: 0.6.1 pathe: 2.0.3 @@ -18111,7 +17396,7 @@ snapshots: defu: 6.1.4 destr: 2.0.5 iron-webcrypto: 1.2.1 - node-mock-http: 1.0.2 + node-mock-http: 1.0.3 radix3: 1.1.2 ufo: 1.6.1 uncrypto: 0.1.3 @@ -18827,8 +18112,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@2.4.2: {} - jiti@2.5.1: {} js-beautify@1.15.4: @@ -18854,8 +18137,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsdoc-type-pratt-parser@4.1.0: {} - jsdoc-type-pratt-parser@4.8.0: {} jsdom-global@3.0.2(jsdom@23.2.0): @@ -18953,7 +18234,7 @@ snapshots: lodash: 4.17.21 minimist: 1.2.8 prettier: 3.6.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 json-schema-traverse@0.4.1: {} @@ -19074,7 +18355,7 @@ snapshots: get-port-please: 3.2.0 h3: 1.15.4 http-shutdown: 1.2.2 - jiti: 2.4.2 + jiti: 2.5.1 mlly: 1.8.0 node-forge: 1.3.1 pathe: 1.1.2 @@ -19103,12 +18384,6 @@ snapshots: loader-runner@4.3.0: {} - local-pkg@1.1.1: - dependencies: - mlly: 1.8.0 - pkg-types: 2.3.0 - quansync: 0.2.10 - local-pkg@1.1.2: dependencies: mlly: 1.8.0 @@ -19924,8 +19199,6 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-fetch-native@1.6.6: {} - node-fetch-native@1.6.7: {} node-fetch@2.7.0: @@ -19947,14 +19220,8 @@ snapshots: css-select: 5.2.2 he: 1.2.0 - node-mock-http@1.0.1: {} - - node-mock-http@1.0.2: {} - node-mock-http@1.0.3: {} - node-releases@2.0.19: {} - node-releases@2.0.20: {} nopt@7.2.1: @@ -20024,13 +19291,13 @@ snapshots: nuxt-og-image@5.1.9(@unhead/vue@2.0.14(vue@3.5.21(typescript@5.9.2)))(magicast@0.3.5)(unstorage@1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0))(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2)): dependencies: - '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) + '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) '@nuxt/kit': 4.1.1(magicast@0.3.5) '@resvg/resvg-js': 2.6.2 '@resvg/resvg-wasm': 2.6.2 '@unhead/vue': 2.0.14(vue@3.5.21(typescript@5.9.2)) - '@unocss/core': 66.3.3 - '@unocss/preset-wind3': 66.3.3 + '@unocss/core': 66.5.1 + '@unocss/preset-wind3': 66.5.1 chrome-launcher: 1.2.0 consola: 3.4.2 defu: 6.1.4 @@ -20039,22 +19306,22 @@ snapshots: magic-string: 0.30.19 mocked-exports: 0.1.1 nuxt-site-config: 3.2.2(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)) - nypm: 0.6.0 + nypm: 0.6.1 ofetch: 1.4.1 ohash: 2.0.11 pathe: 2.0.3 - pkg-types: 2.2.0 + pkg-types: 2.3.0 playwright-core: 1.55.0 radix3: 1.1.2 satori: 0.15.2 satori-html: 0.3.2 - sirv: 3.0.1 + sirv: 3.0.2 std-env: 3.9.0 strip-literal: 3.0.0 ufo: 1.6.1 unplugin: 2.3.10 unstorage: 1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0) - unwasm: 0.3.9 + unwasm: 0.3.11 yoga-wasm-web: 0.3.3 transitivePeerDependencies: - magicast @@ -20079,7 +19346,7 @@ snapshots: nuxt-site-config-kit@3.2.2(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)): dependencies: '@nuxt/kit': 4.1.1(magicast@0.3.5) - pkg-types: 2.2.0 + pkg-types: 2.3.0 site-config-stack: 3.2.2(vue@3.5.21(typescript@5.9.2)) std-env: 3.9.0 ufo: 1.6.1 @@ -20092,8 +19359,8 @@ snapshots: '@nuxt/kit': 4.1.1(magicast@0.3.5) nuxt-site-config-kit: 3.2.2(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)) pathe: 2.0.3 - pkg-types: 2.2.0 - sirv: 3.0.1 + pkg-types: 2.3.0 + sirv: 3.0.2 site-config-stack: 3.2.2(vue@3.5.21(typescript@5.9.2)) ufo: 1.6.1 transitivePeerDependencies: @@ -20225,14 +19492,6 @@ snapshots: nwsapi@2.2.22: {} - nypm@0.6.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - pathe: 2.0.3 - pkg-types: 2.2.0 - tinyexec: 0.3.2 - nypm@0.6.1: dependencies: citty: 0.1.6 @@ -20284,7 +19543,7 @@ snapshots: ofetch@1.4.1: dependencies: destr: 2.0.5 - node-fetch-native: 1.6.6 + node-fetch-native: 1.6.7 ufo: 1.6.1 ohash@1.1.6: {} @@ -20677,12 +19936,6 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 - pkg-types@2.2.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - pkg-types@2.3.0: dependencies: confbox: 0.2.2 @@ -21003,8 +20256,6 @@ snapshots: dependencies: side-channel: 1.1.0 - quansync@0.2.10: {} - quansync@0.2.11: {} querystringify@2.2.0: {} @@ -21580,8 +20831,8 @@ snapshots: '@sanity/message-protocol': 0.17.2 '@sanity/migrate': 4.6.1(@types/react@18.3.24) '@sanity/mutator': 4.6.1(@types/react@18.3.24) - '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) - '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0(debug@4.4.1)) + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) + '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0) '@sanity/schema': 4.6.1(@types/react@18.3.24)(debug@4.4.1) '@sanity/sdk': 2.1.2(@types/react@18.3.24)(debug@4.4.1)(immer@10.1.3)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) '@sanity/telemetry': 0.8.1(react@18.3.1) @@ -21885,17 +21136,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - shiki@3.8.0: - dependencies: - '@shikijs/core': 3.8.0 - '@shikijs/engine-javascript': 3.8.0 - '@shikijs/engine-oniguruma': 3.8.0 - '@shikijs/langs': 3.8.0 - '@shikijs/themes': 3.8.0 - '@shikijs/types': 3.8.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -21957,12 +21197,6 @@ snapshots: simple-wcswidth@1.1.2: {} - sirv@3.0.1: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 - sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -22290,11 +21524,7 @@ snapshots: semver: 7.7.2 stylelint: 16.24.0(typescript@5.9.2) stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.9.2)) - stylelint-config-recommended: 16.0.0(stylelint@16.24.0(typescript@5.9.2)) - - stylelint-config-recommended@16.0.0(stylelint@16.24.0(typescript@5.9.2)): - dependencies: - stylelint: 16.24.0(typescript@5.9.2) + stylelint-config-recommended: 17.0.0(stylelint@16.24.0(typescript@5.9.2)) stylelint-config-recommended@17.0.0(stylelint@16.24.0(typescript@5.9.2)): dependencies: @@ -22707,8 +21937,6 @@ snapshots: undici-types@7.10.0: {} - undici-types@7.8.0: {} - undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 @@ -22923,7 +22151,7 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.3 scule: 1.3.0 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 unplugin: 2.3.10 unplugin-utils: 0.2.5 yaml: 2.8.1 @@ -22969,22 +22197,6 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unstorage@1.16.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0): - dependencies: - anymatch: 3.1.3 - chokidar: 4.0.3 - destr: 2.0.5 - h3: 1.15.4 - lru-cache: 10.4.3 - node-fetch-native: 1.6.7 - ofetch: 1.4.1 - ufo: 1.6.1 - optionalDependencies: - '@netlify/blobs': 9.1.2 - '@vercel/blob': 1.1.1 - db0: 0.3.2(better-sqlite3@11.10.0) - ioredis: 5.7.0 - unstorage@1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0): dependencies: anymatch: 3.1.3 @@ -23021,24 +22233,9 @@ snapshots: magic-string: 0.30.19 mlly: 1.8.0 pathe: 2.0.3 - pkg-types: 2.2.0 + pkg-types: 2.3.0 unplugin: 2.3.10 - unwasm@0.3.9: - dependencies: - knitwork: 1.2.0 - magic-string: 0.30.19 - mlly: 1.8.0 - pathe: 1.1.2 - pkg-types: 1.3.1 - unplugin: 1.16.1 - - update-browserslist-db@1.1.3(browserslist@4.25.2): - dependencies: - browserslist: 4.25.2 - escalade: 3.2.0 - picocolors: 1.1.1 - update-browserslist-db@1.1.3(browserslist@4.25.4): dependencies: browserslist: 4.25.4 @@ -23153,7 +22350,7 @@ snapshots: debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -23177,7 +22374,7 @@ snapshots: picomatch: 4.0.3 strip-ansi: 7.1.0 tiny-invariant: 1.3.3 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) vscode-uri: 3.1.0 optionalDependencies: @@ -23226,21 +22423,6 @@ snapshots: - supports-color - typescript - vite@7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1): - dependencies: - esbuild: 0.25.8 - fdir: 6.4.6(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.50.1 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 24.3.1 - fsevents: 2.3.3 - jiti: 2.5.1 - terser: 5.44.0 - yaml: 2.8.1 - vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1): dependencies: esbuild: 0.25.9 @@ -23277,7 +22459,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23292,10 +22474,10 @@ snapshots: std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) vite-node: 3.2.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: @@ -23601,8 +22783,6 @@ snapshots: commander: 2.20.3 cssfilter: 0.0.10 - xstate@5.20.2: {} - xstate@5.21.0: {} xtend@4.0.2: {} diff --git a/scripts/linkedin-auth.ts b/scripts/linkedin-auth.ts new file mode 100644 index 00000000..da5fa06e --- /dev/null +++ b/scripts/linkedin-auth.ts @@ -0,0 +1,347 @@ +/** + * LinkedIn OAuth Token Generator + * + * This script helps you generate a LinkedIn access token with the proper scopes + * for posting content. LinkedIn access tokens are valid for 60 days and must be + * refreshed manually through re-authorization. + * + * Prerequisites: + * 1. Create an app in LinkedIn Developers Portal (https://www.linkedin.com/developers/) + * 2. Add the following redirect URI: http://localhost:8080/callback + * 3. Enable the required scopes in your app settings: + * - openid (Use your name and photo) + * - profile (Use your name and photo) + * - email (Use the primary email address) + * - w_member_social (Create, modify, and delete posts on your behalf) + * 4. Get your Client ID and Client Secret + * + * Usage: + * node scripts/linkedin-auth.ts + * node scripts/linkedin-auth.ts --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET + * node scripts/linkedin-auth.ts test YOUR_ACCESS_TOKEN + * + * Environment variables (alternative to command line args): + * LINKEDIN_CLIENT_ID=your_client_id + * LINKEDIN_CLIENT_SECRET=your_client_secret + */ + +import { createServer } from 'node:http' +import { spawn } from 'node:child_process' +import { parse } from 'node:url' +import process from 'node:process' +import { randomBytes } from 'node:crypto' +import { defineCommand, runMain } from 'citty' + +// Required LinkedIn API scopes +// Note: These scopes must be enabled in your LinkedIn app settings +const SCOPES = [ + 'openid', + 'profile', + 'email', + 'w_member_social', +] as const + +const REDIRECT_URI = 'http://localhost:8080/callback' +const PORT = 8080 + +interface LinkedInTokenResponse { + access_token: string + token_type: string + expires_in: number + scope: string +} + +interface LinkedInProfile { + sub: string + name: string + email: string + picture?: string +} + +interface AuthOptions { + clientId?: string + clientSecret?: string +} + +class LinkedInAuthGenerator { + private clientId: string + private clientSecret: string + private state: string + + constructor (options: AuthOptions = {}) { + this.clientId = options.clientId || process.env.LINKEDIN_CLIENT_ID! + this.clientSecret = options.clientSecret || process.env.LINKEDIN_CLIENT_SECRET! + + if (!this.clientId || !this.clientSecret) { + console.error('โŒ Missing LinkedIn credentials!') + console.error('Please provide via command line or environment variables:') + console.error(' --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET') + console.error('Or set environment variables:') + console.error(' LINKEDIN_CLIENT_ID=your_client_id') + console.error(' LINKEDIN_CLIENT_SECRET=your_client_secret') + process.exit(1) + } + + // Generate a random state for CSRF protection + this.state = randomBytes(32).toString('hex') + } + + generateAuthUrl (): string { + const params = new URLSearchParams({ + response_type: 'code', + client_id: this.clientId, + redirect_uri: REDIRECT_URI, + scope: SCOPES.join(' '), + state: this.state, + }) + + return `https://www.linkedin.com/oauth/v2/authorization?${params.toString()}` + } + + async exchangeCodeForTokens (code: string, state: string): Promise { + // Verify state parameter + if (state !== this.state) { + throw new Error('Invalid state parameter - potential CSRF attack') + } + + const tokenUrl = 'https://www.linkedin.com/oauth/v2/accessToken' + const body = new URLSearchParams({ + grant_type: 'authorization_code', + code: code, + redirect_uri: REDIRECT_URI, + client_id: this.clientId, + client_secret: this.clientSecret, + }) + + try { + const response = await fetch(tokenUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: body.toString(), + }) + + if (!response.ok) { + const error = await response.text() + throw new Error(`Token exchange failed: ${response.status} ${error}`) + } + + return await response.json() as LinkedInTokenResponse + } + catch (error) { + console.error('โŒ Error exchanging code for tokens:', error instanceof Error ? error.message : error) + throw error + } + } + + startServer (): Promise { + return new Promise((resolve, reject) => { + const server = createServer(async (req, res) => { + const parsedUrl = parse(req.url || '', true) + + if (parsedUrl.pathname === '/callback') { + const { code, error, error_description, state } = parsedUrl.query + + if (error) { + res.writeHead(400, { 'Content-Type': 'text/html' }) + res.end(`

Authorization Error

${error}: ${error_description}

`) + reject(new Error(`Authorization error: ${error} - ${error_description}`)) + return + } + + if (code && state && typeof code === 'string' && typeof state === 'string') { + try { + const tokens = await this.exchangeCodeForTokens(code, state) + + res.writeHead(200, { 'Content-Type': 'text/html' }) + res.end(` +

โœ… Authorization Successful!

+

You can close this window and return to the terminal.

+ + `) + + server.close() + resolve(tokens) + } + catch (error) { + res.writeHead(500, { 'Content-Type': 'text/html' }) + res.end(`

โŒ Token Exchange Error

${error instanceof Error ? error.message : error}

`) + reject(error) + } + } + } + else { + res.writeHead(404, { 'Content-Type': 'text/plain' }) + res.end('Not found') + } + }) + + server.listen(PORT, (err?: Error) => { + if (err) reject(err) + }) + }) + } + + async generateTokens (): Promise { + console.log('๐Ÿ”— LinkedIn Access Token Generator') + console.log('==================================\n') + + console.log('Required scopes:') + SCOPES.forEach(scope => console.log(` โœ“ ${scope}`)) + console.log() + + console.log('๐ŸŒ Starting local server for OAuth callback...') + + try { + const serverPromise = this.startServer() + const authUrl = this.generateAuthUrl() + + console.log('๐Ÿš€ Please visit the following URL to authorize the application:') + console.log(`\n${authUrl}\n`) + console.log('๐Ÿ’ก This should open automatically in your browser...') + + // Try to open the URL automatically + try { + const opener = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open' + spawn(opener, [authUrl], { detached: true, stdio: 'ignore' }).unref() + } + catch { + console.log('โ„น๏ธ Could not open browser automatically') + } + + console.log('โณ Waiting for authorization...') + const tokens = await serverPromise + + return tokens + } + catch (error) { + console.error('โŒ Authorization failed:', error instanceof Error ? error.message : error) + throw error + } + } + + displayResults (tokens: LinkedInTokenResponse): void { + console.log('\n๐ŸŽ‰ Success! Here are your LinkedIn tokens:') + console.log('==========================================\n') + + console.log('๐Ÿ“‹ Copy this to your environment variables:') + console.log('```bash') + console.log(`export NUXT_LINKEDIN_ACCESS_TOKEN="${tokens.access_token}"`) + console.log('```\n') + + console.log('Or add to your .env file:') + console.log('```env') + console.log(`NUXT_LINKEDIN_ACCESS_TOKEN=${tokens.access_token}`) + console.log('```\n') + + if (tokens.expires_in) { + const expiryDate = new Date(Date.now() + (tokens.expires_in * 1000)) + console.log(`โฐ Access token expires: ${expiryDate.toLocaleString()}`) + console.log('โš ๏ธ LinkedIn tokens typically expire in 60 days') + } + + console.log('\n๐Ÿ“ Important Notes:') + console.log('โ€ข LinkedIn does not provide refresh tokens for most applications') + console.log('โ€ข You will need to re-run this script when the token expires') + console.log('โ€ข Consider setting up a calendar reminder for token renewal') + + console.log('\n๐Ÿ”„ To generate a new token when this expires:') + console.log('node scripts/linkedin-auth.ts') + } + + async testToken (accessToken: string): Promise { + console.log('\n๐Ÿงช Testing access token...') + + try { + // Using OpenID Connect userinfo endpoint + const response = await fetch('https://api.linkedin.com/v2/userinfo', { + headers: { + 'Authorization': `Bearer ${accessToken}`, + 'Content-Type': 'application/json', + }, + }) + + if (!response.ok) { + throw new Error(`API test failed: ${response.status} ${response.statusText}`) + } + + const profile = await response.json() as LinkedInProfile + console.log('โœ… Token is valid!') + console.log(`๐Ÿ‘ค Authenticated as: ${profile.name}${profile.email ? ` (${profile.email})` : ''}`) + + return true + } + catch (error) { + console.error('โŒ Token test failed:', error instanceof Error ? error.message : error) + return false + } + } +} + +const main = defineCommand({ + meta: { + name: 'linkedin-auth', + version: '1.0.0', + description: 'LinkedIn OAuth Token Generator', + }, + args: { + 'client-id': { + type: 'string', + description: 'LinkedIn app client ID', + }, + 'client-secret': { + type: 'string', + description: 'LinkedIn app client secret', + }, + }, + subCommands: { + generate: defineCommand({ + meta: { + name: 'generate', + description: 'Generate a new LinkedIn access token', + }, + args: { + 'client-id': { + type: 'string', + description: 'LinkedIn app client ID', + }, + 'client-secret': { + type: 'string', + description: 'LinkedIn app client secret', + }, + }, + async run ({ args }) { + const generator = new LinkedInAuthGenerator({ + clientId: typeof args['client-id'] === 'string' ? args['client-id'] : undefined, + clientSecret: typeof args['client-secret'] === 'string' ? args['client-secret'] : undefined, + }) + + try { + const tokens = await generator.generateTokens() + if (!tokens) { + console.error('โŒ Failed to generate tokens') + process.exit(1) + } + + generator.displayResults(tokens) + + // Test the token + await generator.testToken(tokens.access_token) + } + catch (error: any) { + console.error('โŒ Failed to generate tokens:', error.message) + process.exit(1) + } + }, + }), + }, +}) + +// Handle graceful shutdown +process.on('SIGINT', () => { + console.log('\n\n๐Ÿ‘‹ Goodbye!') + process.exit(0) +}) + +runMain(main) diff --git a/scripts/youtube-auth.mjs b/scripts/youtube-auth.ts similarity index 67% rename from scripts/youtube-auth.mjs rename to scripts/youtube-auth.ts index 65d347d5..032bdf8f 100644 --- a/scripts/youtube-auth.mjs +++ b/scripts/youtube-auth.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env node - /** * YouTube OAuth Token Generator * @@ -14,36 +12,57 @@ * 4. Download the credentials JSON file * * Usage: - * node scripts/youtube-auth.js - * - * Or with credentials file path: - * node scripts/youtube-auth.js ./path/to/credentials.json - * - * To refresh an existing token: - * node scripts/youtube-auth.js --refresh "your_refresh_token" + * node scripts/youtube-auth.ts + * node scripts/youtube-auth.ts --credentials ./path/to/credentials.json + * node scripts/youtube-auth.ts refresh "your_refresh_token" */ import { createServer } from 'node:http' import { parse } from 'node:url' +import process from 'node:process' import { readFileSync, existsSync } from 'node:fs' import { join } from 'node:path' +import { defineCommand, runMain } from 'citty' // Required YouTube API scopes const SCOPES = [ 'https://www.googleapis.com/auth/youtube', // Video upload 'https://www.googleapis.com/auth/youtube.force-ssl', // Playlist management -] +] as const const REDIRECT_URI = 'http://localhost:8080/callback' const PORT = 8080 +interface YouTubeCredentials { + client_id: string + client_secret: string + redirect_uris?: string[] +} + +interface YouTubeTokenResponse { + access_token: string + token_type: string + expires_in: number + refresh_token?: string +} + +interface CredentialsFile { + installed?: YouTubeCredentials + web?: YouTubeCredentials + client_id?: string + client_secret?: string +} + class YouTubeAuthGenerator { - constructor (credentialsPath) { + private credentialsPath: string + private credentials: YouTubeCredentials + + constructor (credentialsPath?: string) { this.credentialsPath = credentialsPath || this.findCredentialsFile() this.credentials = this.loadCredentials() } - findCredentialsFile () { + findCredentialsFile (): string { const possiblePaths = [ './credentials.json', './google-credentials.json', @@ -65,27 +84,31 @@ class YouTubeAuthGenerator { process.exit(1) } - loadCredentials () { + loadCredentials (): YouTubeCredentials { try { const content = readFileSync(this.credentialsPath, 'utf8') - const data = JSON.parse(content) + const data: CredentialsFile = JSON.parse(content) // Handle both direct credentials and wrapped format - const creds = data.installed || data.web || data + const creds = data.installed || data.web || data as YouTubeCredentials if (!creds.client_id || !creds.client_secret) { throw new Error('Missing client_id or client_secret in credentials file') } - return creds + return { + client_id: creds.client_id, + client_secret: creds.client_secret, + redirect_uris: creds.redirect_uris, + } } catch (error) { - console.error('โŒ Error loading credentials:', error.message) + console.error('โŒ Error loading credentials:', error instanceof Error ? error.message : error) process.exit(1) } } - generateAuthUrl () { + generateAuthUrl (): string { const params = new URLSearchParams({ client_id: this.credentials.client_id, redirect_uri: REDIRECT_URI, @@ -98,7 +121,7 @@ class YouTubeAuthGenerator { return `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}` } - async exchangeCodeForTokens (code) { + async exchangeCodeForTokens (code: string): Promise { const tokenUrl = 'https://oauth2.googleapis.com/token' const body = new URLSearchParams({ client_id: this.credentials.client_id, @@ -125,12 +148,12 @@ class YouTubeAuthGenerator { return await response.json() } catch (error) { - console.error('โŒ Error exchanging code for tokens:', error.message) + console.error('โŒ Error exchanging code for tokens:', error instanceof Error ? error.message : error) throw error } } - async refreshAccessToken (refreshToken) { + async refreshAccessToken (refreshToken: string): Promise { const tokenUrl = 'https://oauth2.googleapis.com/token' const body = new URLSearchParams({ client_id: this.credentials.client_id, @@ -153,18 +176,18 @@ class YouTubeAuthGenerator { throw new Error(`Token refresh failed: ${response.status} ${error}`) } - return await response.json() + return await response.json() as YouTubeTokenResponse } catch (error) { - console.error('โŒ Error refreshing token:', error.message) + console.error('โŒ Error refreshing token:', error instanceof Error ? error.message : error) throw error } } - startServer () { + startServer (): Promise { return new Promise((resolve, reject) => { const server = createServer(async (req, res) => { - const parsedUrl = parse(req.url, true) + const parsedUrl = parse(req.url || '', true) if (parsedUrl.pathname === '/callback') { const { code, error } = parsedUrl.query @@ -176,7 +199,7 @@ class YouTubeAuthGenerator { return } - if (code) { + if (code && typeof code === 'string') { try { const tokens = await this.exchangeCodeForTokens(code) @@ -192,7 +215,7 @@ class YouTubeAuthGenerator { } catch (error) { res.writeHead(500, { 'Content-Type': 'text/html' }) - res.end(`

โŒ Token Exchange Error

${error.message}

`) + res.end(`

โŒ Token Exchange Error

${error instanceof Error ? error.message : error}

`) reject(error) } } @@ -203,13 +226,13 @@ class YouTubeAuthGenerator { } }) - server.listen(PORT, err => { + server.listen(PORT, (err?: Error) => { if (err) reject(err) }) }) } - async generateTokens () { + async generateTokens (): Promise { console.log('๐Ÿ” YouTube Access Token Generator') console.log('================================\n') @@ -233,12 +256,12 @@ class YouTubeAuthGenerator { return tokens } catch (error) { - console.error('โŒ Authorization failed:', error.message) + console.error('โŒ Authorization failed:', error instanceof Error ? error.message : error) throw error } } - displayResults (tokens) { + displayResults (tokens: YouTubeTokenResponse): void { console.log('\n๐ŸŽ‰ Success! Here are your tokens:') console.log('=====================================\n') @@ -274,7 +297,7 @@ class YouTubeAuthGenerator { if (tokens.refresh_token) { console.log('\n๐Ÿ”„ To refresh your access token later, you can use:') - console.log(`node scripts/youtube-auth.js --refresh "${tokens.refresh_token}"`) + console.log(`node scripts/youtube-auth.ts --refresh "${tokens.refresh_token}"`) console.log('\n๐Ÿ’ก For automatic token refresh in production, set these environment variables:') console.log(`NUXT_YOUTUBE_REFRESH_TOKEN=${tokens.refresh_token}`) console.log(`NUXT_YOUTUBE_CLIENT_ID=${this.credentials.client_id}`) @@ -282,7 +305,7 @@ class YouTubeAuthGenerator { } } - async handleRefreshToken (refreshToken) { + async handleRefreshToken (refreshToken: string): Promise { console.log('๐Ÿ”„ Refreshing access token...') try { @@ -302,47 +325,82 @@ class YouTubeAuthGenerator { } } catch (error) { - console.error('โŒ Failed to refresh token:', error.message) + console.error('โŒ Failed to refresh token:', error instanceof Error ? error.message : error) console.log('\n๐Ÿ’ก You may need to re-authorize the application:') - console.log(' node scripts/youtube-auth.js') + console.log(' node scripts/youtube-auth.ts') process.exit(1) } } } -// Main execution -async function main () { - const args = process.argv.slice(2) - - // Handle refresh token mode - if (args[0] === '--refresh') { - if (!args[1]) { - console.error('โŒ Please provide a refresh token: --refresh "your_refresh_token"') - process.exit(1) - } - - const generator = new YouTubeAuthGenerator() - await generator.handleRefreshToken(args[1]) - return - } - - // Normal authorization flow - const credentialsPath = args[0] - const generator = new YouTubeAuthGenerator(credentialsPath) +const main = defineCommand({ + meta: { + name: 'youtube-auth', + version: '1.0.0', + description: 'YouTube OAuth Token Generator', + }, + args: { + credentials: { + type: 'positional', + description: 'Path to credentials JSON file', + required: false, + }, + }, + subCommands: { + generate: defineCommand({ + meta: { + name: 'generate', + description: 'Generate new YouTube access and refresh tokens', + }, + args: { + credentials: { + type: 'positional', + description: 'Path to credentials JSON file', + required: false, + }, + }, + async run ({ args }) { + const credentialsPath = typeof args.credentials === 'string' ? args.credentials : undefined + const generator = new YouTubeAuthGenerator(credentialsPath) + + try { + const tokens = await generator.generateTokens() + if (!tokens) { + console.error('โŒ Failed to generate tokens') + process.exit(1) + } + generator.displayResults(tokens) + } + catch (error) { + console.error('โŒ Failed to generate tokens:', error instanceof Error ? error.message : error) + process.exit(1) + } + }, + }), + refresh: defineCommand({ + meta: { + name: 'refresh', + description: 'Refresh an existing access token', + }, + args: { + token: { + type: 'positional', + description: 'Refresh token to use', + required: true, + }, + }, + async run ({ args }) { + if (typeof args.token !== 'string') { + console.error('โŒ Please provide a refresh token: youtube-auth refresh "your_refresh_token"') + process.exit(1) + } - try { - const tokens = await generator.generateTokens() - if (!tokens) { - console.error('โŒ Failed to generate tokens') - process.exit(1) - } - generator.displayResults(tokens) - } - catch (error) { - console.error('โŒ Failed to generate tokens:', error.message) - process.exit(1) - } -} + const generator = new YouTubeAuthGenerator() + await generator.handleRefreshToken(args.token) + }, + }), + }, +}) // Handle graceful shutdown process.on('SIGINT', () => { @@ -350,4 +408,4 @@ process.on('SIGINT', () => { process.exit(0) }) -main().catch(console.error) +runMain(main) -- 2.51.2