UNPKG

@decaf-ts/db-decorators

Version:

Agnostic database decorators and repository

40 lines (38 loc) 4.23 kB
import { ConflictError, NotFoundError } from "./errors"; export class DataCache { constructor() { this.cache = {}; } async get(key) { if (!(key in this.cache)) throw new NotFoundError(`Key ${key} not in dataStore`); return this.cache[key]; } async push(key, value) { if (key in this.cache) throw new ConflictError(`Key ${key} already in dataStore`); this.cache[key] = value; } async put(key, value) { this.cache[key] = value; } async pop(key) { const res = this.get(key); delete this.cache[key]; return res; } async filter(filter) { if (typeof filter === "string") filter = new RegExp(filter); return Object.keys(this.cache) .filter((k) => !!filter.exec(k)) .map((k) => this.cache[k]); } async purge(key) { if (!key) this.cache = {}; else await this.pop(key); } } //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L0RhdGFDYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV4RCxNQUFNLE9BQU8sU0FBUztJQUF0QjtRQUNZLFVBQUssR0FBd0IsRUFBRSxDQUFDO0lBbUM1QyxDQUFDO0lBakNDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN0QixNQUFNLElBQUksYUFBYSxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUNoQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSztZQUNuQixNQUFNLElBQUksYUFBYSxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUF1QjtRQUNsQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7WUFBRSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFZO1FBQ3RCLElBQUksQ0FBQyxHQUFHO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O1lBQ3JCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJmaWxlIjoicmVwb3NpdG9yeS9EYXRhQ2FjaGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25mbGljdEVycm9yLCBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhQ2FjaGUge1xuICBwcm90ZWN0ZWQgY2FjaGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5jYWNoZSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgS2V5ICR7a2V5fSBub3QgaW4gZGF0YVN0b3JlYCk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcbiAgfVxuXG4gIGFzeW5jIHB1c2goa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuY2FjaGUpXG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RFcnJvcihgS2V5ICR7a2V5fSBhbHJlYWR5IGluIGRhdGFTdG9yZWApO1xuICAgIHRoaXMuY2FjaGVba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgYXN5bmMgcHV0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5jYWNoZVtrZXldID0gdmFsdWU7XG4gIH1cblxuICBhc3luYyBwb3Aoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldChrZXkpO1xuICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2tleV07XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIGZpbHRlcihmaWx0ZXI6IHN0cmluZyB8IFJlZ0V4cCkge1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcInN0cmluZ1wiKSBmaWx0ZXIgPSBuZXcgUmVnRXhwKGZpbHRlcik7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2FjaGUpXG4gICAgICAuZmlsdGVyKChrKSA9PiAhIWZpbHRlci5leGVjKGspKVxuICAgICAgLm1hcCgoaykgPT4gdGhpcy5jYWNoZVtrXSk7XG4gIH1cblxuICBhc3luYyBwdXJnZShrZXk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWtleSkgdGhpcy5jYWNoZSA9IHt9O1xuICAgIGVsc2UgYXdhaXQgdGhpcy5wb3Aoa2V5KTtcbiAgfVxufVxuIl19