UNPKG

1.33 kBPlain TextView Raw
1
2export class OpaqueToken {
3 constructor(private _desc: string) {}
4
5 toString(): string { return `Token ${this._desc}`; }
6}
7
8export const HMR_STATE = new OpaqueToken('hmrState');
9
10export class HmrStore {
11 static dev = false;
12 static _state = {};
13 static _initialValues = {};
14 static _states = [];
15
16 static set(prop, value) {
17 HmrStore._state[prop] = value;
18 return HmrStore._state[prop];
19 }
20
21 static get(prop) {
22 return HmrStore._state[prop];
23 }
24
25 static select(name, getState) {
26 HmrStore._states.push({ name, getState });
27 let defaultData = getState();
28 let currentData = HmrStore.get(name);
29
30 if (defaultData && !currentData) {
31 return HmrStore.set(name, defaultData);
32 } else if (defaultData && currentData) {
33 return HmrStore.set(name, (<any>Object).assign({}, defaultData, currentData));
34 } else {
35 return HmrStore.set(name, currentData || defaultData);
36 }
37 }
38
39 static dispose() {
40 HmrStore._states = [];
41 HmrStore._state = {};
42 HmrStore._initialValues = {};
43 }
44
45 static getState() {
46 let initialState = (<any>Object).assign({}, HmrStore._state);
47 return HmrStore._states
48 .reduce((memo, item) => {
49 memo[item.name] = item.getState();
50 return memo;
51 }, initialState);
52 }
53 static toJSON() {
54 return HmrStore.getState();
55 }
56}