@wxn0brp/db
Version:
A simple file-based database management system with support for CRUD operations, custom queries, and graph structures.
42 lines (41 loc) • 1.33 kB
JavaScript
import { existsSync, promises, appendFileSync } from "fs";
import { pathRepair, createRL } from "./utils.js";
import { parse } from "../helpers/format.js";
import hasFieldsAdvanced from "../utils/hasFieldsAdvanced.js";
/**
* Removes entries from a file based on search criteria.
*/
async function removeWorker(file, one, search, context = {}) {
file = pathRepair(file);
if (!existsSync(file)) {
await promises.writeFile(file, "");
return false;
}
await promises.copyFile(file, file + ".tmp");
await promises.writeFile(file, "");
const rl = createRL(file + ".tmp");
let removed = false;
for await (let line of rl) {
if (one && removed) {
appendFileSync(file, line + "\n");
continue;
}
const data = parse(line);
if (typeof search === "function") {
if (search(data, context)) {
removed = true;
continue;
}
}
else if (typeof search === "object" && !Array.isArray(search)) {
if (hasFieldsAdvanced(data, search)) {
removed = true;
continue;
}
}
appendFileSync(file, line + "\n");
}
await promises.writeFile(file + ".tmp", "");
return removed;
}
export default removeWorker;