From 68d1d726af63a3e77d5a0c7f48ac7f277de34174 Mon Sep 17 00:00:00 2001 From: KoloMl Date: Mon, 12 Aug 2024 19:37:35 +0400 Subject: [PATCH] Added debug section to inspect extension's local storage --- src/components/debugging/StorageViewer.svelte | 93 +++++++++++++++++++ src/lib/utils.js | 23 +++++ src/routes/preferences/+page.svelte | 2 + src/routes/preferences/debug/+page.svelte | 10 ++ .../preferences/debug/storage/+page.svelte | 13 +++ .../debug/storage/[...path]/+page.svelte | 29 ++++++ src/stores/debug.js | 19 ++++ 7 files changed, 189 insertions(+) create mode 100644 src/components/debugging/StorageViewer.svelte create mode 100644 src/lib/utils.js create mode 100644 src/routes/preferences/debug/+page.svelte create mode 100644 src/routes/preferences/debug/storage/+page.svelte create mode 100644 src/routes/preferences/debug/storage/[...path]/+page.svelte create mode 100644 src/stores/debug.js diff --git a/src/components/debugging/StorageViewer.svelte b/src/components/debugging/StorageViewer.svelte new file mode 100644 index 0000000..161ce7d --- /dev/null +++ b/src/components/debugging/StorageViewer.svelte @@ -0,0 +1,93 @@ + + + + Back +
+
+

+ / {storage} + {#each breadcrumbs as [name, entryPath]} + / {name} + {/each} +

+{#if targetObject} + +
+ {#each Object.entries(targetObject) as [key, value]} + {#if targetObject[key] && typeof targetObject[key] === 'object'} + + {key}: Object + + {:else} + + {key}: {typeof key} = {targetObject[key]} + + {/if} + {/each} +
+{/if} + + diff --git a/src/lib/utils.js b/src/lib/utils.js new file mode 100644 index 0000000..db17ea5 --- /dev/null +++ b/src/lib/utils.js @@ -0,0 +1,23 @@ +/** + * Traverse and find the object using the key path. + * @param {Object} targetObject Target object to traverse into. + * @param {string[]} path Path of keys to traverse deep into the object. + * @return {Object|null} Resulting object or null if nothing found (or target entry is not an object. + */ +export function findDeepObject(targetObject, path) { + let result = targetObject; + + for (let key of path) { + if (!result || typeof result !== 'object') { + return null; + } + + result = result[key]; + } + + if (!result || typeof result !== "object") { + return null; + } + + return result; +} diff --git a/src/routes/preferences/+page.svelte b/src/routes/preferences/+page.svelte index c9f37fe..bc1d369 100644 --- a/src/routes/preferences/+page.svelte +++ b/src/routes/preferences/+page.svelte @@ -8,4 +8,6 @@
Search Misc & Tools +
+ Debug diff --git a/src/routes/preferences/debug/+page.svelte b/src/routes/preferences/debug/+page.svelte new file mode 100644 index 0000000..31e7210 --- /dev/null +++ b/src/routes/preferences/debug/+page.svelte @@ -0,0 +1,10 @@ + + + + Back +
+ Inspect Storages +
diff --git a/src/routes/preferences/debug/storage/+page.svelte b/src/routes/preferences/debug/storage/+page.svelte new file mode 100644 index 0000000..ae87de5 --- /dev/null +++ b/src/routes/preferences/debug/storage/+page.svelte @@ -0,0 +1,13 @@ + + + + Back +
+ {#each Object.keys($storagesCollection) as storageName} + Storage: {storageName} + {/each} +
diff --git a/src/routes/preferences/debug/storage/[...path]/+page.svelte b/src/routes/preferences/debug/storage/[...path]/+page.svelte new file mode 100644 index 0000000..fecea3c --- /dev/null +++ b/src/routes/preferences/debug/storage/[...path]/+page.svelte @@ -0,0 +1,29 @@ + + +{#if storageName} + +{/if} diff --git a/src/stores/debug.js b/src/stores/debug.js new file mode 100644 index 0000000..bfa2e52 --- /dev/null +++ b/src/stores/debug.js @@ -0,0 +1,19 @@ +import {writable} from "svelte/store"; + +/** + * This is readable version of storages. Any changes made to these objects will not be sent to the local storage. + * @type {Writable>} + */ +export const storagesCollection = writable({}); + +chrome.storage.local.get(storages => { + storagesCollection.set(storages); +}); + +chrome.storage.local.onChanged.addListener(changes => { + storagesCollection.update(storages => { + for (let updatedStorageName of Object.keys(changes)) { + storages[updatedStorageName] = changes[updatedStorageName].newValue; + } + }) +});