File size: 2,716 Bytes
05d91af | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | import { readFile, writeFile, readdir, rm, mkdir } from 'node:fs/promises';
import { join } from 'node:path';
import { randomBytes } from 'node:crypto';
const STORE_FILE = join(process.cwd(), 'data', 'deployed-projects.json');
const deployedProjects = new Map();
async function ensureDataDir() {
const dataDir = join(process.cwd(), 'data');
try {
await mkdir(dataDir, { recursive: true });
} catch {}
}
async function loadStore() {
try {
await ensureDataDir();
const data = await readFile(STORE_FILE, 'utf-8');
const parsed = JSON.parse(data);
deployedProjects.clear();
for (const [id, project] of Object.entries(parsed)) {
deployedProjects.set(id, project);
}
} catch {
deployedProjects.clear();
}
}
async function saveStore() {
try {
await ensureDataDir();
const data = JSON.stringify(Object.fromEntries(deployedProjects), null, 2);
await writeFile(STORE_FILE, data, 'utf-8');
} catch (error) {
console.error('Failed to save projects store:', error.message);
}
}
function generateId() {
return randomBytes(8).toString('hex');
}
export async function initStore() {
await loadStore();
}
export function createProject(data) {
const id = generateId();
const project = {
id,
name: data.name || id,
language: data.language || 'unknown',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
files: data.files || {},
config: data.config || {},
metadata: data.metadata || {}
};
deployedProjects.set(id, project);
saveStore();
return project;
}
export function getProject(id) {
return deployedProjects.get(id) || null;
}
export function getAllProjects() {
return Array.from(deployedProjects.values());
}
export function updateProject(id, data) {
const project = deployedProjects.get(id);
if (!project) return null;
const updated = {
...project,
...data,
updatedAt: new Date().toISOString()
};
deployedProjects.set(id, updated);
saveStore();
return updated;
}
export function deleteProject(id) {
const deleted = deployedProjects.delete(id);
if (deleted) {
saveStore();
}
return deleted;
}
export async function deleteProjectFiles(id) {
const project = deployedProjects.get(id);
if (!project) return false;
const projectPath = join(process.cwd(), 'projects', id);
try {
await rm(projectPath, { recursive: true, force: true });
return true;
} catch {
return false;
}
}
export { generateId, deployedProjects };
|