UNPKG

1.53 kBPlain TextView Raw
1import {HmrStore} from './hmr-store';
2
3// noop in parentNode
4// TODO: find a better way to noop
5const _env = typeof process !== 'undefined' &&
6 process &&
7 process.env &&
8 (process.env.ENV ||
9 process.env.NODE_ENV);
10
11let _dev: boolean = ((
12 _env &&
13 typeof _env === 'string' &&
14 (_env.indexOf('dev') > -1)
15 ) || // default true
16 _env === undefined);
17
18export 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
27export 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}