[READ-ONLY] Mirror of https://github.com/haydn/json-api-store. An isomorphic JavaScript library that acts as an in memory data store for JSON API data. particlesystem.com/json-api-store
json-api
JavaScript 86%
HTML 12%
CSS 1%
Shell <1%
<1%

README.md

JSON API Store Build Status NPM Version bitHound Score #

An isomorphic JavaScript library that acts as an in memory data store for JSON API data. Changes are broadcast using RxJS. Built to work with React.

Installing #

NPM #

npm i json-api-store

Bower #

bower i json-api-store

Download #

To use directly in the browser you can grab the store.prod.js file.

Usage #

Browser #

At the moment the primary use can for JSON API Store is in the browser:


// Create a new store instance.
var adapter = new Store.AjaxAdapter({ base: "/api/v1" });
var store = new Store(adapter);

// Define the "categories" type.
store.define([ "categories", "category" ], {
  title: Store.attr(),
  products: Store.hasMany()
});

// Define the "products" type.
store.define([ "products", "product" ], {
  title: Store.attr(),
  category: Store.hasOne()
});

// Subscribe to events using RxJS.
store.observable.subscribe(function (event) {
  console.log(event.name, event.type, event.id, event.resource);
});

// Load all the products.
store.loadAll("products", { include: "category" }).subscribe(function (products) {

  products.length; // 1
  products[0].id; // "1"
  products[0].title; // "Example Book"
  products[0].category.id; // "1"
  products[0].category.title; // "Books"

  products[0] === store.find("products", "1"); // true
  products[0].category === store.find("categories", "1"); // true

});

Node #

You can also use JSON API Store in a Node.js environment (currently, there aren't any adapters that work in a Node.js):

NOTE: Without an adapter the CLUD methods (create, load, update and destroy) cannot be used.


var Store = require("json-api-store");

var store = new Store();

store.define([ "categories", "category" ], {
  title: Store.attr(),
  products: Store.hasMany()
});

store.define([ "products", "product" ], {
  title: Store.attr(),
  category: Store.hasOne()
});

store.add({
  type: "products",
  id: "1",
  attributes: {
    title: "Example Product"
  },
  relationships: {
    category: {
      data: {
        type: "categories",
        id: "1"
      }
    }
  }
});

store.add({
  type: "categories",
  id: "1",
  attributes: {
    title: "Example Category"
  }
});

store.find("products", "1").category.title; // "Example Category"

Documentation #

Documentation is available on the website:

http://particlesystem.com/json-api-store/

Changelog #

A changelog is available on the GitHub repo:

https://github.com/haydn/json-api-store/releases