mobx-react 5.3.6 → 5.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/custom.module.js CHANGED
@@ -1,5 +1,5 @@
1
- import React__default, { Component, createElement, PureComponent, Children } from 'react';
2
1
  import { isObservableArray, isObservableObject, isObservableMap, untracked, createAtom, Reaction, _allowStateChanges, $mobx, spy, getDebugName } from 'mobx';
2
+ import React__default, { Component, createElement, PureComponent, forwardRef, Children } from 'react';
3
3
 
4
4
  function _typeof(obj) {
5
5
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
@@ -111,33 +111,35 @@ function createCommonjsModule(fn, module) {
111
111
 
112
112
  var reactIs_production_min = createCommonjsModule(function (module, exports) {
113
113
  Object.defineProperty(exports,"__esModule",{value:!0});
114
- var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.forward_ref"):60112,n=b?Symbol.for("react.placeholder"):60113;
115
- function q(a){if("object"===typeof a&&null!==a){var p=a.$$typeof;switch(p){case c:switch(a=a.type,a){case l:case e:case g:case f:return a;default:switch(a=a&&a.$$typeof,a){case k:case m:case h:return a;default:return p}}case d:return p}}}exports.typeOf=q;exports.AsyncMode=l;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=m;exports.Fragment=e;exports.Profiler=g;exports.Portal=d;exports.StrictMode=f;
116
- exports.isValidElementType=function(a){return "string"===typeof a||"function"===typeof a||a===e||a===l||a===g||a===f||a===n||"object"===typeof a&&null!==a&&("function"===typeof a.then||a.$$typeof===h||a.$$typeof===k||a.$$typeof===m)};exports.isAsyncMode=function(a){return q(a)===l};exports.isContextConsumer=function(a){return q(a)===k};exports.isContextProvider=function(a){return q(a)===h};exports.isElement=function(a){return "object"===typeof a&&null!==a&&a.$$typeof===c};
117
- exports.isForwardRef=function(a){return q(a)===m};exports.isFragment=function(a){return q(a)===e};exports.isProfiler=function(a){return q(a)===g};exports.isPortal=function(a){return q(a)===d};exports.isStrictMode=function(a){return q(a)===f};
114
+ var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,r=b?Symbol.for("react.memo"):
115
+ 60115,t=b?Symbol.for("react.lazy"):60116;function u(a){if("object"===typeof a&&null!==a){var q=a.$$typeof;switch(q){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case h:return a;default:return q}}case d:return q}}}function v(a){return u(a)===m}exports.typeOf=u;exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;
116
+ exports.Profiler=g;exports.Portal=d;exports.StrictMode=f;exports.isValidElementType=function(a){return "string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n)};exports.isAsyncMode=function(a){return v(a)||u(a)===l};exports.isConcurrentMode=v;exports.isContextConsumer=function(a){return u(a)===k};exports.isContextProvider=function(a){return u(a)===h};
117
+ exports.isElement=function(a){return "object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return u(a)===n};exports.isFragment=function(a){return u(a)===e};exports.isProfiler=function(a){return u(a)===g};exports.isPortal=function(a){return u(a)===d};exports.isStrictMode=function(a){return u(a)===f};
118
118
  });
119
119
 
120
120
  unwrapExports(reactIs_production_min);
121
121
  var reactIs_production_min_1 = reactIs_production_min.typeOf;
122
122
  var reactIs_production_min_2 = reactIs_production_min.AsyncMode;
123
- var reactIs_production_min_3 = reactIs_production_min.ContextConsumer;
124
- var reactIs_production_min_4 = reactIs_production_min.ContextProvider;
125
- var reactIs_production_min_5 = reactIs_production_min.Element;
126
- var reactIs_production_min_6 = reactIs_production_min.ForwardRef;
127
- var reactIs_production_min_7 = reactIs_production_min.Fragment;
128
- var reactIs_production_min_8 = reactIs_production_min.Profiler;
129
- var reactIs_production_min_9 = reactIs_production_min.Portal;
130
- var reactIs_production_min_10 = reactIs_production_min.StrictMode;
131
- var reactIs_production_min_11 = reactIs_production_min.isValidElementType;
132
- var reactIs_production_min_12 = reactIs_production_min.isAsyncMode;
133
- var reactIs_production_min_13 = reactIs_production_min.isContextConsumer;
134
- var reactIs_production_min_14 = reactIs_production_min.isContextProvider;
135
- var reactIs_production_min_15 = reactIs_production_min.isElement;
136
- var reactIs_production_min_16 = reactIs_production_min.isForwardRef;
137
- var reactIs_production_min_17 = reactIs_production_min.isFragment;
138
- var reactIs_production_min_18 = reactIs_production_min.isProfiler;
139
- var reactIs_production_min_19 = reactIs_production_min.isPortal;
140
- var reactIs_production_min_20 = reactIs_production_min.isStrictMode;
123
+ var reactIs_production_min_3 = reactIs_production_min.ConcurrentMode;
124
+ var reactIs_production_min_4 = reactIs_production_min.ContextConsumer;
125
+ var reactIs_production_min_5 = reactIs_production_min.ContextProvider;
126
+ var reactIs_production_min_6 = reactIs_production_min.Element;
127
+ var reactIs_production_min_7 = reactIs_production_min.ForwardRef;
128
+ var reactIs_production_min_8 = reactIs_production_min.Fragment;
129
+ var reactIs_production_min_9 = reactIs_production_min.Profiler;
130
+ var reactIs_production_min_10 = reactIs_production_min.Portal;
131
+ var reactIs_production_min_11 = reactIs_production_min.StrictMode;
132
+ var reactIs_production_min_12 = reactIs_production_min.isValidElementType;
133
+ var reactIs_production_min_13 = reactIs_production_min.isAsyncMode;
134
+ var reactIs_production_min_14 = reactIs_production_min.isConcurrentMode;
135
+ var reactIs_production_min_15 = reactIs_production_min.isContextConsumer;
136
+ var reactIs_production_min_16 = reactIs_production_min.isContextProvider;
137
+ var reactIs_production_min_17 = reactIs_production_min.isElement;
138
+ var reactIs_production_min_18 = reactIs_production_min.isForwardRef;
139
+ var reactIs_production_min_19 = reactIs_production_min.isFragment;
140
+ var reactIs_production_min_20 = reactIs_production_min.isProfiler;
141
+ var reactIs_production_min_21 = reactIs_production_min.isPortal;
142
+ var reactIs_production_min_22 = reactIs_production_min.isStrictMode;
141
143
 
142
144
  var reactIs = createCommonjsModule(function (module) {
143
145
 
@@ -146,22 +148,19 @@ var reactIs = createCommonjsModule(function (module) {
146
148
  }
147
149
  });
148
150
 
149
- var _ReactIs$ForwardRef;
150
-
151
- function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
152
-
153
151
  /**
154
152
  * Copyright 2015, Yahoo! Inc.
155
153
  * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
156
154
  */
157
155
 
158
-
159
156
  var REACT_STATICS = {
160
157
  childContextTypes: true,
158
+ contextType: true,
161
159
  contextTypes: true,
162
160
  defaultProps: true,
163
161
  displayName: true,
164
162
  getDefaultProps: true,
163
+ getDerivedStateFromError: true,
165
164
  getDerivedStateFromProps: true,
166
165
  mixins: true,
167
166
  propTypes: true,
@@ -178,7 +177,16 @@ var KNOWN_STATICS = {
178
177
  arity: true
179
178
  };
180
179
 
181
- var TYPE_STATICS = _defineProperty$1({}, reactIs.ForwardRef, (_ReactIs$ForwardRef = {}, _defineProperty$1(_ReactIs$ForwardRef, '$$typeof', true), _defineProperty$1(_ReactIs$ForwardRef, 'render', true), _ReactIs$ForwardRef));
180
+ var FORWARD_REF_STATICS = {
181
+ '$$typeof': true,
182
+ render: true,
183
+ defaultProps: true,
184
+ displayName: true,
185
+ propTypes: true
186
+ };
187
+
188
+ var TYPE_STATICS = {};
189
+ TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;
182
190
 
183
191
  var defineProperty = Object.defineProperty;
184
192
  var getOwnPropertyNames = Object.getOwnPropertyNames;
@@ -562,8 +570,8 @@ var proxiedInjectorProps = {
562
570
  configurable: true,
563
571
  enumerable: true
564
572
  }
565
- /**
566
- * Store Injection
573
+ /**
574
+ * Store Injection
567
575
  */
568
576
 
569
577
  };
@@ -647,11 +655,11 @@ function grabStoresByName(storeNames) {
647
655
  return nextProps;
648
656
  };
649
657
  }
650
- /**
651
- * higher order component that injects stores to a child.
652
- * takes either a varargs list of strings, which are stores read from the context,
653
- * or a function that manually maps the available stores from the context to props:
654
- * storesToProps(mobxStores, props, context) => newProps
658
+ /**
659
+ * higher order component that injects stores to a child.
660
+ * takes either a varargs list of strings, which are stores read from the context,
661
+ * or a function that manually maps the available stores from the context to props:
662
+ * storesToProps(mobxStores, props, context) => newProps
655
663
  */
656
664
 
657
665
 
@@ -689,8 +697,8 @@ function inject()
689
697
 
690
698
  var mobxAdminProperty = $mobx || "$mobx";
691
699
  var mobxIsUnmounted = newSymbol("isUnmounted");
692
- /**
693
- * dev tool support
700
+ /**
701
+ * dev tool support
694
702
  */
695
703
 
696
704
  var isDevtoolsEnabled = false;
@@ -700,12 +708,14 @@ var warnedAboutObserverInjectDeprecation = false; // WeakMap<Node, Object>;
700
708
  var componentByNodeRegistry = typeof WeakMap !== "undefined" ? new WeakMap() : undefined;
701
709
  var renderReporter = new EventEmitter();
702
710
  var skipRenderKey = newSymbol("skipRender");
703
- var isForcingUpdateKey = newSymbol("isForcingUpdate");
704
- /**
705
- * Helper to set `prop` to `this` as non-enumerable (hidden prop)
706
- * @param target
707
- * @param prop
708
- * @param value
711
+ var isForcingUpdateKey = newSymbol("isForcingUpdate"); // Using react-is had some issues (and operates on elements, not on types), see #608 / #609
712
+
713
+ var ReactForwardRefSymbol = typeof forwardRef === "function" && forwardRef(function (_props, _ref) {})["$$typeof"];
714
+ /**
715
+ * Helper to set `prop` to `this` as non-enumerable (hidden prop)
716
+ * @param target
717
+ * @param prop
718
+ * @param value
709
719
  */
710
720
 
711
721
  function setHiddenProp(target, prop, value) {
@@ -745,13 +755,13 @@ function trackComponents() {
745
755
  function useStaticRendering(useStaticRendering) {
746
756
  isUsingStaticRendering = useStaticRendering;
747
757
  }
748
- /**
749
- * Errors reporter
758
+ /**
759
+ * Errors reporter
750
760
  */
751
761
 
752
762
  var errorsReporter = new EventEmitter();
753
- /**
754
- * Utilities
763
+ /**
764
+ * Utilities
755
765
  */
756
766
 
757
767
  function patch$1(target, funcName) {
@@ -826,15 +836,15 @@ function makeComponentReactive(render) {
826
836
 
827
837
  var initialName = this.displayName || this.name || this.constructor && (this.constructor.displayName || this.constructor.name) || "<component>";
828
838
  var rootNodeID = this._reactInternalInstance && this._reactInternalInstance._rootNodeID || this._reactInternalInstance && this._reactInternalInstance._debugID || this._reactInternalFiber && this._reactInternalFiber._debugID;
829
- /**
830
- * If props are shallowly modified, react will render anyway,
831
- * so atom.reportChanged() should not result in yet another re-render
839
+ /**
840
+ * If props are shallowly modified, react will render anyway,
841
+ * so atom.reportChanged() should not result in yet another re-render
832
842
  */
833
843
 
834
844
  setHiddenProp(this, skipRenderKey, false);
835
- /**
836
- * forceUpdate will re-assign this.props. We don't want that to cause a loop,
837
- * so detect these changes
845
+ /**
846
+ * forceUpdate will re-assign this.props. We don't want that to cause a loop,
847
+ * so detect these changes
838
848
  */
839
849
 
840
850
  setHiddenProp(this, isForcingUpdateKey, false); // wire up reactive render
@@ -852,7 +862,7 @@ function makeComponentReactive(render) {
852
862
  if (_this2[mobxIsUnmounted] !== true) {
853
863
  // If we are unmounted at this point, componentWillReact() had a side effect causing the component to unmounted
854
864
  // TODO: remove this check? Then react will properly warn about the fact that this should not happen? See #73
855
- // However, people also claim this migth happen during unit tests..
865
+ // However, people also claim this might happen during unit tests..
856
866
  var hasError = true;
857
867
 
858
868
  try {
@@ -871,8 +881,8 @@ function makeComponentReactive(render) {
871
881
  this.render = reactiveRender;
872
882
  return reactiveRender.call(this);
873
883
  }
874
- /**
875
- * ReactiveMixin
884
+ /**
885
+ * ReactiveMixin
876
886
  */
877
887
 
878
888
 
@@ -955,8 +965,8 @@ function makeObservableProp(target, propName) {
955
965
  }
956
966
  });
957
967
  }
958
- /**
959
- * Observer function / decorator
968
+ /**
969
+ * Observer function / decorator
960
970
  */
961
971
 
962
972
 
@@ -991,6 +1001,21 @@ function observer(arg1, arg2) {
991
1001
 
992
1002
  if (componentClass.__proto__ === PureComponent) {
993
1003
  console.warn("Mobx observer: You are using 'observer' on React.PureComponent. These two achieve two opposite goals and should not be used together");
1004
+ } // Unwrap forward refs into `<Observer>` component
1005
+ // we need to unwrap the render, because it is the inner render that needs to be tracked,
1006
+ // not the ForwardRef HoC
1007
+
1008
+
1009
+ if (ReactForwardRefSymbol && componentClass["$$typeof"] === ReactForwardRefSymbol) {
1010
+ var _baseRender = componentClass.render;
1011
+ if (typeof _baseRender !== "function") throw new Error("render property of ForwardRef was not a function"); // TODO: do we need to hoist statics from baseRender to the forward ref?
1012
+
1013
+ return forwardRef(function ObserverForwardRef() {
1014
+ var _arguments = arguments;
1015
+ return React__default.createElement(Observer, null, function () {
1016
+ return _baseRender.apply(undefined, _arguments);
1017
+ });
1018
+ });
994
1019
  } // Stateless function component:
995
1020
  // If it is function but doesn't seem to be a react class constructor,
996
1021
  // wrap it to a react class automatically
@@ -1056,10 +1081,10 @@ function mixinLifecycleEvents(target) {
1056
1081
  }
1057
1082
  }
1058
1083
 
1059
- var Observer = observer(function (_ref) {
1060
- var children = _ref.children,
1061
- observerInject = _ref.inject,
1062
- render = _ref.render;
1084
+ var Observer = observer(function (_ref2) {
1085
+ var children = _ref2.children,
1086
+ observerInject = _ref2.inject,
1087
+ render = _ref2.render;
1063
1088
  var component = children || render;
1064
1089
 
1065
1090
  if (typeof component === "undefined") {
package/empty.js CHANGED
@@ -1,3 +1,3 @@
1
- // These functions can be stubbed out in specific environments
2
- export const unstable_batchedUpdates = undefined
3
- export const findDOMNode = undefined
1
+ // These functions can be stubbed out in specific environments
2
+ export const unstable_batchedUpdates = undefined
3
+ export const findDOMNode = undefined
package/index.d.ts CHANGED
@@ -1,140 +1,140 @@
1
- /**
2
- * Turns a React component or stateless render function into a reactive component.
3
- */
4
- import * as React from "react"
5
-
6
- export type IReactComponent<P = any> =
7
- | React.StatelessComponent<P>
8
- | React.ComponentClass<P>
9
- | React.ClassicComponentClass<P>
10
-
11
- /**
12
- * Observer
13
- */
14
-
15
- // Deprecated: observer with with stores (as decorator)
16
- export function observer(stores: string[]): <T extends IReactComponent>(clazz: T) => void
17
- // Deprecated: observer with with stores
18
- export function observer<T extends IReactComponent>(stores: string[], clazz: T): T
19
- export function observer<T extends IReactComponent>(target: T): T
20
-
21
- /**
22
- * Inject
23
- */
24
- export type IValueMap = { [key: string]: any }
25
- export type IStoresToProps<
26
- S extends IValueMap = {},
27
- P extends IValueMap = {},
28
- I extends IValueMap = {},
29
- C extends IValueMap = {}
30
- > = (stores: S, nextProps: P, context: C) => I
31
-
32
- export type IWrappedComponent<P> = {
33
- wrappedComponent: IReactComponent<P>
34
- wrappedInstance: React.ReactInstance | undefined
35
- }
36
-
37
- // Ideally we would want to return React.ComponentClass<Partial<P>>,
38
- // but TS doesn't allow such things in decorators, like we do in the non-decorator version
39
- // See also #256
40
- export function inject(
41
- ...stores: string[]
42
- ): <T extends IReactComponent<any>>(
43
- target: T
44
- ) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)
45
- export function inject<S, P, I, C>(
46
- fn: IStoresToProps<S, P, I, C>
47
- ): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>
48
-
49
- // Ideal implementation:
50
- // export function inject
51
- // (
52
- // fn: IStoresToProps
53
- // ):
54
- // <P>(target: IReactComponent<P>) => IReactComponent<Partial<P>> & IWrappedComponent<IReactComponent<Partial<P>>>
55
- //
56
- // Or even better: (but that would require type inference to work other way around)
57
- // export function inject<P, I>
58
- // (
59
- // fn: IStoresToProps<any, P, I>
60
- // ):
61
- // <T extends IReactComponent<P & S>(target: T) => IReactComponent<P> & IWrappedComponent<T>
62
-
63
- /**
64
- * disposeOnUnmount
65
- */
66
- type Disposer = () => void
67
- export function disposeOnUnmount(target: React.Component<any, any>, propertyKey: string): void
68
- export function disposeOnUnmount<TF extends Disposer | Disposer[]>(
69
- target: React.Component<any, any>,
70
- fn: TF
71
- ): TF
72
-
73
- /**
74
- * Utilities
75
- */
76
- export function onError(cb: (error: Error) => void): () => void
77
-
78
- export class Provider extends React.Component<any, {}> {}
79
-
80
- export class Observer extends React.Component<
81
- {
82
- children?: () => React.ReactNode
83
- render?: () => React.ReactNode
84
- },
85
- {}
86
- > {}
87
-
88
- export function useStaticRendering(value: boolean): void
89
-
90
- /**
91
- * Enable dev tool support, makes sure that renderReport emits events.
92
- */
93
- export function trackComponents(): void
94
-
95
- export const renderReporter: RenderReporter
96
-
97
- export interface RenderReporter {
98
- on(handler: (data: IRenderEvent) => void): void
99
- }
100
-
101
- export interface IRenderEvent {
102
- event: "render" | "destroy"
103
- renderTime?: number
104
- totalTime?: number
105
- component: React.ReactElement<any> // Component instance
106
- node: any // DOMNode
107
- }
108
-
109
- /**
110
- * WeakMap DOMNode -> Component instance
111
- * @deprecated
112
- */
113
- export const componentByNodeRegistery: any
114
- /**
115
- * WeakMap DOMNode -> Component instance
116
- */
117
- export const componentByNodeRegistry: any
118
-
119
- /**
120
- * @deprecated, use PropTypes instead
121
- */
122
- export const propTypes: {
123
- observableArray: React.Requireable<any>
124
- observableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
125
- observableMap: React.Requireable<any>
126
- observableObject: React.Requireable<any>
127
- arrayOrObservableArray: React.Requireable<any>
128
- arrayOrObservableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
129
- objectOrObservableObject: React.Requireable<any>
130
- }
131
-
132
- export const PropTypes: {
133
- observableArray: React.Requireable<any>
134
- observableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
135
- observableMap: React.Requireable<any>
136
- observableObject: React.Requireable<any>
137
- arrayOrObservableArray: React.Requireable<any>
138
- arrayOrObservableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
139
- objectOrObservableObject: React.Requireable<any>
140
- }
1
+ /**
2
+ * Turns a React component or stateless render function into a reactive component.
3
+ */
4
+ import * as React from "react"
5
+
6
+ export type IReactComponent<P = any> =
7
+ | React.StatelessComponent<P>
8
+ | React.ComponentClass<P>
9
+ | React.ClassicComponentClass<P>
10
+
11
+ /**
12
+ * Observer
13
+ */
14
+
15
+ // Deprecated: observer with with stores (as decorator)
16
+ export function observer(stores: string[]): <T extends IReactComponent>(clazz: T) => void
17
+ // Deprecated: observer with with stores
18
+ export function observer<T extends IReactComponent>(stores: string[], clazz: T): T
19
+ export function observer<T extends IReactComponent>(target: T): T
20
+
21
+ /**
22
+ * Inject
23
+ */
24
+ export type IValueMap = { [key: string]: any }
25
+ export type IStoresToProps<
26
+ S extends IValueMap = {},
27
+ P extends IValueMap = {},
28
+ I extends IValueMap = {},
29
+ C extends IValueMap = {}
30
+ > = (stores: S, nextProps: P, context: C) => I
31
+
32
+ export type IWrappedComponent<P> = {
33
+ wrappedComponent: IReactComponent<P>
34
+ wrappedInstance: React.ReactInstance | undefined
35
+ }
36
+
37
+ // Ideally we would want to return React.ComponentClass<Partial<P>>,
38
+ // but TS doesn't allow such things in decorators, like we do in the non-decorator version
39
+ // See also #256
40
+ export function inject(
41
+ ...stores: string[]
42
+ ): <T extends IReactComponent<any>>(
43
+ target: T
44
+ ) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)
45
+ export function inject<S, P, I, C>(
46
+ fn: IStoresToProps<S, P, I, C>
47
+ ): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>
48
+
49
+ // Ideal implementation:
50
+ // export function inject
51
+ // (
52
+ // fn: IStoresToProps
53
+ // ):
54
+ // <P>(target: IReactComponent<P>) => IReactComponent<Partial<P>> & IWrappedComponent<IReactComponent<Partial<P>>>
55
+ //
56
+ // Or even better: (but that would require type inference to work other way around)
57
+ // export function inject<P, I>
58
+ // (
59
+ // fn: IStoresToProps<any, P, I>
60
+ // ):
61
+ // <T extends IReactComponent<P & S>(target: T) => IReactComponent<P> & IWrappedComponent<T>
62
+
63
+ /**
64
+ * disposeOnUnmount
65
+ */
66
+ type Disposer = () => void
67
+ export function disposeOnUnmount(target: React.Component<any, any>, propertyKey: string): void
68
+ export function disposeOnUnmount<TF extends Disposer | Disposer[]>(
69
+ target: React.Component<any, any>,
70
+ fn: TF
71
+ ): TF
72
+
73
+ /**
74
+ * Utilities
75
+ */
76
+ export function onError(cb: (error: Error) => void): () => void
77
+
78
+ export class Provider extends React.Component<any, {}> {}
79
+
80
+ export class Observer extends React.Component<
81
+ {
82
+ children?: () => React.ReactNode
83
+ render?: () => React.ReactNode
84
+ },
85
+ {}
86
+ > {}
87
+
88
+ export function useStaticRendering(value: boolean): void
89
+
90
+ /**
91
+ * Enable dev tool support, makes sure that renderReport emits events.
92
+ */
93
+ export function trackComponents(): void
94
+
95
+ export const renderReporter: RenderReporter
96
+
97
+ export interface RenderReporter {
98
+ on(handler: (data: IRenderEvent) => void): void
99
+ }
100
+
101
+ export interface IRenderEvent {
102
+ event: "render" | "destroy"
103
+ renderTime?: number
104
+ totalTime?: number
105
+ component: React.ReactElement<any> // Component instance
106
+ node: any // DOMNode
107
+ }
108
+
109
+ /**
110
+ * WeakMap DOMNode -> Component instance
111
+ * @deprecated
112
+ */
113
+ export const componentByNodeRegistery: any
114
+ /**
115
+ * WeakMap DOMNode -> Component instance
116
+ */
117
+ export const componentByNodeRegistry: any
118
+
119
+ /**
120
+ * @deprecated, use PropTypes instead
121
+ */
122
+ export const propTypes: {
123
+ observableArray: React.Requireable<any>
124
+ observableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
125
+ observableMap: React.Requireable<any>
126
+ observableObject: React.Requireable<any>
127
+ arrayOrObservableArray: React.Requireable<any>
128
+ arrayOrObservableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
129
+ objectOrObservableObject: React.Requireable<any>
130
+ }
131
+
132
+ export const PropTypes: {
133
+ observableArray: React.Requireable<any>
134
+ observableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
135
+ observableMap: React.Requireable<any>
136
+ observableObject: React.Requireable<any>
137
+ arrayOrObservableArray: React.Requireable<any>
138
+ arrayOrObservableArrayOf: (type: React.Validator<any>) => React.Requireable<any>
139
+ objectOrObservableObject: React.Requireable<any>
140
+ }