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

https://github.com/clarus/redux-ship-logger

A logger for Redux Ship
https://github.com/clarus/redux-ship-logger

Last synced: about 2 months ago
JSON representation

A logger for Redux Ship

Awesome Lists containing this project

README

        

# redux-ship-logger
> A logger for the [Redux Ship](https://github.com/clarus/redux-ship) effect system

Screenshot

## Getting started
Redux Ship Logger is useful to debug projects written with the [Redux Ship](https://github.com/clarus/redux-ship) effect system.
```
npm i redux-ship-logger
```

Redux Ship Logger provides two functions, one to log the commits and patches (the model part) and one to log the asynchronous actions (the controller part).

## API
* [`logCommit`](#logCommit)
* [`logControl`](#logControl)

### `logCommit`
```js
(
applyCommit: (state: State, commit: Commit) => Patch
) => ReduxMiddleware
```

Returns a Redux middleware to log the *commits* and the *patches* sent to Redux.

* `applyCommit` the function computing the patch associated to the current commit

#### Example

```js
// store.js
import {applyMiddleware, createStore} from 'redux';
import {logCommit} from 'redux-ship-logger';
import * as Controller from './controller';
import * as Model from './model';

const middlewares = [
logCommit(Controller.applyCommit),
];

function reduce(state, commit) {
return Model.reduce(state, Controller.applyCommit(state, commit));
}

export default createStore(reduce, Model.initialState, applyMiddleware(...middlewares));

```

### `logControl`
```js
(
control: (action: Action) => Ship
) => (action: Action) => Ship
```

Returns a controller with the same behavior as `control` but logging its snapshots. Also logs a stringified JSON of the snapshot ready to be used in tests with `Ship.simulate`.

* `control` the controller to log

#### Example
```js
// index.js
import * as Ship from 'redux-ship';
import {logControl} from 'redux-ship-logger';
import store from './store';
import * as Controller from './controller';
import * as Effect from './effect';

function dispatch(action: Controller.Action): void {
Ship.run(Effect.run, store, logControl(Controller.control)(action));
}
```