flocore-node/lib/utils.js
2017-08-10 11:23:28 -04:00

106 lines
2.1 KiB
JavaScript

'use strict';
var _ = require('lodash');
var constants = require('./constants');
var BN = require('bn.js');
var utils = {};
utils.isHeight = function(blockArg) {
return _.isNumber(blockArg) || (blockArg.length < 40 && /^[0-9]+$/.test(blockArg));
};
//start
utils.isAbsolutePath = require('path').isAbsolute;
if (!utils.isAbsolutePath) {
utils.isAbsolutePath = require('path-is-absolute');
}
//main
utils.parseParamsWithJSON = function(paramsArg) {
var params = paramsArg.map(function(paramArg) {
var param;
try {
param = JSON.parse(paramArg);
} catch(err) {
param = paramArg;
}
return param;
});
return params;
};
utils.getTerminalKey = function(startKey) {
if (!startKey || !Buffer.isBuffer(startKey)) {
return;
}
var bn = new BN(startKey);
var endBN = bn.iaddn(1);
return endBN.toBuffer();
};
utils.diffTime = function(time) {
var diff = process.hrtime(time);
return (diff[0] * 1E9 + diff[1])/(1E9 * 1.0);
};
utils.sendError = function(err, res) {
if (err.statusCode) {
res.status(err.statusCode).send(err.message);
} else {
console.error(err.stack);
res.status(503).send(err.message);
}
};
utils.encodeTip = function(tip, name) {
var key = Buffer.concat([ constants.DB_PREFIX,
new Buffer('tip-' + name, 'utf8') ]);
var heightBuf = new Buffer(4);
heightBuf.writeUInt32BE(tip.height);
var value = Buffer.concat([ heightBuf, new Buffer(tip.hash, 'hex') ]);
return { key: key, value: value };
};
utils.SimpleMap = function SimpleMap() {
var object = {};
var array = [];
this.size = 0;
this.length = 0;
this.hasNullItems = function() {
return array.length !== _.compact(array).length;
};
this.get = function (key) {
return array[object[key]];
};
this.set = function (key, value, pos) {
object[key] = array.length;
if (pos >= 0) {
array[pos] = value;
} else {
array.push(value);
}
this.size = array.length;
this.length = array.length;
};
this.getIndex = function (index) {
return array[index];
};
this.getLastIndex = function () {
return array[array.length - 1];
};
};
module.exports = utils;