{"version":3,"sources":["Honeywell.ClientModel.Cache.ts"],"names":["exports","cacheMonad","getValue","putValue","getData","key","result","Q","resolve","then","val","sessionStorageCache","sessionStorage","JSON","parse","value","stringify"],"mappings":"+GAQaA,EAAAC,WAAa,SAAIC,EAAgCC,GAC9D,MAAA,UAACC,EAA6BC,GAC1B,GAAIC,GAAYJ,EAASG,EACzB,OAAIC,GACOC,EAAEC,QAAQF,GAEdF,IACFK,KAAK,SAACC,GAIH,MAHIA,IACAP,EAASE,EAAKK,GAEXA,MAYNV,EAAAW,oBAAoCX,EAAAC,WAAW,SAACI,GACzD,GAAIO,gBAAkBA,eAAeP,GACjC,MAAOQ,MAAKC,MAAMF,eAAeP,KAGzC,SAAIA,EAAaU,GACTH,gBAAkBG,IAClBH,eAAeP,GAAOQ,KAAKG,UAAUD","file":"Honeywell.ClientModel.Cache.js","sourcesContent":["import * as Q from \"q\";\r\n\r\n/**\r\n * Cache monad. Generic cacheing algorithm\r\n * @param getValue a function to get value\r\n * @param putValue a function to put value\r\n * @returns a function to get the value and execute if required\r\n */\r\nexport const cacheMonad = (getValue: (key: string) => any, putValue: (key: string, value: T) => void) =>\r\n(getData: () => Q.Promise, key: string) => {\r\n var result: T = getValue(key);\r\n if (result) {\r\n return Q.resolve(result);\r\n }\r\n return getData()\r\n .then((val: T) => {\r\n if (val) {\r\n putValue(key, val);\r\n }\r\n return val;\r\n });\r\n};\r\n\r\n/**\r\n * CacheWrapper function\r\n */\r\nexport type CacheWrapper = (getData: () => Q.Promise, key: string) => Q.Promise;\r\n\r\n/**\r\n * Get value from the session storage, but if not found execute a function and put it to the session storage\r\n */\r\nexport const sessionStorageCache: CacheWrapper = cacheMonad((key: string) => {\r\n if (sessionStorage && sessionStorage[key]) {\r\n return JSON.parse(sessionStorage[key]);\r\n }\r\n},\r\n(key: string, value: T) => {\r\n if (sessionStorage && value) {\r\n sessionStorage[key] = JSON.stringify(value);\r\n }\r\n});"]}