An open API service indexing awesome lists of open source software.

https://github.com/rahazad/graph-reducer.js

Something like lodash.merge() (a recursive version of Object.assign()) that specially designed for roudex
https://github.com/rahazad/graph-reducer.js

deep-assign deep-object-assign graph javascript js merge object objects payload recursive-assign recursive-object-assign reucer roudex state state-reducer

Last synced: 11 months ago
JSON representation

Something like lodash.merge() (a recursive version of Object.assign()) that specially designed for roudex

Awesome Lists containing this project

README

          

# Graph-Reducer

> **Something like [lodash.merge()](https://lodash.com/docs/4.17.15#merge) *(a recursive version of [`Object.assign()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign))* that specially designed for [roudex](https://github.com/Rahazad/roudex).**
>
> It additionally supports functions (in `payload(s)` argument(s)) to make it possible to transform properties based on their previous states/values.
>
> It also *deeply* compares the source state (source object) with the primary result (`newState`), during its original process and returns an additional value (`noTransform`) that shows the result of this comparison.



npm (scoped)


install size


npm




Dependencies Status


devDependencies Status




GitHub


GitHub forks


GitHub stars

## Installation

```bash
npm i @rahazad/graph-reducer
```

or using `yarn`:

```bash
yarn add @rahazad/graph-reducer
```

## Usage

```javascript
import graphReducer from '@rahazad/graph-reducer'

const srcState = {
a: 'a',
n: 10,
v: {c: 'c'}
}

const payloads = [
{
a: 'A',
v: {c: 'C'}
},
{
n: n => n * 2
},
]

const {newState} = graphReducer(srcState, ...payloads)

assert.deepStrictEqual(newState, { // import assert from 'assert' // https://nodejs.org/api/assert.html
a: 'A',
n: 20,
v: {c: 'C'}
})
```

## License

MIT © [Mir-Ismaili](https://github.com/mirismaili)