Skip to content
Permalink
9bfb9ba527
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
53 lines (45 sloc) 1.6 KB
"use strict";
// cache a reference to setTimeout, so that our reference won't be stubbed out
// when using fake timers and errors will still get logged
// https://github.com/cjohansen/Sinon.JS/issues/381
var realSetTimeout = setTimeout;
function configureLogger(config) {
// eslint-disable-next-line no-param-reassign
config = config || {};
// Function which prints errors.
if (!config.hasOwnProperty("logger")) {
// eslint-disable-next-line no-empty-function
config.logger = function() {};
}
// When set to true, any errors logged will be thrown immediately;
// If set to false, the errors will be thrown in separate execution frame.
if (!config.hasOwnProperty("useImmediateExceptions")) {
config.useImmediateExceptions = true;
}
// wrap realSetTimeout with something we can stub in tests
if (!config.hasOwnProperty("setTimeout")) {
config.setTimeout = realSetTimeout;
}
return function logError(label, e) {
var msg = `${label} threw exception: `;
var err = {
name: e.name || label,
message: e.message || e.toString(),
stack: e.stack
};
function throwLoggedError() {
err.message = msg + err.message;
throw err;
}
config.logger(`${msg}[${err.name}] ${err.message}`);
if (err.stack) {
config.logger(err.stack);
}
if (config.useImmediateExceptions) {
throwLoggedError();
} else {
config.setTimeout(throwLoggedError, 0);
}
};
}
module.exports = configureLogger;