Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.

Commit ed69f03

Browse files
committed
feat(WebstorageService): improve clearing storage (remove keys created by this repository only)
1 parent 7779283 commit ed69f03

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/decorator/webstorage.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
import {WebStorageUtility} from '../utility/webstorage.utility';
2+
import {LocalStorageService, SessionStorageService, WebStorageServiceInterface} from '../service/webstorage.service';
23

34

45
export function LocalStorage(key?: string) {
5-
return WebStorage(localStorage, key);
6+
return WebStorage(localStorage, LocalStorageService, key);
67
}
78

89
export function SessionStorage(key?: string) {
9-
return WebStorage(sessionStorage, key);
10+
return WebStorage(sessionStorage, SessionStorageService, key);
1011
}
1112

1213
// initialization cache
1314
let cache = {};
1415

15-
export let WebStorage = (webStorage: Storage, key: string) => {
16+
export let WebStorage = (webStorage: Storage, service: WebStorageServiceInterface, key: string) => {
1617
return (target: Object, propertyName: string): void => {
1718
key = key || propertyName;
1819
let proxy = target[propertyName];
20+
service.keys.push(key);
1921

2022
Object.defineProperty(target, propertyName, {
2123
get: function() {

src/service/webstorage.service.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
11
import {Injectable} from '@angular/core';
22
import {WebStorageUtility} from '../utility/webstorage.utility';
33

4-
export class WebStorageService {
5-
constructor(private storage: Storage) {
4+
export interface WebStorageServiceInterface {
5+
keys: Array<string>;
6+
new(): {
7+
get(key: string): any;
8+
set(key: string, value: any): void;
9+
remove(key: string): void;
10+
clear(): void;
11+
}
12+
}
13+
14+
export abstract class WebStorageService {
15+
public static keys: Array<string>;
16+
17+
constructor(protected storage: Storage) {
618

719
}
820

@@ -19,19 +31,25 @@ export class WebStorageService {
1931
}
2032

2133
clear(): void {
22-
this.storage.clear();
34+
for (let key of (<WebStorageServiceInterface>this.constructor).keys) {
35+
this.storage.removeItem(key);
36+
}
2337
}
2438
}
2539

2640
@Injectable()
2741
export class LocalStorageService extends WebStorageService {
42+
public static keys: Array<string> = [];
43+
2844
constructor() {
2945
super(localStorage);
3046
}
3147
}
3248

3349
@Injectable()
3450
export class SessionStorageService extends WebStorageService {
51+
public static keys: Array<string> = [];
52+
3553
constructor() {
3654
super(sessionStorage);
3755
}

0 commit comments

Comments
 (0)