@merkur/plugin-session-storage 0.33.0 → 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 +41 -8
- package/lib/index.es9.cjs +31 -5
- package/lib/index.es9.mjs +31 -5
- package/lib/index.js +41 -8
- package/lib/index.mjs +41 -8
- package/lib/index.umd.js +1 -1
- package/package.json +3 -3
package/lib/index.cjs
CHANGED
|
@@ -55,6 +55,12 @@ function sessionStorageAPI() {
|
|
|
55
55
|
try {
|
|
56
56
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
57
57
|
|
|
58
|
+
if (shouldDeleteItem(item)) {
|
|
59
|
+
widget.sessionStorage.delete(key);
|
|
60
|
+
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
58
64
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
59
65
|
} catch (error) {
|
|
60
66
|
throw new Error(
|
|
@@ -70,10 +76,13 @@ function sessionStorageAPI() {
|
|
|
70
76
|
* @param {object} widget A widget object.
|
|
71
77
|
* @param {string} key A key
|
|
72
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.
|
|
73
82
|
* @return {boolean} It's `true` when the operation was successful,
|
|
74
83
|
* otherwise `false`.
|
|
75
84
|
*/
|
|
76
|
-
set(widget, key, value) {
|
|
85
|
+
set(widget, key, value, options) {
|
|
77
86
|
const {
|
|
78
87
|
$dependencies: { sessionStorage },
|
|
79
88
|
$in: {
|
|
@@ -85,14 +94,23 @@ function sessionStorageAPI() {
|
|
|
85
94
|
return false;
|
|
86
95
|
}
|
|
87
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
|
+
|
|
88
112
|
try {
|
|
89
|
-
sessionStorage.setItem(
|
|
90
|
-
keyPrefix + key,
|
|
91
|
-
JSON.stringify({
|
|
92
|
-
created: Date.now(),
|
|
93
|
-
value,
|
|
94
|
-
}),
|
|
95
|
-
);
|
|
113
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
96
114
|
} catch (error) {
|
|
97
115
|
console.error(error);
|
|
98
116
|
|
|
@@ -126,5 +144,20 @@ function getNativeSessionStorage() {
|
|
|
126
144
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
127
145
|
}
|
|
128
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
|
+
|
|
129
162
|
exports.sessionStoragePlugin = sessionStoragePlugin;
|
|
130
163
|
exports.setKeyPrefix = setKeyPrefix;
|
package/lib/index.es9.cjs
CHANGED
|
@@ -41,6 +41,10 @@ function sessionStorageAPI() {
|
|
|
41
41
|
}
|
|
42
42
|
try {
|
|
43
43
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
44
|
+
if (shouldDeleteItem(item)) {
|
|
45
|
+
widget.sessionStorage.delete(key);
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
44
48
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
45
49
|
} catch (error) {
|
|
46
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}`);
|
|
@@ -51,10 +55,13 @@ function sessionStorageAPI() {
|
|
|
51
55
|
* @param {object} widget A widget object.
|
|
52
56
|
* @param {string} key A key
|
|
53
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.
|
|
54
61
|
* @return {boolean} It's `true` when the operation was successful,
|
|
55
62
|
* otherwise `false`.
|
|
56
63
|
*/
|
|
57
|
-
set(widget, key, value) {
|
|
64
|
+
set(widget, key, value, options) {
|
|
58
65
|
const {
|
|
59
66
|
$dependencies: {
|
|
60
67
|
sessionStorage
|
|
@@ -68,11 +75,19 @@ function sessionStorageAPI() {
|
|
|
68
75
|
if (!sessionStorage) {
|
|
69
76
|
return false;
|
|
70
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
|
+
}
|
|
71
89
|
try {
|
|
72
|
-
sessionStorage.setItem(keyPrefix + key, JSON.stringify(
|
|
73
|
-
created: Date.now(),
|
|
74
|
-
value
|
|
75
|
-
}));
|
|
90
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
76
91
|
} catch (error) {
|
|
77
92
|
console.error(error);
|
|
78
93
|
return false;
|
|
@@ -102,5 +117,16 @@ function sessionStorageAPI() {
|
|
|
102
117
|
function getNativeSessionStorage() {
|
|
103
118
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
104
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
|
+
}
|
|
105
131
|
exports.sessionStoragePlugin = sessionStoragePlugin;
|
|
106
132
|
exports.setKeyPrefix = setKeyPrefix;
|
package/lib/index.es9.mjs
CHANGED
|
@@ -39,6 +39,10 @@ function sessionStorageAPI() {
|
|
|
39
39
|
}
|
|
40
40
|
try {
|
|
41
41
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
42
|
+
if (shouldDeleteItem(item)) {
|
|
43
|
+
widget.sessionStorage.delete(key);
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
42
46
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
43
47
|
} catch (error) {
|
|
44
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}`);
|
|
@@ -49,10 +53,13 @@ function sessionStorageAPI() {
|
|
|
49
53
|
* @param {object} widget A widget object.
|
|
50
54
|
* @param {string} key A key
|
|
51
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.
|
|
52
59
|
* @return {boolean} It's `true` when the operation was successful,
|
|
53
60
|
* otherwise `false`.
|
|
54
61
|
*/
|
|
55
|
-
set(widget, key, value) {
|
|
62
|
+
set(widget, key, value, options) {
|
|
56
63
|
const {
|
|
57
64
|
$dependencies: {
|
|
58
65
|
sessionStorage
|
|
@@ -66,11 +73,19 @@ function sessionStorageAPI() {
|
|
|
66
73
|
if (!sessionStorage) {
|
|
67
74
|
return false;
|
|
68
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
|
+
}
|
|
69
87
|
try {
|
|
70
|
-
sessionStorage.setItem(keyPrefix + key, JSON.stringify(
|
|
71
|
-
created: Date.now(),
|
|
72
|
-
value
|
|
73
|
-
}));
|
|
88
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
74
89
|
} catch (error) {
|
|
75
90
|
console.error(error);
|
|
76
91
|
return false;
|
|
@@ -100,4 +115,15 @@ function sessionStorageAPI() {
|
|
|
100
115
|
function getNativeSessionStorage() {
|
|
101
116
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
102
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
|
+
}
|
|
103
129
|
export { sessionStoragePlugin, setKeyPrefix };
|
package/lib/index.js
CHANGED
|
@@ -55,6 +55,12 @@ function sessionStorageAPI() {
|
|
|
55
55
|
try {
|
|
56
56
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
57
57
|
|
|
58
|
+
if (shouldDeleteItem(item)) {
|
|
59
|
+
widget.sessionStorage.delete(key);
|
|
60
|
+
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
58
64
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
59
65
|
} catch (error) {
|
|
60
66
|
throw new Error(
|
|
@@ -70,10 +76,13 @@ function sessionStorageAPI() {
|
|
|
70
76
|
* @param {object} widget A widget object.
|
|
71
77
|
* @param {string} key A key
|
|
72
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.
|
|
73
82
|
* @return {boolean} It's `true` when the operation was successful,
|
|
74
83
|
* otherwise `false`.
|
|
75
84
|
*/
|
|
76
|
-
set(widget, key, value) {
|
|
85
|
+
set(widget, key, value, options) {
|
|
77
86
|
const {
|
|
78
87
|
$dependencies: { sessionStorage },
|
|
79
88
|
$in: {
|
|
@@ -85,14 +94,23 @@ function sessionStorageAPI() {
|
|
|
85
94
|
return false;
|
|
86
95
|
}
|
|
87
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
|
+
|
|
88
112
|
try {
|
|
89
|
-
sessionStorage.setItem(
|
|
90
|
-
keyPrefix + key,
|
|
91
|
-
JSON.stringify({
|
|
92
|
-
created: Date.now(),
|
|
93
|
-
value,
|
|
94
|
-
}),
|
|
95
|
-
);
|
|
113
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
96
114
|
} catch (error) {
|
|
97
115
|
console.error(error);
|
|
98
116
|
|
|
@@ -126,5 +144,20 @@ function getNativeSessionStorage() {
|
|
|
126
144
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
127
145
|
}
|
|
128
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
|
+
|
|
129
162
|
exports.sessionStoragePlugin = sessionStoragePlugin;
|
|
130
163
|
exports.setKeyPrefix = setKeyPrefix;
|
package/lib/index.mjs
CHANGED
|
@@ -53,6 +53,12 @@ function sessionStorageAPI() {
|
|
|
53
53
|
try {
|
|
54
54
|
const item = JSON.parse(sessionStorage.getItem(keyPrefix + key));
|
|
55
55
|
|
|
56
|
+
if (shouldDeleteItem(item)) {
|
|
57
|
+
widget.sessionStorage.delete(key);
|
|
58
|
+
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
56
62
|
return item && typeof item === 'object' ? item.value : undefined;
|
|
57
63
|
} catch (error) {
|
|
58
64
|
throw new Error(
|
|
@@ -68,10 +74,13 @@ function sessionStorageAPI() {
|
|
|
68
74
|
* @param {object} widget A widget object.
|
|
69
75
|
* @param {string} key A key
|
|
70
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.
|
|
71
80
|
* @return {boolean} It's `true` when the operation was successful,
|
|
72
81
|
* otherwise `false`.
|
|
73
82
|
*/
|
|
74
|
-
set(widget, key, value) {
|
|
83
|
+
set(widget, key, value, options) {
|
|
75
84
|
const {
|
|
76
85
|
$dependencies: { sessionStorage },
|
|
77
86
|
$in: {
|
|
@@ -83,14 +92,23 @@ function sessionStorageAPI() {
|
|
|
83
92
|
return false;
|
|
84
93
|
}
|
|
85
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
|
+
|
|
86
110
|
try {
|
|
87
|
-
sessionStorage.setItem(
|
|
88
|
-
keyPrefix + key,
|
|
89
|
-
JSON.stringify({
|
|
90
|
-
created: Date.now(),
|
|
91
|
-
value,
|
|
92
|
-
}),
|
|
93
|
-
);
|
|
111
|
+
sessionStorage.setItem(keyPrefix + key, JSON.stringify(item));
|
|
94
112
|
} catch (error) {
|
|
95
113
|
console.error(error);
|
|
96
114
|
|
|
@@ -124,4 +142,19 @@ function getNativeSessionStorage() {
|
|
|
124
142
|
return typeof window === 'undefined' ? undefined : window.sessionStorage;
|
|
125
143
|
}
|
|
126
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
|
+
|
|
127
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
|
}
|