bitcore/lib/errors/build.js

50 lines
1.7 KiB
JavaScript

'use strict';
var _ = require('lodash');
var fs = require('fs');
var defineElement = function(fullName, baseClass, message) {
return fullName + ' = function() {\n' +
' this.message = ' + message + ';\n' +
' this.stack = this.message + \'\\n\' + (new Error()).stack;\n' +
'};\n' +
fullName + '.prototype = Object.create(' + baseClass + '.prototype);\n' +
fullName + '.prototype.name = "' + fullName + '";\n\n';
};
var traverseNode = function(baseClass, errorDefinition) {
var className = baseClass + '.' + errorDefinition.name;
var generated = defineElement(className, baseClass, errorDefinition.message);
if (errorDefinition.errors) {
generated += childDefinitions(className, errorDefinition.errors);
}
return generated;
};
/* jshint latedef: false */
var childDefinitions = function(parent, childDefinitions) {
var generated = '';
_.each(childDefinitions, function(childDefinition) {
generated += traverseNode(parent, childDefinition);
});
return generated;
};
/* jshint latedef: true */
var traverseRoot = function(errorsDefinition) {
var fullName = 'bitcore.Error';
var path = 'Error';
var generated = '\'use strict\';\n\n';
generated += '/* jshint maxlen: 300 */\n';
generated += '/* jshint quotmark: false */\n';
generated += '/* AUTOGENERATED FILE. DON\'T EDIT, MODIFY "lib/errors/spec.js" INSTEAD */\n\n';
generated += 'var bitcore = {};\n\n';
generated += defineElement(fullName, path, '\'Internal error\'');
generated += childDefinitions(fullName, errorsDefinition);
generated += 'module.exports = bitcore.Error;\n';
return generated;
};
var data = require('./spec');
fs.writeFileSync(__dirname + '/index.js', traverseRoot(data));