summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/vendor/react-proxy.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/vendor/react-proxy.js')
-rw-r--r--devtools/client/shared/vendor/react-proxy.js1909
1 files changed, 1909 insertions, 0 deletions
diff --git a/devtools/client/shared/vendor/react-proxy.js b/devtools/client/shared/vendor/react-proxy.js
new file mode 100644
index 000000000..95346a026
--- /dev/null
+++ b/devtools/client/shared/vendor/react-proxy.js
@@ -0,0 +1,1909 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define(factory);
+ else if(typeof exports === 'object')
+ exports["ReactProxy"] = factory();
+ else
+ root["ReactProxy"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId])
+/******/ return installedModules[moduleId].exports;
+/******/
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ exports: {},
+/******/ id: moduleId,
+/******/ loaded: false
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+
+ function _interopRequire(obj) { return obj && obj.__esModule ? obj['default'] : obj; }
+
+ var _createClassProxy = __webpack_require__(12);
+
+ exports.createProxy = _interopRequire(_createClassProxy);
+
+ var _reactDeepForceUpdate = __webpack_require__(39);
+
+ exports.getForceUpdate = _interopRequire(_reactDeepForceUpdate);
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+ function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+ }
+
+ module.exports = isObject;
+
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getLength = __webpack_require__(30),
+ isLength = __webpack_require__(5);
+
+ /**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+ function isArrayLike(value) {
+ return value != null && isLength(getLength(value));
+ }
+
+ module.exports = isArrayLike;
+
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+ function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+ }
+
+ module.exports = isObjectLike;
+
+
+/***/ },
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isNative = __webpack_require__(35);
+
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+ function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+ }
+
+ module.exports = getNative;
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+ var MAX_SAFE_INTEGER = 9007199254740991;
+
+ /**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+ function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+
+ module.exports = isLength;
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /** Used to detect unsigned integer values. */
+ var reIsUint = /^\d+$/;
+
+ /**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+ var MAX_SAFE_INTEGER = 9007199254740991;
+
+ /**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+ function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+ }
+
+ module.exports = isIndex;
+
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArrayLike = __webpack_require__(2),
+ isObjectLike = __webpack_require__(3);
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Native method references. */
+ var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+ /**
+ * Checks if `value` is classified as an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ function isArguments(value) {
+ return isObjectLike(value) && isArrayLike(value) &&
+ hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+ }
+
+ module.exports = isArguments;
+
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(4),
+ isLength = __webpack_require__(5),
+ isObjectLike = __webpack_require__(3);
+
+ /** `Object#toString` result references. */
+ var arrayTag = '[object Array]';
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objToString = objectProto.toString;
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeIsArray = getNative(Array, 'isArray');
+
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */
+ var isArray = nativeIsArray || function(value) {
+ return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+ };
+
+ module.exports = isArray;
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /** Used as the `TypeError` message for "Functions" methods. */
+ var FUNC_ERROR_TEXT = 'Expected a function';
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeMax = Math.max;
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.restParam(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+ function restParam(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ rest = Array(length);
+
+ while (++index < length) {
+ rest[index] = args[start + index];
+ }
+ switch (start) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, args[0], rest);
+ case 2: return func.call(this, args[0], args[1], rest);
+ }
+ var otherArgs = Array(start + 1);
+ index = -1;
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = rest;
+ return func.apply(this, otherArgs);
+ };
+ }
+
+ module.exports = restParam;
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(4),
+ isArrayLike = __webpack_require__(2),
+ isObject = __webpack_require__(1),
+ shimKeys = __webpack_require__(33);
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeKeys = getNative(Object, 'keys');
+
+ /**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+ var keys = !nativeKeys ? shimKeys : function(object) {
+ var Ctor = object == null ? undefined : object.constructor;
+ if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+ (typeof object != 'function' && isArrayLike(object))) {
+ return shimKeys(object);
+ }
+ return isObject(object) ? nativeKeys(object) : [];
+ };
+
+ module.exports = keys;
+
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of React source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * Original:
+ * https://github.com/facebook/react/blob/6508b1ad273a6f371e8d90ae676e5390199461b4/src/isomorphic/classic/class/ReactClass.js#L650-L713
+ */
+
+ 'use strict';
+
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+ exports['default'] = bindAutoBindMethods;
+ function bindAutoBindMethod(component, method) {
+ var boundMethod = method.bind(component);
+
+ boundMethod.__reactBoundContext = component;
+ boundMethod.__reactBoundMethod = method;
+ boundMethod.__reactBoundArguments = null;
+
+ var componentName = component.constructor.displayName,
+ _bind = boundMethod.bind;
+
+ boundMethod.bind = function (newThis) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (newThis !== component && newThis !== null) {
+ console.warn('bind(): React component methods may only be bound to the ' + 'component instance. See ' + componentName);
+ } else if (!args.length) {
+ console.warn('bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See ' + componentName);
+ return boundMethod;
+ }
+
+ var reboundMethod = _bind.apply(boundMethod, arguments);
+ reboundMethod.__reactBoundContext = component;
+ reboundMethod.__reactBoundMethod = method;
+ reboundMethod.__reactBoundArguments = args;
+
+ return reboundMethod;
+ };
+
+ return boundMethod;
+ }
+
+ function bindAutoBindMethods(component) {
+ for (var autoBindKey in component.__reactAutoBindMap) {
+ if (!component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {
+ return;
+ }
+
+ // Tweak: skip methods that are already bound.
+ // This is to preserve method reference in case it is used
+ // as a subscription handler that needs to be detached later.
+ if (component.hasOwnProperty(autoBindKey) && component[autoBindKey].__reactBoundContext === component) {
+ continue;
+ }
+
+ var method = component.__reactAutoBindMap[autoBindKey];
+ component[autoBindKey] = bindAutoBindMethod(component, method);
+ }
+ }
+
+ ;
+ module.exports = exports['default'];
+
+/***/ },
+/* 12 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+ exports['default'] = proxyClass;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _createPrototypeProxy = __webpack_require__(13);
+
+ var _createPrototypeProxy2 = _interopRequireDefault(_createPrototypeProxy);
+
+ var _bindAutoBindMethods = __webpack_require__(11);
+
+ var _bindAutoBindMethods2 = _interopRequireDefault(_bindAutoBindMethods);
+
+ var _deleteUnknownAutoBindMethods = __webpack_require__(14);
+
+ var _deleteUnknownAutoBindMethods2 = _interopRequireDefault(_deleteUnknownAutoBindMethods);
+
+ var RESERVED_STATICS = ['length', 'name', 'arguments', 'caller', 'prototype', 'toString'];
+
+ function isEqualDescriptor(a, b) {
+ if (!a && !b) {
+ return true;
+ }
+ if (!a || !b) {
+ return false;
+ }
+ for (var key in a) {
+ if (a[key] !== b[key]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function proxyClass(InitialClass) {
+ // Prevent double wrapping.
+ // Given a proxy class, return the existing proxy managing it.
+ if (Object.prototype.hasOwnProperty.call(InitialClass, '__reactPatchProxy')) {
+ return InitialClass.__reactPatchProxy;
+ }
+
+ var prototypeProxy = (0, _createPrototypeProxy2['default'])();
+ var CurrentClass = undefined;
+
+ var staticDescriptors = {};
+ function wasStaticModifiedByUser(key) {
+ // Compare the descriptor with the one we previously set ourselves.
+ var currentDescriptor = Object.getOwnPropertyDescriptor(ProxyClass, key);
+ return !isEqualDescriptor(staticDescriptors[key], currentDescriptor);
+ }
+
+ var ProxyClass = undefined;
+ try {
+ // Create a proxy constructor with matching name
+ ProxyClass = new Function('getCurrentClass', 'return function ' + (InitialClass.name || 'ProxyClass') + '() {\n return getCurrentClass().apply(this, arguments);\n }')(function () {
+ return CurrentClass;
+ });
+ } catch (err) {
+ // Some environments may forbid dynamic evaluation
+ ProxyClass = function () {
+ return CurrentClass.apply(this, arguments);
+ };
+ }
+
+ // Point proxy constructor to the proxy prototype
+ ProxyClass.prototype = prototypeProxy.get();
+
+ // Proxy toString() to the current constructor
+ ProxyClass.toString = function toString() {
+ return CurrentClass.toString();
+ };
+
+ function update(_x) {
+ var _again = true;
+
+ _function: while (_again) {
+ var NextClass = _x;
+ mountedInstances = undefined;
+ _again = false;
+
+ if (typeof NextClass !== 'function') {
+ throw new Error('Expected a constructor.');
+ }
+
+ // Prevent proxy cycles
+ if (Object.prototype.hasOwnProperty.call(NextClass, '__reactPatchProxy')) {
+ _x = NextClass.__reactPatchProxy.__getCurrent();
+ _again = true;
+ continue _function;
+ }
+
+ // Save the next constructor so we call it
+ CurrentClass = NextClass;
+
+ // Update the prototype proxy with new methods
+ var mountedInstances = prototypeProxy.update(NextClass.prototype);
+
+ // Set up the constructor property so accessing the statics work
+ ProxyClass.prototype.constructor = ProxyClass;
+
+ // Set up the same prototype for inherited statics
+ ProxyClass.__proto__ = NextClass.__proto__;
+
+ // Copy static methods and properties
+ Object.getOwnPropertyNames(NextClass).forEach(function (key) {
+ if (RESERVED_STATICS.indexOf(key) > -1) {
+ return;
+ }
+
+ var staticDescriptor = _extends({}, Object.getOwnPropertyDescriptor(NextClass, key), {
+ configurable: true
+ });
+
+ // Copy static unless user has redefined it at runtime
+ if (!wasStaticModifiedByUser(key)) {
+ Object.defineProperty(ProxyClass, key, staticDescriptor);
+ staticDescriptors[key] = staticDescriptor;
+ }
+ });
+
+ // Remove old static methods and properties
+ Object.getOwnPropertyNames(ProxyClass).forEach(function (key) {
+ if (RESERVED_STATICS.indexOf(key) > -1) {
+ return;
+ }
+
+ // Skip statics that exist on the next class
+ if (NextClass.hasOwnProperty(key)) {
+ return;
+ }
+
+ // Skip non-configurable statics
+ var descriptor = Object.getOwnPropertyDescriptor(ProxyClass, key);
+ if (descriptor && !descriptor.configurable) {
+ return;
+ }
+
+ // Delete static unless user has redefined it at runtime
+ if (!wasStaticModifiedByUser(key)) {
+ delete ProxyClass[key];
+ delete staticDescriptors[key];
+ }
+ });
+
+ // Try to infer displayName
+ ProxyClass.displayName = NextClass.displayName || NextClass.name;
+
+ // We might have added new methods that need to be auto-bound
+ mountedInstances.forEach(_bindAutoBindMethods2['default']);
+ mountedInstances.forEach(_deleteUnknownAutoBindMethods2['default']);
+
+ // Let the user take care of redrawing
+ return mountedInstances;
+ }
+ };
+
+ function get() {
+ return ProxyClass;
+ }
+
+ function getCurrent() {
+ return CurrentClass;
+ }
+
+ update(InitialClass);
+
+ var proxy = { get: get, update: update };
+
+ Object.defineProperty(proxy, '__getCurrent', {
+ configurable: false,
+ writable: false,
+ enumerable: false,
+ value: getCurrent
+ });
+
+ Object.defineProperty(ProxyClass, '__reactPatchProxy', {
+ configurable: false,
+ writable: false,
+ enumerable: false,
+ value: proxy
+ });
+
+ return proxy;
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+ exports['default'] = createPrototypeProxy;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _lodashObjectAssign = __webpack_require__(36);
+
+ var _lodashObjectAssign2 = _interopRequireDefault(_lodashObjectAssign);
+
+ var _lodashArrayDifference = __webpack_require__(15);
+
+ var _lodashArrayDifference2 = _interopRequireDefault(_lodashArrayDifference);
+
+ function createPrototypeProxy() {
+ var proxy = {};
+ var current = null;
+ var mountedInstances = [];
+
+ /**
+ * Creates a proxied toString() method pointing to the current version's toString().
+ */
+ function proxyToString(name) {
+ // Wrap to always call the current version
+ return function toString() {
+ if (typeof current[name] === 'function') {
+ return current[name].toString();
+ } else {
+ return '<method was deleted>';
+ }
+ };
+ }
+
+ /**
+ * Creates a proxied method that calls the current version, whenever available.
+ */
+ function proxyMethod(name) {
+ // Wrap to always call the current version
+ var proxiedMethod = function proxiedMethod() {
+ if (typeof current[name] === 'function') {
+ return current[name].apply(this, arguments);
+ }
+ };
+
+ // Copy properties of the original function, if any
+ (0, _lodashObjectAssign2['default'])(proxiedMethod, current[name]);
+ proxiedMethod.toString = proxyToString(name);
+
+ return proxiedMethod;
+ }
+
+ /**
+ * Augments the original componentDidMount with instance tracking.
+ */
+ function proxiedComponentDidMount() {
+ mountedInstances.push(this);
+ if (typeof current.componentDidMount === 'function') {
+ return current.componentDidMount.apply(this, arguments);
+ }
+ }
+ proxiedComponentDidMount.toString = proxyToString('componentDidMount');
+
+ /**
+ * Augments the original componentWillUnmount with instance tracking.
+ */
+ function proxiedComponentWillUnmount() {
+ var index = mountedInstances.indexOf(this);
+ // Unless we're in a weird environment without componentDidMount
+ if (index !== -1) {
+ mountedInstances.splice(index, 1);
+ }
+ if (typeof current.componentWillUnmount === 'function') {
+ return current.componentWillUnmount.apply(this, arguments);
+ }
+ }
+ proxiedComponentWillUnmount.toString = proxyToString('componentWillUnmount');
+
+ /**
+ * Defines a property on the proxy.
+ */
+ function defineProxyProperty(name, descriptor) {
+ Object.defineProperty(proxy, name, descriptor);
+ }
+
+ /**
+ * Defines a property, attempting to keep the original descriptor configuration.
+ */
+ function defineProxyPropertyWithValue(name, value) {
+ var _ref = Object.getOwnPropertyDescriptor(current, name) || {};
+
+ var _ref$enumerable = _ref.enumerable;
+ var enumerable = _ref$enumerable === undefined ? false : _ref$enumerable;
+ var _ref$writable = _ref.writable;
+ var writable = _ref$writable === undefined ? true : _ref$writable;
+
+ defineProxyProperty(name, {
+ configurable: true,
+ enumerable: enumerable,
+ writable: writable,
+ value: value
+ });
+ }
+
+ /**
+ * Creates an auto-bind map mimicking the original map, but directed at proxy.
+ */
+ function createAutoBindMap() {
+ if (!current.__reactAutoBindMap) {
+ return;
+ }
+
+ var __reactAutoBindMap = {};
+ for (var _name in current.__reactAutoBindMap) {
+ if (current.__reactAutoBindMap.hasOwnProperty(_name)) {
+ __reactAutoBindMap[_name] = proxy[_name];
+ }
+ }
+
+ return __reactAutoBindMap;
+ }
+
+ /**
+ * Applies the updated prototype.
+ */
+ function update(next) {
+ // Save current source of truth
+ current = next;
+
+ // Find changed property names
+ var currentNames = Object.getOwnPropertyNames(current);
+ var previousName = Object.getOwnPropertyNames(proxy);
+ var addedNames = (0, _lodashArrayDifference2['default'])(currentNames, previousName);
+ var removedNames = (0, _lodashArrayDifference2['default'])(previousName, currentNames);
+
+ // Remove properties and methods that are no longer there
+ removedNames.forEach(function (name) {
+ delete proxy[name];
+ });
+
+ // Copy every descriptor
+ currentNames.forEach(function (name) {
+ var descriptor = Object.getOwnPropertyDescriptor(current, name);
+ if (typeof descriptor.value === 'function') {
+ // Functions require additional wrapping so they can be bound later
+ defineProxyPropertyWithValue(name, proxyMethod(name));
+ } else {
+ // Other values can be copied directly
+ defineProxyProperty(name, descriptor);
+ }
+ });
+
+ // Track mounting and unmounting
+ defineProxyPropertyWithValue('componentDidMount', proxiedComponentDidMount);
+ defineProxyPropertyWithValue('componentWillUnmount', proxiedComponentWillUnmount);
+ defineProxyPropertyWithValue('__reactAutoBindMap', createAutoBindMap());
+
+ // Set up the prototype chain
+ proxy.__proto__ = next;
+
+ return mountedInstances;
+ }
+
+ /**
+ * Returns the up-to-date proxy prototype.
+ */
+ function get() {
+ return proxy;
+ }
+
+ return {
+ update: update,
+ get: get
+ };
+ }
+
+ ;
+ module.exports = exports['default'];
+
+/***/ },
+/* 14 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+ exports['default'] = deleteUnknownAutoBindMethods;
+ function shouldDeleteClassicInstanceMethod(component, name) {
+ if (component.__reactAutoBindMap.hasOwnProperty(name)) {
+ // It's a known autobound function, keep it
+ return false;
+ }
+
+ if (component[name].__reactBoundArguments !== null) {
+ // It's a function bound to specific args, keep it
+ return false;
+ }
+
+ // It's a cached bound method for a function
+ // that was deleted by user, so we delete it from component.
+ return true;
+ }
+
+ function shouldDeleteModernInstanceMethod(component, name) {
+ var prototype = component.constructor.prototype;
+
+ var prototypeDescriptor = Object.getOwnPropertyDescriptor(prototype, name);
+
+ if (!prototypeDescriptor || !prototypeDescriptor.get) {
+ // This is definitely not an autobinding getter
+ return false;
+ }
+
+ if (prototypeDescriptor.get().length !== component[name].length) {
+ // The length doesn't match, bail out
+ return false;
+ }
+
+ // This seems like a method bound using an autobinding getter on the prototype
+ // Hopefully we won't run into too many false positives.
+ return true;
+ }
+
+ function shouldDeleteInstanceMethod(component, name) {
+ var descriptor = Object.getOwnPropertyDescriptor(component, name);
+ if (typeof descriptor.value !== 'function') {
+ // Not a function, or something fancy: bail out
+ return;
+ }
+
+ if (component.__reactAutoBindMap) {
+ // Classic
+ return shouldDeleteClassicInstanceMethod(component, name);
+ } else {
+ // Modern
+ return shouldDeleteModernInstanceMethod(component, name);
+ }
+ }
+
+ /**
+ * Deletes autobound methods from the instance.
+ *
+ * For classic React classes, we only delete the methods that no longer exist in map.
+ * This means the user actually deleted them in code.
+ *
+ * For modern classes, we delete methods that exist on prototype with the same length,
+ * and which have getters on prototype, but are normal values on the instance.
+ * This is usually an indication that an autobinding decorator is being used,
+ * and the getter will re-generate the memoized handler on next access.
+ */
+
+ function deleteUnknownAutoBindMethods(component) {
+ var names = Object.getOwnPropertyNames(component);
+
+ names.forEach(function (name) {
+ if (shouldDeleteInstanceMethod(component, name)) {
+ delete component[name];
+ }
+ });
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 15 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseDifference = __webpack_require__(21),
+ baseFlatten = __webpack_require__(22),
+ isArrayLike = __webpack_require__(2),
+ isObjectLike = __webpack_require__(3),
+ restParam = __webpack_require__(9);
+
+ /**
+ * Creates an array of unique `array` values not included in the other
+ * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The arrays of values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.difference([1, 2, 3], [4, 2]);
+ * // => [1, 3]
+ */
+ var difference = restParam(function(array, values) {
+ return (isObjectLike(array) && isArrayLike(array))
+ ? baseDifference(array, baseFlatten(values, false, true))
+ : [];
+ });
+
+ module.exports = difference;
+
+
+/***/ },
+/* 16 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {var cachePush = __webpack_require__(27),
+ getNative = __webpack_require__(4);
+
+ /** Native method references. */
+ var Set = getNative(global, 'Set');
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeCreate = getNative(Object, 'create');
+
+ /**
+ *
+ * Creates a cache object to store unique values.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+ function SetCache(values) {
+ var length = values ? values.length : 0;
+
+ this.data = { 'hash': nativeCreate(null), 'set': new Set };
+ while (length--) {
+ this.push(values[length]);
+ }
+ }
+
+ // Add functions to the `Set` cache.
+ SetCache.prototype.push = cachePush;
+
+ module.exports = SetCache;
+
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+
+ module.exports = arrayPush;
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var keys = __webpack_require__(10);
+
+ /**
+ * A specialized version of `_.assign` for customizing assigned values without
+ * support for argument juggling, multiple sources, and `this` binding `customizer`
+ * functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ */
+ function assignWith(object, source, customizer) {
+ var index = -1,
+ props = keys(source),
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index],
+ value = object[key],
+ result = customizer(value, source[key], key, object, source);
+
+ if ((result === result ? (result !== value) : (value === value)) ||
+ (value === undefined && !(key in object))) {
+ object[key] = result;
+ }
+ }
+ return object;
+ }
+
+ module.exports = assignWith;
+
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseCopy = __webpack_require__(20),
+ keys = __webpack_require__(10);
+
+ /**
+ * The base implementation of `_.assign` without support for argument juggling,
+ * multiple sources, and `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssign(object, source) {
+ return source == null
+ ? object
+ : baseCopy(source, keys(source), object);
+ }
+
+ module.exports = baseAssign;
+
+
+/***/ },
+/* 20 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */
+ function baseCopy(source, props, object) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+ object[key] = source[key];
+ }
+ return object;
+ }
+
+ module.exports = baseCopy;
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIndexOf = __webpack_require__(23),
+ cacheIndexOf = __webpack_require__(26),
+ createCache = __webpack_require__(29);
+
+ /** Used as the size to enable large array optimizations. */
+ var LARGE_ARRAY_SIZE = 200;
+
+ /**
+ * The base implementation of `_.difference` which accepts a single array
+ * of values to exclude.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Array} values The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ */
+ function baseDifference(array, values) {
+ var length = array ? array.length : 0,
+ result = [];
+
+ if (!length) {
+ return result;
+ }
+ var index = -1,
+ indexOf = baseIndexOf,
+ isCommon = true,
+ cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
+ valuesLength = values.length;
+
+ if (cache) {
+ indexOf = cacheIndexOf;
+ isCommon = false;
+ values = cache;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index];
+
+ if (isCommon && value === value) {
+ var valuesIndex = valuesLength;
+ while (valuesIndex--) {
+ if (values[valuesIndex] === value) {
+ continue outer;
+ }
+ }
+ result.push(value);
+ }
+ else if (indexOf(values, value, 0) < 0) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ module.exports = baseDifference;
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arrayPush = __webpack_require__(17),
+ isArguments = __webpack_require__(7),
+ isArray = __webpack_require__(8),
+ isArrayLike = __webpack_require__(2),
+ isObjectLike = __webpack_require__(3);
+
+ /**
+ * The base implementation of `_.flatten` with added support for restricting
+ * flattening and specifying the start index.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isDeep] Specify a deep flatten.
+ * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */
+ function baseFlatten(array, isDeep, isStrict, result) {
+ result || (result = []);
+
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var value = array[index];
+ if (isObjectLike(value) && isArrayLike(value) &&
+ (isStrict || isArray(value) || isArguments(value))) {
+ if (isDeep) {
+ // Recursively flatten arrays (susceptible to call stack limits).
+ baseFlatten(value, isDeep, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+ return result;
+ }
+
+ module.exports = baseFlatten;
+
+
+/***/ },
+/* 23 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var indexOfNaN = __webpack_require__(31);
+
+ /**
+ * The base implementation of `_.indexOf` without support for binary searches.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseIndexOf(array, value, fromIndex) {
+ if (value !== value) {
+ return indexOfNaN(array, fromIndex);
+ }
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ module.exports = baseIndexOf;
+
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+ function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+ }
+
+ module.exports = baseProperty;
+
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var identity = __webpack_require__(38);
+
+ /**
+ * A specialized version of `baseCallback` which only supports `this` binding
+ * and specifying the number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */
+ function bindCallback(func, thisArg, argCount) {
+ if (typeof func != 'function') {
+ return identity;
+ }
+ if (thisArg === undefined) {
+ return func;
+ }
+ switch (argCount) {
+ case 1: return function(value) {
+ return func.call(thisArg, value);
+ };
+ case 3: return function(value, index, collection) {
+ return func.call(thisArg, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(thisArg, accumulator, value, index, collection);
+ };
+ case 5: return function(value, other, key, object, source) {
+ return func.call(thisArg, value, other, key, object, source);
+ };
+ }
+ return function() {
+ return func.apply(thisArg, arguments);
+ };
+ }
+
+ module.exports = bindCallback;
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(1);
+
+ /**
+ * Checks if `value` is in `cache` mimicking the return signature of
+ * `_.indexOf` by returning `0` if the value is found, else `-1`.
+ *
+ * @private
+ * @param {Object} cache The cache to search.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `0` if `value` is found, else `-1`.
+ */
+ function cacheIndexOf(cache, value) {
+ var data = cache.data,
+ result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];
+
+ return result ? 0 : -1;
+ }
+
+ module.exports = cacheIndexOf;
+
+
+/***/ },
+/* 27 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(1);
+
+ /**
+ * Adds `value` to the cache.
+ *
+ * @private
+ * @name push
+ * @memberOf SetCache
+ * @param {*} value The value to cache.
+ */
+ function cachePush(value) {
+ var data = this.data;
+ if (typeof value == 'string' || isObject(value)) {
+ data.set.add(value);
+ } else {
+ data.hash[value] = true;
+ }
+ }
+
+ module.exports = cachePush;
+
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var bindCallback = __webpack_require__(25),
+ isIterateeCall = __webpack_require__(32),
+ restParam = __webpack_require__(9);
+
+ /**
+ * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */
+ function createAssigner(assigner) {
+ return restParam(function(object, sources) {
+ var index = -1,
+ length = object == null ? 0 : sources.length,
+ customizer = length > 2 ? sources[length - 2] : undefined,
+ guard = length > 2 ? sources[2] : undefined,
+ thisArg = length > 1 ? sources[length - 1] : undefined;
+
+ if (typeof customizer == 'function') {
+ customizer = bindCallback(customizer, thisArg, 5);
+ length -= 2;
+ } else {
+ customizer = typeof thisArg == 'function' ? thisArg : undefined;
+ length -= (customizer ? 1 : 0);
+ }
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ customizer = length < 3 ? undefined : customizer;
+ length = 1;
+ }
+ while (++index < length) {
+ var source = sources[index];
+ if (source) {
+ assigner(object, source, customizer);
+ }
+ }
+ return object;
+ });
+ }
+
+ module.exports = createAssigner;
+
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {var SetCache = __webpack_require__(16),
+ getNative = __webpack_require__(4);
+
+ /** Native method references. */
+ var Set = getNative(global, 'Set');
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeCreate = getNative(Object, 'create');
+
+ /**
+ * Creates a `Set` cache object to optimize linear searches of large arrays.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
+ */
+ function createCache(values) {
+ return (nativeCreate && Set) ? new SetCache(values) : null;
+ }
+
+ module.exports = createCache;
+
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseProperty = __webpack_require__(24);
+
+ /**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+ var getLength = baseProperty('length');
+
+ module.exports = getLength;
+
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Gets the index at which the first occurrence of `NaN` is found in `array`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+ */
+ function indexOfNaN(array, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 0 : -1);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var other = array[index];
+ if (other !== other) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ module.exports = indexOfNaN;
+
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArrayLike = __webpack_require__(2),
+ isIndex = __webpack_require__(6),
+ isObject = __webpack_require__(1);
+
+ /**
+ * Checks if the provided arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+ */
+ function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == 'number'
+ ? (isArrayLike(object) && isIndex(index, object.length))
+ : (type == 'string' && index in object)) {
+ var other = object[index];
+ return value === value ? (value === other) : (other !== other);
+ }
+ return false;
+ }
+
+ module.exports = isIterateeCall;
+
+
+/***/ },
+/* 33 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArguments = __webpack_require__(7),
+ isArray = __webpack_require__(8),
+ isIndex = __webpack_require__(6),
+ isLength = __webpack_require__(5),
+ keysIn = __webpack_require__(37);
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function shimKeys(object) {
+ var props = keysIn(object),
+ propsLength = props.length,
+ length = propsLength && object.length;
+
+ var allowIndexes = !!length && isLength(length) &&
+ (isArray(object) || isArguments(object));
+
+ var index = -1,
+ result = [];
+
+ while (++index < propsLength) {
+ var key = props[index];
+ if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ module.exports = shimKeys;
+
+
+/***/ },
+/* 34 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(1);
+
+ /** `Object#toString` result references. */
+ var funcTag = '[object Function]';
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objToString = objectProto.toString;
+
+ /**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+ function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in older versions of Chrome and Safari which return 'function' for regexes
+ // and Safari 8 which returns 'object' for typed array constructors.
+ return isObject(value) && objToString.call(value) == funcTag;
+ }
+
+ module.exports = isFunction;
+
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isFunction = __webpack_require__(34),
+ isObjectLike = __webpack_require__(3);
+
+ /** Used to detect host constructors (Safari > 5). */
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to resolve the decompiled source of functions. */
+ var fnToString = Function.prototype.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Used to detect if a method is native. */
+ var reIsNative = RegExp('^' +
+ fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+ );
+
+ /**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+ function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(fnToString.call(value));
+ }
+ return isObjectLike(value) && reIsHostCtor.test(value);
+ }
+
+ module.exports = isNative;
+
+
+/***/ },
+/* 36 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assignWith = __webpack_require__(18),
+ baseAssign = __webpack_require__(19),
+ createAssigner = __webpack_require__(28);
+
+ /**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object. Subsequent sources overwrite property assignments of previous sources.
+ * If `customizer` is provided it's invoked to produce the assigned values.
+ * The `customizer` is bound to `thisArg` and invoked with five arguments:
+ * (objectValue, sourceValue, key, object, source).
+ *
+ * **Note:** This method mutates `object` and is based on
+ * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).
+ *
+ * @static
+ * @memberOf _
+ * @alias extend
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
+ * // => { 'user': 'fred', 'age': 40 }
+ *
+ * // using a customizer callback
+ * var defaults = _.partialRight(_.assign, function(value, other) {
+ * return _.isUndefined(value) ? other : value;
+ * });
+ *
+ * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
+ * // => { 'user': 'barney', 'age': 36 }
+ */
+ var assign = createAssigner(function(object, source, customizer) {
+ return customizer
+ ? assignWith(object, source, customizer)
+ : baseAssign(object, source);
+ });
+
+ module.exports = assign;
+
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArguments = __webpack_require__(7),
+ isArray = __webpack_require__(8),
+ isIndex = __webpack_require__(6),
+ isLength = __webpack_require__(5),
+ isObject = __webpack_require__(1);
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+ function keysIn(object) {
+ if (object == null) {
+ return [];
+ }
+ if (!isObject(object)) {
+ object = Object(object);
+ }
+ var length = object.length;
+ length = (length && isLength(length) &&
+ (isArray(object) || isArguments(object)) && length) || 0;
+
+ var Ctor = object.constructor,
+ index = -1,
+ isProto = typeof Ctor == 'function' && Ctor.prototype === object,
+ result = Array(length),
+ skipIndexes = length > 0;
+
+ while (++index < length) {
+ result[index] = (index + '');
+ }
+ for (var key in object) {
+ if (!(skipIndexes && isIndex(key, length)) &&
+ !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ module.exports = keysIn;
+
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * This method returns the first argument provided to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.identity(object) === object;
+ * // => true
+ */
+ function identity(value) {
+ return value;
+ }
+
+ module.exports = identity;
+
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports["default"] = getForceUpdate;
+ function traverseRenderedChildren(internalInstance, callback, argument) {
+ callback(internalInstance, argument);
+
+ if (internalInstance._renderedComponent) {
+ traverseRenderedChildren(internalInstance._renderedComponent, callback, argument);
+ } else {
+ for (var key in internalInstance._renderedChildren) {
+ if (internalInstance._renderedChildren.hasOwnProperty(key)) {
+ traverseRenderedChildren(internalInstance._renderedChildren[key], callback, argument);
+ }
+ }
+ }
+ }
+
+ function setPendingForceUpdate(internalInstance) {
+ if (internalInstance._pendingForceUpdate === false) {
+ internalInstance._pendingForceUpdate = true;
+ }
+ }
+
+ function forceUpdateIfPending(internalInstance, React) {
+ if (internalInstance._pendingForceUpdate === true) {
+ var publicInstance = internalInstance._instance;
+ React.Component.prototype.forceUpdate.call(publicInstance);
+ }
+ }
+
+ function getForceUpdate(React) {
+ return function (instance) {
+ var internalInstance = instance._reactInternalInstance;
+ traverseRenderedChildren(internalInstance, setPendingForceUpdate);
+ traverseRenderedChildren(internalInstance, forceUpdateIfPending, React);
+ };
+ }
+
+ module.exports = exports["default"];
+
+/***/ }
+/******/ ])
+});