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

save

v2.9.0

Published

A simple CRUD based persistence abstraction for storing objects to any backend data store. eg. Memory, MongoDB, Redis, CouchDB, Postgres, Punch Card etc.

Downloads

488,301

Readme

save - A simple CRUD based persistence abstraction for storing objects to any backend data store. eg. Memory, MongoDB, Redis, CouchDB, Postgres, Punch Card etc.

NPM Details

build status Dependences Join the chat at https://gitter.im/serby/save

save comes with a fully featured in memory engine which is super handy for testing your models. For real world use you'll need to get one of the database powered engines:

If your data store of choice isn't listed here please create an engine and send me a pull request. To see an example of how to create an engine, please see save-mongodb.

Installation

npm install save

Example


var save = require('save')
  , s = save('person')

s.on('create', function() {
  console.log('New person created!')
})

s.create({ name: 'Dom' }, function(err, person) {
  // Outputs { name: 'Dom', _id: 1 }
  console.log(person)
})

Usage

var save = require('save')

var s = save(name, [options])

Save by default returns an in memory engine which means you can unit test your models independently from your database. name is the name of your model.

Possible options are:

  • idProperty. Defaults to _id for mongodb
  • logger. Defaults to console logging: { info: console.info, verbose: console.info }
  • engine. Persistence engine to use, defaults to memory engine: require(./memory-engine)

s.create(object, [cb])

Creates a new entity. cb called with cb(err, savedObject).

s.read(id, [cb])

Reads a single entity with an idProperty of id. cb called with cb(err, readObject).

s.update(object, overwrite, [cb])

Updates a single entity. Optionally overwrites the entire entity, by default just extends it with the new values. cb called with cb(err, readObject).

s.delete(id, [cb])

Deletes one entity. Returns an error if the object can not be found. cb called with cb(err).

s.deleteMany(query, [cb])

Deletes entities based on a query. Performs a find by query, then calls delete for each item returned Returns an error if no items match the query. cb called with cb(err).

s.find(query, options, cb)

Performs a find on the data. cb called with cb(err, foundObjectsArray).

s.findOne(query, options, cb)

Performs a find on the data and limits the result set to 1. cb called with cb(err, foundObject).

s.count(query, cb)

Performs a count by query. cb called with cb(err, count).

s.idProperty

Provides access to the idProperty. Mostly used for testing.

Events

s.on('create', cb)

This event fires with cb(object) where object is the item that will be created.

s.on('afterCreate', cb)

This event fires with cb(object) where object is the item that has been created.

s.on('update', cb)

This event fires with cb(object, overwrite) where object is the item that will be updated and overwrite is whether the object is to be overwritten or extended.

s.on('afterUpdate', cb)

This event fires with cb(object, overwrite) where object is the item that has been updated and overwrite is whether the object is to be overwritten or extended.

s.on('delete', cb)

This event fires with cb(id) where id is the item that will be deleted.

s.on('afterDelete', cb)

This event fires with cb(id) where id is the item that has been deleted.

s.on('deleteMany', cb)

This event fires with cb(query) where query is the query used to deleteMany.

s.on('afterDeleteMany', cb)

This event fires with cb(query) where query is the query that has used deleteMany.

s.on('read', cb)

This event fires with cb(id) where id is the item that has been read.

s.on('find', cb)

This event fires with cb(query) where query is the query used to find.

s.on('findOne', cb)

This event fires with cb(query) where query is the query used to findOne.

s.on('count', cb)

This event fires with cb(query) where query is the query used to count.

s.on('error', cb)

This event fires with cb(err) where err is any error that may have occured.

Credits

Paul Serby follow me on twitter @serby

Dom Harrington

Licence

Licenced under the New BSD License