UNPKG

fsl-js-sdk

Version:
48 lines (47 loc) 2.26 kB
"use strict"; 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;