@esportsplus/web-storage 0.1.28 → 0.1.29
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/build/index.d.ts +1 -1
- package/build/index.js +1 -1
- package/build/local.d.ts +21 -21
- package/build/local.js +118 -118
- package/build/types.d.ts +20 -20
- package/build/types.js +7 -7
- package/package.json +2 -2
- package/src/local.ts +1 -1
- package/tsconfig.json +1 -1
package/build/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as local } from './local';
|
|
1
|
+
export { default as local } from './local';
|
package/build/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as local } from './local';
|
|
1
|
+
export { default as local } from './local';
|
package/build/local.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { Filter, LocalForage, Options } from './types';
|
|
2
|
-
declare class Local<T> {
|
|
3
|
-
instance: LocalForage;
|
|
4
|
-
iterate: LocalForage['iterate'];
|
|
5
|
-
keys: LocalForage['keys'];
|
|
6
|
-
length: LocalForage['length'];
|
|
7
|
-
secret: null | string;
|
|
8
|
-
constructor(options: Options, secret?: string);
|
|
9
|
-
private deserialize;
|
|
10
|
-
private serialize;
|
|
11
|
-
all(): Promise<T>;
|
|
12
|
-
clear(): Promise<void>;
|
|
13
|
-
delete(...keys: (keyof T)[]): Promise<void>;
|
|
14
|
-
filter(fn: Filter<T>): Promise<T>;
|
|
15
|
-
get(key: keyof T): Promise<T[keyof T] | undefined>;
|
|
16
|
-
only(...keys: (keyof T)[]): Promise<T>;
|
|
17
|
-
replace(values: T): Promise<string[]>;
|
|
18
|
-
set(key: keyof T, value: T[keyof T]): Promise<boolean>;
|
|
19
|
-
}
|
|
20
|
-
declare const _default: <T>(options: Options, secret?: string) => Local<T>;
|
|
21
|
-
export default _default;
|
|
1
|
+
import { Filter, LocalForage, Options } from './types';
|
|
2
|
+
declare class Local<T> {
|
|
3
|
+
instance: LocalForage;
|
|
4
|
+
iterate: LocalForage['iterate'];
|
|
5
|
+
keys: LocalForage['keys'];
|
|
6
|
+
length: LocalForage['length'];
|
|
7
|
+
secret: null | string;
|
|
8
|
+
constructor(options: Options, secret?: string);
|
|
9
|
+
private deserialize;
|
|
10
|
+
private serialize;
|
|
11
|
+
all(): Promise<T>;
|
|
12
|
+
clear(): Promise<void>;
|
|
13
|
+
delete(...keys: (keyof T)[]): Promise<void>;
|
|
14
|
+
filter(fn: Filter<T>): Promise<T>;
|
|
15
|
+
get(key: keyof T): Promise<T[keyof T] | undefined>;
|
|
16
|
+
only(...keys: (keyof T)[]): Promise<T>;
|
|
17
|
+
replace(values: T): Promise<string[]>;
|
|
18
|
+
set(key: keyof T, value: T[keyof T]): Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
declare const _default: <T>(options: Options, secret?: string) => Local<T>;
|
|
21
|
+
export default _default;
|
package/build/local.js
CHANGED
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
import { Driver } from './types';
|
|
2
|
-
import { decrypt, encrypt } from '@esportsplus/crypto';
|
|
3
|
-
import localforage from 'localforage';
|
|
4
|
-
class Local {
|
|
5
|
-
instance;
|
|
6
|
-
iterate;
|
|
7
|
-
keys;
|
|
8
|
-
length;
|
|
9
|
-
secret = null;
|
|
10
|
-
constructor(options, secret) {
|
|
11
|
-
switch ((options.driver || Driver.IndexedDB)) {
|
|
12
|
-
case Driver.LocalStorage:
|
|
13
|
-
options.driver = localforage.LOCALSTORAGE;
|
|
14
|
-
break;
|
|
15
|
-
default:
|
|
16
|
-
options.driver = localforage.INDEXEDDB;
|
|
17
|
-
break;
|
|
18
|
-
}
|
|
19
|
-
this.instance = localforage.createInstance(Object.assign(options, { storeName: options.name }));
|
|
20
|
-
this.iterate = this.instance.iterate;
|
|
21
|
-
this.keys = this.instance.keys;
|
|
22
|
-
this.length = this.instance.length;
|
|
23
|
-
if (secret) {
|
|
24
|
-
this.secret = secret;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async deserialize(value) {
|
|
28
|
-
if (this.secret && typeof value === 'string') {
|
|
29
|
-
value = await decrypt(value, this.secret);
|
|
30
|
-
}
|
|
31
|
-
if (typeof value === 'string') {
|
|
32
|
-
value = JSON.parse(value);
|
|
33
|
-
}
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
async serialize(value) {
|
|
37
|
-
if (value === null || value === undefined) {
|
|
38
|
-
return undefined;
|
|
39
|
-
}
|
|
40
|
-
value = JSON.stringify(value);
|
|
41
|
-
if (this.secret) {
|
|
42
|
-
value = await encrypt(value, this.secret);
|
|
43
|
-
}
|
|
44
|
-
return value;
|
|
45
|
-
}
|
|
46
|
-
async all() {
|
|
47
|
-
let stack = [], values = {};
|
|
48
|
-
await this.instance.iterate((v, k) => {
|
|
49
|
-
stack.push(this.deserialize(v)
|
|
50
|
-
.then((value) => {
|
|
51
|
-
if (value === undefined) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
values[k] = value;
|
|
55
|
-
})
|
|
56
|
-
.catch(() => { }));
|
|
57
|
-
});
|
|
58
|
-
await Promise.allSettled(stack);
|
|
59
|
-
return values;
|
|
60
|
-
}
|
|
61
|
-
async clear() {
|
|
62
|
-
await this.instance.clear();
|
|
63
|
-
}
|
|
64
|
-
async delete(...keys) {
|
|
65
|
-
let stack = [];
|
|
66
|
-
for (let i = 0, n = keys.length; i < n; i++) {
|
|
67
|
-
stack.push(this.instance.removeItem(keys[i]));
|
|
68
|
-
}
|
|
69
|
-
await Promise.allSettled(stack);
|
|
70
|
-
}
|
|
71
|
-
async filter(fn) {
|
|
72
|
-
let stop = () => {
|
|
73
|
-
stopped = true;
|
|
74
|
-
}, stopped = false, values = {};
|
|
75
|
-
await this.instance.iterate(async (v, k, i) => {
|
|
76
|
-
let key = k, value = await this.deserialize(v).catch(() => undefined);
|
|
77
|
-
if (value === undefined) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (await fn({ i, key, stop, value })) {
|
|
81
|
-
values[key] = value;
|
|
82
|
-
}
|
|
83
|
-
if (stopped) {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
return values;
|
|
88
|
-
}
|
|
89
|
-
async get(key) {
|
|
90
|
-
return await this.deserialize(await this.instance.getItem(key)).catch(() => undefined);
|
|
91
|
-
}
|
|
92
|
-
async only(...keys) {
|
|
93
|
-
return await this.filter(({ key }) => keys.includes(key));
|
|
94
|
-
}
|
|
95
|
-
async replace(values) {
|
|
96
|
-
let failed = [], stack = [];
|
|
97
|
-
for (let key in values) {
|
|
98
|
-
stack.push(this.set(key, values[key])
|
|
99
|
-
.then((ok) => {
|
|
100
|
-
if (ok) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
failed.push(key);
|
|
104
|
-
}));
|
|
105
|
-
}
|
|
106
|
-
await Promise.allSettled(stack);
|
|
107
|
-
return failed;
|
|
108
|
-
}
|
|
109
|
-
async set(key, value) {
|
|
110
|
-
let ok = true;
|
|
111
|
-
await this.instance.setItem(key, await this.serialize(value).catch(() => {
|
|
112
|
-
ok = false;
|
|
113
|
-
return undefined;
|
|
114
|
-
}));
|
|
115
|
-
return ok;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
export default (options, secret) => new Local(options, secret);
|
|
1
|
+
import { Driver } from './types';
|
|
2
|
+
import { decrypt, encrypt } from '@esportsplus/crypto';
|
|
3
|
+
import localforage from 'localforage';
|
|
4
|
+
class Local {
|
|
5
|
+
instance;
|
|
6
|
+
iterate;
|
|
7
|
+
keys;
|
|
8
|
+
length;
|
|
9
|
+
secret = null;
|
|
10
|
+
constructor(options, secret) {
|
|
11
|
+
switch ((options.driver || Driver.IndexedDB)) {
|
|
12
|
+
case Driver.LocalStorage:
|
|
13
|
+
options.driver = localforage.LOCALSTORAGE;
|
|
14
|
+
break;
|
|
15
|
+
default:
|
|
16
|
+
options.driver = localforage.INDEXEDDB;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
this.instance = localforage.createInstance(Object.assign(options, { storeName: options.name }));
|
|
20
|
+
this.iterate = this.instance.iterate;
|
|
21
|
+
this.keys = this.instance.keys;
|
|
22
|
+
this.length = this.instance.length;
|
|
23
|
+
if (secret) {
|
|
24
|
+
this.secret = secret;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async deserialize(value) {
|
|
28
|
+
if (this.secret && typeof value === 'string') {
|
|
29
|
+
value = await decrypt(value, this.secret);
|
|
30
|
+
}
|
|
31
|
+
if (typeof value === 'string') {
|
|
32
|
+
value = JSON.parse(value);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
async serialize(value) {
|
|
37
|
+
if (value === null || value === undefined) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
value = JSON.stringify(value);
|
|
41
|
+
if (this.secret) {
|
|
42
|
+
value = await encrypt(value, this.secret);
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
async all() {
|
|
47
|
+
let stack = [], values = {};
|
|
48
|
+
await this.instance.iterate((v, k) => {
|
|
49
|
+
stack.push(this.deserialize(v)
|
|
50
|
+
.then((value) => {
|
|
51
|
+
if (value === undefined) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
values[k] = value;
|
|
55
|
+
})
|
|
56
|
+
.catch(() => { }));
|
|
57
|
+
});
|
|
58
|
+
await Promise.allSettled(stack);
|
|
59
|
+
return values;
|
|
60
|
+
}
|
|
61
|
+
async clear() {
|
|
62
|
+
await this.instance.clear();
|
|
63
|
+
}
|
|
64
|
+
async delete(...keys) {
|
|
65
|
+
let stack = [];
|
|
66
|
+
for (let i = 0, n = keys.length; i < n; i++) {
|
|
67
|
+
stack.push(this.instance.removeItem(keys[i]));
|
|
68
|
+
}
|
|
69
|
+
await Promise.allSettled(stack);
|
|
70
|
+
}
|
|
71
|
+
async filter(fn) {
|
|
72
|
+
let stop = () => {
|
|
73
|
+
stopped = true;
|
|
74
|
+
}, stopped = false, values = {};
|
|
75
|
+
await this.instance.iterate(async (v, k, i) => {
|
|
76
|
+
let key = k, value = await this.deserialize(v).catch(() => undefined);
|
|
77
|
+
if (value === undefined) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (await fn({ i, key, stop, value })) {
|
|
81
|
+
values[key] = value;
|
|
82
|
+
}
|
|
83
|
+
if (stopped) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return values;
|
|
88
|
+
}
|
|
89
|
+
async get(key) {
|
|
90
|
+
return await this.deserialize(await this.instance.getItem(key)).catch(() => undefined);
|
|
91
|
+
}
|
|
92
|
+
async only(...keys) {
|
|
93
|
+
return await this.filter(({ key }) => keys.includes(key));
|
|
94
|
+
}
|
|
95
|
+
async replace(values) {
|
|
96
|
+
let failed = [], stack = [];
|
|
97
|
+
for (let key in values) {
|
|
98
|
+
stack.push(this.set(key, values[key])
|
|
99
|
+
.then((ok) => {
|
|
100
|
+
if (ok) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
failed.push(key);
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
await Promise.allSettled(stack);
|
|
107
|
+
return failed;
|
|
108
|
+
}
|
|
109
|
+
async set(key, value) {
|
|
110
|
+
let ok = true;
|
|
111
|
+
await this.instance.setItem(key, await this.serialize(value).catch(() => {
|
|
112
|
+
ok = false;
|
|
113
|
+
return undefined;
|
|
114
|
+
}));
|
|
115
|
+
return ok;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export default (options, secret) => new Local(options, secret);
|
package/build/types.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import localforage from 'localforage';
|
|
2
|
-
declare enum Driver {
|
|
3
|
-
IndexedDB = 0,
|
|
4
|
-
LocalStorage = 1
|
|
5
|
-
}
|
|
6
|
-
type Filter<T> = (data: {
|
|
7
|
-
i: number;
|
|
8
|
-
key: keyof T;
|
|
9
|
-
stop: VoidFunction;
|
|
10
|
-
value: T[keyof T];
|
|
11
|
-
}) => boolean | Promise<boolean>;
|
|
12
|
-
type LocalForage = typeof localforage;
|
|
13
|
-
type Options = {
|
|
14
|
-
description?: string;
|
|
15
|
-
driver?: string | string[];
|
|
16
|
-
name: string;
|
|
17
|
-
size?: number;
|
|
18
|
-
version?: number;
|
|
19
|
-
};
|
|
20
|
-
export { Driver, Filter, LocalForage, Options };
|
|
1
|
+
import localforage from 'localforage';
|
|
2
|
+
declare enum Driver {
|
|
3
|
+
IndexedDB = 0,
|
|
4
|
+
LocalStorage = 1
|
|
5
|
+
}
|
|
6
|
+
type Filter<T> = (data: {
|
|
7
|
+
i: number;
|
|
8
|
+
key: keyof T;
|
|
9
|
+
stop: VoidFunction;
|
|
10
|
+
value: T[keyof T];
|
|
11
|
+
}) => boolean | Promise<boolean>;
|
|
12
|
+
type LocalForage = typeof localforage;
|
|
13
|
+
type Options = {
|
|
14
|
+
description?: string;
|
|
15
|
+
driver?: string | string[];
|
|
16
|
+
name: string;
|
|
17
|
+
size?: number;
|
|
18
|
+
version?: number;
|
|
19
|
+
};
|
|
20
|
+
export { Driver, Filter, LocalForage, Options };
|
package/build/types.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var Driver;
|
|
2
|
-
(function (Driver) {
|
|
3
|
-
Driver[Driver["IndexedDB"] = 0] = "IndexedDB";
|
|
4
|
-
Driver[Driver["LocalStorage"] = 1] = "LocalStorage";
|
|
5
|
-
})(Driver || (Driver = {}));
|
|
6
|
-
;
|
|
7
|
-
export { Driver };
|
|
1
|
+
var Driver;
|
|
2
|
+
(function (Driver) {
|
|
3
|
+
Driver[Driver["IndexedDB"] = 0] = "IndexedDB";
|
|
4
|
+
Driver[Driver["LocalStorage"] = 1] = "LocalStorage";
|
|
5
|
+
})(Driver || (Driver = {}));
|
|
6
|
+
;
|
|
7
|
+
export { Driver };
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"description": "Web storage utility",
|
|
8
8
|
"devDependencies": {
|
|
9
|
-
"@esportsplus/
|
|
9
|
+
"@esportsplus/rspack": "^0.0.15"
|
|
10
10
|
},
|
|
11
11
|
"main": "build/index.js",
|
|
12
12
|
"name": "@esportsplus/web-storage",
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
"prepublishOnly": "npm run build"
|
|
19
19
|
},
|
|
20
20
|
"types": "build/index.d.ts",
|
|
21
|
-
"version": "0.1.
|
|
21
|
+
"version": "0.1.29"
|
|
22
22
|
}
|
package/src/local.ts
CHANGED