@waves/bignumber
Version:
Waves Library for work with Bignumber in javascript
253 lines • 10.1 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BigNumber = void 0;
var bignumber_js_1 = __importDefault(require("bignumber.js"));
var Config_1 = require("./Config");
var BigNumber = /** @class */ (function () {
function BigNumber(long) {
if (typeof long === 'object' && BigNumber.isBigNumber(long)) {
this.bn = long.bn.plus(0);
}
else {
this.bn = BigNumber.toBigNumberJs(long);
}
}
BigNumber.prototype.clone = function () {
return new BigNumber(this);
};
BigNumber.prototype.add = function (long) {
return new BigNumber(this.bn.plus(BigNumber.toBigNumberJs(long)));
};
BigNumber.prototype.sub = function (long) {
return new BigNumber(this.bn.minus(BigNumber.toBigNumberJs(long)));
};
BigNumber.prototype.mul = function (long) {
return new BigNumber(this.bn.times(BigNumber.toBigNumberJs(long)));
};
BigNumber.prototype.div = function (long) {
return new BigNumber(this.bn.div(BigNumber.toBigNumberJs(long)));
};
BigNumber.prototype.pow = function (exp) {
return new BigNumber(this.bn.pow(BigNumber.toBigNumberJs(exp)));
};
BigNumber.prototype.sqrt = function () {
return new BigNumber(this.bn.sqrt());
};
BigNumber.prototype.abs = function () {
return new BigNumber(this.bn.abs());
};
BigNumber.prototype.mod = function (divider) {
return new BigNumber(this.bn.mod(BigNumber.toBigNumberJs(divider)));
};
BigNumber.prototype.roundTo = function (decimals, mode) {
if (decimals === void 0) { decimals = 0; }
if (mode === void 0) { mode = 4 /* ROUND_HALF_UP */; }
return new BigNumber(this.bn.dp(decimals || 0, mode));
};
BigNumber.prototype.eq = function (long) {
return this.bn.eq(BigNumber.toBigNumberJs(long));
};
BigNumber.prototype.lt = function (long) {
return this.bn.lt(BigNumber.toBigNumberJs(long));
};
BigNumber.prototype.gt = function (long) {
return this.bn.gt(BigNumber.toBigNumberJs(long));
};
BigNumber.prototype.lte = function (long) {
return this.bn.lte(BigNumber.toBigNumberJs(long));
};
BigNumber.prototype.gte = function (long) {
return this.bn.gte(BigNumber.toBigNumberJs(long));
};
BigNumber.prototype.isNaN = function () {
return this.bn.isNaN();
};
BigNumber.prototype.isFinite = function () {
return this.bn.isFinite();
};
BigNumber.prototype.isZero = function () {
return this.eq(0);
};
BigNumber.prototype.isPositive = function () {
return this.gt(0);
};
BigNumber.prototype.isNegative = function () {
return this.lt(0);
};
BigNumber.prototype.isInt = function () {
return this.bn.isInteger();
};
BigNumber.prototype.getDecimalsCount = function () {
return this.bn.dp();
};
BigNumber.prototype.isEven = function () {
return this.mod(2).eq(0);
};
BigNumber.prototype.isOdd = function () {
return !this.isEven();
};
BigNumber.prototype.isInSignedRange = function () {
return (this.gte(BigNumber.MIN_VALUE) && this.lte(BigNumber.MAX_VALUE));
};
BigNumber.prototype.isInUnsignedRange = function () {
return (this.gte(BigNumber.MIN_UNSIGNED_VALUE) && this.lte(BigNumber.MAX_UNSIGNED_VALUE));
};
BigNumber.prototype.toFormat = function (decimals, roundMode, format) {
return this.bn.toFormat(decimals, roundMode, format);
};
BigNumber.prototype.toFixed = function (decimals, roundMode) {
if (decimals == null) {
return this.bn.toFixed();
}
else {
return this.bn.toFixed(decimals, roundMode);
}
};
BigNumber.prototype.toString = function (base) {
return base ? this.bn.toString(base) : this.toFixed();
};
BigNumber.prototype.toNumber = function () {
return this.bn.toNumber();
};
BigNumber.prototype.toJSON = function () {
return this.bn.toFixed();
};
BigNumber.prototype.valueOf = function () {
return this.bn.valueOf();
};
BigNumber.prototype.toBytes = function (_a) {
var _b = _a === void 0 ? {} : _a, _c = _b.isSigned, isSigned = _c === void 0 ? true : _c, _d = _b.isLong, isLong = _d === void 0 ? true : _d;
if (!this.isInt()) {
throw new Error('Cant create bytes from number with decimals!');
}
if (!isSigned && this.isNegative()) {
throw new Error('Cant create bytes from negative number in signed mode!');
}
if (isLong && isSigned && !this.isInSignedRange()) {
throw new Error('Number is not from signed numbers range');
}
if (isLong && !isSigned && !this.isInUnsignedRange()) {
throw new Error('Number is not from unsigned numbers range');
}
var isNegative = isSigned && this.isNegative();
var toAdd = isNegative ? '1' : '0';
var byteString = this.bn.plus(toAdd).toString(2).replace('-', '');
var stringLength = isLong
? 64
: Math.ceil(byteString.length / 8) * 8;
var baseStr = BigNumber._toLength(stringLength, byteString);
var baseStrArr = baseStr.split('');
var bytes = [];
do {
bytes.push(parseInt(baseStrArr.splice(0, 8).join(''), 2));
} while (baseStrArr.length);
return isNegative
? Uint8Array.from(bytes.map(function (byte) { return 255 - byte; }))
: Uint8Array.from(bytes);
};
BigNumber.fromBytes = function (bytes, _a) {
var _b = _a === void 0 ? {} : _a, _c = _b.isSigned, isSigned = _c === void 0 ? true : _c, _d = _b.isLong, isLong = _d === void 0 ? true : _d;
if (isLong && bytes.length !== 8) {
throw new Error('Wrong bytes length! Minimal length is 8 byte!');
}
bytes = ((!isLong && bytes.length > 0) || isLong)
? bytes
: [0];
var isNegative = isSigned ? bytes[0] > 127 : false;
var byteString = Array.from(bytes)
.map(function (byte) { return isNegative ? 255 - byte : byte; })
.map(function (byte) { return BigNumber._toLength(8, byte.toString(2)); })
.join('');
var result = new BigNumber(new bignumber_js_1.default(byteString, 2));
return isNegative
? result.mul(-1).sub(1)
: result;
};
BigNumber.max = function () {
var items = [];
for (var _i = 0; _i < arguments.length; _i++) {
items[_i] = arguments[_i];
}
return BigNumber.toBigNumber(items)
.reduce(function (max, item) { return max.gte(item) ? max : item; });
};
BigNumber.min = function () {
var items = [];
for (var _i = 0; _i < arguments.length; _i++) {
items[_i] = arguments[_i];
}
return BigNumber.toBigNumber(items)
.reduce(function (min, item) { return min.lte(item) ? min : item; });
};
BigNumber.sum = function () {
var items = [];
for (var _i = 0; _i < arguments.length; _i++) {
items[_i] = arguments[_i];
}
return BigNumber.toBigNumber(items)
.reduce(function (acc, item) { return acc.add(item); });
};
BigNumber.isBigNumber = function (some) {
return some && typeof some === 'object' && (some instanceof BigNumber || Object.entries(BigNumber.prototype)
.filter(function (_a) {
var key = _a[0];
return key.charAt(0) !== '_';
})
.every(function (_a) {
var key = _a[0], value = _a[1];
return (key in some) && typeof value === typeof some[key];
}));
};
BigNumber.toBigNumber = function (items) {
if (Array.isArray(items)) {
return items.map(function (item) { return new BigNumber(item); });
}
else {
return new BigNumber(items);
}
};
BigNumber.toBigNumberJs = function (long) {
if (bignumber_js_1.default.isBigNumber(long)) {
return long;
}
else if (long instanceof BigNumber) {
return long.bn;
}
else {
return new bignumber_js_1.default(long);
}
};
BigNumber._toLength = function (length, bytes) {
return new Array(length)
.fill('0', 0, length)
.concat(bytes.split(''))
.slice(-length)
.join('');
};
BigNumber.MIN_VALUE = new BigNumber('-9223372036854775808');
BigNumber.MAX_VALUE = new BigNumber('9223372036854775807');
BigNumber.MIN_UNSIGNED_VALUE = new BigNumber('0');
BigNumber.MAX_UNSIGNED_VALUE = new BigNumber('18446744073709551615');
BigNumber.config = new Config_1.Config();
return BigNumber;
}());
exports.BigNumber = BigNumber;
(function (BigNumber) {
var ROUND_MODE;
(function (ROUND_MODE) {
ROUND_MODE[ROUND_MODE["ROUND_UP"] = 0] = "ROUND_UP";
ROUND_MODE[ROUND_MODE["ROUND_DOWN"] = 1] = "ROUND_DOWN";
ROUND_MODE[ROUND_MODE["ROUND_CEIL"] = 2] = "ROUND_CEIL";
ROUND_MODE[ROUND_MODE["ROUND_FLOOR"] = 3] = "ROUND_FLOOR";
ROUND_MODE[ROUND_MODE["ROUND_HALF_UP"] = 4] = "ROUND_HALF_UP";
ROUND_MODE[ROUND_MODE["ROUND_HALF_DOWN"] = 5] = "ROUND_HALF_DOWN";
ROUND_MODE[ROUND_MODE["ROUND_HALF_EVEN"] = 6] = "ROUND_HALF_EVEN";
ROUND_MODE[ROUND_MODE["ROUND_HALF_CEIL"] = 7] = "ROUND_HALF_CEIL";
ROUND_MODE[ROUND_MODE["ROUND_HALF_FLOOR"] = 8] = "ROUND_HALF_FLOOR";
})(ROUND_MODE = BigNumber.ROUND_MODE || (BigNumber.ROUND_MODE = {}));
})(BigNumber = exports.BigNumber || (exports.BigNumber = {}));
exports.BigNumber = BigNumber;
//# sourceMappingURL=BigNumber.js.map