/* IMPORT */ import Utils from './utils.js'; /* MAIN */ //TODO: Maybe publish this as a standalone module class LazyMapSet { constructor() { /* VARIABLES */ this.map = new Map(); } /* API */ clear() { this.map.clear(); } delete(key, value) { if (Utils.lang.isUndefined(value)) { return this.map.delete(key); } else if (this.map.has(key)) { const values = this.map.get(key); if (Utils.lang.isSet(values)) { const deleted = values.delete(value); if (!values.size) { this.map.delete(key); } return deleted; } else if (values === value) { this.map.delete(key); return true; } } return false; } find(key, iterator) { if (this.map.has(key)) { const values = this.map.get(key); if (Utils.lang.isSet(values)) { return Array.from(values).find(iterator); } else if (iterator(values)) { //TSC return values; } } return undefined; } get(key) { return this.map.get(key); } has(key, value) { if (Utils.lang.isUndefined(value)) { return this.map.has(key); } else if (this.map.has(key)) { const values = this.map.get(key); if (Utils.lang.isSet(values)) { return values.has(value); } else { return (values === value); } } return false; } set(key, value) { if (this.map.has(key)) { const values = this.map.get(key); if (Utils.lang.isSet(values)) { values.add(value); } else if (values !== value) { this.map.set(key, new Set([values, value])); //TSC } } else { this.map.set(key, value); } return this; } } /* EXPORT */ export default LazyMapSet;