@esportsplus/web-storage 0.1.29 → 0.1.30

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/local.d.ts CHANGED
@@ -6,13 +6,11 @@ declare class Local<T> {
6
6
  length: LocalForage['length'];
7
7
  secret: null | string;
8
8
  constructor(options: Options, secret?: string);
9
- private deserialize;
10
- private serialize;
11
9
  all(): Promise<T>;
12
10
  clear(): Promise<void>;
13
11
  delete(...keys: (keyof T)[]): Promise<void>;
14
12
  filter(fn: Filter<T>): Promise<T>;
15
- get(key: keyof T): Promise<T[keyof T] | undefined>;
13
+ get(key: keyof T): Promise<unknown>;
16
14
  only(...keys: (keyof T)[]): Promise<T>;
17
15
  replace(values: T): Promise<string[]>;
18
16
  set(key: keyof T, value: T[keyof T]): Promise<boolean>;
package/build/local.js CHANGED
@@ -1,6 +1,25 @@
1
1
  import { Driver } from './types';
2
2
  import { decrypt, encrypt } from '@esportsplus/crypto';
3
3
  import localforage from 'localforage';
4
+ async function deserialize(value, secret = null) {
5
+ if (secret && typeof value === 'string') {
6
+ value = await decrypt(value, secret);
7
+ }
8
+ if (typeof value === 'string') {
9
+ value = JSON.parse(value);
10
+ }
11
+ return value;
12
+ }
13
+ async function serialize(value, secret = null) {
14
+ if (value === null || value === undefined) {
15
+ return undefined;
16
+ }
17
+ value = JSON.stringify(value);
18
+ if (secret) {
19
+ value = await encrypt(value, secret);
20
+ }
21
+ return value;
22
+ }
4
23
  class Local {
5
24
  instance;
6
25
  iterate;
@@ -24,29 +43,10 @@ class Local {
24
43
  this.secret = secret;
25
44
  }
26
45
  }
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
46
  async all() {
47
47
  let stack = [], values = {};
48
48
  await this.instance.iterate((v, k) => {
49
- stack.push(this.deserialize(v)
49
+ stack.push(deserialize(v, this.secret)
50
50
  .then((value) => {
51
51
  if (value === undefined) {
52
52
  return;
@@ -73,7 +73,7 @@ class Local {
73
73
  stopped = true;
74
74
  }, stopped = false, values = {};
75
75
  await this.instance.iterate(async (v, k, i) => {
76
- let key = k, value = await this.deserialize(v).catch(() => undefined);
76
+ let key = k, value = await deserialize(v, this.secret).catch(() => undefined);
77
77
  if (value === undefined) {
78
78
  return;
79
79
  }
@@ -87,7 +87,7 @@ class Local {
87
87
  return values;
88
88
  }
89
89
  async get(key) {
90
- return await this.deserialize(await this.instance.getItem(key)).catch(() => undefined);
90
+ return await deserialize(await this.instance.getItem(key), this.secret).catch(() => undefined);
91
91
  }
92
92
  async only(...keys) {
93
93
  return await this.filter(({ key }) => keys.includes(key));
@@ -108,7 +108,8 @@ class Local {
108
108
  }
109
109
  async set(key, value) {
110
110
  let ok = true;
111
- await this.instance.setItem(key, await this.serialize(value).catch(() => {
111
+ await this.instance.setItem(key, await serialize(value, this.secret)
112
+ .catch(() => {
112
113
  ok = false;
113
114
  return undefined;
114
115
  }));
package/package.json CHANGED
@@ -18,5 +18,5 @@
18
18
  "prepublishOnly": "npm run build"
19
19
  },
20
20
  "types": "build/index.d.ts",
21
- "version": "0.1.29"
21
+ "version": "0.1.30"
22
22
  }
package/src/local.ts CHANGED
@@ -3,6 +3,33 @@ import { decrypt, encrypt } from '@esportsplus/crypto';
3
3
  import localforage from 'localforage';
4
4
 
5
5
 
6
+ async function deserialize(value: unknown, secret: null | string = null) {
7
+ if (secret && typeof value === 'string') {
8
+ value = await decrypt(value, secret);
9
+ }
10
+
11
+ if (typeof value === 'string') {
12
+ value = JSON.parse(value);
13
+ }
14
+
15
+ return value;
16
+ }
17
+
18
+ async function serialize(value: unknown, secret: null | string = null) {
19
+ if (value === null || value === undefined) {
20
+ return undefined;
21
+ }
22
+
23
+ value = JSON.stringify(value);
24
+
25
+ if (secret) {
26
+ value = await encrypt(value as string, secret);
27
+ }
28
+
29
+ return value as string;
30
+ }
31
+
32
+
6
33
  class Local<T> {
7
34
  instance: LocalForage;
8
35
  iterate: LocalForage['iterate'];
@@ -34,46 +61,19 @@ class Local<T> {
34
61
  }
35
62
 
36
63
 
37
- private async deserialize(value: unknown) {
38
- if (this.secret && typeof value === 'string') {
39
- value = await decrypt(value, this.secret);
40
- }
41
-
42
- if (typeof value === 'string') {
43
- value = JSON.parse(value);
44
- }
45
-
46
- return value as T[keyof T];
47
- }
48
-
49
- private async serialize(value: unknown) {
50
- if (value === null || value === undefined) {
51
- return undefined;
52
- }
53
-
54
- value = JSON.stringify(value);
55
-
56
- if (this.secret) {
57
- value = await encrypt(value as string, this.secret);
58
- }
59
-
60
- return value as string;
61
- }
62
-
63
-
64
64
  async all(): Promise<T> {
65
65
  let stack: Promise<void>[] = [],
66
66
  values: T = {} as T;
67
67
 
68
68
  await this.instance.iterate((v: unknown, k: string) => {
69
69
  stack.push(
70
- this.deserialize(v)
70
+ deserialize(v, this.secret)
71
71
  .then((value) => {
72
72
  if (value === undefined) {
73
73
  return;
74
74
  }
75
75
 
76
- values[k as keyof T] = value;
76
+ values[k as keyof T] = value as T[keyof T];
77
77
  })
78
78
  .catch(() => {})
79
79
  )
@@ -107,7 +107,7 @@ class Local<T> {
107
107
 
108
108
  await this.instance.iterate(async (v, k, i) => {
109
109
  let key = k as keyof T,
110
- value = await this.deserialize(v).catch(() => undefined);
110
+ value = await deserialize(v, this.secret).catch(() => undefined) as T[keyof T];
111
111
 
112
112
  if (value === undefined) {
113
113
  return;
@@ -128,7 +128,7 @@ class Local<T> {
128
128
  }
129
129
 
130
130
  async get(key: keyof T) {
131
- return await this.deserialize( await this.instance.getItem(key as string) ).catch(() => undefined);
131
+ return await deserialize( await this.instance.getItem(key as string), this.secret ).catch(() => undefined);
132
132
  }
133
133
 
134
134
  async only(...keys: (keyof T)[]) {
@@ -162,10 +162,11 @@ class Local<T> {
162
162
 
163
163
  await this.instance.setItem(
164
164
  key as string,
165
- await this.serialize(value).catch(() => {
166
- ok = false;
167
- return undefined;
168
- })
165
+ await serialize(value, this.secret)
166
+ .catch(() => {
167
+ ok = false;
168
+ return undefined;
169
+ })
169
170
  );
170
171
 
171
172
  return ok;