fsl-js-sdk
Version:
sdk for web
48 lines (47 loc) • 2.26 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Percentage = void 0;
var spl_token_v0_1 = require("@solana/spl-token-v0");
var decimal_js_1 = __importDefault(require("decimal.js"));
var __1 = require("..");
var Percentage = /** @class */ (function () {
function Percentage(numerator, denominator) {
var _this = this;
this.toString = function () {
return "".concat(_this.numerator.toString(), "/").concat(_this.denominator.toString());
};
this.numerator = numerator;
this.denominator = denominator;
}
Percentage.fromDecimal = function (number) {
return Percentage.fromFraction(number.toDecimalPlaces(1).mul(10).toNumber(), 1000);
};
Percentage.fromFraction = function (numerator, denominator) {
var num = typeof numerator === 'number' ? new spl_token_v0_1.u64(numerator.toString()) : numerator;
var denom = typeof denominator === 'number'
? new spl_token_v0_1.u64(denominator.toString())
: denominator;
return new Percentage(num, denom);
};
Percentage.prototype.toDecimal = function () {
if (this.denominator.eq(__1.ZERO)) {
return new decimal_js_1.default(0);
}
return new decimal_js_1.default(this.numerator.toString()).div(new decimal_js_1.default(this.denominator.toString()));
};
Percentage.prototype.add = function (p2) {
var denomGcd = this.denominator.gcd(p2.denominator);
var denomLcm = this.denominator.div(denomGcd).mul(p2.denominator);
var p1DenomAdjustment = denomLcm.div(this.denominator);
var p2DenomAdjustment = denomLcm.div(p2.denominator);
var p1NumeratorAdjusted = this.numerator.mul(p1DenomAdjustment);
var p2NumeratorAdjusted = p2.numerator.mul(p2DenomAdjustment);
var newNumerator = p1NumeratorAdjusted.add(p2NumeratorAdjusted);
return new Percentage(new spl_token_v0_1.u64(newNumerator.toString()), new spl_token_v0_1.u64(denomLcm.toString()));
};
return Percentage;
}());
exports.Percentage = Percentage;