react-native-onyx 1.0.80 → 1.0.81

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.
@@ -77,9 +77,10 @@ __webpack_require__.r(__webpack_exports__);
77
77
  /* harmony import */ var _OnyxCache__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./OnyxCache */ "./lib/OnyxCache.js");
78
78
  /* harmony import */ var _Str__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Str */ "./lib/Str.js");
79
79
  /* harmony import */ var _createDeferredTask__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createDeferredTask */ "./lib/createDeferredTask.js");
80
- /* harmony import */ var _fastMerge__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./fastMerge */ "./lib/fastMerge.js");
80
+ /* harmony import */ var _fastMerge__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./fastMerge */ "./lib/fastMerge.js");
81
81
  /* harmony import */ var _metrics_PerformanceUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./metrics/PerformanceUtils */ "./lib/metrics/PerformanceUtils.js");
82
82
  /* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./storage */ "./lib/storage/index.web.js");
83
+ /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils */ "./lib/utils.js");
83
84
  /* harmony import */ var _batch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./batch */ "./lib/batch.js");
84
85
  /* eslint-disable no-continue */
85
86
 
@@ -93,6 +94,7 @@ __webpack_require__.r(__webpack_exports__);
93
94
 
94
95
 
95
96
 
97
+
96
98
  // Method constants
