diff --git a/.eslintignore b/.eslintignore index b2365300..d652cf4e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -9,3 +9,5 @@ public/ https-dev-config/localhost.crt https-dev-config/localhost.key Dockerfile +elk-translation-status.json +docs/translation-status.json diff --git a/.gitignore b/.gitignore index 72b234fa..a7cd793f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ dist .vite-inspect .netlify/ .eslintcache +elk-translation-status.json public/shiki public/emojis diff --git a/components/help/HelpPreview.vue b/components/help/HelpPreview.vue index 666f794a..ca869b67 100644 --- a/components/help/HelpPreview.vue +++ b/components/help/HelpPreview.vue @@ -10,7 +10,7 @@ const emit = defineEmits<{
- +

{{ $t('help.title') }}

diff --git a/components/publish/PublishWidget.vue b/components/publish/PublishWidget.vue index cc4e653b..9feea9fe 100644 --- a/components/publish/PublishWidget.vue +++ b/components/publish/PublishWidget.vue @@ -27,7 +27,7 @@ const emit = defineEmits<{ const { t } = useI18n() const draftState = useDraft(draftKey, initial) -const { draft } = $(draftState) +const { draft, isEmpty } = $(draftState) const { isExceedingAttachmentLimit, isUploading, failedAttachments, isOverDropZone, @@ -48,6 +48,8 @@ const { editor } = useTiptap({ set: (newVal) => { draft.params.status = newVal draft.lastUpdated = Date.now() + if (isEmpty) + clearEmptyDrafts() }, }), placeholder: computed(() => placeholder ?? draft.params.inReplyToId ? t('placeholder.replying') : t('placeholder.default_1')), diff --git a/components/user/UserSignIn.vue b/components/user/UserSignIn.vue index 97621bc2..eea8a0ef 100644 --- a/components/user/UserSignIn.vue +++ b/components/user/UserSignIn.vue @@ -96,7 +96,7 @@ onClickOutside(input, () => {
- +

{{ $t('app_desc_short') }}

diff --git a/pages/settings/language/index.vue b/pages/settings/language/index.vue index 38c861d7..02c3fb56 100644 --- a/pages/settings/language/index.vue +++ b/pages/settings/language/index.vue @@ -1,13 +1,21 @@

diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2cd20754..0b80e37f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,9 +22,7 @@ overrides: '@tiptap/extension-paragraph': 2.0.0-beta.204 '@tiptap/extension-strike': 2.0.0-beta.204 '@tiptap/extension-text': 2.0.0-beta.204 - vitest>vite: ^3.2.5 - '@nuxt/kit': ^3.1.2 - '@nuxt/schema': ^3.1.2 + vue: 3.2.45 importers: @@ -59,6 +57,7 @@ importers: '@tiptap/vue-3': 2.0.0-beta.204 '@types/chroma-js': ^2.1.4 '@types/file-saver': ^2.0.5 + '@types/flat': ^5.0.2 '@types/fnando__sparkline': ^0.3.4 '@types/fs-extra': ^11.0.1 '@types/js-yaml': ^4.0.5 @@ -80,6 +79,7 @@ importers: eslint: ^8.32.0 esno: ^0.16.3 file-saver: ^2.0.5 + flat: ^5.0.2 floating-vue: 2.0.0-beta.20 focus-trap: ^7.2.0 form-data: ^4.0.0 @@ -93,7 +93,7 @@ importers: lint-staged: ^13.1.0 lru-cache: ^7.14.1 masto: ^5.6.1 - nuxt: 3.1.1 + nuxt: 3.2.0 nuxt-security: ^0.10.1 nuxt-vitest: ^0.6.4 page-lifecycle: ^0.1.2 @@ -138,6 +138,7 @@ importers: '@iconify-json/ri': 1.1.4 '@iconify-json/twemoji': 1.1.10 '@iconify/utils': 2.0.12 + '@nuxt/devtools': 0.1.0_nuxt@3.2.0 '@nuxtjs/color-mode': 3.2.0 '@nuxtjs/i18n': 8.0.0-beta.9 '@pinia/nuxt': 0.4.6_typescript@4.9.5 @@ -152,13 +153,13 @@ importers: '@tiptap/suggestion': 2.0.0-beta.204 '@tiptap/vue-3': 2.0.0-beta.204 '@unocss/nuxt': 0.49.1 - '@vue-macros/nuxt': 1.0.3_2kgo5tjdvwtrecdyfxt2rg75du - '@vueuse/core': 9.11.1 + '@vue-macros/nuxt': 1.0.3_6l3fqwfj7gx5aeecw2zdghwe7m + '@vueuse/core': 9.12.0 '@vueuse/gesture': 2.0.0-beta.1 '@vueuse/integrations': 9.11.1_ha7ivgav6uqpoo2b5thfugqwjq '@vueuse/math': 9.11.1 '@vueuse/motion': 2.0.0-beta.12 - '@vueuse/nuxt': 9.11.1_nuxt@3.1.1 + '@vueuse/nuxt': 9.12.0_nuxt@3.2.0 blurhash: 2.0.4 browser-fs-access: 0.31.2 chroma-js: 2.4.2 @@ -195,9 +196,9 @@ importers: tippy.js: 6.3.7 ufo: 1.0.1 ultrahtml: 1.2.0 - unimport: 2.1.0 - unplugin-auto-import: 0.13.0_@vueuse+core@9.11.1 - vite-plugin-pwa: 0.14.1_tz3vz2xt4jvid2diblkpydcyn4 + unimport: 2.2.4 + unplugin-auto-import: 0.13.0_@vueuse+core@9.12.0 + vite-plugin-pwa: 0.14.1 vue-advanced-cropper: 2.8.8 vue-virtual-scroller: 2.0.0-beta.7 workbox-build: 6.5.4 @@ -205,9 +206,9 @@ importers: devDependencies: '@antfu/eslint-config': 0.34.1_et5x32uxl7z5ldub3ye5rhlyqm '@antfu/ni': 0.19.0 - '@nuxt/devtools': 0.1.0_nuxt@3.1.1 '@types/chroma-js': 2.1.4 '@types/file-saver': 2.0.5 + '@types/flat': 5.0.2 '@types/fnando__sparkline': 0.3.4 '@types/fs-extra': 11.0.1 '@types/js-yaml': 4.0.5 @@ -216,9 +217,10 @@ importers: bumpp: 8.2.1 eslint: 8.32.0 esno: 0.16.3 + flat: 5.0.2 fs-extra: 11.1.0 lint-staged: 13.1.0 - nuxt: 3.1.1_7rz7g5sqfnn6wuv5lem37retty + nuxt: 3.2.0_7rz7g5sqfnn6wuv5lem37retty prettier: 2.8.3 simple-git-hooks: 2.8.1 typescript: 4.9.5 @@ -227,11 +229,11 @@ importers: docs: specifiers: - '@nuxt-themes/docus': ^1.6.1 - nuxt: ^3.1.1 + '@nuxt-themes/docus': ^1.8.1 + nuxt: ^3.2.0 devDependencies: - '@nuxt-themes/docus': 1.6.3_nuxt@3.1.1 - nuxt: 3.1.1 + '@nuxt-themes/docus': 1.8.1_nuxt@3.2.0 + nuxt: 3.2.0 packages: @@ -340,6 +342,7 @@ packages: dependencies: execa: 5.1.1 find-up: 5.0.0 + dev: false /@antfu/ni/0.19.0: resolution: {integrity: sha512-33VKTuBjoW2canoVMGa4g5oGCg7KK8UVmBBmUKzvQ+Fa69kk2YI8sqt94WCpvSWmW/yD5ZXsD9G9s689b9KwwQ==} @@ -352,6 +355,7 @@ packages: /@antfu/utils/0.7.2: resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==} + dev: false /@apideck/better-ajv-errors/0.3.6_ajv@8.12.0: resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} @@ -902,7 +906,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - dev: true + dev: false /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -1561,21 +1565,18 @@ packages: dependencies: '@esbuild-kit/core-utils': 3.0.0 get-tsconfig: 4.3.0 - dev: true /@esbuild-kit/core-utils/3.0.0: resolution: {integrity: sha512-TXmwH9EFS3DC2sI2YJWJBgHGhlteK0Xyu1VabwetMULfm3oYhbrsWV5yaSr2NTWZIgDGVLHbRf0inxbjXqAcmQ==} dependencies: esbuild: 0.15.18 source-map-support: 0.5.21 - dev: true /@esbuild-kit/esm-loader/2.5.4: resolution: {integrity: sha512-afmtLf6uqxD5IgwCzomtqCYIgz/sjHzCWZFvfS5+FzeYxOURPUo4QcHtqJxbxWOMOogKriZanN/1bJQE/ZL93A==} dependencies: '@esbuild-kit/core-utils': 3.0.0 get-tsconfig: 4.3.0 - dev: true /@esbuild/android-arm/0.15.18: resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} @@ -1593,8 +1594,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm/0.17.4: - resolution: {integrity: sha512-R9GCe2xl2XDSc2XbQB63mFiFXHIVkOP+ltIxICKXqUPrFX97z6Z7vONCLQM1pSOLGqfLrGi3B7nbhxmFY/fomg==} + /@esbuild/android-arm/0.17.6: + resolution: {integrity: sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1609,8 +1610,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64/0.17.4: - resolution: {integrity: sha512-91VwDrl4EpxBCiG6h2LZZEkuNvVZYJkv2T9gyLG/mhGG1qrM7i5SwUcg/hlSPnL/4hDT0TFcF35/XMGSn0bemg==} + /@esbuild/android-arm64/0.17.6: + resolution: {integrity: sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1625,8 +1626,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64/0.17.4: - resolution: {integrity: sha512-mGSqhEPL7029XL7QHNPxPs15JVa02hvZvysUcyMP9UXdGFwncl2WU0bqx+Ysgzd+WAbv8rfNa73QveOxAnAM2w==} + /@esbuild/android-x64/0.17.6: + resolution: {integrity: sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1641,8 +1642,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64/0.17.4: - resolution: {integrity: sha512-tTyJRM9dHvlMPt1KrBFVB5OW1kXOsRNvAPtbzoKazd5RhD5/wKlXk1qR2MpaZRYwf4WDMadt0Pv0GwxB41CVow==} + /@esbuild/darwin-arm64/0.17.6: + resolution: {integrity: sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1657,8 +1658,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64/0.17.4: - resolution: {integrity: sha512-phQuC2Imrb3TjOJwLN8EO50nb2FHe8Ew0OwgZDH1SV6asIPGudnwTQtighDF2EAYlXChLoMJwqjAp4vAaACq6w==} + /@esbuild/darwin-x64/0.17.6: + resolution: {integrity: sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1673,8 +1674,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64/0.17.4: - resolution: {integrity: sha512-oH6JUZkocgmjzzYaP5juERLpJQSwazdjZrTPgLRmAU2bzJ688x0vfMB/WTv4r58RiecdHvXOPC46VtsMy/mepg==} + /@esbuild/freebsd-arm64/0.17.6: + resolution: {integrity: sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1689,8 +1690,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64/0.17.4: - resolution: {integrity: sha512-U4iWGn/9TrAfpAdfd56eO0pRxIgb0a8Wj9jClrhT8hvZnOnS4dfMPW7o4fn15D/KqoiVYHRm43jjBaTt3g/2KA==} + /@esbuild/freebsd-x64/0.17.6: + resolution: {integrity: sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1705,8 +1706,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm/0.17.4: - resolution: {integrity: sha512-S2s9xWTGMTa/fG5EyMGDeL0wrWVgOSQcNddJWgu6rG1NCSXJHs76ZP9AsxjB3f2nZow9fWOyApklIgiTGZKhiw==} + /@esbuild/linux-arm/0.17.6: + resolution: {integrity: sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1721,8 +1722,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64/0.17.4: - resolution: {integrity: sha512-UkGfQvYlwOaeYJzZG4cLV0hCASzQZnKNktRXUo3/BMZvdau40AOz9GzmGA063n1piq6VrFFh43apRDQx8hMP2w==} + /@esbuild/linux-arm64/0.17.6: + resolution: {integrity: sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1737,8 +1738,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32/0.17.4: - resolution: {integrity: sha512-3lqFi4VFo/Vwvn77FZXeLd0ctolIJH/uXkH3yNgEk89Eh6D3XXAC9/iTPEzeEpsNE5IqGIsFa5Z0iPeOh25IyA==} + /@esbuild/linux-ia32/0.17.6: + resolution: {integrity: sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1761,8 +1762,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64/0.17.4: - resolution: {integrity: sha512-HqpWZkVslDHIwdQ9D+gk7NuAulgQvRxF9no54ut/M55KEb3mi7sQS3GwpPJzSyzzP0UkjQVN7/tbk88/CaX4EQ==} + /@esbuild/linux-loong64/0.17.6: + resolution: {integrity: sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1777,8 +1778,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el/0.17.4: - resolution: {integrity: sha512-d/nMCKKh/SVDbqR9ju+b78vOr0tNXtfBjcp5vfHONCCOAL9ad8gN9dC/u+UnH939pz7wO+0u/x9y1MaZcb/lKA==} + /@esbuild/linux-mips64el/0.17.6: + resolution: {integrity: sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1793,8 +1794,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64/0.17.4: - resolution: {integrity: sha512-lOD9p2dmjZcNiTU+sGe9Nn6G3aYw3k0HBJies1PU0j5IGfp6tdKOQ6mzfACRFCqXjnBuTqK7eTYpwx09O5LLfg==} + /@esbuild/linux-ppc64/0.17.6: + resolution: {integrity: sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1809,8 +1810,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64/0.17.4: - resolution: {integrity: sha512-mTGnwWwVshAjGsd8rP+K6583cPDgxOunsqqldEYij7T5/ysluMHKqUIT4TJHfrDFadUwrghAL6QjER4FeqQXoA==} + /@esbuild/linux-riscv64/0.17.6: + resolution: {integrity: sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1825,8 +1826,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x/0.17.4: - resolution: {integrity: sha512-AQYuUGp50XM29/N/dehADxvc2bUqDcoqrVuijop1Wv72SyxT6dDB9wjUxuPZm2HwIM876UoNNBMVd+iX/UTKVQ==} + /@esbuild/linux-s390x/0.17.6: + resolution: {integrity: sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1841,8 +1842,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64/0.17.4: - resolution: {integrity: sha512-+AsFBwKgQuhV2shfGgA9YloxLDVjXgUEWZum7glR5lLmV94IThu/u2JZGxTgjYby6kyXEx8lKOqP5rTEVBR0Rw==} + /@esbuild/linux-x64/0.17.6: + resolution: {integrity: sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1857,8 +1858,8 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64/0.17.4: - resolution: {integrity: sha512-zD1TKYX9553OiLS/qkXPMlWoELYkH/VkzRYNKEU+GwFiqkq0SuxsKnsCg5UCdxN3cqd+1KZ8SS3R+WG/Hxy2jQ==} + /@esbuild/netbsd-x64/0.17.6: + resolution: {integrity: sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1873,8 +1874,8 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64/0.17.4: - resolution: {integrity: sha512-PY1NjEsLRhPEFFg1AV0/4Or/gR+q2dOb9s5rXcPuCjyHRzbt8vnHJl3vYj+641TgWZzTFmSUnZbzs1zwTzjeqw==} + /@esbuild/openbsd-x64/0.17.6: + resolution: {integrity: sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1889,8 +1890,8 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64/0.17.4: - resolution: {integrity: sha512-B3Z7s8QZQW9tKGleMRXvVmwwLPAUoDCHs4WZ2ElVMWiortLJFowU1NjAhXOKjDgC7o9ByeVcwyOlJ+F2r6ZgmQ==} + /@esbuild/sunos-x64/0.17.6: + resolution: {integrity: sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1905,8 +1906,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64/0.17.4: - resolution: {integrity: sha512-0HCu8R3mY/H5V7N6kdlsJkvrT591bO/oRZy8ztF1dhgNU5xD5tAh5bKByT1UjTGjp/VVBsl1PDQ3L18SfvtnBQ==} + /@esbuild/win32-arm64/0.17.6: + resolution: {integrity: sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1921,8 +1922,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32/0.17.4: - resolution: {integrity: sha512-VUjhVDQycse1gLbe06pC/uaA0M+piQXJpdpNdhg8sPmeIZZqu5xPoGWVCmcsOO2gaM2cywuTYTHkXRozo3/Nkg==} + /@esbuild/win32-ia32/0.17.6: + resolution: {integrity: sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1937,8 +1938,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64/0.17.4: - resolution: {integrity: sha512-0kLAjs+xN5OjhTt/aUA6t48SfENSCKgGPfExADYTOo/UCn0ivxos9/anUVeSfg+L+2O9xkFxvJXIJfG+Q4sYSg==} + /@esbuild/win32-x64/0.17.6: + resolution: {integrity: sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2331,15 +2332,15 @@ packages: defu: 6.1.2 dev: false - /@nuxt-themes/docus/1.6.3_nuxt@3.1.1: - resolution: {integrity: sha512-H+9kiwufFFQGMsU1iyJieHVr0g8Kj664PrSMI2+bveEMbM1ui1xvDBIk6YhkTQbN3Y7rqOeSiKfr5YGp3zYPSg==} + /@nuxt-themes/docus/1.8.1_nuxt@3.2.0: + resolution: {integrity: sha512-UrsqD24e5hewHKDvqfgDNV0I6dGpKieaZoUG7aaCPP0glAqNlWMw8SFHlM7KFBx9iREmWed1XxCkN7wAcJPIUQ==} dependencies: - '@nuxt-themes/elements': 0.5.2 - '@nuxt-themes/tokens': 1.6.2 - '@nuxt-themes/typography': 0.6.0 - '@nuxt/content': 2.4.2 - '@nuxthq/studio': 0.6.5 - '@vueuse/nuxt': 9.11.1_nuxt@3.1.1 + '@nuxt-themes/elements': 0.7.2 + '@nuxt-themes/tokens': 1.7.3 + '@nuxt-themes/typography': 0.8.0 + '@nuxt/content': 2.4.3 + '@nuxthq/studio': 0.7.2 + '@vueuse/nuxt': 9.12.0_nuxt@3.2.0 transitivePeerDependencies: - '@vue/composition-api' - bufferutil @@ -2352,11 +2353,11 @@ packages: - vue dev: true - /@nuxt-themes/elements/0.5.2: - resolution: {integrity: sha512-jwcMbXJ9zK8mGi8vJJqKObVlfpkfyr3f1ngKyrX3n8Hphy/G8wKpTLvUKPL28Rzr2fj0FPTT6aOe6VBsB47EJA==} + /@nuxt-themes/elements/0.7.2: + resolution: {integrity: sha512-tix0nXchdMMyfSdp+x7VtQE0unNWrQ/xDxxHX/p8JzZMDs4jnXnfJnpdIljhZCyIlFe+9KM5wAZuzb4C0lsGrg==} dependencies: - '@nuxt-themes/tokens': 1.6.2 - '@vueuse/core': 9.11.1 + '@nuxt-themes/tokens': 1.7.3 + '@vueuse/core': 9.12.0 transitivePeerDependencies: - '@vue/composition-api' - postcss @@ -2366,12 +2367,12 @@ packages: - vue dev: true - /@nuxt-themes/tokens/1.6.2: - resolution: {integrity: sha512-J2UZpN7iccMCHB2MHfgJ9od85xmfH1Apwu2NEYynNDBHhQG2e9f2JlByEHJbtTQW7soBFjYJQVSxU2XtzASBTw==} + /@nuxt-themes/tokens/1.7.3: + resolution: {integrity: sha512-BlCudbVaUTYfgM9Qi8SYC8KpRdHb1LiQ8PVPpi4Me/5QYq3jSWQ5C15PPQYHhIqOdpcBNFuVF3WPP1QFP+oHnw==} dependencies: '@nuxtjs/color-mode': 3.2.0 - '@vueuse/core': 9.11.1 - pinceau: 0.12.8 + '@vueuse/core': 9.12.0 + pinceau: 0.13.9 transitivePeerDependencies: - '@vue/composition-api' - postcss @@ -2381,10 +2382,10 @@ packages: - vue dev: true - /@nuxt-themes/typography/0.6.0: - resolution: {integrity: sha512-RGLi4Ylu7KBr5JYyQQNOafNyDy707C81XjdzmbTznmmKb6VIa5z0rO7XwpsnZhA+wjRkXGJv9B1L+ABhxKEAIA==} + /@nuxt-themes/typography/0.8.0: + resolution: {integrity: sha512-aK1Bp9FnlTcg8sc3ZGGGx4dMlQrIRMxZhBwFEbh4JtLupcckJVt3FsJE+JGEmyRWSFbJrsagLdv6cZ9Vn7OCfQ==} dependencies: - '@nuxt-themes/tokens': 1.6.2 + '@nuxt-themes/tokens': 1.7.3 '@nuxtjs/color-mode': 3.2.0 nuxt-config-schema: 0.4.4 nuxt-icon: 0.2.10 @@ -2398,15 +2399,14 @@ packages: - vue dev: true - /@nuxt/content/2.4.2: - resolution: {integrity: sha512-Nz2ZcC7R505UY5NQN+WE1pZ4ie8PBBr12qJHFAZqhWCXenzsdb87p48fvr6Zhlj8CyCTQqWg0B2fs7Lyg/CKwg==} + /@nuxt/content/2.4.3: + resolution: {integrity: sha512-HRx4+9RK2bgtBObcgfrWg/MS0G+mgq87tAA6Q6vjusDpVGE4DhnPN/9nkEMEyfebPZ22iI7z51GN2Od/SnABHA==} dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.1.1 consola: 2.15.3 defu: 6.1.2 destr: 1.2.2 detab: 3.0.2 - html-tags: 3.2.0 json5: 2.2.3 knitwork: 1.0.0 listhen: 1.0.2 @@ -2435,7 +2435,7 @@ packages: unist-builder: 3.0.1 unist-util-position: 4.0.4 unist-util-visit: 4.1.2 - unstorage: 1.0.1 + unstorage: 1.1.4 ws: 8.12.0 transitivePeerDependencies: - bufferutil @@ -2447,45 +2447,72 @@ packages: /@nuxt/devalue/2.0.0: resolution: {integrity: sha512-YBI/6o2EBz02tdEJRBK8xkt3zvOFOWlLBf7WKYGBsSYSRtjjgrqPe2skp6VLLmKx5WbHHDNcW+6oACaurxGzeA==} - /@nuxt/devtools/0.1.0_nuxt@3.1.1: + /@nuxt/devtools/0.1.0_nuxt@3.2.0: resolution: {integrity: sha512-N8C+TDZAiMZi68HtQgUnKECsmRGV1t2xVSvLE+MdlY5t4OvzRTkhes6ONDP7lqDKZqUj7TcIgWShBvJa+InurA==} hasBin: true peerDependencies: nuxt: ^3.1.1 dependencies: '@antfu/install-pkg': 0.1.1 - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 birpc: 0.2.3 consola: 2.15.3 execa: 6.1.0 - h3: 1.1.0 + h3: 1.4.0 hookable: 5.4.2 launch-editor: 2.6.0 - nuxt: 3.1.1_7rz7g5sqfnn6wuv5lem37retty + nuxt: 3.2.0_7rz7g5sqfnn6wuv5lem37retty pathe: 1.1.0 pkg-types: 1.0.1 rc9: 2.0.1 - unimport: 2.1.0 + unimport: 2.2.4 vite-plugin-inspect: 0.7.15 vite-plugin-vue-inspector: 3.3.2 transitivePeerDependencies: - rollup - supports-color - vite + dev: false + + /@nuxt/kit/3.1.1: + resolution: {integrity: sha512-wmqVCIuD/te6BKf3YiqWyMumKI5JIpkiv0li/1Y3QHnTkoxyIhLkbFgNcQHuBxJ3eMlk2UjAjAqWiqBHTX54vQ==} + engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} + dependencies: + '@nuxt/schema': 3.1.1 + c12: 1.1.0 + consola: 2.15.3 + defu: 6.1.2 + globby: 13.1.3 + hash-sum: 2.0.0 + ignore: 5.2.4 + jiti: 1.17.0 + knitwork: 1.0.0 + lodash.template: 4.5.0 + mlly: 1.1.0 + pathe: 1.1.0 + pkg-types: 1.0.1 + scule: 1.0.0 + semver: 7.3.8 + unctx: 2.1.1 + unimport: 2.2.4 + untyped: 1.2.2 + transitivePeerDependencies: + - rollup + - supports-color dev: true - /@nuxt/kit/3.1.2: - resolution: {integrity: sha512-m8/AF8hBJiG7aTx2CpiDGeLYYz30fUoPbJ9XiSmHqRIXv1goAFWHSkzWfRNEsoAAbMHf76oB917wVUQ3VSSQHg==} + /@nuxt/kit/3.2.0: + resolution: {integrity: sha512-Otb1S/08tDxbpeQYLMynjr2TX7ssU1ynbWDpVzFzLBdfHkGWHXpIhJr+0u3LdnPUBw6C/xPXe7fd7RuXI9avoA==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} dependencies: - '@nuxt/schema': 3.1.2 + '@nuxt/schema': 3.2.0 c12: 1.1.0 consola: 2.15.3 defu: 6.1.2 globby: 13.1.3 hash-sum: 2.0.0 ignore: 5.2.4 - jiti: 1.16.2 + jiti: 1.17.0 knitwork: 1.0.0 lodash.template: 4.5.0 mlly: 1.1.0 @@ -2494,24 +2521,24 @@ packages: scule: 1.0.0 semver: 7.3.8 unctx: 2.1.1 - unimport: 2.1.0 + unimport: 2.2.4 untyped: 1.2.2 transitivePeerDependencies: - rollup - supports-color - /@nuxt/kit/3.1.2_rollup@3.10.1: - resolution: {integrity: sha512-m8/AF8hBJiG7aTx2CpiDGeLYYz30fUoPbJ9XiSmHqRIXv1goAFWHSkzWfRNEsoAAbMHf76oB917wVUQ3VSSQHg==} + /@nuxt/kit/3.2.0_rollup@3.14.0: + resolution: {integrity: sha512-Otb1S/08tDxbpeQYLMynjr2TX7ssU1ynbWDpVzFzLBdfHkGWHXpIhJr+0u3LdnPUBw6C/xPXe7fd7RuXI9avoA==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} dependencies: - '@nuxt/schema': 3.1.2_rollup@3.10.1 + '@nuxt/schema': 3.2.0_rollup@3.14.0 c12: 1.1.0 consola: 2.15.3 defu: 6.1.2 globby: 13.1.3 hash-sum: 2.0.0 ignore: 5.2.4 - jiti: 1.16.2 + jiti: 1.17.0 knitwork: 1.0.0 lodash.template: 4.5.0 mlly: 1.1.0 @@ -2520,49 +2547,71 @@ packages: scule: 1.0.0 semver: 7.3.8 unctx: 2.1.1 - unimport: 2.1.0_rollup@3.10.1 + unimport: 2.2.4_rollup@3.14.0 untyped: 1.2.2 transitivePeerDependencies: - rollup - supports-color - /@nuxt/schema/3.1.2: - resolution: {integrity: sha512-wru9LhRXTa6WQlx7c0oYrtvJY7TiVlkBKXY5Rsmfo0StJuWohgZiReu9fu6z6GU4MzZlX25TVjwvq9Q7bNVbSQ==} + /@nuxt/schema/3.1.1: + resolution: {integrity: sha512-/KuoCDVGrLD9W7vwuYhu4HbdT/BpbrhA4Pm9dGn7Jah40kHDGqUnJxugvMjt+4suq53rLQyTA0LRDWfFxfxAOQ==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} dependencies: c12: 1.1.0 create-require: 1.1.1 defu: 6.1.2 hookable: 5.4.2 - jiti: 1.16.2 + jiti: 1.17.0 pathe: 1.1.0 pkg-types: 1.0.1 postcss-import-resolver: 2.0.0 scule: 1.0.0 std-env: 3.3.2 ufo: 1.0.1 - unimport: 2.1.0 + unimport: 2.2.4 untyped: 1.2.2 transitivePeerDependencies: - rollup - supports-color + dev: true - /@nuxt/schema/3.1.2_rollup@3.10.1: - resolution: {integrity: sha512-wru9LhRXTa6WQlx7c0oYrtvJY7TiVlkBKXY5Rsmfo0StJuWohgZiReu9fu6z6GU4MzZlX25TVjwvq9Q7bNVbSQ==} + /@nuxt/schema/3.2.0: + resolution: {integrity: sha512-tz9RandI5LgbT9BQ8dE8n4kItV7+4OUgbX42YemcGbtORVJAWJJvQyHGikJ5akUgiTFYTV8tjV6pRPH9Txx0Pg==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} dependencies: c12: 1.1.0 create-require: 1.1.1 defu: 6.1.2 hookable: 5.4.2 - jiti: 1.16.2 + jiti: 1.17.0 pathe: 1.1.0 pkg-types: 1.0.1 postcss-import-resolver: 2.0.0 scule: 1.0.0 std-env: 3.3.2 ufo: 1.0.1 - unimport: 2.1.0_rollup@3.10.1 + unimport: 2.2.4 + untyped: 1.2.2 + transitivePeerDependencies: + - rollup + - supports-color + + /@nuxt/schema/3.2.0_rollup@3.14.0: + resolution: {integrity: sha512-tz9RandI5LgbT9BQ8dE8n4kItV7+4OUgbX42YemcGbtORVJAWJJvQyHGikJ5akUgiTFYTV8tjV6pRPH9Txx0Pg==} + engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} + dependencies: + c12: 1.1.0 + create-require: 1.1.1 + defu: 6.1.2 + hookable: 5.4.2 + jiti: 1.17.0 + pathe: 1.1.0 + pkg-types: 1.0.1 + postcss-import-resolver: 2.0.0 + scule: 1.0.0 + std-env: 3.3.2 + ufo: 1.0.1 + unimport: 2.2.4_rollup@3.14.0 untyped: 1.2.2 transitivePeerDependencies: - rollup @@ -2572,7 +2621,7 @@ packages: resolution: {integrity: sha512-mUyDqmB8GUJwTHVnwxuapeUHDSsUycOt+ZsA7GB6F8MOBJiVhQl/EeEAWoO2TUs0BPp2SlY9uO6eQihvxyLRqQ==} hasBin: true dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 chalk: 5.2.0 ci-info: 3.7.1 consola: 2.15.3 @@ -2584,9 +2633,9 @@ packages: git-url-parse: 13.1.0 inquirer: 9.1.4 is-docker: 3.0.0 - jiti: 1.16.2 + jiti: 1.17.0 mri: 1.2.0 - nanoid: 4.0.0 + nanoid: 4.0.1 node-fetch: 3.3.0 ofetch: 1.0.0 parse-git-config: 3.0.0 @@ -2596,30 +2645,30 @@ packages: - rollup - supports-color - /@nuxt/ui-templates/1.1.0: - resolution: {integrity: sha512-KffiTNdVaZlkx0tgwopmy627WQclWO0kqFD1R646wawDbNlWkpmwj5qI5qoh2Rx13/O+KkYdc28H3JsQdQmXJw==} + /@nuxt/ui-templates/1.1.1: + resolution: {integrity: sha512-PjVETP7+iZXAs5Q8O4ivl4t6qjWZMZqwiTVogUXHoHGZZcw7GZW3u3tzfYfE1HbzyYJfr236IXqQ02MeR8Fz2w==} - /@nuxt/vite-builder/3.1.1_vshnhw7h4tuo6ge5ck2wv7vfrm: - resolution: {integrity: sha512-tTV369sIURut6z+t36ib3J2GbgiazMc4VO9wB372A5hnd+faLtapknswMvzF23M+4z1/5tGaV/kkU/ZrO3V1Ag==} + /@nuxt/vite-builder/3.2.0_vshnhw7h4tuo6ge5ck2wv7vfrm: + resolution: {integrity: sha512-1rApkhjQMUndRKl9bFn/NdAVxUgPeAB/XIEgP0YN4KPTM156Q/fvgu8LrzUp4lzYgGGKfm4r8IfuxYS9BremMQ==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} peerDependencies: - vue: ^3.2.45 + vue: ^3.2.47 dependencies: - '@nuxt/kit': 3.1.2_rollup@3.10.1 - '@rollup/plugin-replace': 5.0.2_rollup@3.10.1 - '@vitejs/plugin-vue': 4.0.0_vite@4.0.4+vue@3.2.45 - '@vitejs/plugin-vue-jsx': 3.0.0_vite@4.0.4+vue@3.2.45 + '@nuxt/kit': 3.2.0_rollup@3.14.0 + '@rollup/plugin-replace': 5.0.2_rollup@3.14.0 + '@vitejs/plugin-vue': 4.0.0_vite@4.1.1+vue@3.2.45 + '@vitejs/plugin-vue-jsx': 3.0.0_vite@4.1.1+vue@3.2.45 autoprefixer: 10.4.13_postcss@8.4.21 chokidar: 3.5.3 cssnano: 5.1.14_postcss@8.4.21 defu: 6.1.2 - esbuild: 0.17.4 + esbuild: 0.17.6 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 externality: 1.0.0 fs-extra: 11.1.0 get-port-please: 3.0.1 - h3: 1.1.0 + h3: 1.4.0 knitwork: 1.0.0 magic-string: 0.27.0 mlly: 1.1.0 @@ -2630,15 +2679,15 @@ packages: postcss: 8.4.21 postcss-import: 15.1.0_postcss@8.4.21 postcss-url: 10.1.3_postcss@8.4.21 - rollup: 3.10.1 - rollup-plugin-visualizer: 5.9.0_rollup@3.10.1 + rollup: 3.14.0 + rollup-plugin-visualizer: 5.9.0_rollup@3.14.0 ufo: 1.0.1 unplugin: 1.0.1 - vite: 4.0.4 + vite: 4.1.1 vite-node: 0.28.4 - vite-plugin-checker: 0.5.4_h3si5tluig4ewnb7qcro3a3fhu + vite-plugin-checker: 0.5.5_vze4qwvlaxozg73itpzioumila vue: 3.2.45 - vue-bundle-renderer: 1.0.0 + vue-bundle-renderer: 1.0.1 transitivePeerDependencies: - '@types/node' - eslint @@ -2656,27 +2705,27 @@ packages: - vti - vue-tsc - /@nuxt/vite-builder/3.1.1_vue@3.2.45: - resolution: {integrity: sha512-tTV369sIURut6z+t36ib3J2GbgiazMc4VO9wB372A5hnd+faLtapknswMvzF23M+4z1/5tGaV/kkU/ZrO3V1Ag==} + /@nuxt/vite-builder/3.2.0_vue@3.2.45: + resolution: {integrity: sha512-1rApkhjQMUndRKl9bFn/NdAVxUgPeAB/XIEgP0YN4KPTM156Q/fvgu8LrzUp4lzYgGGKfm4r8IfuxYS9BremMQ==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} peerDependencies: - vue: ^3.2.45 + vue: ^3.2.47 dependencies: - '@nuxt/kit': 3.1.2_rollup@3.10.1 - '@rollup/plugin-replace': 5.0.2_rollup@3.10.1 - '@vitejs/plugin-vue': 4.0.0_vite@4.0.4+vue@3.2.45 - '@vitejs/plugin-vue-jsx': 3.0.0_vite@4.0.4+vue@3.2.45 + '@nuxt/kit': 3.2.0_rollup@3.14.0 + '@rollup/plugin-replace': 5.0.2_rollup@3.14.0 + '@vitejs/plugin-vue': 4.0.0_vite@4.1.1+vue@3.2.45 + '@vitejs/plugin-vue-jsx': 3.0.0_vite@4.1.1+vue@3.2.45 autoprefixer: 10.4.13_postcss@8.4.21 chokidar: 3.5.3 cssnano: 5.1.14_postcss@8.4.21 defu: 6.1.2 - esbuild: 0.17.4 + esbuild: 0.17.6 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 externality: 1.0.0 fs-extra: 11.1.0 get-port-please: 3.0.1 - h3: 1.1.0 + h3: 1.4.0 knitwork: 1.0.0 magic-string: 0.27.0 mlly: 1.1.0 @@ -2687,15 +2736,15 @@ packages: postcss: 8.4.21 postcss-import: 15.1.0_postcss@8.4.21 postcss-url: 10.1.3_postcss@8.4.21 - rollup: 3.10.1 - rollup-plugin-visualizer: 5.9.0_rollup@3.10.1 + rollup: 3.14.0 + rollup-plugin-visualizer: 5.9.0_rollup@3.14.0 ufo: 1.0.1 unplugin: 1.0.1 - vite: 4.0.4 + vite: 4.1.1 vite-node: 0.28.4 - vite-plugin-checker: 0.5.4_vite@4.0.4 + vite-plugin-checker: 0.5.5_vite@4.1.1 vue: 3.2.45 - vue-bundle-renderer: 1.0.0 + vue-bundle-renderer: 1.0.1 transitivePeerDependencies: - '@types/node' - eslint @@ -2714,11 +2763,11 @@ packages: - vue-tsc dev: true - /@nuxthq/studio/0.6.5: - resolution: {integrity: sha512-kGb8abgTRJi0gcvTQcawEol5CR6uXS4bpCwEEk0+b3LSvyiM6k22Opb29KkSatprTkFrAPHDKSaUve8PiX22sw==} + /@nuxthq/studio/0.7.2: + resolution: {integrity: sha512-8TRUJra53nl+P3XyjcHUKOh/nFo+6MqCy+OXqscKG7MuY8DZ9GNKO8mIIMkyjwseJTGPhSDNqVAsHiHQ0SFfwQ==} dependencies: - '@nuxt/kit': 3.1.2 - '@nuxt/schema': 3.1.2 + '@nuxt/kit': 3.2.0 + '@nuxt/schema': 3.2.0 defu: 6.1.2 nuxt-component-meta: 0.4.3 nuxt-config-schema: 0.4.4 @@ -2734,7 +2783,7 @@ packages: /@nuxtjs/color-mode/3.2.0: resolution: {integrity: sha512-isDR01yfadopiHQ/VEVUpyNSPrk5PCjUHS4t1qYRZwuRGefU4s9Iaxf6H9nmr1QFzoMgTm+3T0r/54jLwtpZbA==} dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 lodash.template: 4.5.0 pathe: 1.1.0 transitivePeerDependencies: @@ -2748,7 +2797,7 @@ packages: '@intlify/bundle-utils': 3.4.0_vue-i18n@9.3.0-beta.16 '@intlify/shared': 9.3.0-beta.11 '@intlify/unplugin-vue-i18n': 0.8.1_vue-i18n@9.3.0-beta.16 - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 '@vue/compiler-sfc': 3.2.47 cookie-es: 0.5.0 debug: 4.3.4 @@ -2777,7 +2826,7 @@ packages: /@pinia/nuxt/0.4.6_typescript@4.9.5: resolution: {integrity: sha512-HjrYEfLdFpmsjhicPJgL36jVhzHWukIQPFFHGTSF84Cplu+f2nY2XHKqe9ToHzE9rLee2RjLOwAzOnXa/I/u6A==} dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 pinia: 2.0.29_typescript@4.9.5 transitivePeerDependencies: - '@vue/composition-api' @@ -2787,14 +2836,21 @@ packages: - vue dev: false + /@planetscale/database/1.5.0: + resolution: {integrity: sha512-Qwh7Or1W5dB5mZ9EQqDkgvkDKhBBmQe58KIVUy0SGocNtr5fP4JAWtvZ6EdLAV6C6hVpzNlCA2xIg9lKTswm1Q==} + engines: {node: '>=16'} + requiresBuild: true + optional: true + /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + dev: false /@popperjs/core/2.11.6: resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} dev: false - /@rollup/plugin-alias/4.0.3_rollup@3.10.1: + /@rollup/plugin-alias/4.0.3_rollup@3.14.0: resolution: {integrity: sha512-ZuDWE1q4PQDhvm/zc5Prun8sBpLJy41DMptYrS6MhAy9s9kL/doN1613BWfEchGVfKxzliJ3BjbOPizXX38DbQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2803,7 +2859,7 @@ packages: rollup: optional: true dependencies: - rollup: 3.10.1 + rollup: 3.14.0 slash: 4.0.0 /@rollup/plugin-babel/5.3.1_3dsfpkpoyvuuxyfgdbpn4j4uzm: @@ -2823,7 +2879,7 @@ packages: rollup: 2.79.1 dev: false - /@rollup/plugin-commonjs/24.0.1_rollup@3.10.1: + /@rollup/plugin-commonjs/24.0.1_rollup@3.14.0: resolution: {integrity: sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2832,15 +2888,15 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.27.0 - rollup: 3.10.1 + rollup: 3.14.0 - /@rollup/plugin-inject/5.0.3_rollup@3.10.1: + /@rollup/plugin-inject/5.0.3_rollup@3.14.0: resolution: {integrity: sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2849,12 +2905,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 estree-walker: 2.0.2 magic-string: 0.27.0 - rollup: 3.10.1 + rollup: 3.14.0 - /@rollup/plugin-json/6.0.0_rollup@3.10.1: + /@rollup/plugin-json/6.0.0_rollup@3.14.0: resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2863,8 +2919,8 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 - rollup: 3.10.1 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 + rollup: 3.14.0 /@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1: resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} @@ -2881,7 +2937,7 @@ packages: rollup: 2.79.1 dev: false - /@rollup/plugin-node-resolve/15.0.1_rollup@3.10.1: + /@rollup/plugin-node-resolve/15.0.1_rollup@3.14.0: resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2890,13 +2946,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 '@types/resolve': 1.20.2 deepmerge: 4.2.2 is-builtin-module: 3.2.0 is-module: 1.0.0 resolve: 1.22.1 - rollup: 3.10.1 + rollup: 3.14.0 /@rollup/plugin-replace/2.4.2_rollup@2.79.1: resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} @@ -2908,7 +2964,7 @@ packages: rollup: 2.79.1 dev: false - /@rollup/plugin-replace/5.0.2_rollup@3.10.1: + /@rollup/plugin-replace/5.0.2_rollup@3.14.0: resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2917,12 +2973,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 magic-string: 0.27.0 - rollup: 3.10.1 + rollup: 3.14.0 - /@rollup/plugin-terser/0.3.0_rollup@3.10.1: - resolution: {integrity: sha512-mYTkNW9KjOscS/3QWU5LfOKsR3/fAAVDaqcAe2TZ7ng6pN46f+C7FOZbITuIW/neA+PhcjoKl7yMyB3XcmA4gw==} + /@rollup/plugin-terser/0.4.0_rollup@3.14.0: + resolution: {integrity: sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.x || ^3.x @@ -2930,12 +2986,12 @@ packages: rollup: optional: true dependencies: - rollup: 3.10.1 + rollup: 3.14.0 serialize-javascript: 6.0.1 smob: 0.0.6 terser: 5.16.1 - /@rollup/plugin-wasm/6.1.2_rollup@3.10.1: + /@rollup/plugin-wasm/6.1.2_rollup@3.14.0: resolution: {integrity: sha512-YdrQ7zfnZ54Y+6raCev3tR1PrhQGxYKSTajGylhyP0oBacouuNo6KcNCk+pYKw9M98jxRWLFFca/udi76IDXzg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2944,7 +3000,7 @@ packages: rollup: optional: true dependencies: - rollup: 3.10.1 + rollup: 3.14.0 /@rollup/pluginutils/3.1.0_rollup@2.79.1: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} @@ -2978,7 +3034,7 @@ packages: estree-walker: 2.0.2 picomatch: 2.3.1 - /@rollup/pluginutils/5.0.2_rollup@3.10.1: + /@rollup/pluginutils/5.0.2_rollup@3.14.0: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2990,7 +3046,7 @@ packages: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.10.1 + rollup: 3.14.0 /@socket.io/component-emitter/3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} @@ -3328,6 +3384,10 @@ packages: resolution: {integrity: sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==} dev: true + /@types/flat/5.0.2: + resolution: {integrity: sha512-3zsplnP2djeps5P9OyarTxwRpMLoe5Ash8aL9iprw0JxB+FAHjY+ifn4yZUuW4/9hqtnmor6uvjSRzJhiVbrEQ==} + dev: true + /@types/fnando__sparkline/0.3.4: resolution: {integrity: sha512-FWU1zw7CVJYVeDk77FGphTUabfPims4F/Yq+WFB0Gh647lLtiXHWn8vpfT95Fl65IsNBDOhEbxJdhmERMGubNQ==} dev: true @@ -3556,28 +3616,28 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@unhead/dom/1.0.18: - resolution: {integrity: sha512-zX7w/Z3a1/spyQ3SuxB/0s1Tjx8zu5RzYBBXTtYvGutF8g/ScXreC0c5Vm5F3x4HOPdWG+71Qr/M+k6AxPLHDA==} + /@unhead/dom/1.0.21: + resolution: {integrity: sha512-rwVz7NWMdQ8kSTXv/WOhB0eTWYFD2SQwQ/J109IEqNUN9X3pIwcvdvlXMCG+qhJGFyiIgOl2X+W0cE+u/IiLVA==} dependencies: - '@unhead/schema': 1.0.18 + '@unhead/schema': 1.0.21 - /@unhead/schema/1.0.18: - resolution: {integrity: sha512-LjNxwwQMZTD0b3LlB4/mmCZpO6HP7ZjK5sKuMpy7/+2O9HJO6TefxsDVrJVAitdUfm5Jej9cNEjnL2gJkc2uWg==} + /@unhead/schema/1.0.21: + resolution: {integrity: sha512-amYg6vJ37xUhnL6bvL4S3lz6yDs5lWeqJu63/3a5bxH3Dq0WPJ+kdhpUXI+4enoNaWvLvm860WXUOtKr5D+DMg==} dependencies: - '@zhead/schema': 1.0.9 + '@zhead/schema': 1.1.0 hookable: 5.4.2 - /@unhead/ssr/1.0.18: - resolution: {integrity: sha512-In0bJSLAyN8DdCuNJaoOIrjsK40g904ELR/0Eue9VzyO0fe147dPGfYlwwUrZOqj0JzGtndiQCF/D6bjn76ovw==} + /@unhead/ssr/1.0.21: + resolution: {integrity: sha512-QWy+vKZWVb+XfHl/B/rEoniMGFpDjXiYBkjJZyuf+9By8DzQUscMaTv14neW1ZR6pq56c4B7Tp1N3Lve8SW+rA==} dependencies: - '@unhead/schema': 1.0.18 + '@unhead/schema': 1.0.21 - /@unhead/vue/1.0.18_vue@3.2.45: - resolution: {integrity: sha512-VZ61a2pRtGXI9sj1aba5Qmm35veVvRDIE0Xsog3I0TfwavlwklZcg9bF2eT+GcDnsq1NxNO7uDyrb/+xNAzSxA==} + /@unhead/vue/1.0.21_vue@3.2.45: + resolution: {integrity: sha512-UCwgY4MbQEnFUo+/xmzBPK3PjC+oeCCzSsgK6eLk3vUC8Cuarrvw06wy8s0cO94DkpAi56Ih9oRWA16a/tih1A==} peerDependencies: vue: '>=2.7 || >=3' dependencies: - '@unhead/schema': 1.0.18 + '@unhead/schema': 1.0.21 hookable: 5.4.2 vue: 3.2.45 @@ -3636,7 +3696,7 @@ packages: /@unocss/nuxt/0.49.1: resolution: {integrity: sha512-VKxAl75dqvk7Xkz8128BFv9mquMrmLmP6wje6ACccWM5sSdH5VjZQqGsSo3q9STcX+KlfuyErqTEMzbWEJ4H7Q==} dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 '@unocss/config': 0.49.1 '@unocss/core': 0.49.1 '@unocss/preset-attributify': 0.49.1 @@ -3715,6 +3775,11 @@ packages: /@unocss/reset/0.49.1: resolution: {integrity: sha512-T1027YK21UDzhgA4qB+L1E8jhNY3dGHqCB15HqB63V5zgVLyw10Hmh0koinrkwtPhxDhLluURuu0tDm7/isvcA==} + dev: false + + /@unocss/reset/0.49.4: + resolution: {integrity: sha512-+9j4bN4cWlsWr3HGlFk+bAb7+1DdwTxQM3UbHjd9QsKVAVV1gE0VHHxU207NOYsIdeBFAOFVkxqFYCyhnfQpnQ==} + dev: true /@unocss/scope/0.49.1: resolution: {integrity: sha512-tSgUbjsb7T2v5ZSYBd9YagoOn8riqx2Pxzk2+md3TnVlbOGtwV4G/BazJ96C2LBB9ldsIvsbNbaK+4S62w27jw==} @@ -3802,7 +3867,7 @@ packages: - encoding - supports-color - /@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.4+vue@3.2.45: + /@vitejs/plugin-vue-jsx/3.0.0_vite@4.1.1+vue@3.2.45: resolution: {integrity: sha512-vurkuzgac5SYuxd2HUZqAFAWGTF10diKBwJNbCvnWijNZfXd+7jMtqjPFbGt7idOJUn584fP1Ar9j/GN2jQ3Ew==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3812,19 +3877,19 @@ packages: '@babel/core': 7.20.12 '@babel/plugin-transform-typescript': 7.20.13_@babel+core@7.20.12 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.12 - vite: 4.0.4 + vite: 4.1.1 vue: 3.2.45 transitivePeerDependencies: - supports-color - /@vitejs/plugin-vue/4.0.0_vite@4.0.4+vue@3.2.45: + /@vitejs/plugin-vue/4.0.0_vite@4.1.1+vue@3.2.45: resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.0.4 + vite: 4.1.1 vue: 3.2.45 /@vitest/expect/0.28.4: @@ -3888,7 +3953,7 @@ packages: '@volar/source-map': 1.0.24 '@vue/compiler-dom': 3.2.47 '@vue/compiler-sfc': 3.2.47 - '@vue/reactivity': 3.2.45 + '@vue/reactivity': 3.2.47 '@vue/shared': 3.2.47 minimatch: 5.1.6 vue-template-compiler: 2.7.14 @@ -3937,7 +4002,7 @@ packages: magic-string: 0.27.0 dev: false - /@vue-macros/define-model/1.3.1_@vueuse+core@9.11.1: + /@vue-macros/define-model/1.3.1_@vueuse+core@9.12.0: resolution: {integrity: sha512-XtBlXtnclMwZaXRko+EangPHXTLIjKxUXPcGqpMCihb+xzVr7dKUv6YZv/nuVucPCPvxH/Jy5BKZqXdTfh76Vw==} engines: {node: '>=14.19.0'} peerDependencies: @@ -3948,7 +4013,7 @@ packages: dependencies: '@rollup/pluginutils': 5.0.2 '@vue-macros/common': 1.0.0 - '@vueuse/core': 9.11.1 + '@vueuse/core': 9.12.0 ast-walker-scope: 0.4.0 unplugin: 1.0.1 transitivePeerDependencies: @@ -4046,17 +4111,17 @@ packages: - vue dev: false - /@vue-macros/nuxt/1.0.3_2kgo5tjdvwtrecdyfxt2rg75du: + /@vue-macros/nuxt/1.0.3_6l3fqwfj7gx5aeecw2zdghwe7m: resolution: {integrity: sha512-p1IuApxeLMjMT5xtdXhIpdNOp5I4+jQnz2Bv4KC6FfnfZZzDToAulaK0Y+Xmn5cSNY+hvCwA7JLZLjRwvYu/AQ==} engines: {node: '>=14.19.0'} peerDependencies: nuxt: ^3.0.0 dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 '@vue-macros/short-vmodel': 1.1.0 '@vue-macros/volar': 0.8.1_vue-tsc@1.0.24 - nuxt: 3.1.1_7rz7g5sqfnn6wuv5lem37retty - unplugin-vue-macros: 1.7.3_@vueuse+core@9.11.1 + nuxt: 3.2.0_7rz7g5sqfnn6wuv5lem37retty + unplugin-vue-macros: 1.7.3_@vueuse+core@9.12.0 transitivePeerDependencies: - '@vueuse/core' - esbuild @@ -4276,6 +4341,11 @@ packages: dependencies: '@vue/shared': 3.2.45 + /@vue/reactivity/3.2.47: + resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==} + dependencies: + '@vue/shared': 3.2.47 + /@vue/runtime-core/3.2.45: resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} dependencies: @@ -4340,6 +4410,18 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue + dev: false + + /@vueuse/core/9.12.0: + resolution: {integrity: sha512-h/Di8Bvf6xRcvS/PvUVheiMYYz3U0tH3X25YxONSaAUBa841ayMwxkuzx/DGUMCW/wHWzD8tRy2zYmOC36r4sg==} + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.12.0 + '@vueuse/shared': 9.12.0 + vue-demi: 0.13.11 + transitivePeerDependencies: + - '@vue/composition-api' + - vue /@vueuse/gesture/2.0.0-beta.1: resolution: {integrity: sha512-HTLibLy3bh6TjRnDAbMAvHSsEmrkRituMj2x+mHwmp1EnM8A8CDRTfNJEr8d/hIairnPPp5Va2KWYVmyP/zvkA==} @@ -4356,15 +4438,15 @@ packages: vue-demi: 0.13.11 dev: false - /@vueuse/head/1.0.23_vue@3.2.45: - resolution: {integrity: sha512-CiC9VWYbvwAqjWDBJH4WfQfBk7NWMZpvmpvIUYsm3X+aa8QHMiDGzR+RFKZSUtykiCGnSZk97yIvo5eJBmSh8A==} + /@vueuse/head/1.0.25_vue@3.2.45: + resolution: {integrity: sha512-ACfRqD3bbh92cIzDDR1CmqShXCXhQv/EUUcaDMYaexA4ulorYHd+2Yo5/ljoS4jDoMgsqBSP0XJZT3nySMB5gw==} peerDependencies: vue: '>=2.7 || >=3' dependencies: - '@unhead/dom': 1.0.18 - '@unhead/schema': 1.0.18 - '@unhead/ssr': 1.0.18 - '@unhead/vue': 1.0.18_vue@3.2.45 + '@unhead/dom': 1.0.21 + '@unhead/schema': 1.0.21 + '@unhead/ssr': 1.0.21 + '@unhead/vue': 1.0.21_vue@3.2.45 vue: 3.2.45 /@vueuse/integrations/9.11.1_ha7ivgav6uqpoo2b5thfugqwjq: @@ -4432,6 +4514,10 @@ packages: /@vueuse/metadata/9.11.1: resolution: {integrity: sha512-ABjkrG+VXggNhjfGyw5e/sekxTZfXTwjrYXkkWQmQ7Biyv+Gq9UD6IDNfeGvQZEINI0Qzw6nfuO2UFCd3hlrxQ==} + dev: false + + /@vueuse/metadata/9.12.0: + resolution: {integrity: sha512-9oJ9MM9lFLlmvxXUqsR1wLt1uF7EVbP5iYaHJYqk+G2PbMjY6EXvZeTjbdO89HgoF5cI6z49o2zT/jD9SVoNpQ==} /@vueuse/motion/2.0.0-beta.12: resolution: {integrity: sha512-cAZqXexLX6xo+H1N1Mv+wBSSqG4wB+BdjIuHQ50jwlelXCDxSi8gj0K/9nDS+aUZtWh6YMwS6UGCKg58jMVglA==} @@ -4450,16 +4536,16 @@ packages: vue-demi: 0.13.11 dev: false - /@vueuse/nuxt/9.11.1_nuxt@3.1.1: - resolution: {integrity: sha512-hiiRzLgsH5nTAb2TChyFc6nykIyTB3MnCEhILg44Ug9ILC3vG/qnHnv3zRtIu4bXNOhDQN5shfnchgGPJFf8PA==} + /@vueuse/nuxt/9.12.0_nuxt@3.2.0: + resolution: {integrity: sha512-zT7ieMmJgyB+hpQ6aG2HiyvNFHm5D/s2Z7fQjWcxuDI9Xawr7ECWBkSinxwrmtZ7+0lacXak+VMFpbx/z/zp2Q==} peerDependencies: nuxt: ^3.0.0 dependencies: - '@nuxt/kit': 3.1.2 - '@vueuse/core': 9.11.1 - '@vueuse/metadata': 9.11.1 + '@nuxt/kit': 3.2.0 + '@vueuse/core': 9.12.0 + '@vueuse/metadata': 9.12.0 local-pkg: 0.4.3 - nuxt: 3.1.1_7rz7g5sqfnn6wuv5lem37retty + nuxt: 3.2.0_7rz7g5sqfnn6wuv5lem37retty vue-demi: 0.13.11 transitivePeerDependencies: - '@vue/composition-api' @@ -4488,9 +4574,18 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue + dev: false - /@zhead/schema/1.0.9: - resolution: {integrity: sha512-MBubVXXEJX86ZBL6CDK0rYi1mC82zuben1MwwAEe98EFN1w4Oy0l2roJaM51MwQEvZ+WTi6o4lCxUShtLQJk8A==} + /@vueuse/shared/9.12.0: + resolution: {integrity: sha512-TWuJLACQ0BVithVTRbex4Wf1a1VaRuSpVeyEd4vMUWl54PzlE0ciFUshKCXnlLuD0lxIaLK4Ypj3NXYzZh4+SQ==} + dependencies: + vue-demi: 0.13.11 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + /@zhead/schema/1.1.0: + resolution: {integrity: sha512-hEtK+hUAKS3w1+F++m6EeZ6bWeLDXraqN2nCyRVIP5vvR3bWjXVP9OM9x7Pmn7Hp6T7FKmsG2C8rvouQU2806w==} /abbrev/1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -4703,6 +4798,13 @@ packages: /assertion-error/1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + /ast-types/0.14.2: + resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} + engines: {node: '>=4'} + dependencies: + tslib: 2.4.1 + dev: true + /ast-types/0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} @@ -4821,7 +4923,7 @@ packages: /birpc/0.2.3: resolution: {integrity: sha512-mG7m06C2JkfuHSaLRHhtHtMEvyT1P1nUyyuk5W/7LMT2p7YYX/tfzJzD2ynZZHem3JTi6yJve0nHPdrs/gpXYg==} - dev: true + dev: false /bl/4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4929,7 +5031,7 @@ packages: defu: 6.1.2 dotenv: 16.0.3 giget: 1.0.0 - jiti: 1.16.2 + jiti: 1.17.0 mlly: 1.1.0 pathe: 1.1.0 pkg-types: 1.0.1 @@ -6054,34 +6156,34 @@ packages: '@esbuild/win32-ia32': 0.16.17 '@esbuild/win32-x64': 0.16.17 - /esbuild/0.17.4: - resolution: {integrity: sha512-zBn9MeCwT7W5F1a3lXClD61ip6vQM+H8Msb0w8zMT4ZKBpDg+rFAraNyWCDelB/2L6M3g6AXHPnsyvjMFnxtFw==} + /esbuild/0.17.6: + resolution: {integrity: sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.4 - '@esbuild/android-arm64': 0.17.4 - '@esbuild/android-x64': 0.17.4 - '@esbuild/darwin-arm64': 0.17.4 - '@esbuild/darwin-x64': 0.17.4 - '@esbuild/freebsd-arm64': 0.17.4 - '@esbuild/freebsd-x64': 0.17.4 - '@esbuild/linux-arm': 0.17.4 - '@esbuild/linux-arm64': 0.17.4 - '@esbuild/linux-ia32': 0.17.4 - '@esbuild/linux-loong64': 0.17.4 - '@esbuild/linux-mips64el': 0.17.4 - '@esbuild/linux-ppc64': 0.17.4 - '@esbuild/linux-riscv64': 0.17.4 - '@esbuild/linux-s390x': 0.17.4 - '@esbuild/linux-x64': 0.17.4 - '@esbuild/netbsd-x64': 0.17.4 - '@esbuild/openbsd-x64': 0.17.4 - '@esbuild/sunos-x64': 0.17.4 - '@esbuild/win32-arm64': 0.17.4 - '@esbuild/win32-ia32': 0.17.4 - '@esbuild/win32-x64': 0.17.4 + '@esbuild/android-arm': 0.17.6 + '@esbuild/android-arm64': 0.17.6 + '@esbuild/android-x64': 0.17.6 + '@esbuild/darwin-arm64': 0.17.6 + '@esbuild/darwin-x64': 0.17.6 + '@esbuild/freebsd-arm64': 0.17.6 + '@esbuild/freebsd-x64': 0.17.6 + '@esbuild/linux-arm': 0.17.6 + '@esbuild/linux-arm64': 0.17.6 + '@esbuild/linux-ia32': 0.17.6 + '@esbuild/linux-loong64': 0.17.6 + '@esbuild/linux-mips64el': 0.17.6 + '@esbuild/linux-ppc64': 0.17.6 + '@esbuild/linux-riscv64': 0.17.6 + '@esbuild/linux-s390x': 0.17.6 + '@esbuild/linux-x64': 0.17.6 + '@esbuild/netbsd-x64': 0.17.6 + '@esbuild/openbsd-x64': 0.17.6 + '@esbuild/sunos-x64': 0.17.6 + '@esbuild/win32-arm64': 0.17.6 + '@esbuild/win32-ia32': 0.17.6 + '@esbuild/win32-x64': 0.17.6 /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -6440,7 +6542,6 @@ packages: hasBin: true dependencies: tsx: 3.12.2 - dev: true /espree/6.2.1: resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} @@ -6549,7 +6650,6 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: true /extend/3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -6854,7 +6954,6 @@ packages: /get-tsconfig/4.3.0: resolution: {integrity: sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==} - dev: true /giget/1.0.0: resolution: {integrity: sha512-KWELZn3Nxq5+0So485poHrFriK9Bn3V/x9y+wgqrHkbmnGbjfLmZ685/SVA/ovW+ewoqW0gVI47pI4yW/VNobQ==} @@ -6987,13 +7086,15 @@ packages: dependencies: duplexer: 0.1.2 - /h3/1.1.0: - resolution: {integrity: sha512-kx3u+RMzY963fU8NNT2ePWgsryAn9DNztPqbHia/M7HgA+rtXKjHjED9/uidcYPmImNwAfJsCachCzh2T3QH2A==} + /h3/1.4.0: + resolution: {integrity: sha512-FWG+FUdW6XQnf/54L4AXzZs1KUYwSJk5cbdFvTM4EG96bEQiWDJ5003xW4S3UGgXI0VJJgyY6KCaDmAL75kjbA==} dependencies: cookie-es: 0.5.0 destr: 1.2.2 + iron-webcrypto: 0.4.0 radix3: 1.0.0 ufo: 1.0.1 + uncrypto: 0.1.2 /happy-dom/8.2.0: resolution: {integrity: sha512-SBMi/ht8zvtXNuSVpXJu+hOEJtNEbM4CxQukcHMm7FCd1sMuitfESwUMX83gl3C2JcEGLcpx/+JnF+rjGl27+A==} @@ -7206,7 +7307,6 @@ packages: /human-signals/3.0.1: resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} engines: {node: '>=12.20.0'} - dev: true /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -7299,8 +7399,8 @@ packages: has: 1.0.3 side-channel: 1.0.4 - /ioredis/5.2.5: - resolution: {integrity: sha512-7HKo/ClM2DGLRXdFq8ruS3Uuadensz4A76wPOU0adqlOqd1qkhoLPDaBhmVhUhNGpB+J65/bhLmNB8DDY99HJQ==} + /ioredis/5.3.0: + resolution: {integrity: sha512-Id9jKHhsILuIZpHc61QkagfVdUj2Rag5GzG1TGEvRNeM7dtTOjICgjC+tvqYxi//PuX2wjQ+Xjva2ONBuf92Pw==} engines: {node: '>=12.22.0'} dependencies: '@ioredis/commands': 1.2.0 @@ -7319,6 +7419,9 @@ packages: resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /iron-webcrypto/0.4.0: + resolution: {integrity: sha512-5OG53gJ4dBTq4y3IJqK7MEG9CPZRsYn9EP9J4jjgH4TcP/ywdsSMAmqj9VTSzdXu0/xfUrqjGHU7WLUme2+k5Q==} + /is-absolute-url/4.0.1: resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7552,7 +7655,6 @@ packages: /is-stream/3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -7630,8 +7732,8 @@ packages: supports-color: 7.2.0 dev: false - /jiti/1.16.2: - resolution: {integrity: sha512-OKBOVWmU3FxDt/UH4zSwiKPuc1nihFZiOD722FuJlngvLz2glX1v2/TJIgoA4+mrpnXxHV6dSAoCvPcYQtoG5A==} + /jiti/1.17.0: + resolution: {integrity: sha512-CByzPgFqYoB9odEeef7GNmQ3S5THIBOtzRYoSCya2Sv27AuQxy2jgoFjQ6VTF53xsq1MXRm+YWNvOoDHUAteOw==} hasBin: true /js-beautify/1.14.6: @@ -7766,13 +7868,14 @@ packages: /kolorist/1.6.0: resolution: {integrity: sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==} + dev: false /launch-editor/2.6.0: resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} dependencies: picocolors: 1.0.0 shell-quote: 1.7.4 - dev: true + dev: false /lazystream/1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} @@ -7990,7 +8093,6 @@ packages: /lru-cache/7.14.1: resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==} engines: {node: '>=12'} - dev: false /magic-string/0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} @@ -8523,7 +8625,6 @@ packages: /mimic-fn/4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: true /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -8598,7 +8699,7 @@ packages: esbuild: 0.16.17 fs-extra: 11.1.0 globby: 13.1.3 - jiti: 1.16.2 + jiti: 1.17.0 mri: 1.2.0 pathe: 1.1.0 typescript: 4.9.5 @@ -8619,6 +8720,7 @@ packages: /mrmime/1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} + dev: false /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -8644,8 +8746,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /nanoid/4.0.0: - resolution: {integrity: sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==} + /nanoid/4.0.1: + resolution: {integrity: sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==} engines: {node: ^14 || ^16 || >=18} hasBin: true @@ -8656,22 +8758,22 @@ packages: /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /nitropack/2.0.0: - resolution: {integrity: sha512-gW+XXEcuymqcWXJM5NDNPl1I+OdiO4PA2ofBe3y2Ut3YkP7cM5kXymKHkHanOLVokRcrV6jjAjvX5lC1K4lHGg==} + /nitropack/2.2.1: + resolution: {integrity: sha512-V7sYOqyNZFQ+Yp3S2Ks9VUiLDp7Fz3vdc4ULTAK+E0R5nMSq5MuoQZqH4BT0x8UHC30lo+fd3gXk2fCYzUft1g==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} hasBin: true dependencies: '@cloudflare/kv-asset-handler': 0.3.0 '@netlify/functions': 1.4.0 - '@rollup/plugin-alias': 4.0.3_rollup@3.10.1 - '@rollup/plugin-commonjs': 24.0.1_rollup@3.10.1 - '@rollup/plugin-inject': 5.0.3_rollup@3.10.1 - '@rollup/plugin-json': 6.0.0_rollup@3.10.1 - '@rollup/plugin-node-resolve': 15.0.1_rollup@3.10.1 - '@rollup/plugin-replace': 5.0.2_rollup@3.10.1 - '@rollup/plugin-terser': 0.3.0_rollup@3.10.1 - '@rollup/plugin-wasm': 6.1.2_rollup@3.10.1 - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 + '@rollup/plugin-alias': 4.0.3_rollup@3.14.0 + '@rollup/plugin-commonjs': 24.0.1_rollup@3.14.0 + '@rollup/plugin-inject': 5.0.3_rollup@3.14.0 + '@rollup/plugin-json': 6.0.0_rollup@3.14.0 + '@rollup/plugin-node-resolve': 15.0.1_rollup@3.14.0 + '@rollup/plugin-replace': 5.0.2_rollup@3.14.0 + '@rollup/plugin-terser': 0.4.0_rollup@3.14.0 + '@rollup/plugin-wasm': 6.1.2_rollup@3.14.0 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 '@vercel/nft': 0.22.6 archiver: 5.3.1 c12: 1.1.0 @@ -8682,17 +8784,17 @@ packages: defu: 6.1.2 destr: 1.2.2 dot-prop: 7.2.0 - esbuild: 0.17.4 + esbuild: 0.17.6 escape-string-regexp: 5.0.0 etag: 1.8.1 fs-extra: 11.1.0 globby: 13.1.3 gzip-size: 7.0.0 - h3: 1.1.0 + h3: 1.4.0 hookable: 5.4.2 http-proxy: 1.18.1 is-primitive: 3.0.1 - jiti: 1.16.2 + jiti: 1.17.0 klona: 2.0.6 knitwork: 1.0.0 listhen: 1.0.2 @@ -8705,10 +8807,10 @@ packages: pathe: 1.1.0 perfect-debounce: 0.1.3 pkg-types: 1.0.1 - pretty-bytes: 6.0.0 + pretty-bytes: 6.1.0 radix3: 1.0.0 - rollup: 3.10.1 - rollup-plugin-visualizer: 5.9.0_rollup@3.10.1 + rollup: 3.14.0 + rollup-plugin-visualizer: 5.9.0_rollup@3.14.0 scule: 1.0.0 semver: 7.3.8 serve-placeholder: 2.0.1 @@ -8716,9 +8818,9 @@ packages: source-map-support: 0.5.21 std-env: 3.3.2 ufo: 1.0.1 - unenv: 1.0.2 - unimport: 1.3.0_rollup@3.10.1 - unstorage: 1.0.1 + unenv: 1.1.1 + unimport: 2.2.4_rollup@3.14.0 + unstorage: 1.1.4 transitivePeerDependencies: - bufferutil - debug @@ -8826,7 +8928,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: true /npmlog/5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} @@ -8841,8 +8942,8 @@ packages: dependencies: boolbase: 1.0.0 - /nuxi/3.1.1: - resolution: {integrity: sha512-ZwqG3dpqF2dlVr1NSPbFbmAzBcbrK3VTJR6KjGPU3cdxJ7JHMjOHNEz983QaKyNnfgETyTVPZVo+viKb2a9VPQ==} + /nuxi/3.2.0: + resolution: {integrity: sha512-iKXBSzyh1uyvlFl3M5ZuEQtuz0N0HvL8+no2FuIo4LnYfYcWF8F3++C3QPQHX+LuG7cbK+t2Ks4H1rhXk0nWTA==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} hasBin: true optionalDependencies: @@ -8851,7 +8952,7 @@ packages: /nuxt-component-meta/0.4.3: resolution: {integrity: sha512-40wsnbCh2neNdKVrwSiqV/ea7QshYjp3kpfk8JZaxSW/XcgNg2tzka4L+M8caOvQalyAKi6AaENPLaTYOZDbQg==} dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 scule: 1.0.0 typescript: 4.9.5 vue-component-meta: 1.0.24_typescript@4.9.5 @@ -8863,10 +8964,10 @@ packages: /nuxt-config-schema/0.4.4: resolution: {integrity: sha512-5NnyyH2qSgraQo6kcW/8SWqBZ/pEY/PwyepODPWYYv4ZZ8BiqC850OTmyO2oTBL4O+Xg4fR7hAwSB4g5pIMpSg==} dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 changelogen: 0.4.1 defu: 6.1.2 - jiti: 1.16.2 + jiti: 1.17.0 pathe: 1.1.0 untyped: 1.2.2 transitivePeerDependencies: @@ -8878,7 +8979,7 @@ packages: resolution: {integrity: sha512-pI0BOF1bHw73MbDYsTNpZNJhWJ3XAjG4SO7B8sHCfxb3SZmw3Uu/KoKiLtyO68Oc4z4CYCMIjbkTflwpoOBMEQ==} dependencies: '@iconify/vue': 4.0.2 - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 nuxt-config-schema: 0.4.4 transitivePeerDependencies: - rollup @@ -8890,7 +8991,7 @@ packages: resolution: {integrity: sha512-Aqz+LM7pWAEismEJqhSPkihX+njX1bIJd62ygJfQuwyWWDD3EuUHJR5BxuPNd8KakT9MNhtM3AZ7bg0g/gqyqg==} dependencies: '@nozomuikuta/h3-cors': 0.1.8_defu@6.1.2 - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 basic-auth: 2.0.1 defu: 6.1.2 limiter: 2.1.0 @@ -8908,7 +9009,7 @@ packages: peerDependencies: vite: '*' dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 '@vitest/ui': 0.28.3 get-port-please: 3.0.1 perfect-debounce: 0.1.3 @@ -8932,21 +9033,21 @@ packages: - vue dev: false - /nuxt/3.1.1: - resolution: {integrity: sha512-GVdmV88lR01OX0slxTPyTzwQkge7fxNREkx2QW0Lo66fb6aHcJlRXzFMBCOTjas+Ncng6AalIyIiPREEteGKSg==} + /nuxt/3.2.0: + resolution: {integrity: sha512-8jAYyjU1Ht+MXPLLDIdIUmV56KiI0g7KusKwzvqn+vlzyCNtSHg2W/VBCGw5QWplb/MXruogcMl2sDenlQRZFg==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} hasBin: true dependencies: '@nuxt/devalue': 2.0.0 - '@nuxt/kit': 3.1.2 - '@nuxt/schema': 3.1.2 + '@nuxt/kit': 3.2.0 + '@nuxt/schema': 3.2.0 '@nuxt/telemetry': 2.1.9 - '@nuxt/ui-templates': 1.1.0 - '@nuxt/vite-builder': 3.1.1_vue@3.2.45 - '@unhead/ssr': 1.0.18 - '@vue/reactivity': 3.2.45 + '@nuxt/ui-templates': 1.1.1 + '@nuxt/vite-builder': 3.2.0_vue@3.2.45 + '@unhead/ssr': 1.0.21 + '@vue/reactivity': 3.2.47 '@vue/shared': 3.2.47 - '@vueuse/head': 1.0.23_vue@3.2.45 + '@vueuse/head': 1.0.25_vue@3.2.45 chokidar: 3.5.3 cookie-es: 0.5.0 defu: 6.1.2 @@ -8955,31 +9056,30 @@ packages: estree-walker: 3.0.3 fs-extra: 11.1.0 globby: 13.1.3 - h3: 1.1.0 + h3: 1.4.0 hash-sum: 2.0.0 hookable: 5.4.2 - jiti: 1.16.2 + jiti: 1.17.0 knitwork: 1.0.0 magic-string: 0.27.0 mlly: 1.1.0 - nitropack: 2.0.0 - nuxi: 3.1.1 + nitropack: 2.2.1 + nuxi: 3.2.0 ofetch: 1.0.0 ohash: 1.0.0 pathe: 1.1.0 perfect-debounce: 0.1.3 scule: 1.0.0 - strip-literal: 1.0.0 + strip-literal: 1.0.1 ufo: 1.0.1 - ultrahtml: 1.2.0 unctx: 2.1.1 - unenv: 1.0.2 - unhead: 1.0.18 - unimport: 2.1.0 + unenv: 1.1.1 + unhead: 1.0.21 + unimport: 2.2.4 unplugin: 1.0.1 untyped: 1.2.2 vue: 3.2.45 - vue-bundle-renderer: 1.0.0 + vue-bundle-renderer: 1.0.1 vue-devtools-stub: 0.1.0 vue-router: 4.1.6_vue@3.2.45 transitivePeerDependencies: @@ -9005,21 +9105,21 @@ packages: - vue-tsc dev: true - /nuxt/3.1.1_7rz7g5sqfnn6wuv5lem37retty: - resolution: {integrity: sha512-GVdmV88lR01OX0slxTPyTzwQkge7fxNREkx2QW0Lo66fb6aHcJlRXzFMBCOTjas+Ncng6AalIyIiPREEteGKSg==} + /nuxt/3.2.0_7rz7g5sqfnn6wuv5lem37retty: + resolution: {integrity: sha512-8jAYyjU1Ht+MXPLLDIdIUmV56KiI0g7KusKwzvqn+vlzyCNtSHg2W/VBCGw5QWplb/MXruogcMl2sDenlQRZFg==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} hasBin: true dependencies: '@nuxt/devalue': 2.0.0 - '@nuxt/kit': 3.1.2 - '@nuxt/schema': 3.1.2 + '@nuxt/kit': 3.2.0 + '@nuxt/schema': 3.2.0 '@nuxt/telemetry': 2.1.9 - '@nuxt/ui-templates': 1.1.0 - '@nuxt/vite-builder': 3.1.1_vshnhw7h4tuo6ge5ck2wv7vfrm - '@unhead/ssr': 1.0.18 - '@vue/reactivity': 3.2.45 + '@nuxt/ui-templates': 1.1.1 + '@nuxt/vite-builder': 3.2.0_vshnhw7h4tuo6ge5ck2wv7vfrm + '@unhead/ssr': 1.0.21 + '@vue/reactivity': 3.2.47 '@vue/shared': 3.2.47 - '@vueuse/head': 1.0.23_vue@3.2.45 + '@vueuse/head': 1.0.25_vue@3.2.45 chokidar: 3.5.3 cookie-es: 0.5.0 defu: 6.1.2 @@ -9028,31 +9128,30 @@ packages: estree-walker: 3.0.3 fs-extra: 11.1.0 globby: 13.1.3 - h3: 1.1.0 + h3: 1.4.0 hash-sum: 2.0.0 hookable: 5.4.2 - jiti: 1.16.2 + jiti: 1.17.0 knitwork: 1.0.0 magic-string: 0.27.0 mlly: 1.1.0 - nitropack: 2.0.0 - nuxi: 3.1.1 + nitropack: 2.2.1 + nuxi: 3.2.0 ofetch: 1.0.0 ohash: 1.0.0 pathe: 1.1.0 perfect-debounce: 0.1.3 scule: 1.0.0 - strip-literal: 1.0.0 + strip-literal: 1.0.1 ufo: 1.0.1 - ultrahtml: 1.2.0 unctx: 2.1.1 - unenv: 1.0.2 - unhead: 1.0.18 - unimport: 2.1.0 + unenv: 1.1.1 + unhead: 1.0.21 + unimport: 2.2.4 unplugin: 1.0.1 untyped: 1.2.2 vue: 3.2.45 - vue-bundle-renderer: 1.0.0 + vue-bundle-renderer: 1.0.1 vue-devtools-stub: 0.1.0 vue-router: 4.1.6_vue@3.2.45 transitivePeerDependencies: @@ -9155,7 +9254,6 @@ packages: engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: true /open/8.4.0: resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} @@ -9253,6 +9351,12 @@ packages: resolution: {integrity: sha512-+3uccYgL0CXG0KSXRxZi4uc2E6mqFWV5HqiJJgcnaJCiS0LqiuJ4vB420N21NFuLvuvLB4Jr5drgQ2NXAXF9Iw==} dev: false + /paneer/0.0.1: + resolution: {integrity: sha512-rT0koOL1kQ0CqxIS12FYrEuj6BTfQUn3QMj9led4QVBNw7s1MoF6owTGqwYF2FVPXMqVOxe+i6Ye8FGI7SXQCQ==} + dependencies: + recast: 0.20.5 + dev: true + /param-case/3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: @@ -9356,7 +9460,6 @@ packages: /path-key/4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: true /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -9391,10 +9494,10 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - /pinceau/0.12.8: - resolution: {integrity: sha512-kwNUgaJdfTgBn3cD/UNHNJIdzznqvNJ1/vTeK0mPGBTlQgRAsd5dduSPZM4cTrJe53nPWf4YwzPounhWlinp0A==} + /pinceau/0.13.9: + resolution: {integrity: sha512-Z6JuQ1x9R5DYoH+PuwsHKPSKi62OGuERhZ4SmMfH/Lbmu3mLslz9Tj+61Fv8b2oKbmBaNbPTmF4ddg4+YNQigw==} dependencies: - '@unocss/reset': 0.49.1 + '@unocss/reset': 0.49.4 '@volar/vue-language-core': 1.0.24 acorn: 8.8.2 chroma-js: 2.4.2 @@ -9402,9 +9505,10 @@ packages: csstype: 3.1.1 defu: 6.1.2 magic-string: 0.27.0 - nanoid: 4.0.0 + nanoid: 4.0.1 ohash: 1.0.0 - postcss-custom-properties: 13.1.0 + paneer: 0.0.1 + postcss-custom-properties: 13.1.1 postcss-dark-theme-class: 0.7.3 postcss-nested: 6.0.0 recast: 0.22.0 @@ -9487,8 +9591,8 @@ packages: postcss: 8.4.21 postcss-value-parser: 4.2.0 - /postcss-custom-properties/13.1.0: - resolution: {integrity: sha512-O0Lg0CuHwADctEMBgGtaeams7eFES8pXo/9zBClTbRVdU3LFAkFluw1l9eYnJ3rtidp80EGbAIuiisEIu1Z+uA==} + /postcss-custom-properties/13.1.1: + resolution: {integrity: sha512-FK4dBiHdzWOosLu3kEAHaYpfcrnMfVV4nP6PT6EFIfWXrtHH9LY8idfTYnEDpq/vgE33mr8ykhs7BjlgcT9agg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 @@ -9799,8 +9903,8 @@ packages: engines: {node: '>=6'} dev: false - /pretty-bytes/6.0.0: - resolution: {integrity: sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==} + /pretty-bytes/6.1.0: + resolution: {integrity: sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==} engines: {node: ^14.13.1 || >=16.0.0} /pretty-format/27.5.1: @@ -10006,6 +10110,16 @@ packages: dependencies: picomatch: 2.3.1 + /recast/0.20.5: + resolution: {integrity: sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==} + engines: {node: '>= 4'} + dependencies: + ast-types: 0.14.2 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.4.1 + dev: true + /recast/0.22.0: resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==} engines: {node: '>= 4'} @@ -10260,7 +10374,7 @@ packages: dependencies: glob: 7.2.3 - /rollup-plugin-dts/5.1.1_3md6k4iljipbt7fzll35epzd3m: + /rollup-plugin-dts/5.1.1_2za6rqstu4xegr2hrsgsskkobi: resolution: {integrity: sha512-zpgo52XmnLg8w4k3MScinFHZK1+ro6r7uVe34fJ0Ee8AM45FvgvTuvfWWaRgIpA4pQ1BHJuu2ospncZhkcJVeA==} engines: {node: '>=v14'} peerDependencies: @@ -10268,7 +10382,7 @@ packages: typescript: ^4.1 dependencies: magic-string: 0.27.0 - rollup: 3.10.1 + rollup: 3.14.0 typescript: 4.9.5 optionalDependencies: '@babel/code-frame': 7.18.6 @@ -10302,7 +10416,7 @@ packages: terser: 5.16.1 dev: false - /rollup-plugin-visualizer/5.9.0_rollup@3.10.1: + /rollup-plugin-visualizer/5.9.0_rollup@3.14.0: resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==} engines: {node: '>=14'} hasBin: true @@ -10314,7 +10428,7 @@ packages: dependencies: open: 8.4.0 picomatch: 2.3.1 - rollup: 3.10.1 + rollup: 3.14.0 source-map: 0.7.4 yargs: 17.6.2 @@ -10330,9 +10444,10 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 + dev: false - /rollup/3.10.1: - resolution: {integrity: sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw==} + /rollup/3.14.0: + resolution: {integrity: sha512-o23sdgCLcLSe3zIplT9nQ1+r97okuaiR+vmAPZPTDYB7/f3tgWIYNyiQveMsZwshBT0is4eGax/HH83Q7CG+/Q==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -10479,7 +10594,7 @@ packages: /shell-quote/1.7.4: resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} - dev: true + dev: false /shiki-es/0.2.0: resolution: {integrity: sha512-RbRMD+IuJJseSZljDdne9ThrUYrwBwJR04FvN4VXpfsU3MNID5VJGHLAD5je/HGThCyEKNgH+nEkSFEWKD7C3Q==} @@ -10532,6 +10647,7 @@ packages: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 totalist: 3.0.0 + dev: false /sisteransi/1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -10815,7 +10931,6 @@ packages: /strip-final-newline/3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: true /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -10828,8 +10943,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /strip-literal/1.0.0: - resolution: {integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==} + /strip-literal/1.0.1: + resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: acorn: 8.8.2 @@ -10844,7 +10959,7 @@ packages: consola: 2.15.3 fs-extra: 11.1.0 glob: 8.1.0 - jiti: 1.16.2 + jiti: 1.17.0 json5: 2.2.3 jsonc-parser: 3.2.0 lodash.template: 4.5.0 @@ -11022,6 +11137,7 @@ packages: /totalist/3.0.0: resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} engines: {node: '>=6'} + dev: false /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -11079,7 +11195,6 @@ packages: '@esbuild-kit/esm-loader': 2.5.4 optionalDependencies: fsevents: 2.3.2 - dev: true /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -11147,6 +11262,7 @@ packages: /ultrahtml/1.2.0: resolution: {integrity: sha512-vxZM2yNvajRmCj/SknRYGNXk2tqiy6kRNvZjJLaleG3zJbSh/aNkOqD1/CVzypw8tyHyhpzYuwQgMMhUB4ZVNQ==} + dev: false /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -11160,19 +11276,19 @@ packages: resolution: {integrity: sha512-HlhHj6cUPBQJmhoczQoU6dzdTFO0Jr9EiGWEZ1EwHGXlGRR6LXcKyfX3PMrkM48uWJjBWiCgTQdkFOAk3tlK6Q==} hasBin: true dependencies: - '@rollup/plugin-alias': 4.0.3_rollup@3.10.1 - '@rollup/plugin-commonjs': 24.0.1_rollup@3.10.1 - '@rollup/plugin-json': 6.0.0_rollup@3.10.1 - '@rollup/plugin-node-resolve': 15.0.1_rollup@3.10.1 - '@rollup/plugin-replace': 5.0.2_rollup@3.10.1 - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 + '@rollup/plugin-alias': 4.0.3_rollup@3.14.0 + '@rollup/plugin-commonjs': 24.0.1_rollup@3.14.0 + '@rollup/plugin-json': 6.0.0_rollup@3.14.0 + '@rollup/plugin-node-resolve': 15.0.1_rollup@3.14.0 + '@rollup/plugin-replace': 5.0.2_rollup@3.14.0 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 chalk: 5.2.0 consola: 2.15.3 defu: 6.1.2 esbuild: 0.16.17 globby: 13.1.3 hookable: 5.4.2 - jiti: 1.16.2 + jiti: 1.17.0 magic-string: 0.27.0 mkdirp: 1.0.4 mkdist: 1.1.0_typescript@4.9.5 @@ -11180,9 +11296,9 @@ packages: mri: 1.2.0 pathe: 1.1.0 pkg-types: 1.0.1 - pretty-bytes: 6.0.0 - rollup: 3.10.1 - rollup-plugin-dts: 5.1.1_3md6k4iljipbt7fzll35epzd3m + pretty-bytes: 6.1.0 + rollup: 3.14.0 + rollup-plugin-dts: 5.1.1_2za6rqstu4xegr2hrsgsskkobi scule: 1.0.0 typescript: 4.9.5 untyped: 1.2.2 @@ -11196,9 +11312,12 @@ packages: dependencies: '@antfu/utils': 0.5.2 defu: 6.1.2 - jiti: 1.16.2 + jiti: 1.17.0 dev: false + /uncrypto/0.1.2: + resolution: {integrity: sha512-kuZwRKV615lEw/Xx3Iz56FKk3nOeOVGaVmw0eg+x4Mne28lCotNFbBhDW7dEBCBKyKbRQiCadEZeNAFPVC5cgw==} + /unctx/2.1.1: resolution: {integrity: sha512-RffJlpvLOtolWsn0fxXsuSDfwiWcR6cyuykw2e0+zAggvGW1SesXt9WxIWlWpJhwVCZD/WlxxLqKLS50Q0CkWA==} dependencies: @@ -11214,19 +11333,19 @@ packages: busboy: 1.6.0 dev: false - /unenv/1.0.2: - resolution: {integrity: sha512-senf7HmOHW3TuVCdhnrJcgVWabKnaU38oTRpppwWF0L6dJyfedY4MCiJeuwtrziqURZHuI2xxUoM90VLwG+e2Q==} + /unenv/1.1.1: + resolution: {integrity: sha512-AfQ+sKCdeSPX/rp0tL9LZz3cAu1Mt0i9UADuN1MtbsITKDS2PqSx8LQUBMf8lKuziitIWXXwU6JXrmzARFVSRw==} dependencies: defu: 6.1.2 mime: 3.0.0 node-fetch-native: 1.0.1 pathe: 1.1.0 - /unhead/1.0.18: - resolution: {integrity: sha512-lHuOvFcj7ijFM6ceRuPq1+0sOAap8fueJxf+SkuWtfm68oxuLP8ct3C3oRyMT/hyWjzfWgoaECmjmw5x2cHnpg==} + /unhead/1.0.21: + resolution: {integrity: sha512-vHXnozOkoSkCYIpGTWkW4JJbWMlY2I737sbBGxPj6maa9gEDMC50gwhCCVMnIvvMsJ6OxgNE5asEfSkSopfO+A==} dependencies: - '@unhead/dom': 1.0.18 - '@unhead/schema': 1.0.18 + '@unhead/dom': 1.0.21 + '@unhead/schema': 1.0.21 hookable: 5.4.2 /unicode-canonical-property-names-ecmascript/2.0.0: @@ -11264,25 +11383,8 @@ packages: vfile: 5.3.6 dev: true - /unimport/1.3.0_rollup@3.10.1: - resolution: {integrity: sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw==} - dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 - escape-string-regexp: 5.0.0 - fast-glob: 3.2.12 - local-pkg: 0.4.3 - magic-string: 0.27.0 - mlly: 1.1.0 - pathe: 1.1.0 - pkg-types: 1.0.1 - scule: 1.0.0 - strip-literal: 1.0.0 - unplugin: 1.0.1 - transitivePeerDependencies: - - rollup - - /unimport/2.1.0: - resolution: {integrity: sha512-GDVIxATluUquX8EqelT6DtnmnZaXGID1jsO9IXwlnxb0OIEqKAxTOnTlnGmHbseoGTh+ZC9kcNDaO18HYQj9KA==} + /unimport/2.2.4: + resolution: {integrity: sha512-qMgmeEGqqrrmEtm0dqxMG37J6xBtrriqxq9hILvDb+e6l2F0yTnJomLoCCp0eghLR7bYGeBsUU5Y0oyiUYhViw==} dependencies: '@rollup/pluginutils': 5.0.2 escape-string-regexp: 5.0.0 @@ -11293,15 +11395,15 @@ packages: pathe: 1.1.0 pkg-types: 1.0.1 scule: 1.0.0 - strip-literal: 1.0.0 + strip-literal: 1.0.1 unplugin: 1.0.1 transitivePeerDependencies: - rollup - /unimport/2.1.0_rollup@3.10.1: - resolution: {integrity: sha512-GDVIxATluUquX8EqelT6DtnmnZaXGID1jsO9IXwlnxb0OIEqKAxTOnTlnGmHbseoGTh+ZC9kcNDaO18HYQj9KA==} + /unimport/2.2.4_rollup@3.14.0: + resolution: {integrity: sha512-qMgmeEGqqrrmEtm0dqxMG37J6xBtrriqxq9hILvDb+e6l2F0yTnJomLoCCp0eghLR7bYGeBsUU5Y0oyiUYhViw==} dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.10.1 + '@rollup/pluginutils': 5.0.2_rollup@3.14.0 escape-string-regexp: 5.0.0 fast-glob: 3.2.12 local-pkg: 0.4.3 @@ -11310,7 +11412,7 @@ packages: pathe: 1.1.0 pkg-types: 1.0.1 scule: 1.0.0 - strip-literal: 1.0.0 + strip-literal: 1.0.1 unplugin: 1.0.1 transitivePeerDependencies: - rollup @@ -11414,7 +11516,7 @@ packages: - vite dev: false - /unplugin-auto-import/0.13.0_@vueuse+core@9.11.1: + /unplugin-auto-import/0.13.0_@vueuse+core@9.12.0: resolution: {integrity: sha512-nKMxDbkjM4FRPInFfm7sWrJOKgxfKKwb5yLPP+DEGl/SG0/FtBoW1LnZL4PQfx0FXjertoHO1P/5nDf+RSip2Q==} engines: {node: '>=14'} peerDependencies: @@ -11425,10 +11527,10 @@ packages: dependencies: '@antfu/utils': 0.7.2 '@rollup/pluginutils': 5.0.2 - '@vueuse/core': 9.11.1 + '@vueuse/core': 9.12.0 local-pkg: 0.4.3 magic-string: 0.27.0 - unimport: 2.1.0 + unimport: 2.2.4 unplugin: 1.0.1 transitivePeerDependencies: - rollup @@ -11469,7 +11571,7 @@ packages: - vue dev: false - /unplugin-vue-macros/1.7.3_@vueuse+core@9.11.1: + /unplugin-vue-macros/1.7.3_@vueuse+core@9.12.0: resolution: {integrity: sha512-HJ1cA0NiJIPbfDIaYZf+KgJ65nof8LMdU187ZrKUckNQwrmE92ySboc/4LP0Dzo+Yw6XPQ2kNECwVwqyp0VAcQ==} engines: {node: '>=14.19.0'} peerDependencies: @@ -11478,7 +11580,7 @@ packages: '@rollup/pluginutils': 5.0.2 '@vue-macros/better-define': 1.3.1 '@vue-macros/common': 1.0.0 - '@vue-macros/define-model': 1.3.1_@vueuse+core@9.11.1 + '@vue-macros/define-model': 1.3.1_@vueuse+core@9.12.0 '@vue-macros/define-props': 0.3.1 '@vue-macros/define-props-refs': 0.2.0 '@vue-macros/define-render': 1.2.1 @@ -11509,20 +11611,24 @@ packages: webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 - /unstorage/1.0.1: - resolution: {integrity: sha512-J1c4b8K2KeihHrQtdgl/ybIapArUbPaPb+TyJy/nGSauDwDYqciZsEKdkee568P3c8SSH4TIgnGRHDWMPGw+Lg==} + /unstorage/1.1.4: + resolution: {integrity: sha512-nrnCoWN8ewaZrwz5yf7QGkMn0FDoVer6yGIR56wvocNzAmZi1vXOnCaBxueB3Uu/SqNSH5N/ww41t6jNT8XccA==} dependencies: anymatch: 3.1.3 chokidar: 3.5.3 destr: 1.2.2 - h3: 1.1.0 - ioredis: 5.2.5 + h3: 1.4.0 + ioredis: 5.3.0 listhen: 1.0.2 + lru-cache: 7.14.1 mkdir: 0.0.2 mri: 1.2.0 + node-fetch-native: 1.0.1 ofetch: 1.0.0 ufo: 1.0.1 ws: 8.12.0 + optionalDependencies: + '@planetscale/database': 1.5.0 transitivePeerDependencies: - bufferutil - supports-color @@ -11639,7 +11745,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.0.4 + vite: 4.1.1 transitivePeerDependencies: - '@types/node' - less @@ -11661,7 +11767,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.0.4_@types+node@18.11.18 + vite: 4.1.1_@types+node@18.11.18 transitivePeerDependencies: - '@types/node' - less @@ -11671,8 +11777,58 @@ packages: - supports-color - terser - /vite-plugin-checker/0.5.4_h3si5tluig4ewnb7qcro3a3fhu: - resolution: {integrity: sha512-T6y+OHXqwOjGrCErbhzg5x79NQZV46cgLwYTxuMQnDzAfA6skh2i8PIHcKks8ZlxopzbkvMb5vwc2DpNXiHJdg==} + /vite-plugin-checker/0.5.5_vite@4.1.1: + resolution: {integrity: sha512-BLaRlBmiVn3Fg/wR9A0+YNwgXVteFJaH8rCIiIgYQcQ50jc3oVe2m8i0xxG5geq36UttNJsAj7DpDelN7/KjOg==} + engines: {node: '>=14.16'} + peerDependencies: + eslint: '>=7' + meow: ^9.0.0 + optionator: ^0.9.1 + stylelint: '>=13' + typescript: '*' + vite: '>=2.0.0' + vls: '*' + vti: '*' + vue-tsc: '*' + peerDependenciesMeta: + eslint: + optional: true + meow: + optional: true + optionator: + optional: true + stylelint: + optional: true + typescript: + optional: true + vls: + optional: true + vti: + optional: true + vue-tsc: + optional: true + dependencies: + '@babel/code-frame': 7.18.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + chokidar: 3.5.3 + commander: 8.3.0 + fast-glob: 3.2.12 + fs-extra: 11.1.0 + lodash.debounce: 4.0.8 + lodash.pick: 4.4.0 + npm-run-path: 4.0.1 + strip-ansi: 6.0.1 + tiny-invariant: 1.3.1 + vite: 4.1.1 + vscode-languageclient: 7.0.0 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.8 + vscode-uri: 3.0.7 + dev: true + + /vite-plugin-checker/0.5.5_vze4qwvlaxozg73itpzioumila: + resolution: {integrity: sha512-BLaRlBmiVn3Fg/wR9A0+YNwgXVteFJaH8rCIiIgYQcQ50jc3oVe2m8i0xxG5geq36UttNJsAj7DpDelN7/KjOg==} engines: {node: '>=14.16'} peerDependencies: eslint: '>=7' @@ -11709,68 +11865,20 @@ packages: commander: 8.3.0 eslint: 8.32.0 fast-glob: 3.2.12 + fs-extra: 11.1.0 lodash.debounce: 4.0.8 lodash.pick: 4.4.0 npm-run-path: 4.0.1 strip-ansi: 6.0.1 tiny-invariant: 1.3.1 typescript: 4.9.5 - vite: 4.0.4 + vite: 4.1.1 vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.8 vscode-uri: 3.0.7 vue-tsc: 1.0.24_typescript@4.9.5 - /vite-plugin-checker/0.5.4_vite@4.0.4: - resolution: {integrity: sha512-T6y+OHXqwOjGrCErbhzg5x79NQZV46cgLwYTxuMQnDzAfA6skh2i8PIHcKks8ZlxopzbkvMb5vwc2DpNXiHJdg==} - engines: {node: '>=14.16'} - peerDependencies: - eslint: '>=7' - meow: ^9.0.0 - optionator: ^0.9.1 - stylelint: '>=13' - typescript: '*' - vite: '>=2.0.0' - vls: '*' - vti: '*' - vue-tsc: '*' - peerDependenciesMeta: - eslint: - optional: true - meow: - optional: true - optionator: - optional: true - stylelint: - optional: true - typescript: - optional: true - vls: - optional: true - vti: - optional: true - vue-tsc: - optional: true - dependencies: - '@babel/code-frame': 7.18.6 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - chokidar: 3.5.3 - commander: 8.3.0 - fast-glob: 3.2.12 - lodash.debounce: 4.0.8 - lodash.pick: 4.4.0 - npm-run-path: 4.0.1 - strip-ansi: 6.0.1 - tiny-invariant: 1.3.1 - vite: 4.0.4 - vscode-languageclient: 7.0.0 - vscode-languageserver: 7.0.0 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 - dev: true - /vite-plugin-inspect/0.7.15: resolution: {integrity: sha512-oxeZCljacA/slhGFbDNlBqdhDU9fgdHL84i7Nz7DnaAIE7DhTiW2djanw3d/BKuZtduKUY82vRUQ4iaG917t2A==} engines: {node: '>=14'} @@ -11787,23 +11895,22 @@ packages: transitivePeerDependencies: - rollup - supports-color - dev: true + dev: false - /vite-plugin-pwa/0.14.1_tz3vz2xt4jvid2diblkpydcyn4: + /vite-plugin-pwa/0.14.1: resolution: {integrity: sha512-5zx7yhQ8RTLwV71+GA9YsQQ63ALKG8XXIMqRJDdZkR8ZYftFcRgnzM7wOWmQZ/DATspyhPih5wCdcZnAIsM+mA==} peerDependencies: vite: ^3.1.0 || ^4.0.0 - workbox-build: ^6.5.4 - workbox-window: ^6.5.4 dependencies: - '@rollup/plugin-replace': 5.0.2_rollup@3.10.1 + '@rollup/plugin-replace': 5.0.2_rollup@3.14.0 debug: 4.3.4 fast-glob: 3.2.12 - pretty-bytes: 6.0.0 - rollup: 3.10.1 + pretty-bytes: 6.1.0 + rollup: 3.14.0 workbox-build: 6.5.4 workbox-window: 6.5.4 transitivePeerDependencies: + - '@types/babel__core' - supports-color dev: false @@ -11823,43 +11930,10 @@ packages: shell-quote: 1.7.4 transitivePeerDependencies: - supports-color - dev: true + dev: false - /vite/3.2.5_@types+node@18.11.18: - resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.11.18 - esbuild: 0.15.18 - postcss: 8.4.21 - resolve: 1.22.1 - rollup: 2.79.1 - optionalDependencies: - fsevents: 2.3.2 - - /vite/4.0.4: - resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} + /vite/4.1.1: + resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -11886,12 +11960,12 @@ packages: esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.10.1 + rollup: 3.14.0 optionalDependencies: fsevents: 2.3.2 - /vite/4.0.4_@types+node@18.11.18: - resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} + /vite/4.1.1_@types+node@18.11.18: + resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -11919,7 +11993,7 @@ packages: esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.10.1 + rollup: 3.14.0 optionalDependencies: fsevents: 2.3.2 @@ -11929,14 +12003,14 @@ packages: vitest: ^0.24.5 || ^0.26.0 || ^0.27.0 || ^0.28.0 vue: ^3.2.45 dependencies: - '@nuxt/kit': 3.1.2 + '@nuxt/kit': 3.2.0 '@vue/test-utils': 2.2.8 estree-walker: 3.0.3 - h3: 1.1.0 + h3: 1.4.0 happy-dom: 8.2.0 magic-string: 0.27.0 ofetch: 1.0.0 - unenv: 1.0.2 + unenv: 1.1.1 vitest: 0.28.4_@vitest+ui@0.28.3 transitivePeerDependencies: - '@vue/compiler-dom' @@ -11984,11 +12058,11 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 std-env: 3.3.2 - strip-literal: 1.0.0 + strip-literal: 1.0.1 tinybench: 2.3.1 tinypool: 0.3.1 tinyspy: 1.0.2 - vite: 3.2.5_@types+node@18.11.18 + vite: 4.1.1_@types+node@18.11.18 vite-node: 0.28.4_@types+node@18.11.18 why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -12040,11 +12114,11 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 std-env: 3.3.2 - strip-literal: 1.0.0 + strip-literal: 1.0.1 tinybench: 2.3.1 tinypool: 0.3.1 tinyspy: 1.0.2 - vite: 3.2.5_@types+node@18.11.18 + vite: 4.1.1_@types+node@18.11.18 vite-node: 0.28.4_@types+node@18.11.18 why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -12108,8 +12182,8 @@ packages: easy-bem: 1.1.1 dev: false - /vue-bundle-renderer/1.0.0: - resolution: {integrity: sha512-43vCqTgaMXfHhtR8/VcxxWD1DgtzyvNc4wNyG5NKCIH19O1z5G9ZCRXTGEA2wifVec5PU82CkRLD2sTK9NkTdA==} + /vue-bundle-renderer/1.0.1: + resolution: {integrity: sha512-w1zRgff5lVJ5YAIkVSKuFjDyCgKdg/sPbcgZbosnMCoHblg0uThCKA2n/XWUGnw0Rh2+03UY/VtkwaYwMUSRyQ==} dependencies: ufo: 1.0.1 diff --git a/scripts/prepare-translation-status.ts b/scripts/prepare-translation-status.ts new file mode 100644 index 00000000..9ed6ce66 --- /dev/null +++ b/scripts/prepare-translation-status.ts @@ -0,0 +1,137 @@ +import flatten from 'flat' +import { createResolver } from '@nuxt/kit' +import fs from 'fs-extra' +import { currentLocales } from '../config/i18n' +import vsCodeConfig from '../.vscode/settings.json' +import type { LocaleEntry } from '../docs/types' +import type { ElkTranslationStatus } from '~/types/translation-status' + +export const localeData: [code: string, file: string[], title: string][] + = currentLocales.map((l: any) => [l.code, l.files ? l.files : [l.file!], l.name ?? l.code]) + +function merge(src: Record, dst: Record) { + for (const key in src) { + if (typeof src[key] === 'object') { + if (!dst[key]) + dst[key] = {} + + merge(src[key], dst[key]) + } + else { + dst[key] = src[key] + } + } +} + +async function readI18nFile(file: string | string[]) { + const resolver = createResolver(import.meta.url) + if (Array.isArray(file)) { + const files = await Promise.all(file.map(f => async () => { + return JSON.parse(Buffer.from( + await fs.readFile(resolver.resolve(`../locales/${f}`), 'utf-8'), + ).toString()) + })).then(f => f.map(f => f())) + const data: Record = files[0] + files.splice(0, 1) + files.forEach(f => merge(f, data)) + return data + } + else { + return JSON.parse(Buffer.from( + await fs.readFile(resolver.resolve(`../locales/${file}`), 'utf-8'), + ).toString()) + } +} + +async function compare( + baseEntries: Record, + file: string | string[], + data: LocaleEntry, +) { + const baseEntriesKeys = Object.keys(baseEntries) + const entries: Record = await readI18nFile(file) + const flatEntriesKeys = Object.keys(flatten>(entries)) + + data.translated = flatEntriesKeys.filter(e => baseEntriesKeys.includes(e)) + data.missing = baseEntriesKeys.filter(e => !flatEntriesKeys.includes(e)) + data.outdated = flatEntriesKeys.filter(e => !baseEntriesKeys.includes(e)) + data.total = flatEntriesKeys.length +} + +async function prepareTranslationStatus() { + const sourceLanguageLocale = localeData.find(l => l[0] === vsCodeConfig['i18n-ally.sourceLanguage'])! + const entries: Record = await readI18nFile(sourceLanguageLocale[1]) + const flatEntries = flatten>(entries) + const total = Object.keys(flatEntries).length + const data: Record = { + en: { + translated: [], + file: 'en.json', + missing: [], + outdated: [], + title: 'English (source)', + total, + isSource: true, + }, + } + + await Promise.all(localeData.filter(l => l[0] !== 'en-US').map(async ([code, file, title]) => { + console.info(`Comparing ${code}...`, title) + data[code] = { + title, + file: Array.isArray(file) ? file[file.length - 1] : file, + translated: [], + missing: [], + outdated: [], + total: 0, + } + await compare(flatEntries, file, data[code]) + })) + + const sorted: Record = { en: { ...data.en } } + + Object.keys(data).filter(k => k !== 'en').sort((a, b) => { + return data[a].translated.length - data[b].translated.length + }).forEach((k) => { + sorted[k] = { ...data[k] } + }) + + const resolver = createResolver(import.meta.url) + + await fs.writeFile( + resolver.resolve('../docs/translation-status.json'), + JSON.stringify(sorted, null, 2), + { encoding: 'utf-8' }, + ) + + const translationStatus: ElkTranslationStatus = { + total, + locales: { + 'en-US': { + total, + percentage: '100', + }, + }, + } + + Object.keys(data).filter(k => k !== 'en').forEach((e) => { + const percentage = total <= 0.0 || data[e].total === 0.0 + ? '0' + : data[e].total === total + ? '100' + : ((data[e].translated.length / total) * 100).toFixed(1) + + translationStatus.locales[e] = { + total: data[e].total, + percentage, + } + }) + + await fs.writeFile( + resolver.resolve('../elk-translation-status.json'), + JSON.stringify(translationStatus, null, 2), + { encoding: 'utf-8' }, + ) +} + +prepareTranslationStatus() diff --git a/server/api/[server]/login.ts b/server/api/[server]/login.ts index 35539c5e..ec193959 100644 --- a/server/api/[server]/login.ts +++ b/server/api/[server]/login.ts @@ -17,9 +17,9 @@ export default defineEventHandler(async (event) => { client_id: app.client_id, force_login: force_login === true ? 'true' : 'false', scope: 'read write follow push', - redirect_uri: getRedirectURI(origin, server), response_type: 'code', lang, + redirect_uri: getRedirectURI(origin, server), }) return `https://${server}/oauth/authorize?${query}` diff --git a/server/api/[server]/oauth.ts b/server/api/[server]/oauth.ts deleted file mode 100644 index 7f4df3d2..00000000 --- a/server/api/[server]/oauth.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { stringifyQuery } from 'ufo' - -export default defineEventHandler(async (event) => { - const { origin } = getQuery(event) as { origin: string } - let { server } = getRouterParams(event) - server = server.toLocaleLowerCase().trim() - const app = await getApp(origin, server) - - if (!app) { - throw createError({ - statusCode: 400, - statusMessage: `App not registered for server: ${server}`, - }) - } - - const { code } = getQuery(event) - if (!code) { - throw createError({ - statusCode: 422, - statusMessage: 'Missing authentication code.', - }) - } - - const result: any = await $fetch(`https://${server}/oauth/token`, { - method: 'POST', - body: { - client_id: app.client_id, - client_secret: app.client_secret, - redirect_uri: getRedirectURI(origin, server), - grant_type: 'authorization_code', - code, - scope: 'read write follow push', - }, - retry: 3, - }) - - const url = `/signin/callback?${stringifyQuery({ server, token: result.access_token, vapid_key: app.vapid_key })}` - await sendRedirect(event, url, 302) -}) diff --git a/server/api/[server]/oauth/[origin].ts b/server/api/[server]/oauth/[origin].ts new file mode 100644 index 00000000..af98aa25 --- /dev/null +++ b/server/api/[server]/oauth/[origin].ts @@ -0,0 +1,47 @@ +import { stringifyQuery } from 'ufo' + +export default defineEventHandler(async (event) => { + let { server, origin } = getRouterParams(event) + server = server.toLocaleLowerCase().trim() + origin = decodeURIComponent(origin) + const app = await getApp(origin, server) + + if (!app) { + throw createError({ + statusCode: 400, + statusMessage: `App not registered for server: ${server}`, + }) + } + + const { code } = getQuery(event) + if (!code) { + throw createError({ + statusCode: 422, + statusMessage: 'Missing authentication code.', + }) + } + + try { + const result: any = await $fetch(`https://${server}/oauth/token`, { + method: 'POST', + body: { + client_id: app.client_id, + client_secret: app.client_secret, + redirect_uri: getRedirectURI(origin, server), + grant_type: 'authorization_code', + code, + scope: 'read write follow push', + }, + retry: 3, + }) + + const url = `/signin/callback?${stringifyQuery({ server, token: result.access_token, vapid_key: app.vapid_key })}` + await sendRedirect(event, url, 302) + } + catch (e) { + throw createError({ + statusCode: 400, + statusMessage: 'Could not complete log in.', + }) + } +}) diff --git a/server/cache-driver.ts b/server/cache-driver.ts index 3f18fad6..059e7088 100644 --- a/server/cache-driver.ts +++ b/server/cache-driver.ts @@ -1,10 +1,7 @@ import type { Driver } from 'unstorage' -// @ts-expect-error unstorage needs to provide backwards-compatible subpath types -import _memory from 'unstorage/drivers/memory' +import memory from 'unstorage/drivers/memory' import { defineDriver } from 'unstorage' -const memory = _memory as typeof import('unstorage/dist/drivers/memory')['default'] - export interface CacheDriverOptions { driver: Driver } diff --git a/server/cloudflare-driver.ts b/server/cloudflare-driver.ts deleted file mode 100644 index 5fe74416..00000000 --- a/server/cloudflare-driver.ts +++ /dev/null @@ -1,194 +0,0 @@ -// Temporary hotfix of https://github.com/unjs/unstorage/blob/4d637a117667ae638a6cac657aac139d88a78027/src/drivers/cloudflare-kv-http.ts#L6 - -import { $fetch } from 'ofetch' -import { defineDriver } from 'unstorage' - -const LOG_TAG = '[unstorage] [cloudflare-http] ' - -interface KVAuthAPIToken { - /** - * API Token generated from the [User Profile 'API Tokens' page](https://dash.cloudflare.com/profile/api-tokens) - * of the Cloudflare console. - * @see https://api.cloudflare.com/#getting-started-requests - */ - apiToken: string -} - -interface KVAuthServiceKey { - /** - * A special Cloudflare API key good for a restricted set of endpoints. - * Always begins with "v1.0-", may vary in length. - * May be used to authenticate in place of `apiToken` or `apiKey` and `email`. - * @see https://api.cloudflare.com/#getting-started-requests - */ - userServiceKey: string -} - -interface KVAuthEmailKey { - /** - * Email address associated with your account. - * Should be used along with `apiKey` to authenticate in place of `apiToken`. - */ - email: string - /** - * API key generated on the "My Account" page of the Cloudflare console. - * Should be used along with `email` to authenticate in place of `apiToken`. - * @see https://api.cloudflare.com/#getting-started-requests - */ - apiKey: string -} - -export type KVHTTPOptions = { - /** - * Cloudflare account ID (required) - */ - accountId: string - /** - * The ID of the KV namespace to target (required) - */ - namespaceId: string - /** - * The URL of the Cloudflare API. - * @default https://api.cloudflare.com - */ - apiURL?: string -} & (KVAuthServiceKey | KVAuthAPIToken | KVAuthEmailKey) - -type CloudflareAuthorizationHeaders = { - 'X-Auth-Email': string - 'X-Auth-Key': string - 'X-Auth-User-Service-Key'?: string - Authorization?: `Bearer ${string}` -} | { - 'X-Auth-Email'?: string - 'X-Auth-Key'?: string - 'X-Auth-User-Service-Key': string - Authorization?: `Bearer ${string}` -} | { - 'X-Auth-Email'?: string - 'X-Auth-Key'?: string - 'X-Auth-User-Service-Key'?: string - Authorization: `Bearer ${string}` -} - -export default defineDriver((opts) => { - if (!opts) - throw new Error('Options must be provided.') - - if (!opts.accountId) - throw new Error(`${LOG_TAG}\`accountId\` is required.`) - - if (!opts.namespaceId) - throw new Error(`${LOG_TAG}\`namespaceId\` is required.`) - - let headers: CloudflareAuthorizationHeaders - - if ('apiToken' in opts) { - headers = { Authorization: `Bearer ${opts.apiToken}` } - } - else if ('userServiceKey' in opts) { - headers = { 'X-Auth-User-Service-Key': opts.userServiceKey } - } - else if (opts.email && opts.apiKey) { - headers = { 'X-Auth-Email': opts.email, 'X-Auth-Key': opts.apiKey } - } - else { - throw new Error( - `${LOG_TAG}One of the \`apiToken\`, \`userServiceKey\`, or a combination of \`email\` and \`apiKey\` is required.`, - ) - } - - const apiURL = opts.apiURL || 'https://api.cloudflare.com' - const baseURL = `${apiURL}/client/v4/accounts/${opts.accountId}/storage/kv/namespaces/${opts.namespaceId}` - const kvFetch = $fetch.create({ baseURL, headers }) - - const hasItem = async (key: string) => { - try { - const res = await kvFetch(`/metadata/${key}`) - return res?.success === true - } - catch (err: any) { - if (!err.response) - throw err - if (err.response.status === 404) - return false - throw err - } - } - - const getItem = async (key: string) => { - try { - // Cloudflare API returns with `content-type: application/octet-stream` - return await kvFetch(`/values/${key}`).then(r => r.text()) - } - catch (err: any) { - if (!err.response) - throw err - if (err.response.status === 404) - return null - throw err - } - } - - const setItem = async (key: string, value: any) => { - return await kvFetch(`/values/${key}`, { method: 'PUT', body: value }) - } - - const removeItem = async (key: string) => { - return await kvFetch(`/values/${key}`, { method: 'DELETE' }) - } - - const getKeys = async (base?: string) => { - const keys: string[] = [] - - const params = new URLSearchParams() - if (base) - params.set('prefix', base) - - const firstPage = await kvFetch('/keys', { params }) - firstPage.result.forEach(({ name }: { name: string }) => keys.push(name)) - - const cursor = firstPage.result_info.cursor - if (cursor) - params.set('cursor', cursor) - - while (params.has('cursor')) { - const pageResult = await kvFetch('/keys', { params: Object.fromEntries(params.entries()) }) - pageResult.result.forEach(({ name }: { name: string }) => keys.push(name)) - const pageCursor = pageResult.result_info.cursor - if (pageCursor) - params.set('cursor', pageCursor) - - else - params.delete('cursor') - } - return keys - } - - const clear = async () => { - const keys: string[] = await getKeys() - // Split into chunks of 10000, as the API only allows for 10,000 keys at a time - const chunks = keys.reduce((acc, key, i) => { - if (i % 10000 === 0) - acc.push([]) - acc[acc.length - 1].push(key) - return acc - }, [[]] as string[][]) - // Call bulk delete endpoint with each chunk - await Promise.all(chunks.map((chunk) => { - return kvFetch('/bulk', { - method: 'DELETE', - body: { keys: chunk }, - }) - })) - } - - return { - hasItem, - getItem, - setItem, - removeItem, - getKeys, - clear, - } -}) diff --git a/server/utils/shared.ts b/server/utils/shared.ts index 30adc583..537d6671 100644 --- a/server/utils/shared.ts +++ b/server/utils/shared.ts @@ -1,15 +1,11 @@ -// @ts-expect-error unstorage needs to provide backwards-compatible subpath types -import _fs from 'unstorage/drivers/fs' -// @ts-expect-error unstorage needs to provide backwards-compatible subpath types -import _memory from 'unstorage/drivers/memory' - -import { stringifyQuery } from 'ufo' +import fs from 'unstorage/drivers/fs' +import memory from 'unstorage/drivers/memory' +import kv from 'unstorage/drivers/cloudflare-kv-http' import { $fetch } from 'ofetch' import type { Storage } from 'unstorage' import cached from '../cache-driver' -import kv from '../cloudflare-driver' // @ts-expect-error virtual import import { env } from '#build-info' @@ -19,9 +15,6 @@ import { driver } from '#storage-config' import type { AppInfo } from '~/types' import { APP_NAME } from '~/constants' -const fs = _fs as typeof import('unstorage/dist/drivers/fs')['default'] -const memory = _memory as typeof import('unstorage/dist/drivers/memory')['default'] - const storage = useStorage() as Storage if (driver === 'fs') { @@ -41,7 +34,8 @@ else if (driver === 'memory') { } export function getRedirectURI(origin: string, server: string) { - return `${origin}/api/${server}/oauth?${stringifyQuery({ origin })}` + origin = origin.replace(/\?.*$/, '') + return `${origin}/api/${server}/oauth/${encodeURIComponent(origin)}` } async function fetchAppInfo(origin: string, server: string) { @@ -58,8 +52,8 @@ async function fetchAppInfo(origin: string, server: string) { } export async function getApp(origin: string, server: string) { - const host = origin.replace(/^https?:\/\//, '').replace(/[^\w\d]/g, '-') - const key = `servers:v2:${server}:${host}.json`.toLowerCase() + const host = origin.replace(/^https?:\/\//, '').replace(/[^\w\d]/g, '-').replace(/\?.*$/, '') + const key = `servers:v3:${server}:${host}.json`.toLowerCase() try { if (await storage.hasItem(key)) @@ -74,13 +68,13 @@ export async function getApp(origin: string, server: string) { } export async function deleteApp(server: string) { - const keys = (await storage.getKeys(`servers:v2:${server}:`)) + const keys = (await storage.getKeys(`servers:v3:${server}:`)) for (const key of keys) await storage.removeItem(key) } export async function listServers() { - const keys = await storage.getKeys('servers:v2:') + const keys = await storage.getKeys('servers:v3:') const servers = new Set() for await (const key of keys) { const id = key.split(':')[2] diff --git a/types/translation-status.ts b/types/translation-status.ts new file mode 100644 index 00000000..8be335cb --- /dev/null +++ b/types/translation-status.ts @@ -0,0 +1,7 @@ +export interface ElkTranslationStatus { + total: number + locales: Record +}