{"version":3,"sources":["modules/utils/singleton.es6.js"],"names":["singleton","makeStorage","storage","load","key","store","value","createInstance","args","JSON","stringify","instance"],"mappings":";;;;YASgBA,S,GAAAA,S;AAThB,aAASC,WAAT,GAAuB;AACnB,YAAIC,UAAU,EAAd;;AAEA,eAAO;AACHC,kBAAM,cAACC,GAAD;AAAA,uBAASF,QAAQE,GAAR,CAAT;AAAA,aADH;AAEHC,mBAAO,eAACD,GAAD,EAAME,KAAN;AAAA,uBAAgBJ,QAAQE,GAAR,IAAeE,KAA/B;AAAA;AAFJ,SAAP;AAIH;;AAEM,aAASN,SAAT,CAAmBO,cAAnB,EAAmC;;AAEtC,YAAIL,gBAAJ;;AAEA,eAAO,YAAa;AAAA,8CAATM,IAAS;AAATA,oBAAS;AAAA;;AAEhB,gBAAI,CAACN,OAAL,EAAc;AACVA,0BAAUD,aAAV;AACH;;AAED,gBAAMG,MAAMK,KAAKC,SAAL,CAAeF,IAAf,CAAZ;;AAEA,gBAAIG,WAAWT,QAAQC,IAAR,CAAaC,GAAb,CAAf;AACA,gBAAI,CAACO,QAAL,EAAe;AACXA,2BAAWJ,gCAAkBC,IAAlB,CAAX;AACAN,wBAAQG,KAAR,CAAcD,GAAd,EAAmBO,QAAnB;AACH;;AAED,mBAAOA,QAAP;AACH,SAfD;AAgBH","file":"modules/utils/singleton.js","sourceRoot":"/source/","sourcesContent":["function makeStorage() {\r\n let storage = {};\r\n\r\n return {\r\n load: (key) => storage[key],\r\n store: (key, value) => storage[key] = value\r\n }\r\n}\r\n\r\nexport function singleton(createInstance) {\r\n\r\n let storage;\r\n\r\n return (...args) => {\r\n\r\n if (!storage) {\r\n storage = makeStorage();\r\n }\r\n\r\n const key = JSON.stringify(args);\r\n\r\n let instance = storage.load(key);\r\n if (!instance) {\r\n instance = createInstance(...args);\r\n storage.store(key, instance);\r\n }\r\n\r\n return instance;\r\n };\r\n}\r\n"]}