From 85bdd43477a7aaf0d6934cf8fe5694f628245676 Mon Sep 17 00:00:00 2001 From: Joshua Smith <199138957+jsmith2-coveo@users.noreply.github.com> Date: Tue, 18 Mar 2025 16:56:54 -0400 Subject: [PATCH 1/3] Make clearing TypeDoc fields from local storage optional --- site/development/local-storage.md | 2 +- .../default/assets/typedoc/Application.ts | 4 +-- .../default/assets/typedoc/utils/storage.ts | 26 +++++++++++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/site/development/local-storage.md b/site/development/local-storage.md index 699d723f3..3d19bd83c 100644 --- a/site/development/local-storage.md +++ b/site/development/local-storage.md @@ -10,7 +10,7 @@ To disable local storage, use: `window.TypeDoc.disableLocalStorage();` -**Note:** Disabling local storage will clear its contents. +**Note:** Optionally, passing `true`, `window.TypeDoc.disableLocalStorage(true);`, will clear TypeDoc contents from the local storage. To enable local storage, use: diff --git a/src/lib/output/themes/default/assets/typedoc/Application.ts b/src/lib/output/themes/default/assets/typedoc/Application.ts index b507a88ed..21943fd0a 100644 --- a/src/lib/output/themes/default/assets/typedoc/Application.ts +++ b/src/lib/output/themes/default/assets/typedoc/Application.ts @@ -24,8 +24,8 @@ declare global { } window.TypeDoc ||= { - disableLocalStorage: () => { - storage.disable(); + disableLocalStorage: (clearStorage: boolean = false) => { + storage.disable(clearStorage); }, enableLocalStorage: () => { storage.enable(); diff --git a/src/lib/output/themes/default/assets/typedoc/utils/storage.ts b/src/lib/output/themes/default/assets/typedoc/utils/storage.ts index d35da5f9a..2ffaf5188 100644 --- a/src/lib/output/themes/default/assets/typedoc/utils/storage.ts +++ b/src/lib/output/themes/default/assets/typedoc/utils/storage.ts @@ -29,11 +29,33 @@ try { export const storage = { getItem: (key: string) => _storage.getItem(key), setItem: (key: string, value: string) => _storage.setItem(key, value), - disable() { - localStorage.clear(); + disable(clearStorage: boolean = false) { + if (clearStorage) { removeTypeDocStorage();} _storage = noOpStorageImpl; }, enable() { _storage = localStorageImpl; }, }; + +function removeTypeDocStorage() { + const keysToRemove = [ + "filter-protected", + "filter-inherited", + "filter-external", + "tsd-theme", + ]; + const regex = /^tsd-accordion-/; + + try { + const keys: string[] = []; + + Object.keys(localStorage).forEach(key => { + if (keysToRemove.includes(key) || regex.test(key)) { + localStorage.removeItem(key); + } + }); + } catch { + // Silently ignore any errors + } +} \ No newline at end of file From 4cace4132c9642ab14dd34b9a00277c385250c24 Mon Sep 17 00:00:00 2001 From: Joshua Smith <199138957+jsmith2-coveo@users.noreply.github.com> Date: Tue, 18 Mar 2025 17:20:51 -0400 Subject: [PATCH 2/3] Addressing linting --- .../output/themes/default/assets/typedoc/utils/storage.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/output/themes/default/assets/typedoc/utils/storage.ts b/src/lib/output/themes/default/assets/typedoc/utils/storage.ts index 2ffaf5188..4f1aef4f8 100644 --- a/src/lib/output/themes/default/assets/typedoc/utils/storage.ts +++ b/src/lib/output/themes/default/assets/typedoc/utils/storage.ts @@ -29,8 +29,8 @@ try { export const storage = { getItem: (key: string) => _storage.getItem(key), setItem: (key: string, value: string) => _storage.setItem(key, value), - disable(clearStorage: boolean = false) { - if (clearStorage) { removeTypeDocStorage();} + disable(clearStorage: boolean = false) { + if (clearStorage) removeTypeDocStorage(); _storage = noOpStorageImpl; }, enable() { @@ -58,4 +58,4 @@ function removeTypeDocStorage() { } catch { // Silently ignore any errors } -} \ No newline at end of file +} From 39983ed05bde6ef4d5ef5303ef42adbf1a7ca3d2 Mon Sep 17 00:00:00 2001 From: Joshua Smith <199138957+jsmith2-coveo@users.noreply.github.com> Date: Wed, 19 Mar 2025 12:05:03 -0400 Subject: [PATCH 3/3] Exposing new function to disable read/write to local storage --- site/development/local-storage.md | 6 +++- .../default/assets/typedoc/Application.ts | 8 +++-- .../default/assets/typedoc/utils/storage.ts | 29 ++++--------------- 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/site/development/local-storage.md b/site/development/local-storage.md index 3d19bd83c..ed1b51663 100644 --- a/site/development/local-storage.md +++ b/site/development/local-storage.md @@ -10,10 +10,14 @@ To disable local storage, use: `window.TypeDoc.disableLocalStorage();` -**Note:** Optionally, passing `true`, `window.TypeDoc.disableLocalStorage(true);`, will clear TypeDoc contents from the local storage. +**Note:** Disabling local storage will clear its contents. To enable local storage, use: `window.TypeDoc.enableLocalStorage();` **Note:** Local storage is enabled by default. + +To disable local storage without clearing it, use: + +`window.TypeDoc.disableWritingLocalStorage();` diff --git a/src/lib/output/themes/default/assets/typedoc/Application.ts b/src/lib/output/themes/default/assets/typedoc/Application.ts index 21943fd0a..07e6940f1 100644 --- a/src/lib/output/themes/default/assets/typedoc/Application.ts +++ b/src/lib/output/themes/default/assets/typedoc/Application.ts @@ -17,6 +17,7 @@ declare global { [k: `kind_${number}`]: string; }; TypeDoc: { + disableWritingLocalStorage: () => void; disableLocalStorage: () => void; enableLocalStorage: () => void; }; @@ -24,8 +25,11 @@ declare global { } window.TypeDoc ||= { - disableLocalStorage: (clearStorage: boolean = false) => { - storage.disable(clearStorage); + disableWritingLocalStorage() { + storage.disableWritingLocalStorage(); + }, + disableLocalStorage: () => { + storage.disable(); }, enableLocalStorage: () => { storage.enable(); diff --git a/src/lib/output/themes/default/assets/typedoc/utils/storage.ts b/src/lib/output/themes/default/assets/typedoc/utils/storage.ts index 4f1aef4f8..b68e566ae 100644 --- a/src/lib/output/themes/default/assets/typedoc/utils/storage.ts +++ b/src/lib/output/themes/default/assets/typedoc/utils/storage.ts @@ -29,33 +29,14 @@ try { export const storage = { getItem: (key: string) => _storage.getItem(key), setItem: (key: string, value: string) => _storage.setItem(key, value), - disable(clearStorage: boolean = false) { - if (clearStorage) removeTypeDocStorage(); + disableWritingLocalStorage() { + _storage = noOpStorageImpl; + }, + disable() { + localStorage.clear(); _storage = noOpStorageImpl; }, enable() { _storage = localStorageImpl; }, }; - -function removeTypeDocStorage() { - const keysToRemove = [ - "filter-protected", - "filter-inherited", - "filter-external", - "tsd-theme", - ]; - const regex = /^tsd-accordion-/; - - try { - const keys: string[] = []; - - Object.keys(localStorage).forEach(key => { - if (keysToRemove.includes(key) || regex.test(key)) { - localStorage.removeItem(key); - } - }); - } catch { - // Silently ignore any errors - } -}