refactor: migrate to nuxt compatibilityVersion: 4 (#3298)
This commit is contained in:
parent
46e4433e1c
commit
a3fbc056a9
342 changed files with 1200 additions and 2932 deletions
52
app/utils/elk-idb.ts
Normal file
52
app/utils/elk-idb.ts
Normal 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
23
app/utils/i18n.ts
Normal 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
30
app/utils/language.ts
Normal 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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue