@merkur/plugin-session-storage 0.32.1 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.cjs +45 -15
- package/lib/index.es9.cjs +32 -9
- package/lib/index.es9.mjs +33 -10
- package/lib/index.js +45 -15
- package/lib/index.mjs +46 -16
- package/lib/index.umd.js +1 -1
- package/package.json +3 -3
package/lib/index.cjs
CHANGED
|
@@ -7,11 +7,11 @@ const KEY_PREFIX_SEPARATOR = '__';
|
|
|
7
7
|
function setKeyPrefix(
|
|
8
8
|
widget,
|
|
9
9
|
additionalWords = [],
|
|
10
|
-
defaultWords = ['widget', widget.name, widget.version]
|
|
10
|
+
defaultWords = ['widget', widget.name, widget.version],
|
|
11
11
|
) {
|
|
12
12
|
const words = [...defaultWords, ...additionalWords].filter(Boolean);
|
|
13
13
|
const prefix = `${KEY_PREFIX_SEPARATOR}${words.join(
|
|
14
|
-
KEY_PREFIX_SEPARATOR
|
|
14
|
+
KEY_PREFIX_SEPARATOR,
|
|
15
15
|
)}${KEY_PREFIX_SEPARATOR}`;
|
|
16
16
|
|
|
17
17
|
widget.$in.sessionStorage.keyPrefix = prefix;
|
|
@@ -20,10 +20,7 @@ function setKeyPrefix(
|
|
|
20
20
|
function sessionStoragePlugin() {
|
|
21
21
|
return {
|
|
22
22
|
async setup(widget) {
|
|
23
|
-
widget
|
|
24
|
-
...sessionStorageAPI(),
|
|
25
|
-
...widget,
|
|
26
|
-
};
|
|
23
|
+
core.assignMissingKeys(widget, sessionStorageAPI());
|
|
27
24
|
|
|
28
25
|
widget.$in.sessionStorage = {};
|
|
29
26
|
setKeyPrefix(widget);
|
|
@@ -58,12 +55,18 @@ function sessionStorageAPI() {
|
|
|
58
55
|
try {
|
|
59
56
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
60
57
|
|
|
58
|
+
if (shouldDeleteItem(item)) {
|
|
59
|
+
widget.sessionStorage.delete(key);
|
|
60
|
+
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
61
64
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
62
65
|
} catch (error) {
|
|
63
66
|
throw new Error(
|
|
64
67
|
`merkur.plugin-session-storage.get: Failed to parse a session storage item value identified by the key ${
|
|
65
68
|
keyPrefix + key
|
|
66
|
-
}: ${error.message}
|
|
69
|
+
}: ${error.message}`,
|
|
67
70
|
);
|
|
68
71
|
}
|
|
69
72
|
},
|
|
@@ -73,10 +76,13 @@ function sessionStorageAPI() {
|
|
|
73
76
|
* @param {object} widget A widget object.
|
|
74
77
|
* @param {string} key A key
|
|
75
78
|
* @param {*} value A value
|
|
79
|
+
* @param {object} [options] An options object.
|
|
80
|
+
* @param {number} [options.ttl] Number of milliseconds after which the
|
|
81
|
+
* value should be removed.
|
|
76
82
|
* @return {boolean} It's `true` when the operation was successful,
|
|
77
83
|
* otherwise `false`.
|
|
78
84
|
*/
|
|
79
|
-
set(widget, key, value) {
|
|
85
|
+
set(widget, key, value, options) {
|
|
80
86
|
const {
|
|
81
87
|
$dependencies: { sessionStorage },
|
|
82
88
|
$in: {
|
|
@@ -88,14 +94,23 @@ function sessionStorageAPI() {
|
|
|
88
94
|
return false;
|
|
89
95
|
}
|
|
90
96
|
|
|
97
|
+
const item = {
|
|
98
|
+
created: Date.now(),
|
|
99
|
+
value,
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
if (Number.isFinite(Number.parseInt(options?.ttl))) {
|
|
103
|
+
item.ttl = Number.parseInt(options.ttl);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (shouldDeleteItem(item)) {
|
|
107
|
+
widget.sessionStorage.delete(key);
|
|
108
|
+
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
91
112
|
try {
|
|
92
|
-
sessionStorage.setItem(
|
|
93
|
-
keyPrefix + key,
|
|
94
|
-
JSON.stringify({
|
|
95
|
-
created: Date.now(),
|
|
96
|
-
value,
|
|
97
|
-
})
|
|
98
|
-
);
|
|
113
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
99
114
|
} catch (error) {
|
|
100
115
|
console.error(error);
|
|
101
116
|
|
|
@@ -129,5 +144,20 @@ function getNativeSessionStorage() {
|
|
|
129
144
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
130
145
|
}
|
|
131
146
|
|
|
147
|
+
function shouldDeleteItem(item) {
|
|
148
|
+
if (!item || !('ttl' in item) || !item.created) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (item.ttl <= 0) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const now = Date.now();
|
|
157
|
+
const age = now - item.created;
|
|
158
|
+
|
|
159
|
+
return age > item.ttl;
|
|
160
|
+
}
|
|
161
|
+
|
|
132
162
|
exports.sessionStoragePlugin = sessionStoragePlugin;
|
|
133
163
|
exports.setKeyPrefix = setKeyPrefix;
|
package/lib/index.es9.cjs
CHANGED
|
@@ -10,10 +10,7 @@ function setKeyPrefix(widget, additionalWords = [], defaultWords = ['widget', wi
|
|
|
10
10
|
function sessionStoragePlugin() {
|
|
11
11
|
return {
|
|
12
12
|
async setup(widget) {
|
|
13
|
-
widget
|
|
14
|
-
...sessionStorageAPI(),
|
|
15
|
-
...widget
|
|
16
|
-
};
|
|
13
|
+
core.assignMissingKeys(widget, sessionStorageAPI());
|
|
17
14
|
widget.$in.sessionStorage = {};
|
|
18
15
|
setKeyPrefix(widget);
|
|
19
16
|
widget.$dependencies.sessionStorage = getNativeSessionStorage();
|
|
@@ -44,6 +41,10 @@ function sessionStorageAPI() {
|
|
|
44
41
|
}
|
|
45
42
|
try {
|
|
46
43
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
44
|
+
if (shouldDeleteItem(item)) {
|
|
45
|
+
widget.sessionStorage.delete(key);
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
47
48
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
48
49
|
} catch (error) {
|
|
49
50
|
throw new Error(`merkur.plugin-session-storage.get: Failed to parse a session storage item value identified by the key ${keyPrefix + key}: ${error.message}`);
|
|
@@ -54,10 +55,13 @@ function sessionStorageAPI() {
|
|
|
54
55
|
* @param {object} widget A widget object.
|
|
55
56
|
* @param {string} key A key
|
|
56
57
|
* @param {*} value A value
|
|
58
|
+
* @param {object} [options] An options object.
|
|
59
|
+
* @param {number} [options.ttl] Number of milliseconds after which the
|
|
60
|
+
* value should be removed.
|
|
57
61
|
* @return {boolean} It's `true` when the operation was successful,
|
|
58
62
|
* otherwise `false`.
|
|
59
63
|
*/
|
|
60
|
-
set(widget, key, value) {
|
|
64
|
+
set(widget, key, value, options) {
|
|
61
65
|
const {
|
|
62
66
|
$dependencies: {
|
|
63
67
|
sessionStorage
|
|
@@ -71,11 +75,19 @@ function sessionStorageAPI() {
|
|
|
71
75
|
if (!sessionStorage) {
|
|
72
76
|
return false;
|
|
73
77
|
}
|
|
78
|
+
const item = {
|
|
79
|
+
created: Date.now(),
|
|
80
|
+
value
|
|
81
|
+
};
|
|
82
|
+
if (Number.isFinite(Number.parseInt(options === null || options === void 0 ? void 0 : options.ttl))) {
|
|
83
|
+
item.ttl = Number.parseInt(options.ttl);
|
|
84
|
+
}
|
|
85
|
+
if (shouldDeleteItem(item)) {
|
|
86
|
+
widget.sessionStorage.delete(key);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
74
89
|
try {
|
|
75
|
-
sessionStorage.setItem(keyPrefix + key, JSON.stringify(
|
|
76
|
-
created: Date.now(),
|
|
77
|
-
value
|
|
78
|
-
}));
|
|
90
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
79
91
|
} catch (error) {
|
|
80
92
|
console.error(error);
|
|
81
93
|
return false;
|
|
@@ -105,5 +117,16 @@ function sessionStorageAPI() {
|
|
|
105
117
|
function getNativeSessionStorage() {
|
|
106
118
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
107
119
|
}
|
|
120
|
+
function shouldDeleteItem(item) {
|
|
121
|
+
if (!item || !('ttl' in item) || !item.created) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
if (item.ttl <= 0) {
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
const now = Date.now();
|
|
128
|
+
const age = now - item.created;
|
|
129
|
+
return age > item.ttl;
|
|
130
|
+
}
|
|
108
131
|
exports.sessionStoragePlugin = sessionStoragePlugin;
|
|
109
132
|
exports.setKeyPrefix = setKeyPrefix;
|
package/lib/index.es9.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bindWidgetToFunctions } from '@merkur/core';
|
|
1
|
+
import { assignMissingKeys, bindWidgetToFunctions } from '@merkur/core';
|
|
2
2
|
const KEY_PREFIX_SEPARATOR = '__';
|
|
3
3
|
function setKeyPrefix(widget, additionalWords = [], defaultWords = ['widget', widget.name, widget.version]) {
|
|
4
4
|
const words = [...defaultWords, ...additionalWords].filter(Boolean);
|
|
@@ -8,10 +8,7 @@ function setKeyPrefix(widget, additionalWords = [], defaultWords = ['widget', wi
|
|
|
8
8
|
function sessionStoragePlugin() {
|
|
9
9
|
return {
|
|
10
10
|
async setup(widget) {
|
|
11
|
-
widget
|
|
12
|
-
...sessionStorageAPI(),
|
|
13
|
-
...widget
|
|
14
|
-
};
|
|
11
|
+
assignMissingKeys(widget, sessionStorageAPI());
|
|
15
12
|
widget.$in.sessionStorage = {};
|
|
16
13
|
setKeyPrefix(widget);
|
|
17
14
|
widget.$dependencies.sessionStorage = getNativeSessionStorage();
|
|
@@ -42,6 +39,10 @@ function sessionStorageAPI() {
|
|
|
42
39
|
}
|
|
43
40
|
try {
|
|
44
41
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
42
|
+
if (shouldDeleteItem(item)) {
|
|
43
|
+
widget.sessionStorage.delete(key);
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
45
46
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
46
47
|
} catch (error) {
|
|
47
48
|
throw new Error(`merkur.plugin-session-storage.get: Failed to parse a session storage item value identified by the key ${keyPrefix + key}: ${error.message}`);
|
|
@@ -52,10 +53,13 @@ function sessionStorageAPI() {
|
|
|
52
53
|
* @param {object} widget A widget object.
|
|
53
54
|
* @param {string} key A key
|
|
54
55
|
* @param {*} value A value
|
|
56
|
+
* @param {object} [options] An options object.
|
|
57
|
+
* @param {number} [options.ttl] Number of milliseconds after which the
|
|
58
|
+
* value should be removed.
|
|
55
59
|
* @return {boolean} It's `true` when the operation was successful,
|
|
56
60
|
* otherwise `false`.
|
|
57
61
|
*/
|
|
58
|
-
set(widget, key, value) {
|
|
62
|
+
set(widget, key, value, options) {
|
|
59
63
|
const {
|
|
60
64
|
$dependencies: {
|
|
61
65
|
sessionStorage
|
|
@@ -69,11 +73,19 @@ function sessionStorageAPI() {
|
|
|
69
73
|
if (!sessionStorage) {
|
|
70
74
|
return false;
|
|
71
75
|
}
|
|
76
|
+
const item = {
|
|
77
|
+
created: Date.now(),
|
|
78
|
+
value
|
|
79
|
+
};
|
|
80
|
+
if (Number.isFinite(Number.parseInt(options === null || options === void 0 ? void 0 : options.ttl))) {
|
|
81
|
+
item.ttl = Number.parseInt(options.ttl);
|
|
82
|
+
}
|
|
83
|
+
if (shouldDeleteItem(item)) {
|
|
84
|
+
widget.sessionStorage.delete(key);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
72
87
|
try {
|
|
73
|
-
sessionStorage.setItem(keyPrefix + key, JSON.stringify(
|
|
74
|
-
created: Date.now(),
|
|
75
|
-
value
|
|
76
|
-
}));
|
|
88
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
77
89
|
} catch (error) {
|
|
78
90
|
console.error(error);
|
|
79
91
|
return false;
|
|
@@ -103,4 +115,15 @@ function sessionStorageAPI() {
|
|
|
103
115
|
function getNativeSessionStorage() {
|
|
104
116
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
105
117
|
}
|
|
118
|
+
function shouldDeleteItem(item) {
|
|
119
|
+
if (!item || !('ttl' in item) || !item.created) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
if (item.ttl <= 0) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
const age = now - item.created;
|
|
127
|
+
return age > item.ttl;
|
|
128
|
+
}
|
|
106
129
|
export { sessionStoragePlugin, setKeyPrefix };
|
package/lib/index.js
CHANGED
|
@@ -7,11 +7,11 @@ const KEY_PREFIX_SEPARATOR = '__';
|
|
|
7
7
|
function setKeyPrefix(
|
|
8
8
|
widget,
|
|
9
9
|
additionalWords = [],
|
|
10
|
-
defaultWords = ['widget', widget.name, widget.version]
|
|
10
|
+
defaultWords = ['widget', widget.name, widget.version],
|
|
11
11
|
) {
|
|
12
12
|
const words = [...defaultWords, ...additionalWords].filter(Boolean);
|
|
13
13
|
const prefix = `${KEY_PREFIX_SEPARATOR}${words.join(
|
|
14
|
-
KEY_PREFIX_SEPARATOR
|
|
14
|
+
KEY_PREFIX_SEPARATOR,
|
|
15
15
|
)}${KEY_PREFIX_SEPARATOR}`;
|
|
16
16
|
|
|
17
17
|
widget.$in.sessionStorage.keyPrefix = prefix;
|
|
@@ -20,10 +20,7 @@ function setKeyPrefix(
|
|
|
20
20
|
function sessionStoragePlugin() {
|
|
21
21
|
return {
|
|
22
22
|
async setup(widget) {
|
|
23
|
-
widget
|
|
24
|
-
...sessionStorageAPI(),
|
|
25
|
-
...widget,
|
|
26
|
-
};
|
|
23
|
+
core.assignMissingKeys(widget, sessionStorageAPI());
|
|
27
24
|
|
|
28
25
|
widget.$in.sessionStorage = {};
|
|
29
26
|
setKeyPrefix(widget);
|
|
@@ -58,12 +55,18 @@ function sessionStorageAPI() {
|
|
|
58
55
|
try {
|
|
59
56
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
60
57
|
|
|
58
|
+
if (shouldDeleteItem(item)) {
|
|
59
|
+
widget.sessionStorage.delete(key);
|
|
60
|
+
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
61
64
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
62
65
|
} catch (error) {
|
|
63
66
|
throw new Error(
|
|
64
67
|
`merkur.plugin-session-storage.get: Failed to parse a session storage item value identified by the key ${
|
|
65
68
|
keyPrefix + key
|
|
66
|
-
}: ${error.message}
|
|
69
|
+
}: ${error.message}`,
|
|
67
70
|
);
|
|
68
71
|
}
|
|
69
72
|
},
|
|
@@ -73,10 +76,13 @@ function sessionStorageAPI() {
|
|
|
73
76
|
* @param {object} widget A widget object.
|
|
74
77
|
* @param {string} key A key
|
|
75
78
|
* @param {*} value A value
|
|
79
|
+
* @param {object} [options] An options object.
|
|
80
|
+
* @param {number} [options.ttl] Number of milliseconds after which the
|
|
81
|
+
* value should be removed.
|
|
76
82
|
* @return {boolean} It's `true` when the operation was successful,
|
|
77
83
|
* otherwise `false`.
|
|
78
84
|
*/
|
|
79
|
-
set(widget, key, value) {
|
|
85
|
+
set(widget, key, value, options) {
|
|
80
86
|
const {
|
|
81
87
|
$dependencies: { sessionStorage },
|
|
82
88
|
$in: {
|
|
@@ -88,14 +94,23 @@ function sessionStorageAPI() {
|
|
|
88
94
|
return false;
|
|
89
95
|
}
|
|
90
96
|
|
|
97
|
+
const item = {
|
|
98
|
+
created: Date.now(),
|
|
99
|
+
value,
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
if (Number.isFinite(Number.parseInt(options?.ttl))) {
|
|
103
|
+
item.ttl = Number.parseInt(options.ttl);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (shouldDeleteItem(item)) {
|
|
107
|
+
widget.sessionStorage.delete(key);
|
|
108
|
+
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
91
112
|
try {
|
|
92
|
-
sessionStorage.setItem(
|
|
93
|
-
keyPrefix + key,
|
|
94
|
-
JSON.stringify({
|
|
95
|
-
created: Date.now(),
|
|
96
|
-
value,
|
|
97
|
-
})
|
|
98
|
-
);
|
|
113
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
99
114
|
} catch (error) {
|
|
100
115
|
console.error(error);
|
|
101
116
|
|
|
@@ -129,5 +144,20 @@ function getNativeSessionStorage() {
|
|
|
129
144
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
130
145
|
}
|
|
131
146
|
|
|
147
|
+
function shouldDeleteItem(item) {
|
|
148
|
+
if (!item || !('ttl' in item) || !item.created) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (item.ttl <= 0) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const now = Date.now();
|
|
157
|
+
const age = now - item.created;
|
|
158
|
+
|
|
159
|
+
return age > item.ttl;
|
|
160
|
+
}
|
|
161
|
+
|
|
132
162
|
exports.sessionStoragePlugin = sessionStoragePlugin;
|
|
133
163
|
exports.setKeyPrefix = setKeyPrefix;
|
package/lib/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { bindWidgetToFunctions } from '@merkur/core';
|
|
1
|
+
import { assignMissingKeys, bindWidgetToFunctions } from '@merkur/core';
|
|
2
2
|
|
|
3
3
|
const KEY_PREFIX_SEPARATOR = '__';
|
|
4
4
|
|
|
5
5
|
function setKeyPrefix(
|
|
6
6
|
widget,
|
|
7
7
|
additionalWords = [],
|
|
8
|
-
defaultWords = ['widget', widget.name, widget.version]
|
|
8
|
+
defaultWords = ['widget', widget.name, widget.version],
|
|
9
9
|
) {
|
|
10
10
|
const words = [...defaultWords, ...additionalWords].filter(Boolean);
|
|
11
11
|
const prefix = `${KEY_PREFIX_SEPARATOR}${words.join(
|
|
12
|
-
KEY_PREFIX_SEPARATOR
|
|
12
|
+
KEY_PREFIX_SEPARATOR,
|
|
13
13
|
)}${KEY_PREFIX_SEPARATOR}`;
|
|
14
14
|
|
|
15
15
|
widget.$in.sessionStorage.keyPrefix = prefix;
|
|
@@ -18,10 +18,7 @@ function setKeyPrefix(
|
|
|
18
18
|
function sessionStoragePlugin() {
|
|
19
19
|
return {
|
|
20
20
|
async setup(widget) {
|
|
21
|
-
widget
|
|
22
|
-
...sessionStorageAPI(),
|
|
23
|
-
...widget,
|
|
24
|
-
};
|
|
21
|
+
assignMissingKeys(widget, sessionStorageAPI());
|
|
25
22
|
|
|
26
23
|
widget.$in.sessionStorage = {};
|
|
27
24
|
setKeyPrefix(widget);
|
|
@@ -56,12 +53,18 @@ function sessionStorageAPI() {
|
|
|
56
53
|
try {
|
|
57
54
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
58
55
|
|
|
56
|
+
if (shouldDeleteItem(item)) {
|
|
57
|
+
widget.sessionStorage.delete(key);
|
|
58
|
+
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
59
62
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
60
63
|
} catch (error) {
|
|
61
64
|
throw new Error(
|
|
62
65
|
`merkur.plugin-session-storage.get: Failed to parse a session storage item value identified by the key ${
|
|
63
66
|
keyPrefix + key
|
|
64
|
-
}: ${error.message}
|
|
67
|
+
}: ${error.message}`,
|
|
65
68
|
);
|
|
66
69
|
}
|
|
67
70
|
},
|
|
@@ -71,10 +74,13 @@ function sessionStorageAPI() {
|
|
|
71
74
|
* @param {object} widget A widget object.
|
|
72
75
|
* @param {string} key A key
|
|
73
76
|
* @param {*} value A value
|
|
77
|
+
* @param {object} [options] An options object.
|
|
78
|
+
* @param {number} [options.ttl] Number of milliseconds after which the
|
|
79
|
+
* value should be removed.
|
|
74
80
|
* @return {boolean} It's `true` when the operation was successful,
|
|
75
81
|
* otherwise `false`.
|
|
76
82
|
*/
|
|
77
|
-
set(widget, key, value) {
|
|
83
|
+
set(widget, key, value, options) {
|
|
78
84
|
const {
|
|
79
85
|
$dependencies: { sessionStorage },
|
|
80
86
|
$in: {
|
|
@@ -86,14 +92,23 @@ function sessionStorageAPI() {
|
|
|
86
92
|
return false;
|
|
87
93
|
}
|
|
88
94
|
|
|
95
|
+
const item = {
|
|
96
|
+
created: Date.now(),
|
|
97
|
+
value,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
if (Number.isFinite(Number.parseInt(options?.ttl))) {
|
|
101
|
+
item.ttl = Number.parseInt(options.ttl);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (shouldDeleteItem(item)) {
|
|
105
|
+
widget.sessionStorage.delete(key);
|
|
106
|
+
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
|
|
89
110
|
try {
|
|
90
|
-
sessionStorage.setItem(
|
|
91
|
-
keyPrefix + key,
|
|
92
|
-
JSON.stringify({
|
|
93
|
-
created: Date.now(),
|
|
94
|
-
value,
|
|
95
|
-
})
|
|
96
|
-
);
|
|
111
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
97
112
|
} catch (error) {
|
|
98
113
|
console.error(error);
|
|
99
114
|
|
|
@@ -127,4 +142,19 @@ function getNativeSessionStorage() {
|
|
|
127
142
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
128
143
|
}
|
|
129
144
|
|
|
145
|
+
function shouldDeleteItem(item) {
|
|
146
|
+
if (!item || !('ttl' in item) || !item.created) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (item.ttl <= 0) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const now = Date.now();
|
|
155
|
+
const age = now - item.created;
|
|
156
|
+
|
|
157
|
+
return age > item.ttl;
|
|
158
|
+
}
|
|
159
|
+
|
|
130
160
|
export { sessionStoragePlugin, setKeyPrefix };
|
package/lib/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,
|
|
1
|
+
!function(e,t){if("function"==typeof define&&define.amd)define("@merkur/plugin-session-storage",["exports","@merkur/core"],t);else if("undefined"!=typeof exports)t(exports,require("@merkur/core"));else{var n={exports:{}};t(n.exports,e.Merkur.Core),e.merkurPluginSessionStorage=n.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e,t){function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t,n,r,o,i,s){try{var u=e[i](s),a=u.value}catch(e){return void n(e)}u.done?t(a):Promise.resolve(a).then(r,o)}function o(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var s=e.apply(t,n);function u(e){r(s,o,i,u,a,"next",e)}function a(e){r(s,o,i,u,a,"throw",e)}u(void 0)}))}}function i(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}Object.defineProperty(e,"__esModule",{value:!0}),e.sessionStoragePlugin=function(){return{setup:function(e){return o((function*(){return(0,t.assignMissingKeys)(e,{sessionStorage:{get:function(e,t){var r=e.$dependencies.sessionStorage,o=e.$in.sessionStorage.keyPrefix;if(!r)return null;try{var i=JSON.parse(r.getItem(o+t));return f(i)?void e.sessionStorage.delete(t):i&&"object"===n(i)?i.value:void 0}catch(e){throw new Error("merkur.plugin-session-storage.get: Failed to parse a session storage item value identified by the key ".concat(o+t,": ").concat(e.message))}},set:function(e,t,n,r){var o=e.$dependencies.sessionStorage,i=e.$in.sessionStorage.keyPrefix;if(!o)return!1;var s={created:Date.now(),value:n};if(Number.isFinite(Number.parseInt(null==r?void 0:r.ttl))&&(s.ttl=Number.parseInt(r.ttl)),f(s))return e.sessionStorage.delete(t),!0;try{o.setItem(i+t,JSON.stringify(s))}catch(e){return console.error(e),!1}return!0},delete:function(e,t){var n=e.$dependencies.sessionStorage,r=e.$in.sessionStorage.keyPrefix;return!!n&&(n.removeItem(r+t),!0)}}}),e.$in.sessionStorage={},a(e),e.$dependencies.sessionStorage="undefined"==typeof window?void 0:window.sessionStorage,e}))()},create:function(e){return o((function*(){return(0,t.bindWidgetToFunctions)(e,e.sessionStorage),e}))()}}},e.setKeyPrefix=a;var u="__";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:["widget",e.name,e.version],r=[].concat(i(n),i(t)).filter(Boolean),o="".concat(u).concat(r.join(u)).concat(u);e.$in.sessionStorage.keyPrefix=o}function f(e){return!!(e&&"ttl"in e&&e.created)&&(e.ttl<=0||Date.now()-e.created>e.ttl)}}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@merkur/plugin-session-storage",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.34.0",
|
|
4
4
|
"description": "Merkur session storage.",
|
|
5
5
|
"main": "lib/index",
|
|
6
6
|
"module": "lib/index",
|
|
@@ -48,10 +48,10 @@
|
|
|
48
48
|
},
|
|
49
49
|
"homepage": "https://merkur.js.org/",
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@merkur/core": "^0.
|
|
51
|
+
"@merkur/core": "^0.34.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"@merkur/core": "*"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "3bc4a1efb8f8d5cee6bcf5f1454809747904153c"
|
|
57
57
|
}
|