Files

44 lines
1.4 KiB
TypeScript
Raw Permalink Normal View History

2026-01-06 21:31:04 +02:00
import type { SettingsAPI, SettingsLoadResult, SettingsPayload } from '@openchamber/ui/lib/api/types';
import { sendBridgeMessage } from './bridge';
2025-12-13 16:34:17 +02:00
const sanitizePayload = (data: unknown): SettingsPayload => {
if (!data || typeof data !== 'object') {
return {};
}
return data as SettingsPayload;
};
export const createVSCodeSettingsAPI = (): SettingsAPI => ({
async load(): Promise<SettingsLoadResult> {
try {
const payload = sanitizePayload(await sendBridgeMessage('api:config/settings:get'));
return {
settings: {
...payload,
// Override with VS Code settings
lastDirectory: window.__VSCODE_CONFIG__?.workspaceFolder || payload.lastDirectory || '',
},
source: 'web',
};
} catch {
2025-12-13 16:34:17 +02:00
// Fallback to VS Code config
return {
settings: {
themeVariant: window.__VSCODE_CONFIG__?.theme === 'light' ? 'light' : 'dark',
lastDirectory: window.__VSCODE_CONFIG__?.workspaceFolder || '',
},
source: 'web',
};
}
},
async save(changes: Partial<SettingsPayload>): Promise<SettingsPayload> {
return sanitizePayload(await sendBridgeMessage('api:config/settings:save', changes));
2025-12-13 16:34:17 +02:00
},
async restartOpenCode(): Promise<{ restarted: boolean }> {
await sendBridgeMessage('api:config/reload');
2025-12-13 16:34:17 +02:00
return { restarted: true };
},
});