-
Notifications
You must be signed in to change notification settings - Fork 279
Expand file tree
/
Copy pathwebstorage.js
More file actions
70 lines (65 loc) · 1.84 KB
/
Copy pathwebstorage.js
File metadata and controls
70 lines (65 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
* Copyright (c) 20252-2026 Moddable Tech, Inc.
*
* This file is part of the Moddable SDK Runtime.
*
* The Moddable SDK Runtime is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Moddable SDK Runtime is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Moddable SDK Runtime. If not, see <http://www.gnu.org/licenses/>.
*
*/
/*
An implementation of the Web's Storage feature using ECMA-419 Key-Value Storage
See:
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
https://ecmatc53.github.io/spec/web/spec.html#-26-persistent-storage-key-value
*/
class WebStorage {
#kvp;
constructor(kvp) {
this.#kvp = kvp;
this.#kvp.format = "string";
}
get length() {
let length = 0;
for (let _ of this.#kvp)
length++;
return length;
}
key(index) {
index = Math.trunc(index);
if ((index < 0) || Number.isNaN(index))
return null;
for (let key of this.#kvp) {
if (0 === index--)
return key;
}
return null;
}
getItem(key) {
return this.#kvp.read(key) ?? null;
}
setItem(key, value) {
this.#kvp.write(key, value);
}
remove(key) {
trace("localStorage.remove() deprecated. Use localStorage.removeItem() instead\n");
return this.removeItem(key);
}
removeItem(key) {
this.#kvp.delete(key);
}
clear() {
Array.from(this.#kvp).forEach(key => this.#kvp.delete(key));
}
}
export default WebStorage;