react-native-onyx 1.0.18 → 1.0.19

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.
@@ -1,13 +1,13 @@
1
1
  (function webpackUniversalModuleDefinition(root, factory) {
2
2
  if(typeof exports === 'object' && typeof module === 'object')
3
- module.exports = factory(require("underscore"), require("expensify-common/lib/str"), require("lodash/get"), require("localforage"), require("lodash/mergeWith"), require("react"));
3
+ module.exports = factory(require("underscore"), require("expensify-common/lib/str"), require("lodash/get"), require("localforage"), require("react"));
4
4
  else if(typeof define === 'function' && define.amd)
5
- define(["underscore", "expensify-common/lib/str", "lodash/get", "localforage", "lodash/mergeWith", "react"], factory);
5
+ define(["underscore", "expensify-common/lib/str", "lodash/get", "localforage", "react"], factory);
6
6
  else if(typeof exports === 'object')
7
- exports["react-native-onyx/web"] = factory(require("underscore"), require("expensify-common/lib/str"), require("lodash/get"), require("localforage"), require("lodash/mergeWith"), require("react"));
7
+ exports["react-native-onyx/web"] = factory(require("underscore"), require("expensify-common/lib/str"), require("lodash/get"), require("localforage"), require("react"));
8
8
  else
9
- root["react-native-onyx/web"] = factory(root["underscore"], root["expensify-common/lib/str"], root["lodash/get"], root["localforage"], root["lodash/mergeWith"], root["react"]);
10
- })(self, (__WEBPACK_EXTERNAL_MODULE_underscore__, __WEBPACK_EXTERNAL_MODULE_expensify_common_lib_str__, __WEBPACK_EXTERNAL_MODULE_lodash_get__, __WEBPACK_EXTERNAL_MODULE_localforage__, __WEBPACK_EXTERNAL_MODULE_lodash_mergeWith__, __WEBPACK_EXTERNAL_MODULE_react__) => {
9
+ root["react-native-onyx/web"] = factory(root["underscore"], root["expensify-common/lib/str"], root["lodash/get"], root["localforage"], root["react"]);
10
+ })(self, (__WEBPACK_EXTERNAL_MODULE_underscore__, __WEBPACK_EXTERNAL_MODULE_expensify_common_lib_str__, __WEBPACK_EXTERNAL_MODULE_lodash_get__, __WEBPACK_EXTERNAL_MODULE_localforage__, __WEBPACK_EXTERNAL_MODULE_react__) => {
11
11
  return /******/ (() => { // webpackBootstrap
12
12
  /******/ var __webpack_modules__ = ({
13
13
 
@@ -497,7 +497,7 @@ var _storage = _interopRequireDefault(__webpack_require__(/*! ./storage */ "./li
497
497
  var Logger = _interopRequireWildcard(__webpack_require__(/*! ./Logger */ "./lib/Logger.js"));
498
498
  var _OnyxCache = _interopRequireDefault(__webpack_require__(/*! ./OnyxCache */ "./lib/OnyxCache.js"));
499
499
  var _createDeferredTask = _interopRequireDefault(__webpack_require__(/*! ./createDeferredTask */ "./lib/createDeferredTask.js"));
500
- var _mergeWithCustomized = _interopRequireDefault(__webpack_require__(/*! ./mergeWithCustomized */ "./lib/mergeWithCustomized.js"));function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;} /* eslint-disable no-continue */
500
+ var _fastMerge = _interopRequireDefault(__webpack_require__(/*! ./fastMerge */ "./lib/fastMerge.js"));function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;} /* eslint-disable no-continue */
501
501
 
502
502
  // Keeps track of the last connectionID that was used so we can keep incrementing it
503
503
  var lastConnectionID = 0;
@@ -1252,7 +1252,9 @@ function applyMerge(key, data) {
1252
1252
  if (_underscore.default.isObject(data) || _underscore.default.every(mergeValues, _underscore.default.isObject)) {
1253
1253
  // Object values are merged one after the other
1254
1254
  return _underscore.default.reduce(mergeValues, function (modifiedData, mergeValue) {
1255
- var newData = (0, _mergeWithCustomized.default)({}, modifiedData, mergeValue);
1255
+ // lodash adds a small overhead so we don't use it here
1256
+ // eslint-disable-next-line prefer-object-spread, rulesdir/prefer-underscore-method
1257
+ var newData = (0, _extends3.default)({}, (0, _fastMerge.default)(modifiedData, mergeValue));
1256
1258
 
1257
1259
  // We will also delete any object keys that are undefined or null.
1258
1260
  // Deleting keys is not supported by AsyncStorage so we do it this way.
@@ -1323,7 +1325,7 @@ function initializeWithDefaultKeyStates() {
1323
1325
  then(function (pairs) {
1324
1326
  var asObject = _underscore.default.object(pairs);
1325
1327
 
1326
- var merged = (0, _mergeWithCustomized.default)(asObject, defaultKeyStates);
1328
+ var merged = (0, _fastMerge.default)(asObject, defaultKeyStates);
1327
1329
  _OnyxCache.default.merge(merged);
1328
1330
  _underscore.default.each(merged, function (val, key) {return keyChanged(key, val);});
1329
1331
  });
@@ -1592,8 +1594,8 @@ Onyx;exports["default"] = _default;
1592
1594
  \**************************/
1593
1595
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1594
1596
 
1595
- var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0;var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js"));var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"));var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"));var _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
1596
- var _mergeWithCustomized = _interopRequireDefault(__webpack_require__(/*! ./mergeWithCustomized */ "./lib/mergeWithCustomized.js"));
1597
+ var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0;var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js"));var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"));var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"));var _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
1598
+ var _fastMerge = _interopRequireDefault(__webpack_require__(/*! ./fastMerge */ "./lib/fastMerge.js"));
1597
1599
 
1598
1600
  var isDefined = _underscore.default.negate(_underscore.default.isUndefined);
1599
1601
 
@@ -1704,7 +1706,9 @@ OnyxCache = /*#__PURE__*/function () {
1704
1706
  * @param {Record<string, *>} data - a map of (cache) key - values
1705
1707
  */ }, { key: "merge", value: function merge(
1706
1708
  data) {var _this = this;
1707
- this.storageMap = (0, _mergeWithCustomized.default)({}, this.storageMap, data);
1709
+ // lodash adds a small overhead so we don't use it here
1710
+ // eslint-disable-next-line prefer-object-spread, rulesdir/prefer-underscore-method
1711
+ this.storageMap = (0, _extends2.default)({}, (0, _fastMerge.default)(this.storageMap, data));
1708
1712
 
1709
1713
  var storageKeys = this.getAllKeys();
1710
1714
  var mergedKeys = _underscore.default.keys(data);
@@ -1875,38 +1879,78 @@ function createDeferredTask() {
1875
1879
 
1876
1880
  /***/ }),
1877
1881
 
1878
- /***/ "./lib/mergeWithCustomized.js":
1879
- /*!************************************!*\
1880
- !*** ./lib/mergeWithCustomized.js ***!
1881
- \************************************/
1882
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1882
+ /***/ "./lib/fastMerge.js":
1883
+ /*!**************************!*\
1884
+ !*** ./lib/fastMerge.js ***!
1885
+ \**************************/
1886
+ /***/ ((__unused_webpack_module, exports) => {
1883
1887
 
1884
- var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0;var _mergeWith = _interopRequireDefault(__webpack_require__(/*! lodash/mergeWith */ "lodash/mergeWith"));
1888
+ Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0; // Mostly copied from https://medium.com/@lubaka.a/how-to-remove-lodash-performance-improvement-b306669ad0e1
1885
1889
 
1886
1890
  /**
1887
- * When merging 2 objects into onyx that contain an array, we want to completely replace the array instead of the default
1888
- * behavior which is to merge each item by its index.
1889
- * ie:
1890
- * merge({a: [1]}, {a: [2,3]}):
1891
- * - In the default implementation would produce {a:[1,3]}
1892
- * - With this function would produce: {a: [2,3]}
1893
- * @param {*} objValue
1894
- * @param {*} srcValue
1895
- * @return {*}
1896
- */
1897
- // eslint-disable-next-line rulesdir/prefer-early-return
1898
- function customizerForMergeWith(objValue, srcValue) {
1891
+ * @param {mixed} val
1892
+ * @returns {boolean}
1893
+ */
1894
+ function isMergeableObject(val) {
1895
+ var nonNullObject = val != null ? typeof val === 'object' : false;
1896
+ return nonNullObject &&
1897
+ Object.prototype.toString.call(val) !== '[object RegExp]' &&
1898
+ Object.prototype.toString.call(val) !== '[object Date]';
1899
+ }
1900
+
1901
+ /**
1902
+ * @param {Object} target
1903
+ * @param {Object} source
1904
+ * @returns {Object}
1905
+ */
1906
+ function mergeObject(target, source) {
1907
+ var destination = {};
1908
+ if (isMergeableObject(target)) {
1909
+ // lodash adds a small overhead so we don't use it here
1910
+ // eslint-disable-next-line rulesdir/prefer-underscore-method
1911
+ var targetKeys = Object.keys(target);
1912
+ for (var i = 0; i < targetKeys.length; ++i) {
1913
+ var key = targetKeys[i];
1914
+ destination[key] = target[key];
1915
+ }
1916
+ }
1917
+
1918
+ // lodash adds a small overhead so we don't use it here
1899
1919
  // eslint-disable-next-line rulesdir/prefer-underscore-method
1900
- if (Array.isArray(objValue)) {
1901
- return srcValue;
1920
+ var sourceKeys = Object.keys(source);
1921
+ for (var _i = 0; _i < sourceKeys.length; ++_i) {
1922
+ var _key = sourceKeys[_i];
1923
+ if (source[_key] === undefined) {
1924
+ // eslint-disable-next-line no-continue
1925
+ continue;
1926
+ }
1927
+ if (!isMergeableObject(source[_key]) || !target[_key]) {
1928
+ destination[_key] = source[_key];
1929
+ } else {
1930
+ // eslint-disable-next-line no-use-before-define
1931
+ destination[_key] = fastMerge(target[_key], source[_key]);
1932
+ }
1902
1933
  }
1934
+
1935
+ return destination;
1903
1936
  }
1904
1937
 
1905
- function mergeWithCustomized() {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}
1906
- return _mergeWith.default.apply(void 0, args.concat([customizerForMergeWith]));
1938
+ /**
1939
+ * @param {Object|Array} target
1940
+ * @param {Object|Array} source
1941
+ * @returns {Object|Array}
1942
+ */
1943
+ function fastMerge(target, source) {
1944
+ // lodash adds a small overhead so we don't use it here
1945
+ // eslint-disable-next-line rulesdir/prefer-underscore-method
1946
+ var array = Array.isArray(source);
1947
+ if (array) {
1948
+ return source;
1949
+ }
1950
+ return mergeObject(target, source);
1907
1951
  }var _default =
1908
1952
 
1909
- mergeWithCustomized;exports["default"] = _default;
1953
+ fastMerge;exports["default"] = _default;
1910
1954
 
1911
1955
  /***/ }),
1912
1956
 
@@ -2008,7 +2052,7 @@ _WebStorage.default;exports["default"] = _default;
2008
2052
  \**********************************************/
2009
2053
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2010
2054
 
2011
- var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0;var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
2055
+ var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0;var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
2012
2056
 
2013
2057
 
2014
2058
 
@@ -2017,7 +2061,7 @@ var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/inte
2017
2061
  var _localforage = _interopRequireDefault(__webpack_require__(/*! localforage */ "localforage"));
2018
2062
  var _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
2019
2063
  var _SyncQueue = _interopRequireDefault(__webpack_require__(/*! ../../SyncQueue */ "./lib/SyncQueue.js"));
2020
- var _mergeWithCustomized = _interopRequireDefault(__webpack_require__(/*! ../../mergeWithCustomized */ "./lib/mergeWithCustomized.js")); /**
2064
+ var _fastMerge = _interopRequireDefault(__webpack_require__(/*! ../../fastMerge */ "./lib/fastMerge.js")); /**
2021
2065
  * @file
2022
2066
  * The storage provider based on localforage allows us to store most anything in its
2023
2067
  * natural form in the underlying DB without having to stringify or de-stringify it
@@ -2033,8 +2077,11 @@ var provider = {
2033
2077
  if (shouldMerge) {
2034
2078
  return _localforage.default.getItem(key).
2035
2079
  then(function (existingValue) {
2036
- var newValue = _underscore.default.isObject(existingValue) ?
2037
- (0, _mergeWithCustomized.default)({}, existingValue, value) :
2080
+ var newValue = _underscore.default.isObject(existingValue)
2081
+
2082
+ // lodash adds a small overhead so we don't use it here
2083
+ // eslint-disable-next-line prefer-object-spread, rulesdir/prefer-underscore-method
2084
+ ? (0, _extends2.default)({}, (0, _fastMerge.default)(existingValue, value)) :
2038
2085
  value;
2039
2086
  return _localforage.default.setItem(key, newValue);
2040
2087
  });
@@ -3436,17 +3483,6 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_lodash_get__;
3436
3483
 
3437
3484
  /***/ }),
3438
3485
 
3439
- /***/ "lodash/mergeWith":
3440
- /*!***********************************!*\
3441
- !*** external "lodash/mergeWith" ***!
3442
- \***********************************/
3443
- /***/ ((module) => {
3444
-
3445
- "use strict";
3446
- module.exports = __WEBPACK_EXTERNAL_MODULE_lodash_mergeWith__;
3447
-
3448
- /***/ }),
3449
-
3450
3486
  /***/ "react":
3451
3487
  /*!************************!*\
3452
3488
  !*** external "react" ***!