summary refs log tree commit diff
path: root/src/util/cache/LocalCache.ts
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2023-03-31 15:26:15 +1100
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2023-03-31 15:26:15 +1100
commit698ad90d3e82a15b85ceb021ad5667109ac0bcdb (patch)
tree7b79fc6d65e79af82b11d89cb1a5502a9f7bff08 /src/util/cache/LocalCache.ts
parentfix: disable cache if multi threaded (diff)
downloadserver-698ad90d3e82a15b85ceb021ad5667109ac0bcdb.tar.xz
Revert "Merge pull request #1008 from spacebarchat/dev/samuel"
This reverts commit 69ea71aa9e0bd2e5a98904a66fba0ad3745707cb, reversing
changes made to 8b2faf0b18336e5dff1eeff4e849bcfd96b09e88.
Diffstat (limited to 'src/util/cache/LocalCache.ts')
-rw-r--r--src/util/cache/LocalCache.ts94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/util/cache/LocalCache.ts b/src/util/cache/LocalCache.ts
deleted file mode 100644

index 9c4f23b3..00000000 --- a/src/util/cache/LocalCache.ts +++ /dev/null
@@ -1,94 +0,0 @@ -/* - Fosscord: A FOSS re-implementation and extension of the Discord.com backend. - Copyright (C) 2023 Fosscord and Fosscord Contributors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <https://www.gnu.org/licenses/>. -*/ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -import { BaseEntityWithId, Cache } from "./Cache"; - -export const cacheTimeout = 1000 * 60 * 5; - -export class LocalCache extends Map<string, BaseEntityWithId> implements Cache { - last_access = new Map<string, number>(); - - constructor() { - super(); - - setInterval(() => { - const now = Date.now(); - for (const [key, value] of this.last_access) { - if (now - value > cacheTimeout) { - this.delete(key); - this.last_access.delete(key); - } - } - }, cacheTimeout); - } - - set(key: string, value: BaseEntityWithId): this { - if (this.has(key)) { - this.update(key, value); - return this; - } - this.last_access.set(key, Date.now()); - return super.set(key, value as never); - } - - get(key: string) { - const value = super.get(key); - if (value) this.last_access.set(key, Date.now()); - return value; - } - - update(id: string, entity: BaseEntityWithId) { - const oldEntity = this.get(id); - if (!oldEntity) return; - for (const key in entity) { - // @ts-ignore - if (entity[key] === undefined) continue; // @ts-ignore - oldEntity[key] = entity[key]; - } - } - - find(options: Record<string, never>): BaseEntityWithId | undefined { - if (options.id && Object.keys(options).length === 1) { - return this.get(options.id); - } - for (const entity of this.values()) { - if (objectFulfillsQuery(entity, options)) return entity; - } - } - - filter(options: Record<string, never>): BaseEntityWithId[] { - const result = []; - for (const entity of this.values()) { - if (objectFulfillsQuery(entity, options)) { - result.push(entity); - } - } - return result; - } -} - -function objectFulfillsQuery( - entity: BaseEntityWithId, - options: Record<string, never>, -) { - for (const key in options) { - // @ts-ignore - if (entity[key] !== options[key]) return false; - } - return true; -}