refactor: migrate to nuxt compatibilityVersion: 4 (#3298)

This commit is contained in:
Daniel Roe 2025-05-20 15:05:01 +01:00 committed by GitHub
parent 46e4433e1c
commit a3fbc056a9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
342 changed files with 1200 additions and 2932 deletions

52
app/utils/elk-idb.ts Normal file
View file

@ -0,0 +1,52 @@
import type { UseStore } from 'idb-keyval'
import {
del as delIdb,
get as getIdb,
promisifyRequest,
set as setIdb,
update as updateIdb,
} from 'idb-keyval'
const databases: IDBOpenDBRequest[] = []
function createStore(): UseStore {
const storeName = 'keyval'
const request = indexedDB.open('keyval-store')
databases.push(request)
request.onupgradeneeded = () => request.result.createObjectStore(storeName)
const dbp = promisifyRequest(request)
return (txMode, callback) => dbp.then(db => callback(db.transaction(storeName, txMode).objectStore(storeName)))
}
let defaultGetStoreFunc: UseStore | undefined
function defaultGetStore() {
if (!defaultGetStoreFunc)
defaultGetStoreFunc = createStore()
return defaultGetStoreFunc
}
export function get<T = any>(key: IDBValidKey) {
return getIdb<T>(key, defaultGetStore())
}
export function set(key: IDBValidKey, value: any) {
return setIdb(key, value, defaultGetStore())
}
export function update<T = any>(key: IDBValidKey, updater: (oldValue: T | undefined) => T) {
return updateIdb(key, updater, defaultGetStore())
}
export function del(key: IDBValidKey) {
return delIdb(key, defaultGetStore())
}
export function closeDatabases() {
databases.forEach((db) => {
if (db.result)
db.result.close()
})
defaultGetStoreFunc = undefined
}

23
app/utils/i18n.ts Normal file
View file

@ -0,0 +1,23 @@
import { useI18n as useOriginalI18n } from 'vue-i18n'
export function useI18n() {
const {
t,
d,
n,
...rest
} = useOriginalI18n()
return {
...rest,
t: wrapI18n(t),
d: wrapI18n(d),
n: wrapI18n(n),
} satisfies ReturnType<typeof useOriginalI18n>
}
export function wrapI18n<T extends (...args: any[]) => any>(t: T): T {
return <T>((...args: any[]) => {
return isHydrated.value ? t(...args) : ''
})
}

30
app/utils/language.ts Normal file
View file

@ -0,0 +1,30 @@
export function matchLanguages(languages: string[], acceptLanguages: readonly string[]): string | null {
{
// const lang = acceptLanguages.map(userLang => languages.find(lang => lang.startsWith(userLang))).filter(v => !!v)[0]
// TODO: Support es-419, remove this code if we include spanish country variants
const lang = acceptLanguages.map(userLang => languages.find((currentLang) => {
if (currentLang === userLang)
return currentLang
// Edge browser: case for ca-valencia
if (currentLang === 'ca-valencia' && userLang === 'ca-Es-VALENCIA')
return currentLang
if (userLang.startsWith('es-') && userLang !== 'es-ES' && currentLang === 'es-419')
return currentLang
return currentLang.startsWith(userLang) ? currentLang : undefined
})).filter(v => !!v)?.[0]
if (lang)
return lang
}
const lang = acceptLanguages.map((userLang) => {
userLang = userLang.split('-')[0]!
return languages.find(lang => lang.startsWith(userLang))
}).filter(v => !!v)[0]
if (lang)
return lang
return null
}