From 98d83596eac61e2eba8e81b41707a3f155594545 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 15:05:44 +0200 Subject: [PATCH 01/14] Allow mergeCollection to also clear any removed keys --- lib/Onyx.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index 1e69e44a1..b3f632ef2 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -682,9 +682,10 @@ function clear() { * * @param {String} collectionKey * @param {Object} collection + * @param {Boolean} [clearRemoved] * @returns {Promise} */ -function mergeCollection(collectionKey, collection) { +function mergeCollection(collectionKey, collection, clearRemoved = false) { // Confirm all the collection keys belong to the same parent _.each(collection, (data, dataKey) => { if (!isKeyMatch(collectionKey, dataKey)) { @@ -718,6 +719,21 @@ function mergeCollection(collectionKey, collection) { promises.push(AsyncStorage.multiSet(keyValuePairsForNewCollection)); } + // If the flag is set, clear any removed keys in the collection + if (clearRemoved) { + console.log(collection); + const keysToClear = _.filter(persistedKeys, (persistedKey) => { + return (isKeyMatch(collectionKey, persistedKey) && !_.keys(collection).includes(persistedKey)); + }); + const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); + if (keyValuePairsForClearing.length > 0) { + promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); + + // Clear them in cache + _.each(keysToClear, (key) => cache.set(key, null)); + } + } + // Merge original data to cache cache.merge(collection); From 7433385b17d52045961a610c963a2aaf35e9d819 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 15:25:10 +0200 Subject: [PATCH 02/14] add unit test --- tests/unit/onyxTest.js | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tests/unit/onyxTest.js b/tests/unit/onyxTest.js index 1740a1747..a978cfbde 100644 --- a/tests/unit/onyxTest.js +++ b/tests/unit/onyxTest.js @@ -202,7 +202,7 @@ describe('Onyx', () => { }) .then(() => ( - // 2 key values to update and 2 new keys to add. + // 2 key values to update and 3 new keys to add. // MergeCollection will perform a mix of multiSet and multiMerge Onyx.mergeCollection(ONYX_KEYS.COLLECTION.TEST_KEY, { test_1: { @@ -220,9 +220,41 @@ describe('Onyx', () => { test_5: { ID: 567, value: 'one' + }, + test_6: { + ID: 678, + value: 'zero' } }) )) + .then(() => ( + + // Everything is the same, but a key is missing + // MergeCollection will use multiMerge to reset the existing keys + // and will set the missing key to null, since clearRemoved is set + Onyx.mergeCollection(ONYX_KEYS.COLLECTION.TEST_KEY, { + test_1: { + ID: 123, + value: 'five' + }, + test_2: { + ID: 234, + value: 'four' + }, + test_3: { + ID: 345, + value: 'three' + }, + test_4: { + ID: 456, + value: 'two' + }, + test_5: { + ID: 567, + value: 'one' + } + }, true) + )) .then(() => { // 3 items on the first mergeCollection + 4 items the next mergeCollection expect(mockCallback.mock.calls.length).toBe(7); From 1c647fe1e049043396a47b819cab19ac703058cc Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 15:26:59 +0200 Subject: [PATCH 03/14] update test --- tests/unit/onyxTest.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/unit/onyxTest.js b/tests/unit/onyxTest.js index a978cfbde..5ada14a27 100644 --- a/tests/unit/onyxTest.js +++ b/tests/unit/onyxTest.js @@ -257,7 +257,7 @@ describe('Onyx', () => { )) .then(() => { // 3 items on the first mergeCollection + 4 items the next mergeCollection - expect(mockCallback.mock.calls.length).toBe(7); + expect(mockCallback.mock.calls.length).toBe(8); expect(mockCallback.mock.calls[0][0]).toEqual({ID: 123, value: 'one'}); expect(mockCallback.mock.calls[0][1]).toEqual('test_1'); @@ -280,11 +280,15 @@ describe('Onyx', () => { expect(mockCallback.mock.calls[6][0]).toEqual({ID: 567, value: 'one'}); expect(mockCallback.mock.calls[6][1]).toEqual('test_5'); + expect(mockCallback.mock.calls[6][0]).toEqual({ID: 678, value: null}); + expect(mockCallback.mock.calls[6][1]).toEqual('test_6'); + expect(valuesReceived[123]).toEqual('five'); expect(valuesReceived[234]).toEqual('four'); expect(valuesReceived[345]).toEqual('three'); expect(valuesReceived[456]).toEqual('two'); expect(valuesReceived[567]).toEqual('one'); + expect(valuesReceived[678]).toEqual(null); }); }); From 19451f002f461a062aacc47a2890ceec367be62d Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 15:34:28 +0200 Subject: [PATCH 04/14] lint --- lib/Onyx.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index b3f632ef2..a30b3f216 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -721,16 +721,14 @@ function mergeCollection(collectionKey, collection, clearRemoved = false) { // If the flag is set, clear any removed keys in the collection if (clearRemoved) { - console.log(collection); - const keysToClear = _.filter(persistedKeys, (persistedKey) => { - return (isKeyMatch(collectionKey, persistedKey) && !_.keys(collection).includes(persistedKey)); - }); + const keysToClear = _.filter(persistedKeys, persistedKey => + (isKeyMatch(collectionKey, persistedKey) && !_.keys(collection).includes(persistedKey))); const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); if (keyValuePairsForClearing.length > 0) { promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); // Clear them in cache - _.each(keysToClear, (key) => cache.set(key, null)); + _.each(keysToClear, key => cache.set(key, null)); } } From a3e2aa909de333398f363b1d9a9839312d6d2c44 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 16:22:59 +0200 Subject: [PATCH 05/14] update tests --- lib/Onyx.js | 4 ++-- tests/unit/onyxTest.js | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index a30b3f216..d5d92ead6 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -721,8 +721,8 @@ function mergeCollection(collectionKey, collection, clearRemoved = false) { // If the flag is set, clear any removed keys in the collection if (clearRemoved) { - const keysToClear = _.filter(persistedKeys, persistedKey => - (isKeyMatch(collectionKey, persistedKey) && !_.keys(collection).includes(persistedKey))); + const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) && + !_.keys(collection).includes(persistedKey)); const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); if (keyValuePairsForClearing.length > 0) { promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); diff --git a/tests/unit/onyxTest.js b/tests/unit/onyxTest.js index 5ada14a27..a978cfbde 100644 --- a/tests/unit/onyxTest.js +++ b/tests/unit/onyxTest.js @@ -257,7 +257,7 @@ describe('Onyx', () => { )) .then(() => { // 3 items on the first mergeCollection + 4 items the next mergeCollection - expect(mockCallback.mock.calls.length).toBe(8); + expect(mockCallback.mock.calls.length).toBe(7); expect(mockCallback.mock.calls[0][0]).toEqual({ID: 123, value: 'one'}); expect(mockCallback.mock.calls[0][1]).toEqual('test_1'); @@ -280,15 +280,11 @@ describe('Onyx', () => { expect(mockCallback.mock.calls[6][0]).toEqual({ID: 567, value: 'one'}); expect(mockCallback.mock.calls[6][1]).toEqual('test_5'); - expect(mockCallback.mock.calls[6][0]).toEqual({ID: 678, value: null}); - expect(mockCallback.mock.calls[6][1]).toEqual('test_6'); - expect(valuesReceived[123]).toEqual('five'); expect(valuesReceived[234]).toEqual('four'); expect(valuesReceived[345]).toEqual('three'); expect(valuesReceived[456]).toEqual('two'); expect(valuesReceived[567]).toEqual('one'); - expect(valuesReceived[678]).toEqual(null); }); }); From 9d9fbe0d39138f06ea5e455a4fbf43ed680f9357 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 17:13:40 +0200 Subject: [PATCH 06/14] update tests --- tests/unit/onyxTest.js | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/tests/unit/onyxTest.js b/tests/unit/onyxTest.js index a978cfbde..d67adb70b 100644 --- a/tests/unit/onyxTest.js +++ b/tests/unit/onyxTest.js @@ -217,38 +217,6 @@ describe('Onyx', () => { ID: 456, value: 'two' }, - test_5: { - ID: 567, - value: 'one' - }, - test_6: { - ID: 678, - value: 'zero' - } - }) - )) - .then(() => ( - - // Everything is the same, but a key is missing - // MergeCollection will use multiMerge to reset the existing keys - // and will set the missing key to null, since clearRemoved is set - Onyx.mergeCollection(ONYX_KEYS.COLLECTION.TEST_KEY, { - test_1: { - ID: 123, - value: 'five' - }, - test_2: { - ID: 234, - value: 'four' - }, - test_3: { - ID: 345, - value: 'three' - }, - test_4: { - ID: 456, - value: 'two' - }, test_5: { ID: 567, value: 'one' @@ -282,7 +250,7 @@ describe('Onyx', () => { expect(valuesReceived[123]).toEqual('five'); expect(valuesReceived[234]).toEqual('four'); - expect(valuesReceived[345]).toEqual('three'); + expect(valuesReceived[345]).toEqual(null); expect(valuesReceived[456]).toEqual('two'); expect(valuesReceived[567]).toEqual('one'); }); From c71c10ac5edc2dc09e7699728ff900e54b99b6a6 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 17:16:21 +0200 Subject: [PATCH 07/14] comment --- tests/unit/onyxTest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/onyxTest.js b/tests/unit/onyxTest.js index d67adb70b..d0baf5453 100644 --- a/tests/unit/onyxTest.js +++ b/tests/unit/onyxTest.js @@ -202,7 +202,7 @@ describe('Onyx', () => { }) .then(() => ( - // 2 key values to update and 3 new keys to add. + // 2 key values to update and 2 new keys to add (and one will be removed). // MergeCollection will perform a mix of multiSet and multiMerge Onyx.mergeCollection(ONYX_KEYS.COLLECTION.TEST_KEY, { test_1: { From 4c78c137e2be7804af6bd61943f3a113ebd7a8fb Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 17:30:01 +0200 Subject: [PATCH 08/14] remove tests --- tests/unit/onyxTest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/onyxTest.js b/tests/unit/onyxTest.js index d0baf5453..60215c222 100644 --- a/tests/unit/onyxTest.js +++ b/tests/unit/onyxTest.js @@ -250,7 +250,7 @@ describe('Onyx', () => { expect(valuesReceived[123]).toEqual('five'); expect(valuesReceived[234]).toEqual('four'); - expect(valuesReceived[345]).toEqual(null); + expect(valuesReceived[345]).toEqual('three'); expect(valuesReceived[456]).toEqual('two'); expect(valuesReceived[567]).toEqual('one'); }); From c9d3c03f9453b63ee567116e466589af2bcaa1b4 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 17:31:08 +0200 Subject: [PATCH 09/14] remove comments --- tests/unit/onyxTest.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/onyxTest.js b/tests/unit/onyxTest.js index 60215c222..1740a1747 100644 --- a/tests/unit/onyxTest.js +++ b/tests/unit/onyxTest.js @@ -202,7 +202,7 @@ describe('Onyx', () => { }) .then(() => ( - // 2 key values to update and 2 new keys to add (and one will be removed). + // 2 key values to update and 2 new keys to add. // MergeCollection will perform a mix of multiSet and multiMerge Onyx.mergeCollection(ONYX_KEYS.COLLECTION.TEST_KEY, { test_1: { @@ -221,7 +221,7 @@ describe('Onyx', () => { ID: 567, value: 'one' } - }, true) + }) )) .then(() => { // 3 items on the first mergeCollection + 4 items the next mergeCollection From b7a058cb77456c173407333923a573eefe100e12 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Fri, 6 Aug 2021 17:36:50 +0200 Subject: [PATCH 10/14] style --- lib/Onyx.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index d5d92ead6..e5fb70929 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -721,8 +721,8 @@ function mergeCollection(collectionKey, collection, clearRemoved = false) { // If the flag is set, clear any removed keys in the collection if (clearRemoved) { - const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) && - !_.keys(collection).includes(persistedKey)); + const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) + && !_.keys(collection).includes(persistedKey)); const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); if (keyValuePairsForClearing.length > 0) { promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); From d28c0f4c13bcd912d938157ab15f4c0383bd4f76 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Mon, 9 Aug 2021 11:56:04 +0200 Subject: [PATCH 11/14] Move logic to new method --- lib/Onyx.js | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index e5fb70929..981f08564 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -685,7 +685,36 @@ function clear() { * @param {Boolean} [clearRemoved] * @returns {Promise} */ -function mergeCollection(collectionKey, collection, clearRemoved = false) { +function setCollection(collectionKey, collection) { + return getAllKeys() + .then((persistedKeys) => { + const promises = []; + promises.push(mergeCollection(collectionKey, collection)); + + const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) + && !_.keys(collection).includes(persistedKey)); + const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); + if (keyValuePairsForClearing.length > 0) { + promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); + + // Clear them in cache + _.each(keysToClear, key => cache.set(key, null)); + } + + return Promise.all(promises) + .catch(error => evictStorageAndRetry(error, setCollection, collection)); + }); +} + +/** + * Merges a collection based on their keys + * + * @param {String} collectionKey + * @param {Object} collection + * @param {Boolean} [clearRemoved] + * @returns {Promise} + */ +function mergeCollection(collectionKey, collection) { // Confirm all the collection keys belong to the same parent _.each(collection, (data, dataKey) => { if (!isKeyMatch(collectionKey, dataKey)) { @@ -719,19 +748,6 @@ function mergeCollection(collectionKey, collection, clearRemoved = false) { promises.push(AsyncStorage.multiSet(keyValuePairsForNewCollection)); } - // If the flag is set, clear any removed keys in the collection - if (clearRemoved) { - const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) - && !_.keys(collection).includes(persistedKey)); - const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); - if (keyValuePairsForClearing.length > 0) { - promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); - - // Clear them in cache - _.each(keysToClear, key => cache.set(key, null)); - } - } - // Merge original data to cache cache.merge(collection); @@ -801,6 +817,7 @@ const Onyx = { multiSet, merge, mergeCollection, + setCollection, clear, init, registerLogger, @@ -824,6 +841,7 @@ function applyDecorators() { clear = decorate.decorateWithMetrics(clear, 'Onyx:clear'); merge = decorate.decorateWithMetrics(merge, 'Onyx:merge'); mergeCollection = decorate.decorateWithMetrics(mergeCollection, 'Onyx:mergeCollection'); + setCollection = decorate.decorateWithMetrics(setCollection, 'Onyx:mergeCollection'); getAllKeys = decorate.decorateWithMetrics(getAllKeys, 'Onyx:getAllKeys'); initializeWithDefaultKeyStates = decorate.decorateWithMetrics(initializeWithDefaultKeyStates, 'Onyx:defaults'); /* eslint-enable */ From 9d873f847db6a0ecfd677fa6480752ec5866b71a Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Mon, 9 Aug 2021 11:58:57 +0200 Subject: [PATCH 12/14] cleanup --- lib/Onyx.js | 59 ++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index 981f08564..2603fb021 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -682,36 +682,6 @@ function clear() { * * @param {String} collectionKey * @param {Object} collection - * @param {Boolean} [clearRemoved] - * @returns {Promise} - */ -function setCollection(collectionKey, collection) { - return getAllKeys() - .then((persistedKeys) => { - const promises = []; - promises.push(mergeCollection(collectionKey, collection)); - - const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) - && !_.keys(collection).includes(persistedKey)); - const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); - if (keyValuePairsForClearing.length > 0) { - promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); - - // Clear them in cache - _.each(keysToClear, key => cache.set(key, null)); - } - - return Promise.all(promises) - .catch(error => evictStorageAndRetry(error, setCollection, collection)); - }); -} - -/** - * Merges a collection based on their keys - * - * @param {String} collectionKey - * @param {Object} collection - * @param {Boolean} [clearRemoved] * @returns {Promise} */ function mergeCollection(collectionKey, collection) { @@ -759,6 +729,35 @@ function mergeCollection(collectionKey, collection) { }); } +/** + * Sets a collection based on their keys. Any existing elements in the collection that are not in the passed collection + * will be set to null + * + * @param {String} collectionKey + * @param {Object} collection + * @returns {Promise} + */ +function setCollection(collectionKey, collection) { + return getAllKeys() + .then((persistedKeys) => { + const promises = []; + promises.push(mergeCollection(collectionKey, collection)); + + const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) + && !_.keys(collection).includes(persistedKey)); + const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); + if (keyValuePairsForClearing.length > 0) { + promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); + + // Clear them in cache + _.each(keysToClear, key => cache.set(key, null)); + } + + return Promise.all(promises) + .catch(error => evictStorageAndRetry(error, setCollection, collection)); + }); +} + /** * Initialize the store with actions and listening for storage events * From e616668b2dfc7e39d1d03bea61e890b5f7749cbc Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Mon, 9 Aug 2021 12:00:55 +0200 Subject: [PATCH 13/14] lint --- lib/Onyx.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index 2603fb021..5dc1b991d 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -840,7 +840,7 @@ function applyDecorators() { clear = decorate.decorateWithMetrics(clear, 'Onyx:clear'); merge = decorate.decorateWithMetrics(merge, 'Onyx:merge'); mergeCollection = decorate.decorateWithMetrics(mergeCollection, 'Onyx:mergeCollection'); - setCollection = decorate.decorateWithMetrics(setCollection, 'Onyx:mergeCollection'); + setCollection = decorate.decorateWithMetrics(setCollection, 'Onyx:setCollection'); getAllKeys = decorate.decorateWithMetrics(getAllKeys, 'Onyx:getAllKeys'); initializeWithDefaultKeyStates = decorate.decorateWithMetrics(initializeWithDefaultKeyStates, 'Onyx:defaults'); /* eslint-enable */ From c2685c639946174a0fc7ff9ee063af8fcf29e402 Mon Sep 17 00:00:00 2001 From: "alberto@expensify.com" Date: Mon, 9 Aug 2021 21:05:40 +0200 Subject: [PATCH 14/14] Make getAllKeys public --- lib/Onyx.js | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/lib/Onyx.js b/lib/Onyx.js index 5dc1b991d..8bfed70da 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -729,35 +729,6 @@ function mergeCollection(collectionKey, collection) { }); } -/** - * Sets a collection based on their keys. Any existing elements in the collection that are not in the passed collection - * will be set to null - * - * @param {String} collectionKey - * @param {Object} collection - * @returns {Promise} - */ -function setCollection(collectionKey, collection) { - return getAllKeys() - .then((persistedKeys) => { - const promises = []; - promises.push(mergeCollection(collectionKey, collection)); - - const keysToClear = _.filter(persistedKeys, persistedKey => isKeyMatch(collectionKey, persistedKey) - && !_.keys(collection).includes(persistedKey)); - const keyValuePairsForClearing = _.map(keysToClear, key => [key, 'null']); - if (keyValuePairsForClearing.length > 0) { - promises.push(AsyncStorage.multiSet(keyValuePairsForClearing)); - - // Clear them in cache - _.each(keysToClear, key => cache.set(key, null)); - } - - return Promise.all(promises) - .catch(error => evictStorageAndRetry(error, setCollection, collection)); - }); -} - /** * Initialize the store with actions and listening for storage events * @@ -812,11 +783,11 @@ function init({ const Onyx = { connect, disconnect, + getAllKeys, set, multiSet, merge, mergeCollection, - setCollection, clear, init, registerLogger, @@ -840,7 +811,6 @@ function applyDecorators() { clear = decorate.decorateWithMetrics(clear, 'Onyx:clear'); merge = decorate.decorateWithMetrics(merge, 'Onyx:merge'); mergeCollection = decorate.decorateWithMetrics(mergeCollection, 'Onyx:mergeCollection'); - setCollection = decorate.decorateWithMetrics(setCollection, 'Onyx:setCollection'); getAllKeys = decorate.decorateWithMetrics(getAllKeys, 'Onyx:getAllKeys'); initializeWithDefaultKeyStates = decorate.decorateWithMetrics(initializeWithDefaultKeyStates, 'Onyx:defaults'); /* eslint-enable */