npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

level-uplevel

v2.0.5

Published

A neat wrapper fo leveldb, that allow you to use tables, fields and rows.

Downloads

17

Readme

level-uplevel - Uplevel 2

Uplevel provides, organized way to store data like sql databases, while using no-sql fast key-value based database LevelDB. It uses tables, fields and rows like a sql type db but stored in key value pairs in db. It hold all its internal date in a key called __InternalProps and every table you add is in its own key in db.

Uplevel consists of tables, fields, and rows, the tables are the way you can classify data. You can add fields to data that defines the structure of a table, and rows hold the actual data. uplevel is fully async, and depends of async/await.

Usage:

const Uplevel = require('level-uplevel');
const path = require('path');

const DB_PATH = path.join(__dirname, 'my-db');
const db = new uplevel(DB_PATH);

// to handle error thrown by leveldb internally
// if it can't open db
// This is because level either passes error in a callback
// sent in which is impossible to implement along side with uplevel.
// and if no callback is passed then it throws in a promise internally
// which could be caught this way.
// For more context look at the level constructor https://github.com/Level/level#const-db--levellocation-options-callback
process.on('unhandledRejection', (error, promise) => {
  /* Your Code */
});

API

All the methods, return a promise execept an chosen few as indicated, which make a use of InternalProps that is sync between each call, which acts like a cache store. We also have started to add minimal support for migrations and will add more migration methods.

isReady property

Weather, uplevel is ready to be used! When you call a method when uplevel is not ready i will queue that task. This property is to be used to know if hasTable or hasRow can be used.

levelDBErrors property

This property hold all the level.errors of the level module used internally.

types propery

This is an object that hold all the possible types, that could be used for the fields, possible types: (string, boolean, date, number, array, string)

waitUntilReady -> Promise(void)

This method returns a promise that you should await which gets resolved once uplevel is ready.

createTable(tableName) -> Promise(UplevelTableInstance)

  • tableName (string): the name of table to create

A table once added can have fields, and rows. If table is already added this will throw an Error: Table already added!. Field in table describe the markup of the table, while rows hold the data as desribed per fields.

addField(tableName, field) -> Promise(void)

  • tableName (string): The table to store this field into.
  • field (object):
    • name (String, required): the name of the field.
    • type (Uplevel.types, required): any one of the type form types property.
    • min (Number, Date): The minimum value of field.
    • max (Number, Date): The maximun value of field.
    • required (boolean): weather the field is required!
    • default (any): the default value, this can be a function.
    • isNullable: weather the field could be null. a note that all the rows have internally generated unique id field.

The min and max property works diffrently for diffrent types. For Array, String the min and max are their length.

hasTable(tableName) -> Promise(Boolean)

  • tableName - the name of the table to check

Return a Boolean weather the table is added or not. Note: Do check isReady before using this method.

hasRow(tableNAme, id) -> Promise(Boolean)

  • tableName - the name of the table to check
  • id - Row id to check wheather it exists or not.

Note: Do check isReady before using this method.

addRow(tableName, fields) -> Promise(id)

  • tableName (String) - the table where to add this row.
  • fields (Object): the key should be the name of the field, and the value shoudl be the value of field.

This will add data to the table, and return the id of the added field.

deleteField(tableName, fieldName) -> Promise(void)

  • tableName (String) - the table name.
  • fieldName (String): the name of the field to delete.

This method delete the field from the row! Not this does not delete the field from added rows.

renameField(tableName, oldField, newField) -> Promise(void)

  • tableName (String) - the table name.
  • oldField (String): the name of the field to rename.
  • newField (String): the new name of the field.

This method renames the field in the rows.

getRows(tableName) -> Promise(rows[])

  • tableName (String) - the name of the table

Return all the data stored in a table. This method return array:

[
  { id: 0, ...fields },
  { id: 1, ...fields }
]

deleteRow(tableName, id) -> Promise(void)

  • tableName (String): the name of table.
  • id (Number): The id of the to delete.

The ids are auto generated, and return by getAllRows method.

deleteTable(tableName) -> Promise(rows[])

  • tableName (String): the name of table.

Delete a table from db, and returns rows.

updateRow(tableName, id, fields) -> Promise(rows[])

  • tableName (String): the name of table.
  • id (Number): the id of the row to update.
  • fields (Object): the fiels to update.

Allows you to update a row in a table, and return the rows of the table.

getTableInstance(tableName) -> Promise(UplevelTableInstance)

  • tableName (String): the name of the table.

Return the UplevelTableInstance for easier manipulation of table.

UplevelTableInstance

This a convience class, that holds all the methods you can do with a table. This instance is returned when you create a table using Uplevel.createTable method or by getTableInstance. This make it so you don't need to pass the tableName parameter again and again.

Migrations

migrations.addField(field, populate) -> Promise(void)

  • field (Object): field property that is passed in addField method.
  • populate (Function): This function is called with argument of row and you can change it and return the row to make sure validation passes.

This function only adds field if the validation passes. This method does not throw error if called again, make it and all the other migrations property re-runable again and again.

addField(field) -> Promise(void)

hasField(fieldName) -> Promise(Boolean)

deleteField(fieldName) -> Promise(void)

renameField(oldField, newField) -> Promise(void)

addRow(row) -> Promise(id)

getRows() -> Promise(rows)

hasRow(id) -> Promise(Boolean)

updateRow(id, row) -> Promise

deleteRow(id) -> Promise(rows)

Documentation of each method above is documented above (except migrations ones, since they are not documented above).