Skip to content

Commit 4e4a3d9

Browse files
committed
fix: adjust notifyHandler
1 parent ccfe25b commit 4e4a3d9

File tree

4 files changed

+45
-7
lines changed

4 files changed

+45
-7
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Using the [`crypto-js`](https://github.com/brix/crypto-js) library as an encrypt
3232
- [*setItem*](#setitem)
3333
- [*setMultipleItems*](#setmultipleitems)
3434
- [*getItem*](#getitem)
35-
- [*getMultipleItems*](#getmultipleites)
35+
- [*getMultipleItems*](#getmultipleitems)
3636
- [*removeItem*](#removeitem)
3737
- [*getItemFromPattern*](#getitemfrompattern)
3838
- [*removeItemFromPattern*](#removeitemfrompattern)
@@ -355,8 +355,8 @@ const value = {
355355
user: {
356356
id: '123456',
357357
name: 'John Doe'
358-
'any-key': undefined,
359-
}
358+
},
359+
'any-key': undefined,
360360
}
361361
```
362362

src/encrypt-storage.ts

+30-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export class EncryptStorage implements EncryptStorageInterface {
1717

1818
readonly #prefix: string;
1919

20+
#multiple = false;
21+
2022
readonly #stateManagementUse: boolean;
2123

2224
readonly #doNotEncryptValues: boolean;
@@ -81,7 +83,7 @@ export class EncryptStorage implements EncryptStorageInterface {
8183

8284
this.storage?.setItem(storageKey, encryptedValue);
8385

84-
if (this.#notifyHandler) {
86+
if (this.#notifyHandler && !this.#multiple) {
8587
this.#notifyHandler({
8688
type: 'set',
8789
key,
@@ -94,9 +96,24 @@ export class EncryptStorage implements EncryptStorageInterface {
9496
param: [string, any][],
9597
doNotEncrypt?: boolean,
9698
): void {
99+
this.#multiple = true;
97100
param.forEach(([key, value]) => {
98101
this.setItem(key, value, doNotEncrypt);
99102
});
103+
104+
if (this.#notifyHandler) {
105+
const keys = param.map(([key]) => key);
106+
const values = param.map(([_, value]) =>
107+
typeof value === 'object' ? JSON.stringify(value) : String(value),
108+
);
109+
this.#notifyHandler({
110+
type: 'setMultiple',
111+
key: keys,
112+
value: values,
113+
});
114+
115+
this.#multiple = false;
116+
}
100117
}
101118

102119
public getItem<T = any>(key: string, doNotDecrypt = false): T | undefined {
@@ -109,7 +126,7 @@ export class EncryptStorage implements EncryptStorageInterface {
109126
? item
110127
: this.#encryptation.decrypt(item);
111128

112-
if (this.#stateManagementUse) {
129+
if (this.#stateManagementUse && !this.#multiple) {
113130
if (this.#notifyHandler) {
114131
this.#notifyHandler({
115132
type: 'get',
@@ -159,12 +176,23 @@ export class EncryptStorage implements EncryptStorageInterface {
159176
keys: string[],
160177
doNotDecrypt?: boolean,
161178
): Record<string, any> {
179+
this.#multiple = true;
162180
const result = keys.reduce((accumulator: Record<string, any>, key) => {
163181
accumulator[key] = this.getItem(key, doNotDecrypt);
164182

165183
return accumulator;
166184
}, {});
167185

186+
if (this.#notifyHandler) {
187+
this.#notifyHandler({
188+
type: 'getMultiple',
189+
key: keys,
190+
value: result,
191+
});
192+
193+
this.#multiple = false;
194+
}
195+
168196
return result;
169197
}
170198

src/experiments/test-1.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ export const test1 = () =>
113113
const key1 = faker.random.word();
114114
const key2 = faker.random.word();
115115
const value1 = faker.random.word();
116-
const value2 = faker.random.objectElement<Record<string, any>>();
116+
const value2 = {
117+
[faker.random.word()]: faker.random.alphaNumeric(),
118+
};
117119

118120
safeStorage.setMultipleItems([
119121
[key1, value1],

src/types.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@ export type EncAlgorithm = 'AES' | 'Rabbit' | 'RC4' | 'RC4Drop';
22

33
type StorageType = 'localStorage' | 'sessionStorage';
44

5-
type ChangeType = 'set' | 'get' | 'remove' | 'clear' | 'length' | 'key';
5+
type ChangeType =
6+
| 'set'
7+
| 'get'
8+
| 'getMultiple'
9+
| 'setMultiple'
10+
| 'remove'
11+
| 'clear'
12+
| 'length'
13+
| 'key';
614

715
export interface NotifyHandlerParams {
816
type: ChangeType;

0 commit comments

Comments
 (0)