db.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeId = makeId;
exports.todayStr = todayStr;
exports.loadDB = loadDB;
exports.saveDB = saveDB;
exports.getDataDir = getDataDir;
const promises_1 = require("fs/promises");
const path_1 = require("path");
const os_1 = require("os");
// ---------------------------------------------------------------------------
// Persistence
// ---------------------------------------------------------------------------
function makeId() {
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 7)}`;
}
function todayStr() {
return new Date().toISOString().slice(0, 10);
}
function dbPath(dataDir) {
return (0, path_1.join)(dataDir, "founder.json");
}
async function loadDB(dataDir) {
await (0, promises_1.mkdir)(dataDir, { recursive: true });
let raw;
try {
raw = await (0, promises_1.readFile)(dbPath(dataDir), "utf8");
}
catch (err) {
if (err.code === "ENOENT") {
return { startups: [], customerProblems: [], experiments: [], decisions: [], competitors: [] };
}
throw err;
}
const db = JSON.parse(raw);
db.startups ??= [];
db.customerProblems ??= [];
db.experiments ??= [];
db.decisions ??= [];
db.competitors ??= [];
return db;
}
async function saveDB(dataDir, db) {
await (0, promises_1.mkdir)(dataDir, { recursive: true });
await (0, promises_1.writeFile)(dbPath(dataDir), JSON.stringify(db, null, 2), "utf8");
}
function getDataDir(configPath) {
const p = configPath.trim() || (0, path_1.join)((0, os_1.homedir)(), "founder-data");
return p.startsWith("~/") ? (0, path_1.join)((0, os_1.homedir)(), p.slice(2)) : p;
}