UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

77 lines 2.65 kB
export class FakeUnknownFlagsStore { constructor() { this.unknownFlagMap = new Map(); } getKey(flag) { return `${flag.name}:${flag.appName}:${flag.environment}`; } async insert(flags) { this.unknownFlagMap.clear(); for (const flag of flags) { this.unknownFlagMap.set(this.getKey(flag), flag); } } groupFlags(flags) { const byName = new Map(); for (const f of flags) { const apps = byName.get(f.name) ?? new Map(); const envs = apps.get(f.appName) ?? new Map(); const prev = envs.get(f.environment); if (!prev || f.lastSeenAt > prev) envs.set(f.environment, f.lastSeenAt); apps.set(f.appName, envs); byName.set(f.name, apps); } const out = []; for (const [name, appsMap] of byName) { let lastSeenAt = null; const reports = Array.from(appsMap.entries()).map(([appName, envMap]) => { const environments = Array.from(envMap.entries()).map(([environment, seenAt]) => { if (!lastSeenAt || seenAt > lastSeenAt) lastSeenAt = seenAt; return { environment, seenAt }; }); return { appName, environments }; }); out.push({ name, lastSeenAt: lastSeenAt ?? new Date(0), reports, }); } return out; } async getAll({ limit, orderBy } = {}) { const flat = Array.from(this.unknownFlagMap.values()); const flags = this.groupFlags(flat); if (orderBy) { flags.sort((a, b) => { for (const { column, order } of orderBy) { if (a[column] < b[column]) return order === 'asc' ? -1 : 1; if (a[column] > b[column]) return order === 'asc' ? 1 : -1; } return 0; }); } if (!limit) return flags; return flags.slice(0, limit); } async clear(hoursAgo) { const cutoff = Date.now() - hoursAgo * 60 * 60 * 1000; for (const [key, flag] of this.unknownFlagMap.entries()) { if (flag.lastSeenAt.getTime() < cutoff) { this.unknownFlagMap.delete(key); } } } async deleteAll() { this.unknownFlagMap.clear(); } async count() { return this.unknownFlagMap.size; } } //# sourceMappingURL=fake-unknown-flags-store.js.map