atom.storage
Advanced tools
Comparing version 0.2.0 to 0.3.0
@@ -6,5 +6,12 @@ "use strict"; | ||
}); | ||
exports.expireNow = exports.unsafeDeleteAtom = undefined; | ||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; | ||
var _ramda = require("ramda"); | ||
var R = _interopRequireWildcard(_ramda); | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } | ||
@@ -34,11 +41,18 @@ | ||
var getValue = function getValue(storage, key, schema, value) { | ||
var getValue = function getValue(storage, key, schema, defaultValue, time) { | ||
var json = storage.getItem(key); | ||
if (!json) return value; | ||
if (!json) return defaultValue; | ||
var data = tryParse(json); | ||
if (!seemsValid(data)) return value; | ||
if (!seemsValid(data) || R.equals(data.schema, schema) || R.equals(data.value, defaultValue)) { | ||
storage.removeItem(key); | ||
return defaultValue; | ||
} | ||
if (data.schema !== schema) return value; | ||
if (0 <= time) { | ||
data.expires = time + Date.now(); | ||
storage.setItem(key, JSON.stringify(data)); | ||
} | ||
return data.value; | ||
@@ -92,3 +106,3 @@ }; | ||
var value = options.value; | ||
var defaultValue = options.value; | ||
var Atom = options.Atom; | ||
@@ -104,3 +118,3 @@ var time = options.time; | ||
if (!atom) { | ||
atoms[key] = atom = Atom(getValue(storage, key, schema, value)); | ||
atoms[key] = atom = Atom(getValue(storage, key, schema, defaultValue, time)); | ||
@@ -113,9 +127,13 @@ if (process.NODE_ENV !== "production") usedOptions.set(atom, options); | ||
changes.onValue(function (value) { | ||
var data = { value: value }; | ||
if (R.equals(value, defaultValue)) { | ||
storage.removeItem(key); | ||
} else { | ||
var data = { value: value }; | ||
if (schema !== undefined) data.schema = schema; | ||
if (schema !== undefined) data.schema = schema; | ||
if (0 <= time) data.expires = time + Date.now(); | ||
if (0 <= time) data.expires = time + Date.now(); | ||
storage.setItem(key, JSON.stringify(data)); | ||
storage.setItem(key, JSON.stringify(data)); | ||
} | ||
}); | ||
@@ -131,2 +149,2 @@ } else if (process.NODE_ENV !== "production") { | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,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LENBQWYsRUFDRixNQUFNLElBQUksS0FBSixnRUFBdUUsS0FBSyxHQUFMLHlCQUE0QixLQUFLLENBQUwsaUJBQWtCLEtBQUssV0FBVyxDQUFYLENBQUwsb0JBQWlDLEtBQUssUUFBUSxDQUFSLENBQUwsT0FBdEosQ0FBTixDQURGO0tBREY7R0FGSzs7QUFRUCxTQUFPLElBQVAsQ0FuQzZDO0NBQWhDIiwiZmlsZSI6ImF0b20uc3RvcmFnZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHN0b3JhZ2VzID0gbmV3IFdlYWtNYXAoKVxubGV0IHVzZWRPcHRpb25zXG5pZiAocHJvY2Vzcy5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gIHVzZWRPcHRpb25zID0gbmV3IFdlYWtNYXAoKVxuXG5jb25zdCBnZXRBdG9tcyA9IHN0b3JhZ2UgPT4ge1xuICBsZXQgYXRvbXMgPSBzdG9yYWdlcy5nZXQoc3RvcmFnZSlcbiAgaWYgKCFhdG9tcylcbiAgICBzdG9yYWdlcy5zZXQoc3RvcmFnZSwgYXRvbXMgPSB7fSlcbiAgcmV0dXJuIGF0b21zXG59XG5cbmNvbnN0IHRyeVBhcnNlID0ganNvbiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3JcbiAgfVxufVxuXG5jb25zdCBzZWVtc1ZhbGlkID1cbiAgZGF0YSA9PiBkYXRhICYmIGRhdGEuY29uc3RydWN0b3IgPT09IE9iamVjdCAmJiBcInZhbHVlXCIgaW4gZGF0YVxuXG5jb25zdCBnZXRWYWx1ZSA9IChzdG9yYWdlLCBrZXksIHNjaGVtYSwgdmFsdWUpID0+IHtcbiAgY29uc3QganNvbiA9IHN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIGlmICghanNvbilcbiAgICByZXR1cm4gdmFsdWVcblxuICBjb25zdCBkYXRhID0gdHJ5UGFyc2UoanNvbilcbiAgaWYgKCFzZWVtc1ZhbGlkKGRhdGEpKVxuICAgIHJldHVybiB2YWx1ZVxuXG4gIGlmIChkYXRhLnNjaGVtYSAhPT0gc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuXG4gIHJldHVybiBkYXRhLnZhbHVlXG59XG5cbmV4cG9ydCBjb25zdCB1bnNhZmVEZWxldGVBdG9tID0gKHtzdG9yYWdlLCBrZXl9KSA9PiB7XG4gIGNvbnN0IGF0b21zID0gZ2V0QXRvbXMoc3RvcmFnZSlcbiAgZGVsZXRlIGF0b21zW2tleV1cbn1cblxuZXhwb3J0IGNvbnN0IGV4cGlyZU5vdyA9ICh7c3RvcmFnZSwgcmVnZXgsIHVuc2FmZURlbGV0ZUF0b21zfSkgPT4ge1xuICBmb3IgKGxldCBpPTA7IGk8c3RvcmFnZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGtleSA9IHN0b3JhZ2Uua2V5KGkpXG5cbiAgICBpZiAoIXJlZ2V4LnRlc3Qoa2V5KSlcbiAgICAgIGNvbnRpbnVlXG5cbiAgICBjb25zdCBkYXRhID0gdHJ5UGFyc2Uoc3RvcmFnZS5nZXRJdGVtKGtleSkpXG4gICAgaWYgKCFzZWVtc1ZhbGlkKGRhdGEpKVxuICAgICAgY29udGludWVcblxuICAgIGlmIChkYXRhLmV4cGlyZXMgPD0gRGF0ZS5ub3coKSkge1xuICAgICAgc3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcblxuICAgICAgaWYgKHVuc2FmZURlbGV0ZUF0b21zKVxuICAgICAgICB1bnNhZmVEZWxldGVBdG9tKHtzdG9yYWdlLCBrZXl9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG93KHgpIHtcbiAgc3dpdGNoICh0eXBlb2YgeCkge1xuICBjYXNlIFwic3RyaW5nXCI6XG4gIGNhc2UgXCJvYmplY3RcIjpcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeClcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gYCR7eH1gXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKHtrZXksIHN0b3JhZ2UsIC4uLm9wdGlvbnN9KSA9PiB7XG4gIGNvbnN0IHt2YWx1ZSwgQXRvbSwgdGltZSwgc2NoZW1hLCBkZWJvdW5jZX0gPSBvcHRpb25zXG5cbiAgY29uc3QgYXRvbXMgPSBnZXRBdG9tcyhzdG9yYWdlKVxuXG4gIGxldCBhdG9tID0gYXRvbXNba2V5XVxuICBpZiAoIWF0b20pIHtcbiAgICBhdG9tc1trZXldID0gYXRvbSA9IEF0b20oZ2V0VmFsdWUoc3RvcmFnZSwga2V5LCBzY2hlbWEsIHZhbHVlKSlcblxuICAgIGlmIChwcm9jZXNzLk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgIHVzZWRPcHRpb25zLnNldChhdG9tLCBvcHRpb25zKVxuXG4gICAgbGV0IGNoYW5nZXMgPSBhdG9tLmNoYW5nZXMoKVxuICAgIGlmICgwIDw9IGRlYm91bmNlKVxuICAgICAgY2hhbmdlcyA9IGNoYW5nZXMuZGVib3VuY2UoZGVib3VuY2UpXG5cbiAgICBjaGFuZ2VzLm9uVmFsdWUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHt2YWx1ZX1cblxuICAgICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBkYXRhLnNjaGVtYSA9IHNjaGVtYVxuXG4gICAgICBpZiAoMCA8PSB0aW1lKVxuICAgICAgICBkYXRhLmV4cGlyZXMgPSB0aW1lICsgRGF0ZS5ub3coKVxuXG4gICAgICBzdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICB9KVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc3Qgb2xkT3B0aW9ucyA9IHVzZWRPcHRpb25zLmdldChhdG9tKVxuICAgIGZvciAoY29uc3QgayBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9uc1trXSAhPT0gb2xkT3B0aW9uc1trXSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhdG9tLnN0b3JhZ2U6IENyZWF0ZWQgdHdvIGF0b21zIHdpdGggc2FtZSBzdG9yYWdlIGFuZCBrZXkgJHtzaG93KGtleSl9LCBidXQgZGlmZmVyZW50ICR7c2hvdyhrKX06IGZpcnN0ICR7c2hvdyhvbGRPcHRpb25zW2tdKX0gYW5kIGxhdGVyICR7c2hvdyhvcHRpb25zW2tdKX0uYClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXRvbVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,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O0FBR0wsWUFBSSxXQUFXLFNBQVgsRUFDRixLQUFLLE1BQUwsR0FBYyxNQUFkLENBREY7O0FBR0EsWUFBSSxLQUFLLElBQUwsRUFDRixLQUFLLE9BQUwsR0FBZSxPQUFPLEtBQUssR0FBTCxFQUFQLENBRGpCOztBQUdBLGdCQUFRLE9BQVIsQ0FBZ0IsR0FBaEIsRUFBcUIsS0FBSyxTQUFMLENBQWUsSUFBZixDQUFyQixFQVRLO09BRlA7S0FEYyxDQUFoQixDQVZTO0dBQVgsTUF5Qk8sSUFBSSxRQUFRLFFBQVIsS0FBcUIsWUFBckIsRUFBbUM7QUFDNUMsUUFBTSxhQUFhLFlBQVksR0FBWixDQUFnQixJQUFoQixDQUFiLENBRHNDO0FBRTVDLFNBQUssSUFBTSxDQUFOLElBQVcsT0FBaEIsRUFBeUI7QUFDdkIsVUFBSSxRQUFRLENBQVIsTUFBZSxXQUFXLENBQVgsQ0FBZixFQUNGLE1BQU0sSUFBSSxLQUFKLGdFQUF1RSxLQUFLLEdBQUwseUJBQTRCLEtBQUssQ0FBTCxpQkFBa0IsS0FBSyxXQUFXLENBQVgsQ0FBTCxvQkFBaUMsS0FBSyxRQUFRLENBQVIsQ0FBTCxPQUF0SixDQUFOLENBREY7S0FERjtHQUZLOztBQVFQLFNBQU8sSUFBUCxDQXZDNkM7Q0FBaEMiLCJmaWxlIjoiYXRvbS5zdG9yYWdlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUiBmcm9tIFwicmFtZGFcIlxuXG5jb25zdCBzdG9yYWdlcyA9IG5ldyBXZWFrTWFwKClcbmxldCB1c2VkT3B0aW9uc1xuaWYgKHByb2Nlc3MuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICB1c2VkT3B0aW9ucyA9IG5ldyBXZWFrTWFwKClcblxuY29uc3QgZ2V0QXRvbXMgPSBzdG9yYWdlID0+IHtcbiAgbGV0IGF0b21zID0gc3RvcmFnZXMuZ2V0KHN0b3JhZ2UpXG4gIGlmICghYXRvbXMpXG4gICAgc3RvcmFnZXMuc2V0KHN0b3JhZ2UsIGF0b21zID0ge30pXG4gIHJldHVybiBhdG9tc1xufVxuXG5jb25zdCB0cnlQYXJzZSA9IGpzb24gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yXG4gIH1cbn1cblxuY29uc3Qgc2VlbXNWYWxpZCA9XG4gIGRhdGEgPT4gZGF0YSAmJiBkYXRhLmNvbnN0cnVjdG9yID09PSBPYmplY3QgJiYgXCJ2YWx1ZVwiIGluIGRhdGFcblxuY29uc3QgZ2V0VmFsdWUgPSAoc3RvcmFnZSwga2V5LCBzY2hlbWEsIGRlZmF1bHRWYWx1ZSwgdGltZSkgPT4ge1xuICBjb25zdCBqc29uID0gc3RvcmFnZS5nZXRJdGVtKGtleSlcbiAgaWYgKCFqc29uKVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVcblxuICBjb25zdCBkYXRhID0gdHJ5UGFyc2UoanNvbilcbiAgaWYgKCFzZWVtc1ZhbGlkKGRhdGEpIHx8IFIuZXF1YWxzKGRhdGEuc2NoZW1hLCBzY2hlbWEpIHx8IFIuZXF1YWxzKGRhdGEudmFsdWUsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgfVxuXG4gIGlmICgwIDw9IHRpbWUpIHtcbiAgICBkYXRhLmV4cGlyZXMgPSB0aW1lICsgRGF0ZS5ub3coKVxuXG4gICAgc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gIH1cblxuICByZXR1cm4gZGF0YS52YWx1ZVxufVxuXG5leHBvcnQgY29uc3QgdW5zYWZlRGVsZXRlQXRvbSA9ICh7c3RvcmFnZSwga2V5fSkgPT4ge1xuICBjb25zdCBhdG9tcyA9IGdldEF0b21zKHN0b3JhZ2UpXG4gIGRlbGV0ZSBhdG9tc1trZXldXG59XG5cbmV4cG9ydCBjb25zdCBleHBpcmVOb3cgPSAoe3N0b3JhZ2UsIHJlZ2V4LCB1bnNhZmVEZWxldGVBdG9tc30pID0+IHtcbiAgZm9yIChsZXQgaT0wOyBpPHN0b3JhZ2UubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBrZXkgPSBzdG9yYWdlLmtleShpKVxuXG4gICAgaWYgKCFyZWdleC50ZXN0KGtleSkpXG4gICAgICBjb250aW51ZVxuXG4gICAgY29uc3QgZGF0YSA9IHRyeVBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShrZXkpKVxuICAgIGlmICghc2VlbXNWYWxpZChkYXRhKSlcbiAgICAgIGNvbnRpbnVlXG5cbiAgICBpZiAoZGF0YS5leHBpcmVzIDw9IERhdGUubm93KCkpIHtcbiAgICAgIHN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpXG5cbiAgICAgIGlmICh1bnNhZmVEZWxldGVBdG9tcylcbiAgICAgICAgdW5zYWZlRGVsZXRlQXRvbSh7c3RvcmFnZSwga2V5fSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdyh4KSB7XG4gIHN3aXRjaCAodHlwZW9mIHgpIHtcbiAgY2FzZSBcInN0cmluZ1wiOlxuICBjYXNlIFwib2JqZWN0XCI6XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHgpXG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIGAke3h9YFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh7a2V5LCBzdG9yYWdlLCAuLi5vcHRpb25zfSkgPT4ge1xuICBjb25zdCB7dmFsdWU6IGRlZmF1bHRWYWx1ZSwgQXRvbSwgdGltZSwgc2NoZW1hLCBkZWJvdW5jZX0gPSBvcHRpb25zXG5cbiAgY29uc3QgYXRvbXMgPSBnZXRBdG9tcyhzdG9yYWdlKVxuXG4gIGxldCBhdG9tID0gYXRvbXNba2V5XVxuICBpZiAoIWF0b20pIHtcbiAgICBhdG9tc1trZXldID0gYXRvbSA9IEF0b20oZ2V0VmFsdWUoc3RvcmFnZSwga2V5LCBzY2hlbWEsIGRlZmF1bHRWYWx1ZSwgdGltZSkpXG5cbiAgICBpZiAocHJvY2Vzcy5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICB1c2VkT3B0aW9ucy5zZXQoYXRvbSwgb3B0aW9ucylcblxuICAgIGxldCBjaGFuZ2VzID0gYXRvbS5jaGFuZ2VzKClcbiAgICBpZiAoMCA8PSBkZWJvdW5jZSlcbiAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzLmRlYm91bmNlKGRlYm91bmNlKVxuXG4gICAgY2hhbmdlcy5vblZhbHVlKHZhbHVlID0+IHtcbiAgICAgIGlmIChSLmVxdWFscyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHt2YWx1ZX1cblxuICAgICAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgZGF0YS5zY2hlbWEgPSBzY2hlbWFcblxuICAgICAgICBpZiAoMCA8PSB0aW1lKVxuICAgICAgICAgIGRhdGEuZXhwaXJlcyA9IHRpbWUgKyBEYXRlLm5vdygpXG5cbiAgICAgICAgc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIGlmIChwcm9jZXNzLk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnN0IG9sZE9wdGlvbnMgPSB1c2VkT3B0aW9ucy5nZXQoYXRvbSlcbiAgICBmb3IgKGNvbnN0IGsgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnNba10gIT09IG9sZE9wdGlvbnNba10pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYXRvbS5zdG9yYWdlOiBDcmVhdGVkIHR3byBhdG9tcyB3aXRoIHNhbWUgc3RvcmFnZSBhbmQga2V5ICR7c2hvdyhrZXkpfSwgYnV0IGRpZmZlcmVudCAke3Nob3coayl9OiBmaXJzdCAke3Nob3cob2xkT3B0aW9uc1trXSl9IGFuZCBsYXRlciAke3Nob3cob3B0aW9uc1trXSl9LmApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0b21cbn1cbiJdfQ== |
{ | ||
"name": "atom.storage", | ||
"version": "0.2.0", | ||
"description": "Minimalistic storage implementation for Atoms", | ||
"version": "0.3.0", | ||
"description": "Reactive variables with Storage", | ||
"main": "lib/atom.storage.js", | ||
@@ -25,2 +25,5 @@ "scripts": { | ||
"homepage": "https://github.com/calmm-js/atom.storage#readme", | ||
"dependencies": { | ||
"ramda": ">=0.20.1 <0.22.0" | ||
}, | ||
"devDependencies": { | ||
@@ -37,5 +40,4 @@ "babel-cli": "^6.7.5", | ||
"node-localstorage": "^1.3.0", | ||
"nyc": "^6.4.0", | ||
"ramda": "^0.21.0" | ||
"nyc": "^6.4.0" | ||
} | ||
} |
@@ -1,5 +0,5 @@ | ||
Minimalistic | ||
[`Storage`](https://developer.mozilla.org/en-US/docs/Web/API/Storage) | ||
A [`Storage`](https://developer.mozilla.org/en-US/docs/Web/API/Storage) | ||
(e.g. [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)) | ||
implementation for Atoms. | ||
implementation for Atoms that is designed for persisting non-critical data such | ||
as selections made by the user over sessions. | ||
@@ -41,3 +41,3 @@ [![npm version](https://badge.fury.io/js/atom.storage.svg)](http://badge.fury.io/js/atom.storage) [![Build Status](https://travis-ci.org/calmm-js/atom.storage.svg?branch=master)](https://travis-ci.org/calmm-js/atom.storage) [![](https://david-dm.org/calmm-js/atom.storage.svg)](https://david-dm.org/calmm-js/atom.storage) [![](https://david-dm.org/calmm-js/atom.storage/dev-status.svg)](https://david-dm.org/calmm-js/atom.storage#info=devDependencies) [![Gitter](https://img.shields.io/gitter/room/calmm-js/chat.js.svg?style=flat-square)](https://gitter.im/calmm-js/chat) | ||
```js | ||
const stored = Stored({key: "my-stored-model", | ||
const stored = Stored({key: "my-unique-app-prefix:my-stored-model", | ||
value: defaultValue, | ||
@@ -48,4 +48,7 @@ Atom, | ||
The given default value is only used when the given storage does not already | ||
contain a value for the given key. | ||
The default value is used when the storage does not already contain a value for | ||
the key. Also, when a stored atom is written to with a value that is | ||
[equal](http://ramdajs.com/0.21.0/docs/#equals) to the default value, the | ||
persisted value for the stored atom is removed from the storage. This avoids | ||
unnecessary use of storage space. | ||
@@ -66,3 +69,3 @@ The value of the atom is converted to a string by calling | ||
```js | ||
const stored1 = Stored({key: "my-stored-model", | ||
const stored1 = Stored({key: "my-unique-app-prefix:my-stored-model", | ||
value: defaultValue, | ||
@@ -72,3 +75,3 @@ Atom, | ||
const stored2 = Stored({key: "my-stored-model", | ||
const stored2 = Stored({key: "my-unique-app-prefix:my-stored-model", | ||
value: defaultValue, | ||
@@ -92,3 +95,3 @@ Atom, | ||
time: Maybe Milliseconds, | ||
schema: Maybe (Number | Boolean | String | null), | ||
schema: Maybe JSON, | ||
debounce: Maybe Milliseconds} | ||
@@ -101,5 +104,5 @@ ``` | ||
The `schema`, if specified, is stored with the value, and checked when a stored | ||
atom is created. If the stored `schema` is not equal, as determined by `===`, | ||
to the given value, then the stored value is ignored and the given default is | ||
used instead. | ||
atom is created. If the stored `schema` is not | ||
[equal](http://ramdajs.com/0.21.0/docs/#equals) to the given schema, then the | ||
stored value is removed and the given default is used instead. | ||
@@ -112,2 +115,8 @@ The `debounce`, if specified, is the debounce period, in milliseconds, to use | ||
When a value is persisted to storage, the expiration time is set to `time + | ||
Date.now()`. Also, when a stored atom with a particular key is first created | ||
(e.g. when the application is started), the expiration time is updated to | ||
`time + Date.now()`. This way a value is kept alive as long as it is being | ||
used. | ||
The named export | ||
@@ -128,2 +137,4 @@ | ||
Note the use of `^` in the above regex. | ||
### Combining with Undo | ||
@@ -130,0 +141,0 @@ |
@@ -0,1 +1,3 @@ | ||
import * as R from "ramda" | ||
const storages = new WeakMap() | ||
@@ -24,14 +26,19 @@ let usedOptions | ||
const getValue = (storage, key, schema, value) => { | ||
const getValue = (storage, key, schema, defaultValue, time) => { | ||
const json = storage.getItem(key) | ||
if (!json) | ||
return value | ||
return defaultValue | ||
const data = tryParse(json) | ||
if (!seemsValid(data)) | ||
return value | ||
if (!seemsValid(data) || R.equals(data.schema, schema) || R.equals(data.value, defaultValue)) { | ||
storage.removeItem(key) | ||
return defaultValue | ||
} | ||
if (data.schema !== schema) | ||
return value | ||
if (0 <= time) { | ||
data.expires = time + Date.now() | ||
storage.setItem(key, JSON.stringify(data)) | ||
} | ||
return data.value | ||
@@ -76,3 +83,3 @@ } | ||
export default ({key, storage, ...options}) => { | ||
const {value, Atom, time, schema, debounce} = options | ||
const {value: defaultValue, Atom, time, schema, debounce} = options | ||
@@ -83,3 +90,3 @@ const atoms = getAtoms(storage) | ||
if (!atom) { | ||
atoms[key] = atom = Atom(getValue(storage, key, schema, value)) | ||
atoms[key] = atom = Atom(getValue(storage, key, schema, defaultValue, time)) | ||
@@ -94,11 +101,15 @@ if (process.NODE_ENV !== "production") | ||
changes.onValue(value => { | ||
const data = {value} | ||
if (R.equals(value, defaultValue)) { | ||
storage.removeItem(key) | ||
} else { | ||
const data = {value} | ||
if (schema !== undefined) | ||
data.schema = schema | ||
if (schema !== undefined) | ||
data.schema = schema | ||
if (0 <= time) | ||
data.expires = time + Date.now() | ||
if (0 <= time) | ||
data.expires = time + Date.now() | ||
storage.setItem(key, JSON.stringify(data)) | ||
storage.setItem(key, JSON.stringify(data)) | ||
} | ||
}) | ||
@@ -105,0 +116,0 @@ } else if (process.NODE_ENV !== "production") { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
40833
11
253
154
1
1
1
+ Addedramda@>=0.20.1 <0.22.0
+ Addedramda@0.21.0(transitive)