{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/collections.js"],"names":["GroupMap","constructor","array","_map","Map","key","Object","keys","ea","add","values","ensureItems","items","get","Set","set","value","remove","delete","map","cb","Array","from"],"mappings":";;;;;;;;AAAA;;;;;;;;;;;;;AAaA;;;;;;;;AAQO,YAAMA,QAAN,CAAgB;;AAEnBC,oBAAYC,KAAZ,EAAmB;AACjB,eAAKC,IAAL,GAAY,IAAIC,GAAJ,EAAZ;;AAEA;AACA,cAAIF,KAAJ,EAAW;AACT,iBAAI,IAAIG,GAAR,IAAeC,OAAOC,IAAP,CAAYL,KAAZ,CAAf,EAAmC;AACjC,mBAAI,IAAIM,EAAR,IAAcN,MAAMG,GAAN,CAAd,EAA0B;AACxB,qBAAKI,GAAL,CAASJ,GAAT,EAAcG,EAAd;AACD;AACF;AACF;AACF;;AAED,YAAIE,MAAJ,GAAa;AACX,eAAKP,IAAL,CAAUO,MAAV;AACD;;AAED,YAAIH,IAAJ,GAAW;AACT,eAAKJ,IAAL,CAAUO,MAAV;AACD;;AAEDC,oBAAYN,GAAZ,EAAiB;AACf,cAAIO,QAAQ,KAAKT,IAAL,CAAUU,GAAV,CAAcR,GAAd,CAAZ;AACA,cAAI,CAACO,KAAL,EAAY;AACVA,oBAAQ,IAAIE,GAAJ,EAAR;AACA,iBAAKX,IAAL,CAAUY,GAAV,CAAcV,GAAd,EAAmBO,KAAnB;AACD;AACD,iBAAOA,KAAP;AACD;;AAED;;;AAGAH,YAAIJ,GAAJ,EAASW,KAAT,EAAgB;AACd,eAAKL,WAAL,CAAiBN,GAAjB,EAAsBI,GAAtB,CAA0BO,KAA1B;AACD;;AAEDH,YAAIR,GAAJ,EAAS;AACP,iBAAO,KAAKM,WAAL,CAAiBN,GAAjB,CAAP;AACD;;AAGDY,eAAOZ,GAAP,EAAYW,KAAZ,EAAmB;AACjB,eAAKL,WAAL,CAAiBN,GAAjB,EAAsBa,MAAtB,CAA6BF,KAA7B;AACD;;AAEDG,YAAIC,EAAJ,EAAQ;AACN,iBAAOC,MAAMC,IAAN,CAAW,KAAKnB,IAAL,CAAUI,IAAV,EAAX,EAA6BY,GAA7B,CAAiCd,OAAOe,GAAGf,GAAH,EAAQ,KAAKF,IAAL,CAAUU,GAAV,CAAcR,GAAd,CAAR,CAAxC,CAAP;AACD;;AAlDkB;;;;;;;;;;8BAAVL,yC","file":"collections.js","sourcesContent":["/*MD\n# Collections: Beyond Set and Map\n\n## [Tests](edit://test/collections-test.js)\n\n<!-- go directly there\n## [Tests](../../test/collections-test.js)\n-->\n\n## GroupMap: A Map of Sets\n\nMD*/\n\n/*MD\n## Further Helpers\n\n[Bidirectional Multi Map](src/client/reactive/active-expression-rewriting/bidirectional-multi-map.js)\n[Composite Key](src/client/reactive/active-expression-rewriting/composite-key.js)\n[Injective Map](src/client/reactive/active-expression-rewriting/injective-map.js)\nMD*/\n\nexport class GroupMap  {\n    \n    constructor(array) {\n      this._map = new Map()\n      \n      // #Meta will be shown by examples... which I do not desire....\n      if (array) {\n        for(var key of Object.keys(array)) {\n          for(var ea of array[key]) {\n            this.add(key, ea)\n          }\n        }\n      }\n    }\n    \n    get values() {\n      this._map.values()\n    }\n    \n    get keys() {\n      this._map.values()\n    }\n    \n    ensureItems(key) {\n      var items = this._map.get(key)\n      if (!items) {\n        items = new Set()\n        this._map.set(key, items)\n      }\n      return items\n    }\n    \n    /*\n      adds a value to a set under a key \n    */\n    add(key, value) {\n      this.ensureItems(key).add(value)\n    }\n\n    get(key) {\n      return this.ensureItems(key)\n    }\n\n    \n    remove(key, value) {\n      this.ensureItems(key).delete(value)\n    }\n    \n    map(cb) {\n      return Array.from(this._map.keys()).map(key => cb(key, this._map.get(key)))\n    }\n    \n  }"]}