From 9fbd3d82081d160ff6cb8bce878a6f0913bfbc6a Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 25 May 2021 01:19:25 +0200 Subject: [PATCH 1/4] fix: no getters displayed on root module --- src/plugins/devtool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/devtool.js b/src/plugins/devtool.js index f68bf6823..0806c5980 100644 --- a/src/plugins/devtool.js +++ b/src/plugins/devtool.js @@ -59,7 +59,7 @@ export function addDevtools (app, store) { makeLocalGetters(store, modulePath) payload.state = formatStoreForInspectorState( getStoreModule(store._modules, modulePath), - store._makeLocalGettersCache, + modulePath === 'root' ? store.getters : store._makeLocalGettersCache, modulePath ) } From b3c6cab4ef2c74bdcc2c9a9fa77137e372be42ab Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 25 May 2021 01:36:17 +0200 Subject: [PATCH 2/4] fix: improved getters state inspector --- src/plugins/devtool.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/plugins/devtool.js b/src/plugins/devtool.js index 0806c5980..bd70f7f61 100644 --- a/src/plugins/devtool.js +++ b/src/plugins/devtool.js @@ -228,16 +228,45 @@ function formatStoreForInspectorState (module, getters, path) { } if (gettersKeys.length) { - storeState.getters = gettersKeys.map((key) => ({ + const tree = transformPathsToObjectTree(getters) + storeState.getters = Object.keys(tree).map((key) => ({ key: key.endsWith('/') ? extractNameFromPath(key) : key, editable: false, - value: getters[key] + value: tree[key] })) } return storeState } +function transformPathsToObjectTree (getters) { + const result = {} + Object.keys(getters).map(key => { + const path = key.split('/') + if (path.length > 1) { + let target = result + const leafKey = path.pop() + for (const p of path) { + if (!target[p]) { + target[p] = { + _custom: { + value: {}, + display: p, + tooltip: 'Module', + abstract: true + } + } + } + target = target[p]._custom.value + } + target[leafKey] = getters[key] + } else { + result[key] = getters[key] + } + }) + return result +} + function getStoreModule (moduleMap, path) { const names = path.split('/').filter((n) => n) return names.reduce( From c8c4c71a552503c535a1e4e9a50f6b224a580a8e Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 25 May 2021 01:44:16 +0200 Subject: [PATCH 3/4] fix: use forEach --- src/plugins/devtool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/devtool.js b/src/plugins/devtool.js index bd70f7f61..bbf635314 100644 --- a/src/plugins/devtool.js +++ b/src/plugins/devtool.js @@ -241,7 +241,7 @@ function formatStoreForInspectorState (module, getters, path) { function transformPathsToObjectTree (getters) { const result = {} - Object.keys(getters).map(key => { + Object.keys(getters).forEach(key => { const path = key.split('/') if (path.length > 1) { let target = result From 2186711519567badf148d58a07d756cf5889cb3e Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 25 May 2021 01:45:04 +0200 Subject: [PATCH 4/4] fix: handle errors in getters --- src/plugins/devtool.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/plugins/devtool.js b/src/plugins/devtool.js index bbf635314..8d6237b14 100644 --- a/src/plugins/devtool.js +++ b/src/plugins/devtool.js @@ -232,7 +232,7 @@ function formatStoreForInspectorState (module, getters, path) { storeState.getters = Object.keys(tree).map((key) => ({ key: key.endsWith('/') ? extractNameFromPath(key) : key, editable: false, - value: tree[key] + value: canThrow(() => tree[key]) })) } @@ -259,9 +259,9 @@ function transformPathsToObjectTree (getters) { } target = target[p]._custom.value } - target[leafKey] = getters[key] + target[leafKey] = canThrow(() => getters[key]) } else { - result[key] = getters[key] + result[key] = canThrow(() => getters[key]) } }) return result @@ -280,3 +280,11 @@ function getStoreModule (moduleMap, path) { path === 'root' ? moduleMap : moduleMap.root._children ) } + +function canThrow (cb) { + try { + return cb() + } catch (e) { + return e + } +}