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

dad

v1.3.3

Published

Data micro-framework

Downloads

33

Readme

Dad

NPM version build status Test coverage

Composable data stores for node.js and the browser. Dad's small ~300 SLOC codebase implements only methods that are common in most datastores. This includes models, validation and persistance.

No assumptions about your backend are made. Through adapters you can synchronize your data with any backend. Official adapters are a WIP.

Installation

$ npm i --save dad

References

Overview

var rest = require('dad-rest');
var dad = require('dad');
var store = dad('books');

// Set the schema.
store.schema = {
  title: {type: 'string', required: true},
  author: {type: 'string', required: true},
  pages: {type: 'number'}
};

// Set the adapters.

store.adapters = [
  rest('localhost:1337/books')
];

// Start moving data around, and save it to
// our REST backend.
store.add({
  title: 'Ferrets',
  author: 'Tobi',
  pages: 12
});

store.update({
  title: 'Lizards',
  author: 'Tobi',
  pages: 12
});

API

dad(name)

Create a named store.

var dad = require('dad');
var store = dad('books');

.schema = schema

Define the schema for the store.

store.schema = {
  title: {type: 'string', required: true},
  author: {type: 'string', required: true},
  pages: {type: 'number'}
};

.adapters = adapters

Define the adapters to be called.

var localStorage = require('dad-localStorage');
var rest = require('dad-rest');

store.adapters = [
  localStorage,
  rest
];

Validation

.validate(key, value)

Validate a value against a key in the schema.

store.validate({
  title: 'bar',
  author: 'bin'
});

.allAccountedFor(record)

Check if an object accounts for all properties demanded by the schema.

store.allAccountedFor({
  title: 'bar',
  author: 'bin'
});

Transactions

.add(record)

Save a record or an array of records to the store. Also calls all registered adapters. Emits a change event when done.

store.add({
  title: 'Fatherly jokes',
  author: 'Tobi',
  pages: 12,
  chapters: [0]
});

.get()

Get all records from the store. Also calls all registered adapters.

store.get();

.update(record)

Update a record. Also calls all registered adapters. Emits a change event when done.

store.update({
  title: 'Fatherly jokes',
  author: 'Tobi',
  pages: 12
});

.remove(record)

Remove a record from the store. Also calls all registered adapters. Emits a change event when done.

store.remove({
  title: 'Fatherly jokes',
  author: 'Tobi',
  pages: 12
});

Persistance

.fetch([config])

Fetch records from the server over HTTP. Can be provided with optional HTTP headers. Emits a sync event when completed, else it emits an error event.

store.fetch({
  API_KEY: 'mysecretkey',
  ANOTHER_HEADER: 'some value'
});

License

MIT © Yoshua Wuyts