let stateCache = { } ; interface Cache { get ( item , key , defaultValue ? ) : any ; set ( item , key , newValue ) : void ; clear ( item ) : void ; reset ( ) : void ; } const cacheAPI = { get ( item , key , defaultValue ) { if ( typeof item === 'string' ) { if ( stateCache [ item ] && stateCache [ item ] [ key ] ) { return stateCache [ item ] [ key ] ; } } else if ( item && item . type && item . id != null && stateCache [ item . type ] && stateCache [ item . type ] [ item . id ] ) { return stateCache [ item . type ] [ item . id ] [ key ] ; } return defaultValue ; } , set ( item , key , newValue ) { if ( typeof item === 'string' ) { stateCache [ item ] = stateCache [ item ] || { } ; stateCache [ item ] [ key ] = newValue ; } else if ( item && item . type && item . id != null ) { stateCache [ item . type ] = stateCache [ item . type ] || { } ; stateCache [ item . type ] [ item . id ] = stateCache [ item . type ] [ item . id ] || { } ; stateCache [ item . type ] [ item . id ] [ key ] = newValue ; } } , clear ( item ) { if ( typeof item === 'string' ) { delete stateCache [ item ] ; } else if ( item && item . type && item . id != null && stateCache [ item . type ] ) { delete stateCache [ item . type ] [ item . id ] ; } } , reset ( ) { stateCache = { } ; } , } ; export default cacheAPI ;