UNPKG

raven-for-redux

Version:

Middleware for propagating Redux state/actions to Sentry via Raven.

71 lines (63 loc) 2.53 kB
"use strict"; var identity = function identity(x) { return x; }; var getUndefined = function getUndefined() {}; var getType = function getType(action) { return action.type; }; var filter = function filter() { return true; }; function createRavenMiddleware(Raven) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; // TODO: Validate options. var _options$breadcrumbDa = options.breadcrumbDataFromAction, breadcrumbDataFromAction = _options$breadcrumbDa === undefined ? getUndefined : _options$breadcrumbDa, _options$breadcrumbMe = options.breadcrumbMessageFromAction, breadcrumbMessageFromAction = _options$breadcrumbMe === undefined ? getType : _options$breadcrumbMe, _options$actionTransf = options.actionTransformer, actionTransformer = _options$actionTransf === undefined ? identity : _options$actionTransf, _options$stateTransfo = options.stateTransformer, stateTransformer = _options$stateTransfo === undefined ? identity : _options$stateTransfo, _options$breadcrumbCa = options.breadcrumbCategory, breadcrumbCategory = _options$breadcrumbCa === undefined ? "redux-action" : _options$breadcrumbCa, _options$filterBreadc = options.filterBreadcrumbActions, filterBreadcrumbActions = _options$filterBreadc === undefined ? filter : _options$filterBreadc, getUserContext = options.getUserContext, getTags = options.getTags; return function (store) { var lastAction = void 0; Raven.setDataCallback(function (data, original) { var state = store.getState(); var reduxExtra = { lastAction: actionTransformer(lastAction), state: stateTransformer(state) }; data.extra = Object.assign(reduxExtra, data.extra); if (getUserContext) { data.user = getUserContext(state); } if (getTags) { data.tags = getTags(state); } return original ? original(data) : data; }); return function (next) { return function (action) { // Log the action taken to Raven so that we have narrative context in our // error report. if (filterBreadcrumbActions(action)) { Raven.captureBreadcrumb({ category: breadcrumbCategory, message: breadcrumbMessageFromAction(action), data: breadcrumbDataFromAction(action) }); } lastAction = action; return next(action); }; }; }; } module.exports = createRavenMiddleware;