mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-11-14 02:29:33 +01:00
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
/**
|
|||
|
|
* @fileoverview Persistence for web tabs (saved dashboard URLs).
|
||
|
|
*
|
||
|
|
* Stores `Webview` records in `~/.codeman/webviews.json`, following the same
|
||
|
|
* read-array / write-array shape as `src/remote-hosts.ts`. Deliberately dumb: no
|
||
|
|
* caching, no watchers. The list is small (bounded by MAX_WEBVIEWS) and is read
|
||
|
|
* on demand by the route handlers.
|
||
|
|
*
|
||
|
|
* The file lives under the instance data dir, so a beta instance started with a
|
||
|
|
* distinct CODEMAN_INSTANCE keeps its own dashboards.
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { existsSync, mkdirSync } from 'node:fs';
|
||
|
|
import fs from 'node:fs/promises';
|
||
|
|
import { join } from 'node:path';
|
||
|
|
import type { Webview } from './types.js';
|
||
|
|
|
||
|
|
const WEBVIEWS_FILE = 'webviews.json';
|
||
|
|
|
||
|
|
export function webviewsPath(configDir: string): string {
|
||
|
|
return join(configDir, WEBVIEWS_FILE);
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function readWebviews(configDir: string): Promise<Webview[]> {
|
||
|
|
try {
|
||
|
|
const raw = await fs.readFile(webviewsPath(configDir), 'utf-8');
|
||
|
|
const parsed = JSON.parse(raw);
|
||
|
|
return Array.isArray(parsed) ? (parsed as Webview[]) : [];
|
||
|
|
} catch {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function writeWebviews(configDir: string, webviews: Webview[]): Promise<void> {
|
||
|
|
if (!existsSync(configDir)) mkdirSync(configDir, { recursive: true });
|
||
|
|
await fs.writeFile(webviewsPath(configDir), JSON.stringify(webviews, null, 2));
|
||
|
|
}
|