open source is social v-it.org
at main 69 lines 1.8 kB view raw
1// SPDX-License-Identifier: MIT 2// Copyright (c) 2026 sol pbc 3 4import { existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync } from 'node:fs'; 5import { join } from 'node:path'; 6 7export function vitDir() { 8 return join(process.cwd(), '.vit'); 9} 10 11export function readProjectConfig() { 12 const p = join(vitDir(), 'config.json'); 13 if (!existsSync(p)) return {}; 14 try { 15 return JSON.parse(readFileSync(p, 'utf-8')); 16 } catch { 17 return {}; 18 } 19} 20 21export function readBeaconSet() { 22 const config = readProjectConfig(); 23 const set = new Set(); 24 if (config.beacon) set.add(config.beacon); 25 if (config.secondaryBeacon) set.add(config.secondaryBeacon); 26 return set; 27} 28 29export function writeProjectConfig(obj, baseDir) { 30 const dir = baseDir ? join(baseDir, '.vit') : vitDir(); 31 mkdirSync(dir, { recursive: true }); 32 writeFileSync(join(dir, 'config.json'), JSON.stringify(obj, null, 2) + '\n'); 33} 34 35export function appendLog(filename, record) { 36 const dir = vitDir(); 37 mkdirSync(dir, { recursive: true }); 38 appendFileSync(join(dir, filename), JSON.stringify(record) + '\n'); 39} 40 41export function readLog(filename) { 42 const p = join(vitDir(), filename); 43 if (!existsSync(p)) return []; 44 try { 45 return readFileSync(p, 'utf-8') 46 .split('\n') 47 .filter(line => line.trim()) 48 .map(line => { try { return JSON.parse(line); } catch { return null; } }) 49 .filter(Boolean); 50 } catch { 51 return []; 52 } 53} 54 55export function readFollowing() { 56 const p = join(vitDir(), 'following.json'); 57 if (!existsSync(p)) return []; 58 try { 59 return JSON.parse(readFileSync(p, 'utf-8')); 60 } catch { 61 return []; 62 } 63} 64 65export function writeFollowing(list) { 66 const dir = vitDir(); 67 mkdirSync(dir, { recursive: true }); 68 writeFileSync(join(dir, 'following.json'), JSON.stringify(list, null, 2) + '\n'); 69}