Skip to content

ysnglt/node-csvdb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

csv-database : node.js CSV database

Lightweight CRUD database, using CSV files as a storage.

Features :

  • complete CRUD API with model validation
  • native JS objects manipulation
  • Typescript typings
  • concurrency-ready

Usage

> const db = await csvdb("users.csv", ["id","name","mail"]);

> await db.get({mail: "johndoe@github.com"});
[ {id: 1, name: "johndoe", mail: "john@github.com"} ]

> await db.add({id: 2, name: "stevejobs", mail: "jobs@github.com"});

Installation

$ npm install csv-database

API Reference

csvdb(filename, model [, delimiter]) ⇒ Promise<CsvDatabase>

Returns a database, given a CSV file and its model.

  • ; as default delimiter
  • file is created if it doesn't exist
Param Type Description
filename string csv file
model string[] database model
[optional] delimiter string custom delimiter

Example

const db = await csvdb("users.csv", ["id","name","mail"], ",");

db.get([predicate]) ⇒ Promise<Object[]>

Returns database content. If given a predicate, returns data that matches its key-values pairs.

  • empty array if nothing found
  • throws an error if predicate does not match csv model
Param Type Description
[optional] predicate Object.partial search predicate

Example

> await db.get();
[
    {id: 1, name: "johndoe", mail: "john@github.com"},
    {id: 2, name: "frankmass", mail: "frankmass@github.com"}
]

> await db.get({name: "johndoe"});
[ {id: 1, name: "johndoe", mail: "john@github.com"} ]

> await db.get({name: "stevejobs"});
[ ]

db.edit(predicate, data) ⇒ Promise<Object[]>

Edits data, given a search predicate object.

  • returns a list of edited occurences
Param Type Description
predicate Object.partial search predicate
data Object.partial data that will replace found occurences key/values

Example

> await db.edit({name: "johndoe"}, {mail: "john@gitlab.com"});
[{1, "johndoe", "john@gitlab.com"}]

db.add(data) ⇒ Promise<Object[]>

Adds data (single object or array) to CSV.

  • returns created occurences
Param Type Description
data Object, Object[] data to be added

Example

> await db.add({id: 3, name: "stevejobs", mail: "jobs@github.com"});
[{id: 3, name: "stevejobs", mail: "jobs@github.com"}]

db.delete(predicate) ⇒ Promise<Object[]>

Deletes all data that matches the given predicate.

  • returns deleted occurences
Param Type Description
predicate Object.partial search predicare

Example

> await db.delete({id: 1});
[ {id: 1, name: "johndoe", mail: "john@github.com"} ]

Local installation

Clone the project :

$ git clone https://github.com/ysnglt/node-csvdb

This project is made using Typescript. To generate the transpiled npm package, you need to run gulp :

$ gulp

You can run the full test suite with mocha :

$ npm i && npm run test