1
0
mirror of https://github.com/elk-zone/elk synced 2024-12-01 00:08:11 +09:00
elk/composables/cache.ts

67 lines
1.6 KiB
TypeScript
Raw Normal View History

2022-11-24 14:47:14 +09:00
import LRU from 'lru-cache'
import type { Account, Status } from 'masto'
const cache = new LRU<string, any>({
max: 1000,
})
if (process.dev)
// eslint-disable-next-line no-console
console.log({ cache })
2022-11-24 16:53:27 +09:00
export function setCached(key: string, value: any, override = false) {
if (override || !cache.has(key))
cache.set(key, value)
2022-11-24 14:47:14 +09:00
}
2022-11-25 00:48:52 +09:00
export function fetchStatus(id: string): Promise<Status> {
2022-11-24 14:47:14 +09:00
const key = `status:${id}`
const cached = cache.get(key)
if (cached)
return cached
const promise = masto.statuses.fetch(id)
.then((status) => {
cacheStatus(status)
return status
})
cache.set(key, promise)
return promise
}
2022-11-25 00:48:52 +09:00
export function fetchAccount(id: string): Promise<Account> {
2022-11-24 14:47:14 +09:00
const key = `account:${id}`
const cached = cache.get(key)
if (cached)
return cached
const promise = masto.accounts.fetch(id)
.then((account) => {
2022-11-24 16:53:27 +09:00
cacheAccount(account, true)
2022-11-24 14:47:14 +09:00
return account
})
cache.set(key, promise)
return promise
}
2022-11-25 19:45:39 +09:00
export async function fetchAccountByName(acct: string): Promise<Account> {
2022-11-24 14:47:14 +09:00
const key = `account:${acct}`
const cached = cache.get(key)
if (cached)
return cached
2022-11-24 14:49:50 +09:00
const account = masto.accounts.lookup({ acct })
2022-11-24 14:47:14 +09:00
.then((r) => {
2022-11-24 16:53:27 +09:00
cacheAccount(r, true)
2022-11-24 14:47:14 +09:00
return r
})
cache.set(key, account)
return account
}
2022-11-24 16:53:27 +09:00
export function cacheStatus(status: Status, override?: boolean) {
setCached(`status:${status.id}`, status, override)
2022-11-24 14:47:14 +09:00
}
2022-11-24 16:53:27 +09:00
export function cacheAccount(account: Account, override?: boolean) {
setCached(`account:${account.id}`, account, override)
setCached(`account:${account.acct}`, account, override)
2022-11-24 14:47:14 +09:00
}