@dashevo/dashcore-lib
Version:
A pure and powerful JavaScript Dash library.
73 lines (61 loc) • 2.04 kB
JavaScript
/* eslint-disable */
// TODO: Remove previous line and work through linting issues at next edit
;
var _ = require('lodash');
function format(message, args) {
return message
.replace('{0}', args[0])
.replace('{1}', args[1])
.replace('{2}', args[2]);
}
var traverseNode = function (parent, errorDefinition) {
var NodeError = function () {
if (_.isString(errorDefinition.message)) {
this.message = format(errorDefinition.message, arguments);
} else if (_.isFunction(errorDefinition.message)) {
this.message = errorDefinition.message.apply(null, arguments);
} else {
throw new Error('Invalid error definition for ' + errorDefinition.name);
}
this.stack = this.message + '\n' + new Error().stack;
};
NodeError.prototype = Object.create(parent.prototype);
NodeError.prototype.name = parent.prototype.name + errorDefinition.name;
parent[errorDefinition.name] = NodeError;
if (errorDefinition.errors) {
childDefinitions(NodeError, errorDefinition.errors);
}
return NodeError;
};
/* jshint latedef: false */
var childDefinitions = function (parent, childDefinitions) {
_.each(childDefinitions, function (childDefinition) {
traverseNode(parent, childDefinition);
});
};
/* jshint latedef: true */
var traverseRoot = function (parent, errorsDefinition) {
childDefinitions(parent, errorsDefinition);
return parent;
};
/**
* @class bitcore
*/
var bitcore = {};
/**
* @constructor
*/
bitcore.Error = function () {
this.message = 'Internal error';
this.stack = this.message + '\n' + new Error().stack;
};
bitcore.Error.prototype = Object.create(Error.prototype);
bitcore.Error.prototype.name = 'bitcore.Error';
var data = require('./spec');
traverseRoot(bitcore.Error, data);
module.exports = bitcore.Error;
module.exports.extend = function (spec) {
return traverseNode(bitcore.Error, spec);
};
module.exports.WrongOutPointError = require('./WrongOutPointError');
module.exports.WrongPublicKeyHashError = require('./WrongPublicKeyHashError');