@davalapar/database
efficient, synchronous, prototyping database
highlights
- supported field types:
- string, number, boolean
- strings, numbers, booleans
- coordinates
- database:
- pretty json support
- compression support
- graceful interrupt support
- graceful terminate support
- only saves modified tables
- tables:
- saved separately
- item update helper function for schema updates
- item id randomization helper (256-bit default)
- table items:
- forced explicit property values by default
- optional implicit default values property values
- table queries:
- filter stacking (by multiple comparison operators)
- sort stacking (by multiple columns / fields)
- geolocation sorting & filtering
changelog
- 1.1.0
- updated
table.id(bytes)intotable.id(bits)method - renamed
database.save()todatabase.commit() - added
database.rollback()
- updated
- 1.0.0
- clean api
- fully synchronous
- stable release
installation
yarn add @davalapar/database
database
const Database = require('@davalapar/database'); const db = new Database({ // savePrettyJSON: true, // saveCompressionAlgo: 'gzip' or 'brotli', saveGracefulInterrupt: true, saveGracefulTerminate: true, tableConfigs: [ { label: 'users', itemSchema: { name: 'string', age: 'number', active: 'boolean', }, transformFunction: () => {}, }, { label: 'places', itemSchema: { label: 'string', tags: 'strings', coordinates: 'coordinates', }, transformFunction: () => {}, }, ], });
new Database(dbOptions) -> databasedatabase.table(label) -> tabledatabase.rollback() -> undefineddatabase.commit() -> undefineddbOptions: ObjectpreferDevUrandom: optional Boolean, generates id's from/dev/urandomif possiblesavePrettyJSON: optional Boolean, prettifies outputsaveCompressionAlgo: optional String, 'gzip' or 'brotli'saveGracefulInterrupt: optional Boolean, saves gracefully uponSIGINTsaveGracefulTerminate: optional Boolean, saves gracefully uponSIGTERMtableConfigs: required Array oftableConfig
tableConfig: Objectlabel: required String, label of tableitemSchema: required Object, schema of itemstransformFunction: optional Function, updater for items whenitemSchemais updated
table
const users = db.table('users');
table.label() -> stringtable.id(bits=256) -> stringtable.clear() -> tabletable.defaults(sourceItem) -> updatedItemtable.add(newItem) -> newItemtable.update(updatedItem) -> updatedItemtable.get(id) -> itemtable.delete(id) -> tabletable.increment(id, field) -> tabletable.decrement(id, field) -> tabletable.has(id) -> booleantable.query() -> querytable.size() -> number
query
const users = db.table('users'); const items = users.query().results();
query.ascend(field) -> queryquery.descend(field) -> queryquery.ascend_h(field, coordinates) -> queryquery.descend_h(field, coordinates) -> queryquery.gt(field, value) -> queryquery.gte(field, value) -> queryquery.lt(field, value) -> queryquery.lte(field, value) -> queryquery.eq(field, value) -> queryquery.neq(field, value) -> queryquery.includes(field, value) -> queryquery.excludes(field, value) -> queryquery.includes_some(field, values) -> queryquery.includes_all(field, values) -> queryquery.excludes_some(field, values) -> queryquery.excludes_all(field, values) -> queryquery.inside_h(field, coordinates, meters) -> queryquery.outside_h(field, coordinates, meters) -> queryquery.limit(value) -> queryquery.offset(value) -> queryquery.page(value) -> queryquery.select(fields) -> queryquery.deselect(fields) -> queryquery.results() -> items[]
query tricks
// extracting first result: YourTable.query().results()[0]; // extracting results count: YourTable.query().results().length; // extracting if results exist: YourTable.query().results().length < 0; // other array methods you can use: // filter, sort, map, reduce, forEach, some, every, find
License
MIT | @davalapar