const {Subscribable} = require("./subscribable.js") class SubscribeMap extends Subscribable { constructor() { super() Object.assign(this.events, { addItem: [], editItem: [], deleteItem: [], changeItem: [], askSet: [] }) Object.assign(this.eventDeps, { addItem: ["changeItem"], editItem: ["changeItem"], deleteItem: ["changeItem"], changeItem: [], askSet: [] }) this.backing = new Map() } has(key) { return this.backing.has(key) } forEach(f) { for (const key of this.backing.keys()) { f(key, this.backing.get(key)) } } askSet(key, value) { this.broadcast("askSet", key, value) } set(key, value) { const existed = this.backing.has(key) this.backing.set(key, value) if (existed) { this.broadcast("addItem", key) } else { this.broadcast("editItem", key) } } delete(key) { if (this.backing.has(key)) { this.backing.delete(key) this.broadcast("deleteItem", key) } } } module.exports = {SubscribeMap}