From 23c53270f6ff733478b4c5a70bf045af95560cbd Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Jul 2026 07:14:00 +0000 Subject: [PATCH] refactor(configurator): shape-guard localStorage reads, migrate lucide-svelte, document preview singleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SL-019: reuse savedThemes.ts's isStringRecord() shape guard in persistence.ts's loadInitialOverrides() instead of trusting JSON.parse(local) as Record unchecked — malformed or wrong-shaped localStorage now falls back to {} instead of passing through. SL-021: verified already resolved (no motion dependency or imports remain). SL-022: migrate lucide-svelte -> @lucide/svelte across all 9 importing files (import-source only, no icon renames needed — verified via tsc/ svelte-check/build after the full migration). SL-025: document why previewResolver.svelte.ts's previewVersion is a deliberate module-level singleton rather than component-scoped state. SL-018 and SL-015 were investigated but required no changes: SL-018's 'error' saveState and its StudioHeader render branch were already fully implemented in an earlier batch; SL-015's premise (two competing `overrides` membership idioms to unify) doesn't hold in this codebase — only the `in` idiom is used, consistently, across ~120 call sites in ~15 files, well beyond the ~15-site estimate in the remediation plan. --- configurator/package-lock.json | 23 +++++++++---------- configurator/package.json | 4 ++-- configurator/src/App.svelte | 2 +- .../src/components/DomainPanel.svelte | 2 +- .../components/panels/CheatsheetPanel.svelte | 2 +- .../src/components/panels/ExportPanel.svelte | 2 +- .../src/components/panels/HomePanel.svelte | 2 +- .../src/components/panels/ThemesPanel.svelte | 2 +- .../src/components/shell/PreviewPanel.svelte | 2 +- .../src/components/shell/SidebarNav.svelte | 2 +- .../src/components/shell/StudioHeader.svelte | 2 +- configurator/src/lib/persistence.ts | 6 ++++- .../src/lib/previewResolver.svelte.ts | 8 +++++++ configurator/src/lib/savedThemes.ts | 2 +- configurator/tests/persistence.test.js | 20 +++++++++------- 15 files changed, 48 insertions(+), 33 deletions(-) diff --git a/configurator/package-lock.json b/configurator/package-lock.json index bfe4c941..ed74bc86 100644 --- a/configurator/package-lock.json +++ b/configurator/package-lock.json @@ -8,8 +8,8 @@ "name": "slashed-configurator", "version": "0.6.33", "dependencies": { - "fflate": "^0.8.3", - "lucide-svelte": "^0.468.0" + "@lucide/svelte": "^1.23.0", + "fflate": "^0.8.3" }, "devDependencies": { "@playwright/test": "^1.60.0", @@ -685,6 +685,15 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lucide/svelte": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-1.23.0.tgz", + "integrity": "sha512-3LQbKXx9vId6Nx4E2Nu2qwgJfdmr5+CVeVJbxe5cy+HcnCRd9QVVtZXqvgBYAV1OJrPmQAf9/3gJWLCpASC/Ng==", + "license": "ISC", + "peerDependencies": { + "svelte": "^5" + } + }, "node_modules/@playwright/test": { "version": "1.61.1", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", @@ -2719,16 +2728,6 @@ "dev": true, "license": "ISC" }, - "node_modules/lucide-svelte": { - "version": "0.468.0", - "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.468.0.tgz", - "integrity": "sha512-n0ecAFtCY5LEeL+PJ1Xj4n3c2gzj8tMpak0KMGnvoSJEjCsCnRB0mekBtJZAo7beyynW9Qj5Um1KfMBAeTNplw==", - "deprecated": "Package deprecated. Please use @lucide/svelte instead.", - "license": "ISC", - "peerDependencies": { - "svelte": "^3 || ^4 || ^5.0.0-next.42" - } - }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", diff --git a/configurator/package.json b/configurator/package.json index 34500122..ac9ba6b8 100644 --- a/configurator/package.json +++ b/configurator/package.json @@ -21,8 +21,8 @@ "test:e2e": "playwright test" }, "dependencies": { - "fflate": "^0.8.3", - "lucide-svelte": "^0.468.0" + "@lucide/svelte": "^1.23.0", + "fflate": "^0.8.3" }, "devDependencies": { "@playwright/test": "^1.60.0", diff --git a/configurator/src/App.svelte b/configurator/src/App.svelte index fb436fa0..b6d65bf8 100644 --- a/configurator/src/App.svelte +++ b/configurator/src/App.svelte @@ -1,6 +1,6 @@