notes API cleanup
This commit is contained in:
88
src/main/notesAPI.js
Normal file
88
src/main/notesAPI.js
Normal file
@@ -0,0 +1,88 @@
|
||||
import { app } from 'electron'
|
||||
import fs from 'fs'
|
||||
import { join, relative, dirname } from 'path'
|
||||
|
||||
const BASE_DIR = join(app.getPath('userData'), 'notes-storage')
|
||||
export const ensureBaseDir = () => {
|
||||
if (!fs.existsSync(BASE_DIR)) {
|
||||
fs.mkdirSync(BASE_DIR, { recursive: true })
|
||||
}
|
||||
}
|
||||
|
||||
const sanitizeRelativePath = (relativePath) => {
|
||||
const resolved = join(BASE_DIR, relativePath)
|
||||
if (!resolved.startsWith(BASE_DIR)) {
|
||||
throw new Error('Invalid path')
|
||||
}
|
||||
return resolved
|
||||
}
|
||||
|
||||
const readAllNotesRecursive = (dir = BASE_DIR, base = BASE_DIR) => {
|
||||
const entries = fs.readdirSync(dir, { withFileTypes: true })
|
||||
let results = []
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = join(dir, entry.name)
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
results = results.concat(readAllNotesRecursive(fullPath, base))
|
||||
}
|
||||
|
||||
if (entry.isFile() && entry.name.endsWith('.md')) {
|
||||
const content = fs.readFileSync(fullPath, 'utf-8')
|
||||
|
||||
results.push({
|
||||
name: entry.name,
|
||||
path: relative(base, fullPath),
|
||||
content,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
|
||||
const createNote = (relativePath, content = '') => {
|
||||
const fullPath = sanitizeRelativePath(relativePath)
|
||||
|
||||
fs.mkdirSync(dirname(fullPath), { recursive: true })
|
||||
fs.writeFileSync(fullPath, content, 'utf-8')
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
const createDirectory = (relativePath) => {
|
||||
const fullPath = sanitizeRelativePath(relativePath)
|
||||
fs.mkdirSync(fullPath, { recursive: true })
|
||||
return true
|
||||
}
|
||||
|
||||
const readNote = (relativePath) => {
|
||||
const fullPath = sanitizeRelativePath(relativePath)
|
||||
|
||||
if (!fs.existsSync(fullPath)) {
|
||||
createNote(relativePath)
|
||||
}
|
||||
|
||||
return fs.readFileSync(fullPath, 'utf-8')
|
||||
}
|
||||
|
||||
const updateNote = (relativePath, content) => {
|
||||
const fullPath = sanitizeRelativePath(relativePath)
|
||||
|
||||
if (!fs.existsSync(fullPath)) {
|
||||
throw new Error('Note does not exist')
|
||||
}
|
||||
|
||||
fs.writeFileSync(fullPath, content, 'utf-8')
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
export default {
|
||||
readAllNotesRecursive,
|
||||
createNote,
|
||||
createDirectory,
|
||||
readNote,
|
||||
updateNote,
|
||||
}
|
||||
Reference in New Issue
Block a user