react-native-onyx 1.0.15 → 1.0.16
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/README.md +3 -3
- package/dist/web.development.js +58 -13
- package/dist/web.development.js.map +1 -1
- package/dist/web.min.js +1 -1
- package/dist/web.min.js.map +1 -1
- package/lib/Onyx.js +4 -2
- package/lib/OnyxCache.js +3 -2
- package/lib/customizerForMergeWith.js +21 -0
- package/lib/storage/providers/LocalForage.js +3 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -63,7 +63,7 @@ The data will then be cached and stored via [`AsyncStorage`](https://github.com/
|
|
|
63
63
|
|
|
64
64
|
We can also use `Onyx.merge()` to merge new `Object` or `Array` data in with existing data.
|
|
65
65
|
|
|
66
|
-
For `Array` the default behavior is to concatenate
|
|
66
|
+
For `Array` the default behavior is to concatenate replace it fully, effectively making it equivalent to set:
|
|
67
67
|
|
|
68
68
|
```javascript
|
|
69
69
|
Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Joe']); // -> ['Joe']
|
|
@@ -77,10 +77,10 @@ Onyx.merge(ONYXKEYS.POLICY, {id: 1}); // -> {id: 1}
|
|
|
77
77
|
Onyx.merge(ONYXKEYS.POLICY, {name: 'My Workspace'}); // -> {id: 1, name: 'My Workspace'}
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
Arrays inside objects will NOT be concatenated and instead will be replaced fully, same as arrays not inside objects:
|
|
81
81
|
|
|
82
82
|
```javascript
|
|
83
|
-
Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Joe']}); // -> {employeeList: ['Joe']}
|
|
83
|
+
Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Joe', 'Jack']}); // -> {employeeList: ['Joe', 'Jack']}
|
|
84
84
|
Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Jack']}); // -> {employeeList: ['Jack']}
|
|
85
85
|
```
|
|
86
86
|
|
package/dist/web.development.js
CHANGED
|
@@ -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/merge"), require("lodash/get"), require("localforage"), require("react"));
|
|
3
|
+
module.exports = factory(require("underscore"), require("expensify-common/lib/str"), require("lodash/merge"), require("lodash/mergeWith"), require("lodash/get"), require("localforage"), require("react"));
|
|
4
4
|
else if(typeof define === 'function' && define.amd)
|
|
5
|
-
define(["underscore", "expensify-common/lib/str", "lodash/merge", "lodash/get", "localforage", "react"], factory);
|
|
5
|
+
define(["underscore", "expensify-common/lib/str", "lodash/merge", "lodash/mergeWith", "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/merge"), require("lodash/get"), require("localforage"), require("react"));
|
|
7
|
+
exports["react-native-onyx/web"] = factory(require("underscore"), require("expensify-common/lib/str"), require("lodash/merge"), require("lodash/mergeWith"), 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/merge"], root["lodash/get"], root["localforage"], root["react"]);
|
|
10
|
-
})(self, (__WEBPACK_EXTERNAL_MODULE_underscore__, __WEBPACK_EXTERNAL_MODULE_expensify_common_lib_str__, __WEBPACK_EXTERNAL_MODULE_lodash_merge__, __WEBPACK_EXTERNAL_MODULE_lodash_get__, __WEBPACK_EXTERNAL_MODULE_localforage__, __WEBPACK_EXTERNAL_MODULE_react__) => {
|
|
9
|
+
root["react-native-onyx/web"] = factory(root["underscore"], root["expensify-common/lib/str"], root["lodash/merge"], root["lodash/mergeWith"], root["lodash/get"], root["localforage"], root["react"]);
|
|
10
|
+
})(self, (__WEBPACK_EXTERNAL_MODULE_underscore__, __WEBPACK_EXTERNAL_MODULE_expensify_common_lib_str__, __WEBPACK_EXTERNAL_MODULE_lodash_merge__, __WEBPACK_EXTERNAL_MODULE_lodash_mergeWith__, __WEBPACK_EXTERNAL_MODULE_lodash_get__, __WEBPACK_EXTERNAL_MODULE_localforage__, __WEBPACK_EXTERNAL_MODULE_react__) => {
|
|
11
11
|
return /******/ (() => { // webpackBootstrap
|
|
12
12
|
/******/ var __webpack_modules__ = ({
|
|
13
13
|
|
|
@@ -492,11 +492,13 @@ function logInfo(message) {
|
|
|
492
492
|
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 _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 _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));var _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
|
|
493
493
|
var _str = _interopRequireDefault(__webpack_require__(/*! expensify-common/lib/str */ "expensify-common/lib/str"));
|
|
494
494
|
var _merge = _interopRequireDefault(__webpack_require__(/*! lodash/merge */ "lodash/merge"));
|
|
495
|
+
var _mergeWith = _interopRequireDefault(__webpack_require__(/*! lodash/mergeWith */ "lodash/mergeWith"));
|
|
495
496
|
var _get = _interopRequireDefault(__webpack_require__(/*! lodash/get */ "lodash/get"));
|
|
496
497
|
var _storage = _interopRequireDefault(__webpack_require__(/*! ./storage */ "./lib/storage/index.web.js"));
|
|
497
498
|
var Logger = _interopRequireWildcard(__webpack_require__(/*! ./Logger */ "./lib/Logger.js"));
|
|
498
499
|
var _OnyxCache = _interopRequireDefault(__webpack_require__(/*! ./OnyxCache */ "./lib/OnyxCache.js"));
|
|
499
|
-
var _createDeferredTask = _interopRequireDefault(__webpack_require__(/*! ./createDeferredTask */ "./lib/createDeferredTask.js"));
|
|
500
|
+
var _createDeferredTask = _interopRequireDefault(__webpack_require__(/*! ./createDeferredTask */ "./lib/createDeferredTask.js"));
|
|
501
|
+
var _customizerForMergeWith = _interopRequireDefault(__webpack_require__(/*! ./customizerForMergeWith */ "./lib/customizerForMergeWith.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;}
|
|
500
502
|
|
|
501
503
|
// Keeps track of the last connectionID that was used so we can keep incrementing it
|
|
502
504
|
var lastConnectionID = 0;
|
|
@@ -1152,7 +1154,7 @@ function applyMerge(key, data) {
|
|
|
1152
1154
|
if (_underscore.default.isObject(data) || _underscore.default.every(mergeValues, _underscore.default.isObject)) {
|
|
1153
1155
|
// Object values are merged one after the other
|
|
1154
1156
|
return _underscore.default.reduce(mergeValues, function (modifiedData, mergeValue) {
|
|
1155
|
-
var newData = (0,
|
|
1157
|
+
var newData = (0, _mergeWith.default)({}, modifiedData, mergeValue, _customizerForMergeWith.default);
|
|
1156
1158
|
|
|
1157
1159
|
// We will also delete any object keys that are undefined or null.
|
|
1158
1160
|
// Deleting keys is not supported by AsyncStorage so we do it this way.
|
|
@@ -1223,7 +1225,7 @@ function initializeWithDefaultKeyStates() {
|
|
|
1223
1225
|
then(function (pairs) {
|
|
1224
1226
|
var asObject = _underscore.default.object(pairs);
|
|
1225
1227
|
|
|
1226
|
-
var merged = (0,
|
|
1228
|
+
var merged = (0, _mergeWith.default)(asObject, defaultKeyStates, _customizerForMergeWith.default);
|
|
1227
1229
|
_OnyxCache.default.merge(merged);
|
|
1228
1230
|
_underscore.default.each(merged, function (val, key) {return keyChanged(key, val);});
|
|
1229
1231
|
});
|
|
@@ -1493,7 +1495,8 @@ Onyx;exports["default"] = _default;
|
|
|
1493
1495
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
1494
1496
|
|
|
1495
1497
|
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"));
|
|
1496
|
-
var
|
|
1498
|
+
var _mergeWith = _interopRequireDefault(__webpack_require__(/*! lodash/mergeWith */ "lodash/mergeWith"));
|
|
1499
|
+
var _customizerForMergeWith = _interopRequireDefault(__webpack_require__(/*! ./customizerForMergeWith */ "./lib/customizerForMergeWith.js"));
|
|
1497
1500
|
|
|
1498
1501
|
var isDefined = _underscore.default.negate(_underscore.default.isUndefined);
|
|
1499
1502
|
|
|
@@ -1604,7 +1607,7 @@ OnyxCache = /*#__PURE__*/function () {
|
|
|
1604
1607
|
* @param {Record<string, *>} data - a map of (cache) key - values
|
|
1605
1608
|
*/ }, { key: "merge", value: function merge(
|
|
1606
1609
|
data) {var _this = this;
|
|
1607
|
-
this.storageMap = (0,
|
|
1610
|
+
this.storageMap = (0, _mergeWith.default)({}, this.storageMap, data, _customizerForMergeWith.default);
|
|
1608
1611
|
|
|
1609
1612
|
var storageKeys = this.getAllKeys();
|
|
1610
1613
|
var mergedKeys = _underscore.default.keys(data);
|
|
@@ -1775,6 +1778,36 @@ function createDeferredTask() {
|
|
|
1775
1778
|
|
|
1776
1779
|
/***/ }),
|
|
1777
1780
|
|
|
1781
|
+
/***/ "./lib/customizerForMergeWith.js":
|
|
1782
|
+
/*!***************************************!*\
|
|
1783
|
+
!*** ./lib/customizerForMergeWith.js ***!
|
|
1784
|
+
\***************************************/
|
|
1785
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
1786
|
+
|
|
1787
|
+
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 _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
|
|
1788
|
+
|
|
1789
|
+
/**
|
|
1790
|
+
* When merging 2 objects into onyx that contain an array, we want to completely replace the array instead of the default
|
|
1791
|
+
* behavior which is to merge each item by its index.
|
|
1792
|
+
* ie:
|
|
1793
|
+
* merge({a: [1]}, {a: [2,3]}):
|
|
1794
|
+
* - In the default implementation would produce {a:[1,3]}
|
|
1795
|
+
* - With this function would produce: {a: [2,3]}
|
|
1796
|
+
* @param {*} objValue
|
|
1797
|
+
* @param {*} srcValue
|
|
1798
|
+
* @return {*}
|
|
1799
|
+
*/
|
|
1800
|
+
// eslint-disable-next-line rulesdir/prefer-early-return
|
|
1801
|
+
function customizerForMergeWith(objValue, srcValue) {
|
|
1802
|
+
if (_underscore.default.isArray(objValue)) {
|
|
1803
|
+
return srcValue;
|
|
1804
|
+
}
|
|
1805
|
+
}var _default =
|
|
1806
|
+
|
|
1807
|
+
customizerForMergeWith;exports["default"] = _default;
|
|
1808
|
+
|
|
1809
|
+
/***/ }),
|
|
1810
|
+
|
|
1778
1811
|
/***/ "./lib/metrics/index.web.js":
|
|
1779
1812
|
/*!**********************************!*\
|
|
1780
1813
|
!*** ./lib/metrics/index.web.js ***!
|
|
@@ -1881,8 +1914,9 @@ var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/inte
|
|
|
1881
1914
|
|
|
1882
1915
|
var _localforage = _interopRequireDefault(__webpack_require__(/*! localforage */ "localforage"));
|
|
1883
1916
|
var _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
|
|
1884
|
-
var
|
|
1885
|
-
var _SyncQueue = _interopRequireDefault(__webpack_require__(/*! ../../SyncQueue */ "./lib/SyncQueue.js"));
|
|
1917
|
+
var _mergeWith = _interopRequireDefault(__webpack_require__(/*! lodash/mergeWith */ "lodash/mergeWith"));
|
|
1918
|
+
var _SyncQueue = _interopRequireDefault(__webpack_require__(/*! ../../SyncQueue */ "./lib/SyncQueue.js"));
|
|
1919
|
+
var _customizerForMergeWith = _interopRequireDefault(__webpack_require__(/*! ../../customizerForMergeWith */ "./lib/customizerForMergeWith.js")); /**
|
|
1886
1920
|
* @file
|
|
1887
1921
|
* The storage provider based on localforage allows us to store most anything in its
|
|
1888
1922
|
* natural form in the underlying DB without having to stringify or de-stringify it
|
|
@@ -1899,7 +1933,7 @@ var provider = {
|
|
|
1899
1933
|
return _localforage.default.getItem(key).
|
|
1900
1934
|
then(function (existingValue) {
|
|
1901
1935
|
var newValue = _underscore.default.isObject(existingValue) ?
|
|
1902
|
-
(0,
|
|
1936
|
+
(0, _mergeWith.default)({}, existingValue, value, _customizerForMergeWith.default) :
|
|
1903
1937
|
value;
|
|
1904
1938
|
return _localforage.default.setItem(key, newValue);
|
|
1905
1939
|
});
|
|
@@ -3312,6 +3346,17 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_lodash_merge__;
|
|
|
3312
3346
|
|
|
3313
3347
|
/***/ }),
|
|
3314
3348
|
|
|
3349
|
+
/***/ "lodash/mergeWith":
|
|
3350
|
+
/*!***********************************!*\
|
|
3351
|
+
!*** external "lodash/mergeWith" ***!
|
|
3352
|
+
\***********************************/
|
|
3353
|
+
/***/ ((module) => {
|
|
3354
|
+
|
|
3355
|
+
"use strict";
|
|
3356
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_lodash_mergeWith__;
|
|
3357
|
+
|
|
3358
|
+
/***/ }),
|
|
3359
|
+
|
|
3315
3360
|
/***/ "react":
|
|
3316
3361
|
/*!************************!*\
|
|
3317
3362
|
!*** external "react" ***!
|