feat: add dictionary management functionality

This commit is contained in:
2026-02-20 20:24:11 -06:00
parent 5f3229dc0f
commit a51842c48f
5 changed files with 198 additions and 1 deletions

60
services/dictionaries.ts Normal file
View File

@@ -0,0 +1,60 @@
import { readdir } from "node:fs/promises"
import { join } from "node:path"
const DICTIONARIES_PATH = join(process.cwd(), "data", "dictionaries")
export const sanitizeDictionaryName = (name: string) => {
return name.replace(/[^a-zA-Z0-9_]/g, "_")
}
export const createDictionary = async (name: string, content: string): Promise<string> => {
const dictionaryName = sanitizeDictionaryName(name)
const path = join(DICTIONARIES_PATH, `${dictionaryName}.txt`)
const file = Bun.file(path)
if (await file.exists()) {
throw new Error(`Dictionary "${dictionaryName}" already exists`)
}
await file.write(content)
return dictionaryName
}
export const readDictionary = async (name: string): Promise<string> => {
const path = join(DICTIONARIES_PATH, `${sanitizeDictionaryName(name)}.txt`)
const file = Bun.file(path)
if (!(await file.exists())) {
throw new Error(`Dictionary "${name === "" || name === undefined ? "undefined" : name}" does not exist`)
}
return Bun.file(path).text()
}
export const listDictionaries = async (): Promise<string[]> => {
const files = await readdir(DICTIONARIES_PATH, { recursive: true })
return files.map((file) => file.replace(".txt", ""))
}
export const updateDictionary = async (name: string, content: string): Promise<void> => {
const path = join(DICTIONARIES_PATH, `${sanitizeDictionaryName(name)}.txt`)
const file = Bun.file(path)
if (!(await file.exists())) {
throw new Error(`Dictionary "${name}" does not exist`)
}
await file.write(content)
}
export const deleteDictionary = async (name: string): Promise<void> => {
const path = join(DICTIONARIES_PATH, `${sanitizeDictionaryName(name)}.txt`)
const file = Bun.file(path)
if (!(await file.exists())) {
throw new Error(`Dictionary "${name}" does not exist`)
}
await file.delete()
}