{"version":3,"names":["DualKeyMap","constructor","_leftToMiddle","Map","add","primaryKey","secondaryKey","value","getOrCreate","remove","hasPrimary","getMiddles","_middleToRight","delete","removeSecondary","has","size","clear","get","undefined","creatorFunction","allValues","values","flatMap","inner"],"sources":["dual-key-map.js"],"sourcesContent":["export default class DualKeyMap {\n\n  constructor() {\n    this._leftToMiddle = new Map();\n  }\n  \n  add(primaryKey, secondaryKey, value) {\n    this.getOrCreate(primaryKey, secondaryKey, () => value);\n  }\n\n  remove(primaryKey) {\n    if(!this.hasPrimary(primaryKey)) return;\n    for(const secondaryKey of this.getMiddles(primaryKey)) {\n      this._middleToRight.delete(secondaryKey);      \n    }\n    this._leftToMiddle.delete(primaryKey);\n  }\n\n  removeSecondary(primaryKey, secondaryKey) {\n    if(!this.has(primaryKey, secondaryKey)) return;\n    this.getMiddles(primaryKey).delete(secondaryKey);\n    if(this.getMiddles(primaryKey).size === 0) {\n      this._leftToMiddle.delete(primaryKey);\n    }\n  }\n\n  clear() {\n    this._leftToMiddle.clear();\n  }\n\n  hasPrimary(primaryKey) {\n    return this._leftToMiddle.has(primaryKey);\n  }\n  \n  has(primaryKey, secondaryKey) {\n    if(!this.hasPrimary(primaryKey)) return false;    \n    return this.getMiddles(primaryKey).has(secondaryKey);\n  }\n  \n  getMiddles(primaryKey) {\n    return this._leftToMiddle.get(primaryKey);\n  }\n\n  get(primaryKey, secondaryKey) {\n    if(!this.has(primaryKey, secondaryKey)) return undefined;\n    return this._leftToMiddle.get(primaryKey).get(secondaryKey);\n  }\n  \n  getOrCreate(primaryKey, secondaryKey, creatorFunction) {\n    return this._leftToMiddle\n      .getOrCreate(primaryKey, () => new Map())\n      .getOrCreate(secondaryKey, creatorFunction);\n  }\n  \n  allValues() {\n    return [...this._leftToMiddle.values()].flatMap(inner => [...inner.values()]);\n  }\n  \n}\n"],"mappings":";;;MAAqBA,UAAU;EAAA;EAAA;IAAA;IAAA;MAAA;MAAA;MAAA,mBAAVA,UAAU,GAAhB,MAAMA,UAAU,CAAC;QAE9BC,WAAW,GAAG;UACZ,IAAI,CAACC,aAAa,GAAG,IAAIC,GAAG,EAAE;QAChC;QAEAC,GAAG,CAACC,UAAU,EAAEC,YAAY,EAAEC,KAAK,EAAE;UACnC,IAAI,CAACC,WAAW,CAACH,UAAU,EAAEC,YAAY,EAAE,MAAMC,KAAK,CAAC;QACzD;QAEAE,MAAM,CAACJ,UAAU,EAAE;UACjB,IAAG,CAAC,IAAI,CAACK,UAAU,CAACL,UAAU,CAAC,EAAE;UACjC,KAAI,MAAMC,YAAY,IAAI,IAAI,CAACK,UAAU,CAACN,UAAU,CAAC,EAAE;YACrD,IAAI,CAACO,cAAc,CAACC,MAAM,CAACP,YAAY,CAAC;UAC1C;UACA,IAAI,CAACJ,aAAa,CAACW,MAAM,CAACR,UAAU,CAAC;QACvC;QAEAS,eAAe,CAACT,UAAU,EAAEC,YAAY,EAAE;UACxC,IAAG,CAAC,IAAI,CAACS,GAAG,CAACV,UAAU,EAAEC,YAAY,CAAC,EAAE;UACxC,IAAI,CAACK,UAAU,CAACN,UAAU,CAAC,CAACQ,MAAM,CAACP,YAAY,CAAC;UAChD,IAAG,IAAI,CAACK,UAAU,CAACN,UAAU,CAAC,CAACW,IAAI,KAAK,CAAC,EAAE;YACzC,IAAI,CAACd,aAAa,CAACW,MAAM,CAACR,UAAU,CAAC;UACvC;QACF;QAEAY,KAAK,GAAG;UACN,IAAI,CAACf,aAAa,CAACe,KAAK,EAAE;QAC5B;QAEAP,UAAU,CAACL,UAAU,EAAE;UACrB,OAAO,IAAI,CAACH,aAAa,CAACa,GAAG,CAACV,UAAU,CAAC;QAC3C;QAEAU,GAAG,CAACV,UAAU,EAAEC,YAAY,EAAE;UAC5B,IAAG,CAAC,IAAI,CAACI,UAAU,CAACL,UAAU,CAAC,EAAE,OAAO,KAAK;UAC7C,OAAO,IAAI,CAACM,UAAU,CAACN,UAAU,CAAC,CAACU,GAAG,CAACT,YAAY,CAAC;QACtD;QAEAK,UAAU,CAACN,UAAU,EAAE;UACrB,OAAO,IAAI,CAACH,aAAa,CAACgB,GAAG,CAACb,UAAU,CAAC;QAC3C;QAEAa,GAAG,CAACb,UAAU,EAAEC,YAAY,EAAE;UAC5B,IAAG,CAAC,IAAI,CAACS,GAAG,CAACV,UAAU,EAAEC,YAAY,CAAC,EAAE,OAAOa,SAAS;UACxD,OAAO,IAAI,CAACjB,aAAa,CAACgB,GAAG,CAACb,UAAU,CAAC,CAACa,GAAG,CAACZ,YAAY,CAAC;QAC7D;QAEAE,WAAW,CAACH,UAAU,EAAEC,YAAY,EAAEc,eAAe,EAAE;UACrD,OAAO,IAAI,CAAClB,aAAa,CACtBM,WAAW,CAACH,UAAU,EAAE,MAAM,IAAIF,GAAG,EAAE,CAAC,CACxCK,WAAW,CAACF,YAAY,EAAEc,eAAe,CAAC;QAC/C;QAEAC,SAAS,GAAG;UACV,OAAO,CAAC,GAAG,IAAI,CAACnB,aAAa,CAACoB,MAAM,EAAE,CAAC,CAACC,OAAO,CAACC,KAAK,IAAI,CAAC,GAAGA,KAAK,CAACF,MAAM,EAAE,CAAC,CAAC;QAC/E;MAEF,CAAC;MAAA;QAAA;UAAA;QAAA;QAAA;UAAA,mBA1DoBtB,2CAAU;UAAA;QAAA;QAAA;QAAA;MAAA;IAAA;EAAA;AAAA"}