mirror of
https://github.com/pheralb/svgl.git
synced 2025-12-29 08:01:36 +08:00
✨ Add settings management with package manager and SVG optimization options
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
import { writable } from "svelte/store";
|
||||
import { browser } from "$app/environment";
|
||||
|
||||
type PackageManager = "npm" | "pnpm" | "yarn" | "bun";
|
||||
|
||||
interface Settings {
|
||||
packageManager: PackageManager;
|
||||
optimizeSvgs: boolean;
|
||||
}
|
||||
|
||||
const localStorageKey = "svgl_settings";
|
||||
const defaultSettings: Settings = {
|
||||
packageManager: "pnpm",
|
||||
optimizeSvgs: true,
|
||||
};
|
||||
|
||||
function getInitialSettings(): Settings {
|
||||
if (browser) {
|
||||
try {
|
||||
const stored = localStorage.getItem(localStorageKey);
|
||||
if (stored) {
|
||||
const parsedSettings = JSON.parse(stored) as Partial<Settings>;
|
||||
return {
|
||||
packageManager: isValidPackageManager(parsedSettings.packageManager)
|
||||
? parsedSettings.packageManager
|
||||
: defaultSettings.packageManager,
|
||||
optimizeSvgs:
|
||||
typeof parsedSettings.optimizeSvgs === "boolean"
|
||||
? parsedSettings.optimizeSvgs
|
||||
: defaultSettings.optimizeSvgs,
|
||||
};
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error parsing settings from localStorage:", error);
|
||||
}
|
||||
}
|
||||
return defaultSettings;
|
||||
}
|
||||
|
||||
function isValidPackageManager(value: unknown): value is PackageManager {
|
||||
return (
|
||||
value === "npm" || value === "pnpm" || value === "yarn" || value === "bun"
|
||||
);
|
||||
}
|
||||
|
||||
function createSettingsStore() {
|
||||
const { subscribe, set, update } = writable<Settings>(getInitialSettings());
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
|
||||
// Update package manager
|
||||
setPackageManager: (packageManager: PackageManager) => {
|
||||
update((settings) => {
|
||||
const newSettings = { ...settings, packageManager };
|
||||
if (browser) {
|
||||
localStorage.setItem(localStorageKey, JSON.stringify(newSettings));
|
||||
}
|
||||
return newSettings;
|
||||
});
|
||||
},
|
||||
|
||||
// Update optimize SVGs setting
|
||||
setOptimizeSvgs: (optimizeSvgs: boolean) => {
|
||||
update((settings) => {
|
||||
const newSettings = { ...settings, optimizeSvgs };
|
||||
if (browser) {
|
||||
localStorage.setItem(localStorageKey, JSON.stringify(newSettings));
|
||||
}
|
||||
return newSettings;
|
||||
});
|
||||
},
|
||||
|
||||
// Update multiple settings at once
|
||||
updateSettings: (newSettings: Partial<Settings>) => {
|
||||
update((settings) => {
|
||||
const updatedSettings = { ...settings, ...newSettings };
|
||||
if (browser) {
|
||||
localStorage.setItem(
|
||||
localStorageKey,
|
||||
JSON.stringify(updatedSettings),
|
||||
);
|
||||
}
|
||||
return updatedSettings;
|
||||
});
|
||||
},
|
||||
|
||||
// Reset to default settings
|
||||
reset: () => {
|
||||
set(defaultSettings);
|
||||
if (browser) {
|
||||
localStorage.setItem(localStorageKey, JSON.stringify(defaultSettings));
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const settingsStore = createSettingsStore();
|
||||
|
||||
export { settingsStore, type PackageManager, type Settings };
|
||||
Reference in New Issue
Block a user