/
DomStorage.ts
65 lines (57 loc) · 1.79 KB
/
DomStorage.ts
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
import { IGenericStorage } from './IGenericStorage';
import { JsonSerializer } from '../../Utility/Serialization/JsonSerializer';
import { Command } from '../../Patterns/CommandQuery/Command';
import { Result } from '../../Patterns/Result/Result';
import { Query } from '../../Patterns/CommandQuery/Query';
export enum DomStorageMode {
Session,
Local
}
/**
* Provides a generic interface for interacting with DomStorage
*/
export class DomStorage implements IGenericStorage {
constructor(
private storageMode: DomStorageMode,
private serializer = new JsonSerializer()
) { }
public Get<T>(type: { new(): T; }, key: string): Result<T | null> {
return new Query((): T | null => {
const value = this.getStorageMedium().getItem(key);
if (value) {
return this.serializer.Deserialize(type, JSON.parse(value)) as T;
} else {
return null;
}
}).Execute();
}
public Set<T>(key: string, value: T): Result<null> {
return new Command(() =>
this.getStorageMedium().setItem(key, JSON.stringify(value))).Execute();
}
public GetValue(key: string): Result<string | null> {
return new Query((): string | null => {
const value = this.getStorageMedium().getItem(key);
if (value) {
return value;
} else {
return null;
}
}).Execute();
}
public SetValue(key: string, value: string): Result<null> {
return new Command(() =>
this.getStorageMedium().setItem(key, value)).Execute();
}
public Remove(key: string): Result<null> {
return new Command(() =>
this.getStorageMedium().removeItem(key)).Execute();
}
private getStorageMedium(): Storage {
if (this.storageMode === DomStorageMode.Local) {
return window.localStorage;
} else {
return window.sessionStorage;
}
}
}