97
99
  const METHOD = {
98
100
  SET: 'set',
@@ -1073,24 +1075,6 @@ function hasPendingMergeForKey(key) {
1073
1075
  return Boolean(mergeQueue[key]);
1074
1076
  }
1075
1077
 
1076
- /**
1077
- * We generally want to remove top-level nullish values from objects written to disk and cache, because it decreases the amount of data stored in memory and on disk.
1078
- * On native, when merging an existing value with new changes, SQLite will use JSON_PATCH, which removes top-level nullish values.
1079
- * To be consistent with the behaviour for merge, we'll also want to remove nullish values for "set" operations.
1080
- * On web, IndexedDB will keep the top-level keys along with a null value and this uses up storage and memory.
1081
- * This method will ensure that keys for null values are removed before an object is written to disk and cache so that all platforms are storing the data in the same efficient way.
1082
- * @private
1083
- * @param {*} value
1084
- * @returns {*}
1085
- */
1086
- function removeNullObjectValues(value) {
1087
- if (underscore__WEBPACK_IMPORTED_MODULE_1___default().isArray(value) || !underscore__WEBPACK_IMPORTED_MODULE_1___default().isObject(value)) {
1088
- return value;
1089
- }
1090
-
1091
- return underscore__WEBPACK_IMPORTED_MODULE_1___default().omit(value, (objectValue) => underscore__WEBPACK_IMPORTED_MODULE_1___default().isNull(objectValue));
1092
- }
1093
-
1094
1078
  /**
1095
1079
  * Write a value to our store with the given key
1096
1080
  *
@@ -1108,7 +1092,7 @@ function set(key, value) {
1108
1092
  _Logger__WEBPACK_IMPORTED_MODULE_5__.logAlert(`Onyx.set() called after Onyx.merge() for key: ${key}. It is recommended to use set() or merge() not both.`);
1109
1093
  }
1110
1094
 
1111
- const valueWithNullRemoved = removeNullObjectValues(value);
1095
+ const valueWithNullRemoved = _utils__WEBPACK_IMPORTED_MODULE_9__["default"].removeNullObjectValues(value);
1112
1096
 
1113
1097
  const hasChanged = _OnyxCache__WEBPACK_IMPORTED_MODULE_3__["default"].hasValueChanged(key, valueWithNullRemoved);
1114
1098
 
@@ -1178,7 +1162,7 @@ function applyMerge(existingValue, changes) {
1178
1162
  // Object values are merged one after the other
1179
1163
  // lodash adds a small overhead so we don't use it here
1180
1164
  // eslint-disable-next-line prefer-object-spread, rulesdir/prefer-underscore-method
1181
- return underscore__WEBPACK_IMPORTED_MODULE_1___default().reduce(changes, (modifiedData, change) => (0,_fastMerge__WEBPACK_IMPORTED_MODULE_9__["default"])(modifiedData, change),
1165
+ return underscore__WEBPACK_IMPORTED_MODULE_1___default().reduce(changes, (modifiedData, change) => (0,_fastMerge__WEBPACK_IMPORTED_MODULE_10__["default"])(modifiedData, change),
1182
1166
  existingValue || {});
1183
1167
  }
1184
1168
 
@@ -1227,14 +1211,14 @@ function merge(key, changes) {
1227
1211
  delete mergeQueuePromise[key];
1228
1212
 
1229
1213
  // After that we merge the batched changes with the existing value
1230
- const modifiedData = removeNullObjectValues(applyMerge(existingValue, [batchedChanges]));
1214
+ const modifiedData = _utils__WEBPACK_IMPORTED_MODULE_9__["default"].removeNullObjectValues(applyMerge(existingValue, [batchedChanges]));
1231
1215
 
1232
1216
  // On native platforms we use SQLite which utilises JSON_PATCH to merge changes.
1233
1217
  // JSON_PATCH generally removes top-level nullish values from the stored object.
1234
1218
  // When there is no existing value though, SQLite will just insert the changes as a new value and thus the top-level nullish values won't be removed.
1235
1219
  // Therefore we need to remove nullish values from the `batchedChanges` which are sent to the SQLite, if no existing value is present.
1236
1220
  if (!existingValue) {
1237
- batchedChanges = removeNullObjectValues(batchedChanges);
1221
+ batchedChanges = _utils__WEBPACK_IMPORTED_MODULE_9__["default"].removeNullObjectValues(batchedChanges);
1238
1222
  }
1239
1223
 
1240
1224
  const hasChanged = _OnyxCache__WEBPACK_IMPORTED_MODULE_3__["default"].hasValueChanged(key, modifiedData);
@@ -1268,7 +1252,7 @@ function initializeWithDefaultKeyStates() {
1268
1252
  then((pairs) => {
1269
1253
  const asObject = underscore__WEBPACK_IMPORTED_MODULE_1___default().object(pairs);
1270
1254
 
1271
- const merged = (0,_fastMerge__WEBPACK_IMPORTED_MODULE_9__["default"])(asObject, defaultKeyStates);
1255
+ const merged = (0,_fastMerge__WEBPACK_IMPORTED_MODULE_10__["default"])(asObject, defaultKeyStates);
1272
1256
  _OnyxCache__WEBPACK_IMPORTED_MODULE_3__["default"].merge(merged);
1273
1257
  underscore__WEBPACK_IMPORTED_MODULE_1___default().each(merged, (val, key) => keyChanged(key, val));
1274
1258
  });
@@ -1977,6 +1961,10 @@ __webpack_require__.r(__webpack_exports__);
1977
1961
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1978
1962
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1979
1963
  /* harmony export */ });
1964
+ /* harmony import */ var underscore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! underscore */ "underscore");
1965
+ /* harmony import */ var underscore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(underscore__WEBPACK_IMPORTED_MODULE_0__);
1966
+
1967
+
1980
1968
  // Mostly copied from https://medium.com/@lubaka.a/how-to-remove-lodash-performance-improvement-b306669ad0e1
1981
1969
 
1982
1970
  /**
@@ -2033,10 +2021,7 @@ function mergeObject(target, source) {
2033
2021
  * @returns {Object|Array}
2034
2022
  */
