mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-07-15 12:51:31 +08:00
75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
import type { ClaudeSettings } from '../types/types';
|
|
|
|
export const CLAUDE_SETTINGS_KEY = 'claude-settings';
|
|
|
|
export const safeLocalStorage = {
|
|
setItem: (key: string, value: string) => {
|
|
try {
|
|
localStorage.setItem(key, value);
|
|
} catch (error: any) {
|
|
if (error?.name === 'QuotaExceededError') {
|
|
console.warn('localStorage quota exceeded, clearing old data');
|
|
|
|
const keys = Object.keys(localStorage);
|
|
const draftKeys = keys.filter((k) => k.startsWith('draft_input_') || k.startsWith('queued_message_'));
|
|
draftKeys.forEach((k) => {
|
|
localStorage.removeItem(k);
|
|
});
|
|
|
|
try {
|
|
localStorage.setItem(key, value);
|
|
} catch (retryError) {
|
|
console.error('Failed to save to localStorage even after cleanup:', retryError);
|
|
}
|
|
} else {
|
|
console.error('localStorage error:', error);
|
|
}
|
|
}
|
|
},
|
|
getItem: (key: string): string | null => {
|
|
try {
|
|
return localStorage.getItem(key);
|
|
} catch (error) {
|
|
console.error('localStorage getItem error:', error);
|
|
return null;
|
|
}
|
|
},
|
|
removeItem: (key: string) => {
|
|
try {
|
|
localStorage.removeItem(key);
|
|
} catch (error) {
|
|
console.error('localStorage removeItem error:', error);
|
|
}
|
|
},
|
|
};
|
|
|
|
export function getClaudeSettings(): ClaudeSettings {
|
|
const raw = safeLocalStorage.getItem(CLAUDE_SETTINGS_KEY);
|
|
if (!raw) {
|
|
return {
|
|
allowedTools: [],
|
|
disallowedTools: [],
|
|
skipPermissions: false,
|
|
projectSortOrder: 'name',
|
|
};
|
|
}
|
|
|
|
try {
|
|
const parsed = JSON.parse(raw);
|
|
return {
|
|
...parsed,
|
|
allowedTools: Array.isArray(parsed.allowedTools) ? parsed.allowedTools : [],
|
|
disallowedTools: Array.isArray(parsed.disallowedTools) ? parsed.disallowedTools : [],
|
|
skipPermissions: Boolean(parsed.skipPermissions),
|
|
projectSortOrder: parsed.projectSortOrder || 'name',
|
|
};
|
|
} catch {
|
|
return {
|
|
allowedTools: [],
|
|
disallowedTools: [],
|
|
skipPermissions: false,
|
|
projectSortOrder: 'name',
|
|
};
|
|
}
|
|
}
|