All files / src/domain/log buildLogToRaven.js

100% Statements 12/12
100% Branches 12/12
100% Functions 5/5
100% Lines 10/10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29        113x 23x 18x 16x     2x       90x             22x 22x 2x     20x    
import Raven from 'raven-js';
import { sprintf } from 'sprintf-js';
 
export default function buildLogToRaven(level) {
  if (level === 'error') {
    return (...args) => {
      if (args.length === 1 && args[0] instanceof Error) {
        return Raven.captureException(args[0], { level });
      }
 
      return Raven.captureMessage(buildErrorMessage(...args), { level });
    };
  }
 
  return (...args) => Raven.captureBreadcrumb({
    message: buildErrorMessage(...args),
    level: level === 'warn' ? level : 'info',
  });
}
 
function buildErrorMessage(...args) {
  const parsedArgs = args.map((item) => (item instanceof Error ? item.stack : item));
  if (/%[bcdieufgosxXj]( |$)/.test(args[0])) {
    return sprintf(...parsedArgs);
  }
 
  return parsedArgs.join(' ');
}