UNPKG

rollbar

Version:

Effortlessly track and debug errors in your JavaScript applications with Rollbar. This package includes advanced error tracking features and an intuitive interface to help you identify and fix issues more quickly.

123 lines (108 loc) 4.08 kB
var _ = require('./utility'); /* * Notifier - the internal object responsible for delegating between the client exposed API, the * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the * queue which handles the communcation with the Rollbar API servers. * * @param queue - an object that conforms to the interface: addItem(item, callback) * @param options - an object representing the options to be set for this notifier, this should have * any defaults already set by the caller */ function Notifier(queue, options) { this.queue = queue; this.options = options; this.transforms = []; this.diagnostic = {}; } /* * configure - updates the options for this notifier with the passed in object * * @param options - an object which gets merged with the current options set on this notifier * @returns this */ Notifier.prototype.configure = function (options) { this.queue && this.queue.configure(options); var oldOptions = this.options; this.options = _.merge(oldOptions, options); return this; }; /* * addTransform - adds a transform onto the end of the queue of transforms for this notifier * * @param transform - a function which takes three arguments: * * item: An Object representing the data to eventually be sent to Rollbar * * options: The current value of the options for this notifier * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this * callback with a null value for error if it wants the processing chain to continue, otherwise * with an error to terminate the processing. The item should be the updated item after this * transform is finished modifying it. */ Notifier.prototype.addTransform = function (transform) { if (_.isFunction(transform)) { this.transforms.push(transform); } return this; }; /* * log - the internal log function which applies the configured transforms and then pushes onto the * queue to be sent to the backend. * * @param item - An object with the following structure: * message [String] - An optional string to be sent to rollbar * error [Error] - An optional error * * @param callback - A function of type function(err, resp) which will be called with exactly one * null argument and one non-null argument. The callback will be called once, either during the * transform stage if an error occurs inside a transform, or in response to the communication with * the backend. The second argument will be the response from the backend in case of success. */ Notifier.prototype.log = function (item, callback) { if (!callback || !_.isFunction(callback)) { callback = function () {}; } if (!this.options.enabled) { return callback(new Error('Rollbar is not enabled')); } this.queue.addPendingItem(item); var originalError = item.err; this._applyTransforms( item, function (err, i) { if (err) { this.queue.removePendingItem(item); return callback(err, null); } this.queue.addItem(i, callback, originalError, item); }.bind(this), ); }; /* Internal */ /* * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See * `addTransform` for more information. * * @param item - An item to be transformed * @param callback - A function of type function(err, item) which will be called with a non-null * error and a null item in the case of a transform failure, or a null error and non-null item after * all transforms have been applied. */ Notifier.prototype._applyTransforms = function (item, callback) { var transformIndex = -1; var transformsLength = this.transforms.length; var transforms = this.transforms; var options = this.options; var cb = function (err, i) { if (err) { callback(err, null); return; } transformIndex++; if (transformIndex === transformsLength) { callback(null, i); return; } transforms[transformIndex](i, options, cb); }; cb(null, item); }; module.exports = Notifier;