|
1 | 1 | import type { IUnknownFlagsStore, UnknownFlag } from './unknown-flags-store';
|
2 | 2 |
|
3 | 3 | export class FakeUnknownFlagsStore implements IUnknownFlagsStore {
|
4 |
| - private unknownFlagRecord: Record<string, UnknownFlag> = {}; |
| 4 | + private unknownFlagMap = new Map<string, UnknownFlag>(); |
| 5 | + |
| 6 | + private getKey(flag: UnknownFlag): string { |
| 7 | + return `${flag.name}:${flag.appName}`; |
| 8 | + } |
5 | 9 |
|
6 | 10 | async replaceAll(flags: UnknownFlag[]): Promise<void> {
|
7 |
| - this.unknownFlagRecord = {}; |
| 11 | + this.unknownFlagMap.clear(); |
8 | 12 | for (const flag of flags) {
|
9 |
| - this.unknownFlagRecord[flag.name] = flag; |
| 13 | + this.unknownFlagMap.set(this.getKey(flag), flag); |
10 | 14 | }
|
11 | 15 | }
|
12 | 16 |
|
13 | 17 | async getAll(): Promise<UnknownFlag[]> {
|
14 |
| - return Object.values(this.unknownFlagRecord); |
| 18 | + return Array.from(this.unknownFlagMap.values()); |
15 | 19 | }
|
16 | 20 |
|
17 | 21 | async clear(hoursAgo: number): Promise<void> {
|
18 |
| - const now = new Date(); |
19 |
| - for (const flag of Object.values(this.unknownFlagRecord)) { |
20 |
| - if ( |
21 |
| - flag.seenAt.getTime() < |
22 |
| - now.getTime() - hoursAgo * 60 * 60 * 1000 |
23 |
| - ) { |
24 |
| - delete this.unknownFlagRecord[flag.name]; |
| 22 | + const cutoff = Date.now() - hoursAgo * 60 * 60 * 1000; |
| 23 | + for (const [key, flag] of this.unknownFlagMap.entries()) { |
| 24 | + if (flag.seenAt.getTime() < cutoff) { |
| 25 | + this.unknownFlagMap.delete(key); |
25 | 26 | }
|
26 | 27 | }
|
27 | 28 | }
|
28 | 29 |
|
29 | 30 | async deleteAll(): Promise<void> {
|
30 |
| - this.unknownFlagRecord = {}; |
| 31 | + this.unknownFlagMap.clear(); |
31 | 32 | }
|
32 | 33 | }
|
0 commit comments