mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 20:03:37 +00:00
Resolves merge conflicts: - apps/server/src/routes/terminal/common.ts: Keep randomBytes import, use @automaker/utils for createLogger - apps/ui/eslint.config.mjs: Use main's explicit globals list with XMLHttpRequest and MediaQueryListEvent additions - apps/ui/src/components/views/terminal-view.tsx: Keep our terminal improvements (killAllSessions, beforeunload, better error handling) - apps/ui/src/config/terminal-themes.ts: Keep our search highlight colors for all themes - apps/ui/src/store/app-store.ts: Keep our terminal settings persistence improvements (merge function) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
101 lines
2.2 KiB
TypeScript
101 lines
2.2 KiB
TypeScript
/**
|
|
* Centralized localStorage abstraction module
|
|
*
|
|
* Provides type-safe wrappers for all localStorage operations.
|
|
* All localStorage access should go through this module to ensure
|
|
* consistent error handling and environment checks.
|
|
*/
|
|
|
|
/**
|
|
* Check if localStorage is available in the current environment
|
|
*/
|
|
function isStorageAvailable(): boolean {
|
|
return typeof window !== 'undefined' && window.localStorage !== undefined;
|
|
}
|
|
|
|
/**
|
|
* Get an item from localStorage
|
|
* @param key - The storage key
|
|
* @returns The stored value or null if not found/unavailable
|
|
*/
|
|
export function getItem(key: string): string | null {
|
|
if (!isStorageAvailable()) return null;
|
|
try {
|
|
return window.localStorage.getItem(key);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set an item in localStorage
|
|
* @param key - The storage key
|
|
* @param value - The value to store
|
|
* @returns true if successful, false otherwise
|
|
*/
|
|
export function setItem(key: string, value: string): boolean {
|
|
if (!isStorageAvailable()) return false;
|
|
try {
|
|
window.localStorage.setItem(key, value);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove an item from localStorage
|
|
* @param key - The storage key to remove
|
|
* @returns true if successful, false otherwise
|
|
*/
|
|
export function removeItem(key: string): boolean {
|
|
if (!isStorageAvailable()) return false;
|
|
try {
|
|
window.localStorage.removeItem(key);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get a JSON-parsed item from localStorage
|
|
* @param key - The storage key
|
|
* @returns The parsed value or null if not found/invalid
|
|
*/
|
|
export function getJSON<T>(key: string): T | null {
|
|
const value = getItem(key);
|
|
if (!value) return null;
|
|
try {
|
|
return JSON.parse(value) as T;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set a JSON-stringified item in localStorage
|
|
* @param key - The storage key
|
|
* @param value - The value to stringify and store
|
|
* @returns true if successful, false otherwise
|
|
*/
|
|
export function setJSON<T>(key: string, value: T): boolean {
|
|
try {
|
|
return setItem(key, JSON.stringify(value));
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Storage module for named exports
|
|
*/
|
|
export const storage = {
|
|
getItem,
|
|
setItem,
|
|
removeItem,
|
|
getJSON,
|
|
setJSON,
|
|
isAvailable: isStorageAvailable,
|
|
};
|