All files / api-build/utils handler-utils.js

48.84% Statements 21/43
72.22% Branches 13/18
22.22% Functions 2/9
54.05% Lines 20/37
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 791x   1x   2x                         1x   4x 4x   4x     4x   4x   4x 1x 1x     4x               4x 2x       2x 2x         4x     1x                                         1x  
const http = require('http');
 
module.exports.success = callback => response => callback(null, response);
 
module.exports.error = (event, callback) => (name, props) => {
  if (name instanceof Error) {
    return callback(JSON.stringify(module.exports.parseErrors(event, name)), null);
  }
 
  const e = new Error();
  e.name = name;
  e.handled = true;
  e.props = props;
 
  return callback(JSON.stringify(module.exports.parseErrors(event, e)), null);
};
 
module.exports.parseErrors = (event, error) => {
  let compiledErrors;
  try {
    compiledErrors = require('./_errors'); // eslint-disable-line import/no-unresolved
  } catch (e) {
    compiledErrors = event.errors || { [event.name]: {} };
  }
 
  const errors = compiledErrors[event.name];
 
  const e = {};
  // Normallize api.error('message')
  if (!errors[error.name] && error.handled) {
    e.message = error.name;
    e.name = 'Error';
  }
 
  const outError = {
    name: e.name || error.name,
    message: e.message || error.message,
    handled: error.handled || false,
    data: event.data,
  };
 
  // Parse if error message is a template
  if (errors[error.name]) {
    try {
      // We compile the error with lodash.template in build-docs so that we don't
      // to have it installed in lambda. This is a hack to replace the string and
      // make the error message nice based on the docs. Eval isn't great, but it works
      const template = errors[error.name];
      outError.message = eval(`(${template})`)(error.props); // eslint-disable-line no-eval
    } catch (err) {
      outError.message = '';
    }
  }
  return outError;
};
 
module.exports.log = function log() {
  const args = Array.prototype.slice.call(arguments);
  const logKey = process.env.logKey;
  if (logKey) {
    const options = {
      hostname: 'api.readme.build',
      port: 80,
      path: '/logs/console',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
    };
    const req = http.request(options);
    const data = { logKey, log };
    req.write(`${data.toString()}`);
    req.end();
  }
  console.log.apply(undefined, args);
};
 
module.exports.getSecret = secrets => secret => secrets.find(s => s.key === secret).value;