/
registry-base.ts
44 lines (35 loc) · 1.08 KB
/
registry-base.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import {InjectionToken} from ".";
export default abstract class RegistryBase<T> {
protected _registryMap = new Map<InjectionToken<any>, T[]>();
public entries(): IterableIterator<[InjectionToken<any>, T[]]> {
return this._registryMap.entries();
}
public getAll(key: InjectionToken<any>): T[] {
this.ensure(key);
return this._registryMap.get(key)!;
}
public get(key: InjectionToken<any>): T | null {
this.ensure(key);
const value = this._registryMap.get(key)!;
return value[value.length - 1] || null;
}
public set(key: InjectionToken<any>, value: T): void {
this.ensure(key);
this._registryMap.get(key)!.push(value);
}
public setAll(key: InjectionToken<any>, value: T[]): void {
this._registryMap.set(key, value);
}
public has(key: InjectionToken<any>): boolean {
this.ensure(key);
return this._registryMap.get(key)!.length > 0;
}
public clear(): void {
this._registryMap.clear();
}
private ensure(key: InjectionToken<any>): void {
if (!this._registryMap.has(key)) {
this._registryMap.set(key, []);
}
}
}