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

redux-saga-restart

v1.0.0

Published

Restart your failed sagas and report errors into logs

Downloads

3,915

Readme

react-redux-restart

CircleCI Maintainability Test Coverage

Don't let your sagas die just like that. Catch the errors, allow them to try again.

Example

import keepAlive from 'redux-saga-restart';
import myUndyingSaga from './myUndyingSaga';
import myMortalSaga from './myMortalSaga';

function* onEachError(next, error, saga) {
  yield put({ type: 'SAGA_ERROR' });
}

function* onFail(error, saga) {
  console.warn(`Your saga ${sagaName} will not be restarted anymore`);
  yield put({ type: 'FATAL_ERROR' });
}

const sagas = [
  myMortalSaga,
  keepAlive(myUndyingSaga, {
    onEachError,
    onFail,
  })
]

export default function* rootSaga() {
  yield all(sagas.map(saga => fork(saga)));
}

API

keepAlive(saga, options)

Pass any saga and options. When an error kills it, the keepAlive wrapper will restart it again until it runs out of attempts. If no error handler is passed, sagas will trigger warnings to the console.

{
  defaultBehavior = RESTART,
  disableWarnings = false,
  maxAttempts = 3,
  onEachError,
  onFail,
}

onFail(error, sagaName, attempts)

Execute any action when saga fails. It can be either a function or another saga.

import { put } from 'redux-saga/effects';
import keepAlive from 'redux-saga-restart';

function* onFail(error) {
  yield put({ type: 'FATAL_ERROR', error });
}

keepAlive(saga, {
  onFail,
});

onFail(error, sagaName, attempts)

Execute any action when saga is killed by error and decide if it is restarted or not. It can be either a function or another saga.

import { put } from 'redux-saga/effects';
import keepAlive, { FAIL, RESTART } from 'redux-saga-restart';

function* logEachError(next, error, sagaName) {
  logError(error);
}

function* killOnEachError(next, error) {
  yield put({ type: 'FATAL_ERROR', error });
  next(FAIL);
}

keepAlive(saga, {
  onEachError: killOnEachError,
  /* Including defaultBehavior despite this
     is its default value just to be obvious */
  defaultBehavior: RESTART,
});

maxAttempts

Configure maximum number of restart attempts.

import keepAlive from 'redux-saga-restart';
keepAlive(saga, {
  maxAttempts: 100,
});

Whitelist instead of blacklist

Library provides constants that shape the default behavior of the keepAlive function.

  • RESTART (the default) - Saga will be restarted unless told othwerwise
  • FAIL - Saga will not be restarted unless told otherwise.
import keepAlive from 'redux-saga-restart';
keepAlive(saga, {
  defaultBehavior: FAIL,
});