morphik-core/ee/ui-component/lib/notebooks-file-storage.ts
2025-04-21 14:51:08 -07:00

71 lines
1.7 KiB
TypeScript

/**
* File-based notebook data store
* This provides permanent storage for notebooks in a JSON file
*/
import { readFileSync, writeFileSync } from 'fs';
import { resolve } from 'path';
export interface Notebook {
id: string;
name: string;
description: string;
created_at: string;
}
interface NotebooksData {
notebooks: Notebook[];
lastUpdated: string;
}
// Path to the notebooks storage file
const NOTEBOOKS_FILE_PATH = resolve(process.cwd(), 'ui-component/notebook-storage/notebooks.json');
// Default notebooks in case file is missing or corrupted
const DEFAULT_NOTEBOOKS: Notebook[] = [
{
id: "nb_default_1",
name: "Research Papers",
description: "Collection of scientific papers and research documents",
created_at: "2023-01-15T12:00:00Z"
},
{
id: "nb_default_2",
name: "Project Documentation",
description: "Technical specifications and project documents",
created_at: "2023-01-20T14:30:00Z"
}
];
/**
* Load notebooks from file
*/
export const loadNotebooksFromFile = (): Notebook[] => {
try {
// Read the notebooks JSON file
const fileData = readFileSync(NOTEBOOKS_FILE_PATH, 'utf8');
const data: NotebooksData = JSON.parse(fileData);
return data.notebooks || DEFAULT_NOTEBOOKS;
} catch (error) {
console.error('Error loading notebooks from file:', error);
return DEFAULT_NOTEBOOKS;
}
};
/**
* Save notebooks to file
*/
export const saveNotebooksToFile = (notebooks: Notebook[]): void => {
try {
const data: NotebooksData = {
notebooks,
lastUpdated: new Date().toISOString()
};
writeFileSync(NOTEBOOKS_FILE_PATH, JSON.stringify(data, null, 2), 'utf8');
} catch (error) {
console.error('Error saving notebooks to file:', error);
}
};