UNPKG

2.59 kBJavaScriptView Raw
1// Mock localStorage
2'use strict';
3
4(function () {
5
6 function createStorage() {
7 var s = {},
8 noopCallback = function noopCallback() {},
9 _itemInsertionCallback = noopCallback;
10
11 Object.defineProperty(s, 'setItem', {
12 get: function get() {
13 return function (k, v) {
14 k = k + '';
15 if (!s.hasOwnProperty(k)) {
16 _itemInsertionCallback(s.length);
17 }
18 s[k] = v + '';
19 };
20 }
21 });
22 Object.defineProperty(s, 'getItem', {
23 get: function get() {
24 return function (k) {
25 k = k + '';
26 if (s.hasOwnProperty(k)) {
27 return s[k];
28 } else {
29 return null;
30 }
31 };
32 }
33 });
34 Object.defineProperty(s, 'removeItem', {
35 get: function get() {
36 return function (k) {
37 k = k + '';
38 if (s.hasOwnProperty(k)) {
39 delete s[k];
40 }
41 };
42 }
43 });
44 Object.defineProperty(s, 'clear', {
45 get: function get() {
46 return function () {
47 for (var k in s) {
48 if (s.hasOwnProperty(k)) {
49 delete s[k];
50 }
51 }
52 };
53 }
54 });
55 Object.defineProperty(s, 'length', {
56 get: function get() {
57 return Object.keys(s).length;
58 }
59 });
60 Object.defineProperty(s, "key", {
61 value: function value(k) {
62 var key = Object.keys(s)[k];
63 return !key ? null : key;
64 }
65 });
66 Object.defineProperty(s, 'itemInsertionCallback', {
67 get: function get() {
68 return _itemInsertionCallback;
69 },
70 set: function set(v) {
71 if (!v || typeof v != 'function') {
72 v = noopCallback;
73 }
74 _itemInsertionCallback = v;
75 }
76 });
77 return s;
78 }
79
80 global.localStorage = createStorage();
81 global.sessionStorage = createStorage();
82
83 if (typeof window === 'undefined') {
84 global.window = {};
85 }
86
87 window.localStorage = global.localStorage;
88 window.sessionStorage = global.sessionStorage;
89})();
\No newline at end of file