2035
2023
  function fastMerge(target, source) {
2036
- // lodash adds a small overhead so we don't use it here
2037
- // eslint-disable-next-line rulesdir/prefer-underscore-method
2038
- const array = Array.isArray(source);
2039
- if (array) {
2024
+ if (underscore__WEBPACK_IMPORTED_MODULE_0___default().isArray(source) || underscore__WEBPACK_IMPORTED_MODULE_0___default().isNull(source) || underscore__WEBPACK_IMPORTED_MODULE_0___default().isUndefined(source)) {
2040
2025
  return source;
2041
2026
  }
2042
2027
  return mergeObject(target, source);
@@ -2282,6 +2267,8 @@ __webpack_require__.r(__webpack_exports__);
2282
2267
  /* harmony import */ var underscore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! underscore */ "underscore");
2283
2268
  /* harmony import */ var underscore__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(underscore__WEBPACK_IMPORTED_MODULE_1__);
2284
2269
  /* harmony import */ var _fastMerge__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../fastMerge */ "./lib/fastMerge.js");
2270
+ /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils */ "./lib/utils.js");
2271
+
2285
2272
 
2286
2273
 
2287
2274
 
@@ -2329,7 +2316,7 @@ const provider = {
2329
2316
  const upsertMany = underscore__WEBPACK_IMPORTED_MODULE_1___default().map(pairs, (_ref2, index) => {let [key, value] = _ref2;
2330
2317
  const prev = values[index];
2331
2318
  const newValue = underscore__WEBPACK_IMPORTED_MODULE_1___default().isObject(prev) ? (0,_fastMerge__WEBPACK_IMPORTED_MODULE_2__["default"])(prev, value) : value;
2332
- return (0,idb_keyval__WEBPACK_IMPORTED_MODULE_0__.promisifyRequest)(store.put(newValue, key));
2319
+ return (0,idb_keyval__WEBPACK_IMPORTED_MODULE_0__.promisifyRequest)(store.put(_utils__WEBPACK_IMPORTED_MODULE_3__["default"].removeNullObjectValues(newValue), key));
2333
2320
  });
2334
2321
  return Promise.all(upsertMany);
2335
2322
  });
@@ -2414,6 +2401,45 @@ const provider = {
2414
2401
 
2415
2402
  /***/ }),
2416
2403
 
2404
+ /***/ "./lib/utils.js":
2405
+ /*!**********************!*\
2406
+ !*** ./lib/utils.js ***!
2407
+ \**********************/
2408
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2409
+
2410
+ "use strict";
2411
+ __webpack_require__.r(__webpack_exports__);
2412
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2413
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2414
+ /* harmony export */ });
2415
+ /* harmony import */ var underscore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! underscore */ "underscore");
2416
+ /* harmony import */ var underscore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(underscore__WEBPACK_IMPORTED_MODULE_0__);
2417
+
2418
+
2419
+ /**
2420
+ * We generally want to remove top-level nullish values from objects written to disk and cache, because it decreases the amount of data stored in memory and on disk.
2421
+ * On native, when merging an existing value with new changes, SQLite will use JSON_PATCH, which removes top-level nullish values.
2422
+ * To be consistent with the behaviour for merge, we'll also want to remove nullish values for "set" operations.
2423
+ * On web, IndexedDB will keep the top-level keys along with a null value and this uses up storage and memory.
2424
+ * This method will ensure that keys for null values are removed before an object is written to disk and cache so that all platforms are storing the data in the same efficient way.
2425
+ * @private
2426
+ * @param {*} value
2427
+ * @returns {*}
2428
+ */
2429
+ function removeNullObjectValues(value) {
2430
+ if (underscore__WEBPACK_IMPORTED_MODULE_0___default().isArray(value) || !underscore__WEBPACK_IMPORTED_MODULE_0___default().isObject(value)) {
2431
+ return value;
2432
+ }
2433
+
2434
+ const objectWithoutNullObjectValues = underscore__WEBPACK_IMPORTED_MODULE_0___default().omit(value, (objectValue) => underscore__WEBPACK_IMPORTED_MODULE_0___default().isNull(objectValue));
2435
+
2436
+ return objectWithoutNullObjectValues;
2437
+ }
2438
+
2439
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ removeNullObjectValues });
2440
+
2441
+ /***/ }),
2442
+
2417
2443
  /***/ "./lib/withOnyx.js":
2418
2444
  /*!*************************!*\
2419
2445
  !*** ./lib/withOnyx.js ***!