chore: update to nuxt 3.20 (#4992)

* feat: nuxt 3.14 → 3.15.4

* feat: nuxt 3.15.4 → 3.16.2 (vite 6)

* feat: bump nuxt-i18n

* feat: nuxt 3.20

* fix: lint

* feat: use rolldown-vite

* fix: shut the fuck up

* fix: silence for app as well

* fix: vue-router mismatch

---------

Signed-off-by: Calum H. <contact@cal.engineer>
This commit is contained in:
Calum H.
2025-12-30 15:06:52 +00:00
committed by GitHub
parent 1a16d61511
commit b07a1659b4
31 changed files with 6760 additions and 6660 deletions

View File

@@ -1,8 +1,11 @@
import { buildLocaleMessages, createMessageCompiler, type CrowdinMessages } from '@modrinth/ui'
const localeModules = import.meta.glob<{ default: CrowdinMessages }>('./locales/*/index.json', {
eager: true,
})
const localeModules = import.meta.glob<{ default: CrowdinMessages }>(
'../src/locales/*/index.json',
{
eager: true,
},
)
export default defineI18nConfig(() => ({
legacy: false,
@@ -11,5 +14,6 @@ export default defineI18nConfig(() => ({
messageCompiler: createMessageCompiler(),
missingWarn: false,
fallbackWarn: false,
// @ts-expect-error - buildLocaleMessages returns compatible format at runtime
messages: buildLocaleMessages(localeModules),
}))

View File

@@ -56,6 +56,18 @@ export default defineNuxtConfig({
},
},
vite: {
css: {
preprocessorOptions: {
scss: {
// TODO: dont forget about this
silenceDeprecations: ['import'],
},
},
},
ssr: {
// https://github.com/Akryum/floating-vue/issues/809#issuecomment-1002996240
noExternal: ['v-tooltip'],
},
define: {
global: {},
},
@@ -196,9 +208,24 @@ export default defineNuxtConfig({
},
},
},
modules: ['@nuxtjs/i18n', '@pinia/nuxt'],
modules: ['@nuxtjs/i18n', '@pinia/nuxt', 'floating-vue/nuxt'],
floatingVue: {
themes: {
'ribbit-popout': {
$extend: 'dropdown',
placement: 'bottom-end',
instantMove: true,
distance: 8,
},
'dismissable-prompt': {
$extend: 'dropdown',
placement: 'bottom-start',
},
},
},
i18n: {
defaultLocale: 'en-US',
// @ts-expect-error - LocaleDefinition is compatible at runtime
locales: LOCALES,
strategy: 'no_prefix',
detectBrowserLanguage: {
@@ -206,11 +233,14 @@ export default defineNuxtConfig({
cookieKey: 'locale',
fallbackLocale: 'en-US',
},
vueI18n: './src/i18n.config.ts',
vueI18n: './i18n.config.ts',
bundle: {
optimizeTranslationDirective: false,
},
},
nitro: {
rollupConfig: {
// @ts-expect-error it's not infinite.
// @ts-expect-error because of rolldown-vite - completely fine though
plugins: [serverSidedVue()],
},
},
@@ -255,7 +285,7 @@ export default defineNuxtConfig({
},
},
},
compatibilityDate: '2024-07-03',
compatibilityDate: '2025-01-01',
telemetry: false,
})

View File

@@ -10,20 +10,19 @@
"postinstall": "nuxi prepare",
"lint": "eslint . && prettier --check .",
"fix": "eslint . --fix && prettier --write .",
"intl:extract": "formatjs extract \"{,src/components,src/composables,src/layouts,src/middleware,src/modules,src/pages,src/plugins,src/utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" \"src/error.vue\" --ignore \"**/*.d.ts\" --ignore node_modules --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace",
"intl:extract": "formatjs extract \"src/{components,composables,layouts,middleware,modules,pages,plugins,utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" \"src/error.vue\" --ignore \"**/*.d.ts\" --ignore node_modules --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace",
"test": "nuxi build"
},
"devDependencies": {
"@formatjs/cli": "^6.2.12",
"@nuxt/devtools": "^1.3.3",
"@nuxtjs/i18n": "^8.5.5",
"@modrinth/tooling-config": "workspace:*",
"@nuxtjs/i18n": "^9.0.0",
"@types/dompurify": "^3.0.5",
"@types/iso-3166-2": "^1.0.4",
"@types/node": "^20.1.0",
"autoprefixer": "^10.4.19",
"eslint": "^8.57.0",
"glob": "^10.2.7",
"nuxt": "^3.14.1592",
"nuxt": "^3.20.2",
"postcss": "^8.4.39",
"prettier-plugin-tailwindcss": "^0.6.5",
"sass": "^1.58.0",
@@ -43,11 +42,10 @@
"@modrinth/moderation": "workspace:*",
"@modrinth/ui": "workspace:*",
"@modrinth/utils": "workspace:*",
"@pinia/nuxt": "^0.5.1",
"@pinia/nuxt": "^0.11.3",
"@tanstack/vue-query": "^5.90.7",
"@types/three": "^0.172.0",
"intl-messageformat": "^10.7.7",
"@vitejs/plugin-vue": "^5.0.4",
"@vitejs/plugin-vue": "^6.0.3",
"@vue-email/components": "^0.0.21",
"@vue-email/render": "^0.0.9",
"@vueuse/core": "^11.1.0",
@@ -58,12 +56,13 @@
"floating-vue": "^5.2.2",
"fuse.js": "^6.6.2",
"highlight.js": "^11.7.0",
"intl-messageformat": "^10.7.7",
"iso-3166-2": "1.0.0",
"js-yaml": "^4.1.0",
"jszip": "^3.10.1",
"markdown-it": "14.1.0",
"pathe": "^1.1.2",
"pinia": "^2.1.7",
"pinia": "^3.0.0",
"pinia-plugin-persistedstate": "^4.4.1",
"prettier": "^3.6.2",
"qrcode.vue": "^3.4.0",

View File

@@ -1,5 +1,6 @@
<template>
<NuxtLayout>
<NuxtRouteAnnouncer />
<ModrinthLoadingIndicator />
<NotificationPanel />
<NuxtPage />

View File

@@ -1,20 +0,0 @@
import 'floating-vue/dist/style.css'
import FloatingVue from 'floating-vue'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(FloatingVue, {
themes: {
'ribbit-popout': {
$extend: 'dropdown',
placement: 'bottom-end',
instantMove: true,
distance: 8,
},
'dismissable-prompt': {
$extend: 'dropdown',
placement: 'bottom-start',
},
},
})
})