// Cache system is a bit outdated and could do with work module.exports = function(window, options, logger) { var cache = null; if (options.env !== 'development') { try { cache = (typeof window.localStorage === 'undefined') ? null : window.localStorage; } catch (_) {} } return { setCSS: function(path, lastModified, modifyVars, styles) { if (cache) { logger.info('saving ' + path + ' to cache.'); try { cache.setItem(path, styles); cache.setItem(path + ':timestamp', lastModified); if (modifyVars) { cache.setItem(path + ':vars', JSON.stringify(modifyVars)); } } catch(e) { //TODO - could do with adding more robust error handling logger.error('failed to save "' + path + '" to local storage for caching.'); } } }, getCSS: function(path, webInfo, modifyVars) { var css = cache && cache.getItem(path), timestamp = cache && cache.getItem(path + ':timestamp'), vars = cache && cache.getItem(path + ':vars'); modifyVars = modifyVars || {}; if (timestamp && webInfo.lastModified && (new Date(webInfo.lastModified).valueOf() === new Date(timestamp).valueOf()) && (!modifyVars && !vars || JSON.stringify(modifyVars) === vars)) { // Use local copy return css; } } }; };