1 | import {HmrStore} from './hmr-store';
|
2 |
|
3 |
|
4 |
|
5 | const _env = typeof process !== 'undefined' &&
|
6 | process &&
|
7 | process.env &&
|
8 | (process.env.ENV ||
|
9 | process.env.NODE_ENV);
|
10 |
|
11 | let _dev: boolean = ((
|
12 | _env &&
|
13 | typeof _env === 'string' &&
|
14 | (_env.indexOf('dev') > -1)
|
15 | ) ||
|
16 | _env === undefined);
|
17 |
|
18 | export function setDev(newDev: string | boolean): boolean | void {
|
19 | if (typeof newDev === 'string') {
|
20 | return _dev = (newDev.indexOf('dev') > -1);
|
21 | } else if (typeof newDev === 'boolean') {
|
22 | return _dev = newDev;
|
23 | }
|
24 | throw new Error('Please provide a string or boolean');
|
25 | }
|
26 |
|
27 | export function HmrState(namespaceOrConfig?: string | any, config?: any): Function {
|
28 |
|
29 | function decoratorFactory(target: any, decoratedPropertyName?: string, descriptor?: any): void {
|
30 | if (!_dev) { return descriptor; }
|
31 |
|
32 | let key = namespaceOrConfig || target.constructor.name + '#' + decoratedPropertyName;
|
33 | HmrStore.select(key, () => HmrStore.get(key));
|
34 |
|
35 | Object.defineProperty(target, decoratedPropertyName, {
|
36 | get: () => HmrStore.get(key),
|
37 | set: (newValue?: any) => {
|
38 |
|
39 | let currentValue = HmrStore.get(key);
|
40 | if (!currentValue) {
|
41 | HmrStore._initialValues[key] = newValue;
|
42 | } else {
|
43 | newValue = Object.assign(newValue, currentValue);
|
44 | }
|
45 | return HmrStore.set(key, newValue);
|
46 |
|
47 | },
|
48 | enumerable: true,
|
49 | configurable: true
|
50 | });
|
51 | return descriptor;
|
52 | }
|
53 |
|
54 | return decoratorFactory;
|
55 | }
|