1 | const buildError = (message, opts) => {
|
2 | const error = new Error(message);
|
3 | for (const key in opts) {
|
4 | error[key] = opts[key] instanceof Function ? opts[key](opts) : opts[key];
|
5 | }
|
6 | return error;
|
7 | };
|
8 |
|
9 | const singleSlash = str => '/' + str.split('/').filter(one => one).join('/');
|
10 |
|
11 | const ErrorFactory = function (namespace = '', defaults = {}) {
|
12 | defaults.namespace = defaults.namespace || namespace;
|
13 |
|
14 | return function ErrorInstance (code = '', options = {}) {
|
15 | options = Object.assign({}, ErrorFactory.options, defaults, options);
|
16 | options.code = singleSlash(options.namespace + '/' + code);
|
17 | options.id = options.code.toLowerCase().replace(/[^\w]+/g, '-').replace(/^-/, '');
|
18 | options.message = ErrorInstance[code];
|
19 | return buildError(options.message, options);
|
20 | };
|
21 | };
|
22 |
|
23 | ErrorFactory.options = { status: 500 };
|
24 |
|
25 | module.exports = ErrorFactory;
|