ts-ioc-container
Version:
Typescript IoC container
29 lines (28 loc) • 951 B
JavaScript
import { List as L } from '../utils';
export class AliasMap {
aliasToKeySet = new Map();
deleteKeyFromAliases(key) {
for (const [depKey, aliasSet] of [...this.aliasToKeySet].filter(([k, aliasSet]) => aliasSet.has(key))) {
aliasSet.delete(key);
if (aliasSet.size === 0) {
this.aliasToKeySet.delete(depKey);
}
}
}
findManyKeysByAlias(alias) {
return [...(this.aliasToKeySet.get(alias) ?? [])];
}
findLastKeyByAlias(alias) {
const keys = [...(this.aliasToKeySet.get(alias) ?? [])];
return keys.length > 0 ? L.lastOf(keys) : undefined;
}
addAliases(key, aliases) {
for (const alias of aliases) {
const currentAliasKeys = this.aliasToKeySet.get(alias) ?? new Set();
this.aliasToKeySet.set(alias, currentAliasKeys.add(key));
}
}
destroy() {
this.aliasToKeySet.clear();
}
}