UNPKG

csv-database

Version:

lightweight CSV database

49 lines (48 loc) 1.58 kB
const fs = require("fs"); const doesFileExist = (filename) => new Promise((resolve, reject) => { fs.exists(filename, resolve); }); const createFile = (filename, data) => new Promise((resolve, reject) => { fs.writeFile(filename, data, err => { err ? reject(err) : resolve(); }); }); const createFileIfNotExist = async (filename, model, delimiter) => { try { if (!await doesFileExist(filename)) { const headers = model.reduce((header, cell) => header + delimiter + cell); await createFile(filename, headers); } } catch (err) { throw new Error("error creating csv file : " + err); } }; const hasSameModel = (obj, model) => { const objKeys = Object.keys(obj); const objHasKey = key => objKeys.find(k => k === key); for (const key of model) { if (!objHasKey(key)) return false; } // if length is different, arrays are not equal return objKeys.length === model.length; }; const validate = async (parser, model) => { let validated = false; // stop at first line once model has been validated const checkModel = data => { if (!validated && !hasSameModel(data, model)) throw new Error("csv model doesn't correspond"); validated = true; }; const events = { onData: checkModel }; return parser.read(events); }; const initDb = async (filename, model, delimiter, parser) => { await createFileIfNotExist(filename, model, delimiter); await validate(parser, model); }; module.exports = initDb;