Socket
Socket
Sign inDemoInstall

boom

Package Overview
Dependencies
1
Maintainers
1
Versions
69
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.2.1 to 0.3.0

150

lib/index.js

@@ -12,31 +12,47 @@ // Load modules

/*
Boom(new Error)
Boom(code, message)
*/
exports = module.exports = internals.Error = function (code, message) {
exports = module.exports = internals.Boom = function () {
var self = this;
Hoek.assert(this.constructor === internals.Error, 'Error must be instantiated using new');
Hoek.assert(code instanceof Error || (!isNaN(parseFloat(code)) && isFinite(code) && code >= 400), 'code must be an Error or a number (400+)');
Hoek.assert(this.constructor === internals.Boom, 'Error must be instantiated using new');
Error.call(this);
if (code instanceof Error) {
for (var d in code) {
if (code.hasOwnProperty(d)) {
this[d] = code[d];
}
}
this.response = {
code: 0,
payload: {},
headers: {}
// type: 'content-type'
};
this.code = this.code || 500;
this.name = code.name;
this.message = code.message || message;
if (code.message && message) {
this.info = message;
if (arguments[0] instanceof Error) {
// Error
var error = arguments[0];
this.data = error;
this.response.code = error.code || 500;
if (error.message) {
this.message = error.message
}
this.toResponse = code.toResponse; // Required if toRepsonse is a prototype function
}
else {
this.code = code;
this.message = message;
// code, message
var code = arguments[0];
var message = arguments[1];
Hoek.assert(!isNaN(parseFloat(code)) && isFinite(code) && code >= 400, 'First argument must be a number (400+)');
this.response.code = code;
if (message) {
this.message = message
}
}

@@ -46,37 +62,17 @@

if (!this.toResponse ||
typeof this.toResponse !== 'function') {
this.reformat();
this.toResponse = internals.toResponse;
}
return this;
};
NodeUtil.inherits(internals.Error, Error);
NodeUtil.inherits(internals.Boom, Error);
internals.toResponse = function () {
internals.Boom.prototype.reformat = function () {
// { code, payload, type, headers }
var response = {
code: this.code,
payload: {
error: Http.STATUS_CODES[this.code] || 'Unknown',
code: this.code,
message: this.message
}
};
for (var d in this) {
if (['error', 'code', 'message'].indexOf(d) === -1 &&
this.hasOwnProperty(d) &&
typeof this[d] !== 'function') {
response.payload[d] = this[d];
}
this.response.payload.code = this.response.code;
this.response.payload.error = Http.STATUS_CODES[this.response.code] || 'Unknown';
if (this.message) {
this.response.payload.message = this.message;
}
return response;
};

@@ -87,11 +83,11 @@

internals.Error.badRequest = function (message) {
internals.Boom.badRequest = function (message) {
return new internals.Error(400, message);
return new internals.Boom(400, message);
};
internals.Error.unauthorized = function (error, scheme, attributes) { // Or function (error, wwwAuthenticate[])
internals.Boom.unauthorized = function (error, scheme, attributes) { // Or function (error, wwwAuthenticate[])
var err = new internals.Error(401, error);
var err = new internals.Boom(401, error);

@@ -150,9 +146,4 @@ if (!scheme) {

err.toResponse = function () {
err.response.headers['WWW-Authenticate'] = wwwAuthenticate;
var response = internals.toResponse.call(this);
response.headers = { 'WWW-Authenticate': wwwAuthenticate };
return response;
};
return err;

@@ -162,39 +153,33 @@ };

internals.Error.clientTimeout = function (message) {
internals.Boom.clientTimeout = function (message) {
return new internals.Error(408, message);
return new internals.Boom(408, message);
};
internals.Error.serverTimeout = function (message) {
internals.Boom.serverTimeout = function (message) {
return new internals.Error(503, message);
return new internals.Boom(503, message);
};
internals.Error.forbidden = function (message) {
internals.Boom.forbidden = function (message) {
return new internals.Error(403, message);
return new internals.Boom(403, message);
};
internals.Error.notFound = function (message) {
internals.Boom.notFound = function (message) {
return new internals.Error(404, message);
return new internals.Boom(404, message);
};
internals.Error.internal = function (message, data) {
internals.Boom.internal = function (message, data) {
var err = new internals.Error(500, message);
var err = new internals.Boom(500, message);
err.trace = Hoek.displayStack(1);
err.data = data;
err.response.payload.message = 'An internal server error occurred'; // Hide actual error from user
err.toResponse = function () {
var response = internals.toResponse.call(this);
response.payload.message = 'An internal server error occurred'; // Hide actual error from user
return response;
};
return err;

@@ -204,7 +189,7 @@ };

internals.Error.passThrough = function (code, payload, contentType, headers) {
internals.Boom.passThrough = function (code, payload, contentType, headers) {
var err = new internals.Error(500, 'Pass-through'); // 500 code is only used internally and is not exposed when sent
var err = new internals.Boom(500, 'Pass-through'); // 500 code is only used to initialize
err.passThrough = {
err.data = {
code: code,

@@ -215,14 +200,7 @@ payload: payload,

err.toResponse = function () {
err.response.code = code;
err.response.type = contentType;
err.response.headers = headers;
err.response.payload = payload;
var response = {
code: code,
payload: payload,
type: contentType,
headers: headers
};
return response;
};
return err;

@@ -229,0 +207,0 @@ };

{
"name": "boom",
"description": "HTTP-friendly error objects",
"version": "0.2.1",
"version": "0.3.0",
"author": "Eran Hammer <eran@hueniverse.com> (http://hueniverse.com)",

@@ -6,0 +6,0 @@ "contributors": [],

@@ -19,20 +19,17 @@ // Load modules

it('returns an error with info when constructed using another error and message', function (done) {
it('returns an error with info when constructed using another error', function (done) {
var error = new Error('inner');
var error = new Error('ka-boom');
error.xyz = 123;
var err = new Boom(error, 'outter');
expect(err.message).to.equal('inner');
expect(err.info).to.equal('outter');
expect(err.xyz).to.equal(123);
expect(err.toResponse()).to.deep.equal({
var err = new Boom(error);
expect(err.data.xyz).to.equal(123);
expect(err.message).to.equal('ka-boom');
expect(err.response).to.deep.equal({
code: 500,
payload: {
code: 500,
error: 'Internal Server Error',
code: 500,
message: 'inner',
xyz: 123,
name: 'Error',
info: 'outter'
}
message: 'ka-boom'
},
headers: {}
});

@@ -46,3 +43,3 @@ done();

expect(Boom.badRequest().code).to.equal(400);
expect(Boom.badRequest().response.code).to.equal(400);
done();

@@ -63,4 +60,4 @@ });

var err = Boom.unauthorized();
expect(err.code).to.equal(401);
expect(err.toResponse().headers).to.not.exist;
expect(err.response.code).to.equal(401);
expect(err.response.headers).to.deep.equal({});
done();

@@ -78,4 +75,4 @@ });

var err = Boom.unauthorized('boom', 'Test');
expect(err.code).to.equal(401);
expect(err.toResponse().headers['WWW-Authenticate']).to.equal('Test error="boom"');
expect(err.response.code).to.equal(401);
expect(err.response.headers['WWW-Authenticate']).to.equal('Test error="boom"');
done();

@@ -87,4 +84,4 @@ });

var err = Boom.unauthorized('boom', 'Test', { a: 1, b: 'something', c: null, d: 0 });
expect(err.code).to.equal(401);
expect(err.toResponse().headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0", error="boom"');
expect(err.response.code).to.equal(401);
expect(err.response.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0", error="boom"');
done();

@@ -110,3 +107,3 @@ });

var err = Boom.unauthorized('message', ['Basic', 'Example e="1"', 'Another x="3", y="4"']);
expect(err.toResponse().headers['WWW-Authenticate']).to.equal('Basic, Example e="1", Another x="3", y="4"');
expect(err.response.headers['WWW-Authenticate']).to.equal('Basic, Example e="1", Another x="3", y="4"');
done();

@@ -120,3 +117,3 @@ });

expect(Boom.clientTimeout().code).to.equal(408);
expect(Boom.clientTimeout().response.code).to.equal(408);
done();

@@ -136,3 +133,3 @@ });

expect(Boom.serverTimeout().code).to.equal(503);
expect(Boom.serverTimeout().response.code).to.equal(503);
done();

@@ -152,3 +149,3 @@ });

expect(Boom.forbidden().code).to.equal(403);
expect(Boom.forbidden().response.code).to.equal(403);
done();

@@ -168,3 +165,3 @@ });

expect(Boom.notFound().code).to.equal(404);
expect(Boom.notFound().response.code).to.equal(404);
done();

@@ -184,3 +181,3 @@ });

expect(Boom.internal().code).to.equal(500);
expect(Boom.internal().response.code).to.equal(500);
done();

@@ -193,3 +190,3 @@ });

expect(err.message).to.equal('my message');
expect(err.toResponse().payload.message).to.equal('An internal server error occurred');
expect(err.response.payload.message).to.equal('An internal server error occurred');
done();

@@ -210,9 +207,9 @@ });

var err = Boom.passThrough(499, { a: 1 }, 'application/text', { 'X-Test': 'Boom' });
expect(err.code).to.equal(500);
expect(err.response.code).to.equal(499);
expect(err.message).to.equal('Pass-through');
expect(err.toResponse()).to.deep.equal({
expect(err.response).to.deep.equal({
code: 499,
payload: { a: 1 },
type: 'application/text',
headers: { 'X-Test': 'Boom' }
headers: { 'X-Test': 'Boom' },
type: 'application/text'
});

@@ -219,0 +216,0 @@ done();

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc