feat(macos): configuration window + curl-backed macOS updater (#71)

This commit is contained in:
2026-05-17 02:23:44 -07:00
committed by GitHub
parent 6ca5cede3e
commit e84674e3b5
100 changed files with 13890 additions and 235 deletions
@@ -0,0 +1,41 @@
export interface ConfigSettingsWindowLike {
isDestroyed(): boolean;
focus(): void;
loadFile(path: string): unknown;
on(event: 'closed', handler: () => void): unknown;
destroy?(): unknown;
}
export interface OpenConfigSettingsWindowDeps<TWindow extends ConfigSettingsWindowLike> {
getSettingsWindow(): TWindow | null;
setSettingsWindow(window: TWindow | null): void;
createSettingsWindow(): TWindow;
settingsHtmlPath: string;
log?: (message: string) => void;
}
export function createOpenConfigSettingsWindowHandler<TWindow extends ConfigSettingsWindowLike>(
deps: OpenConfigSettingsWindowDeps<TWindow>,
): () => boolean {
return () => {
const existing = deps.getSettingsWindow();
if (existing && !existing.isDestroyed()) {
existing.focus();
return true;
}
const window = deps.createSettingsWindow();
void Promise.resolve(window.loadFile(deps.settingsHtmlPath)).catch((error) => {
const message = error instanceof Error ? error.message : String(error);
deps.log?.(`Failed to load configuration settings window: ${message}`);
deps.setSettingsWindow(null);
window.destroy?.();
});
deps.setSettingsWindow(window);
window.on('closed', () => {
deps.setSettingsWindow(null);
});
window.focus();
return true;
};
}