2021-12-03 17:58:48 +01:00

98 lines
2.5 KiB
JavaScript

// Copyright 2012 Mark Cavage, Inc. All rights reserved.
'use strict';
var util = require('util');
var _ = require('lodash');
var RestError = require('./baseClasses/RestError');
//------------------------------------------------------------------------------
// local global vars
//------------------------------------------------------------------------------
var CODES = {
BadDigest: 400,
BadMethod: 405,
ConnectTimeout: 408,
Internal: 500,
InvalidArgument: 409,
InvalidContent: 400,
InvalidCredentials: 401,
InvalidHeader: 400,
InvalidVersion: 400,
MissingParameter: 409,
NotAuthorized: 403,
RequestExpired: 400,
RequestThrottled: 429,
ResourceNotFound: 404,
WrongAccept: 406
};
var restErrors = _.reduce(CODES, function(acc, statusCode, errorCode) {
// append Error to the end of the name if it doesn't already end with it.
// this becomes the name of the constructor
var name = errorCode + 'Error';
// this is a dynamic constructor for an error message.
// arguments are variadic. constructor fn name must be anonymous.
/**
* Variadic signature, first two are special to Restify, using a options
* obj.
* 1) new [Dynamic]Error(anotherErr, {...});
* 2) new [Dynamic]Error({...});
* Last one is a straight pass through to WError
* 3) new [Dynamic]Error('my special error message');
* @public
* @class
*/
acc[name] = function() {
// call super
RestError.apply(this, arguments);
};
util.inherits(acc[name], RestError);
/**
* assign non-standard display name property on the CONSTRUCTOR (not
* prototype), which is supported by all VMs. useful for stack trace
* output.
* @type {String}
*/
acc[name].displayName = name;
/**
* the name of the error, used in the stack trace output
* @type {String}
*/
acc[name].prototype.name = name;
/**
* assign a default status code based on core http module.
* users can override this if they want to. HttpError constructor
* will handle overriding at the instance level.
* @type {Number}
*/
acc[name].prototype.statusCode = statusCode;
/**
* the default rest code. i.e., a BadDigestError has a restCode of
* 'BadDigest'. it is basically the key for the lookup in the CODES
* mapping at the top of the file.
* @type {String}
*/
acc[name].prototype.restCode = errorCode;
return acc;
}, {});
module.exports = restErrors;