{"version":3,"file":"CompositeKeyWeakMap.js","sourceRoot":"","sources":["../src/utils/CompositeKeyWeakMap.ts"],"names":[],"mappings":";;AAAA,gDAAmD;AAEnD;;;;;;GAMG;AACH;IAAA;QACU,aAAQ,GAAG,IAAI,OAAO,EAAY,CAAC;IAqC7C,CAAC;IAnCC,iCAAG,GAAH,UAAI,IAAW,EAAE,KAAQ;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAExB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAExB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACV,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACjB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrB,CAAC;YAED,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,iCAAG,GAAH,UAAI,IAAW;QACb,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEzB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzB,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,KAAK,CAAC;YACR,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAW,CAAC;IACrB,CAAC;IAED,iCAAG,GAAH,UAAI,IAAW;QACb,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IACH,0BAAC;AAAD,CAAC,AAtCD,IAsCC;AAtCY,kDAAmB","sourcesContent":["import isUndefined = require('lodash/isUndefined');\n\n/**\n * A map for weakly holding nested references.\n * @private\n * @export\n * @class CompositeKeyWeakMap\n * @template T\n */\nexport class CompositeKeyWeakMap<T> {\n private _weakMap = new WeakMap<any, any>();\n\n set(keys: any[], value: T): void {\n let map = this._weakMap;\n\n for (let i = 0, len = keys.length - 1; i < len; i++) {\n const key = keys[i];\n let next = map.get(key);\n\n if (!next) {\n next = new Map();\n map.set(key, next);\n }\n\n map = next;\n }\n\n map.set(keys[keys.length - 1], value);\n }\n\n get(keys: any[]): T {\n let next = this._weakMap;\n\n for (let i = 0, len = keys.length; i < len; i++) {\n next = next.get(keys[i]);\n\n if (isUndefined(next)) {\n break;\n }\n }\n\n return next as any;\n }\n\n has(keys: any[]): boolean {\n return !isUndefined(this.get(keys));\n }\n}\n"]}