memStorage.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. var keys = require('./keys');
  2. exports = {
  3. getItem: function(key) {
  4. return (API_KEYS[key] ? cloak[key] : this[key]) || null;
  5. },
  6. setItem: function(key, val) {
  7. API_KEYS[key] ? (cloak[key] = val) : (this[key] = val);
  8. },
  9. removeItem: function(key) {
  10. API_KEYS[key] ? delete cloak[key] : delete this[key];
  11. },
  12. key: function(i) {
  13. var keys = enumerableKeys();
  14. return i >= 0 && i < keys.length ? keys[i] : null;
  15. },
  16. clear: function() {
  17. var keys = uncloakedKeys();
  18. for (var i = 0, key; (key = keys[i]); i++) delete this[key];
  19. keys = cloakedKeys();
  20. for (var _i = 0, _key; (_key = keys[_i]); _i++) delete cloak[_key];
  21. }
  22. };
  23. Object.defineProperty(exports, 'length', {
  24. enumerable: false,
  25. configurable: true,
  26. get: function() {
  27. return enumerableKeys().length;
  28. }
  29. });
  30. var cloak = {};
  31. var API_KEYS = {
  32. getItem: 1,
  33. setItem: 1,
  34. removeItem: 1,
  35. key: 1,
  36. clear: 1,
  37. length: 1
  38. };
  39. function enumerableKeys() {
  40. return uncloakedKeys().concat(cloakedKeys());
  41. }
  42. function uncloakedKeys() {
  43. return keys(exports).filter(function(key) {
  44. return !API_KEYS[key];
  45. });
  46. }
  47. function cloakedKeys() {
  48. return keys(cloak);
  49. }
  50. module.exports = exports;