Skip to content

Observable and Immutable State Manager Base On JSONPath For Javascript Applications

License

Notifications You must be signed in to change notification settings

shellsong/realloc

Repository files navigation

Realloc

build status Coverage Status npm version npm downloads

Installation

npm i -S realloc

Getting Started

Tutorial

import { createState } from 'realloc'
//create a counter store
const {
  getState,
  createAction,
  subscribe
} = createState({
  count:0
})
// create a increment action for the store
const incrementAction = createAction('$.count', (currentCount) => currentCount + 1)
// create a decrement action for the store
const decrementAction = createAction('$.count', (currentCount) => currentCount - 1)
// set a subscriber for the store
const unsubscribe = subscribe((nextState, prevState) => {
  console.log("log: ", nextState, prevState)
})
incrementAction() // call the increment action
// state of the store will change,
// => log: {count:1} {count:0}
incrementAction() // call the increment action again
// state of the store will change again
// => log: {count:2} {count:1}
decrementAction() // call the decrement action
// => log: {count:1} {count:2}

// create a action that increment with params
const incrementNumAction = createAction('$.count', (num, currentCount) => currentCount + num)

incrementNumAction(5)
// => log: {count:6} {count:1}

Using JSONPath

import { createState } from 'realloc'
const initialState = {
  "store": {
    "book": [{
      "category": "reference",
      "author": "Nigel Rees",
      "title": "Sayings of the Century",
      "price": 8.95
    }, {
      "category": "fiction",
      "author": "Evelyn Waugh",
      "title": "Sword of Honour",
      "price": 12.99
    }, {
      "category": "fiction",
      "author": "Herman Melville",
      "title": "Moby Dick",
      "isbn": "0-553-21311-3",
      "price": 8.99
    }, {
      "category": "fiction",
      "author": "J. R. R. Tolkien",
      "title": "The Lord of the Rings",
      "isbn": "0-395-19395-8",
      "price": 22.99
    }],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
const {
  getState,
  createAction,
  createGetter,
  subscribe
} = createState(initialState)
const unsubscribe = subscribe((nextState, prevState) => {
  console.log("log: ", nextState, prevState)
})
const getBookTitlesByPriceGTTen = createGetter('$.store.book[?(@.price > 10)].title')

getBookByPriceGTTen()
// => ["Sword of Honour", "The Lord of the Rings"]

const updateBookCategoryWithPrice = createAction(
  '$.store.book[?(@.price > {price})].category',
  (payload, currentCategory) => payload.text + currentCategory
)
// call the update action
updateBookCategoryWithPrice({
  price:10,
  text:'famous '
})
getState().store.book.map(book => book.category)
// => ["reference", "famous fiction", "fiction", "famous fiction"]

About

Observable and Immutable State Manager Base On JSONPath For Javascript Applications

Resources

License

Stars

Watchers

Forks

Packages

No packages published