UNPKG

@mozaic-fi/intent-swapper-sdk-common

Version:
357 lines 15.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TokenAmountsWithMin = exports.TokenAmountWithMin = void 0; exports.isTokenAmountWithMinObject = isTokenAmountWithMinObject; exports.isTokenAmountWithMinPair = isTokenAmountWithMinPair; exports.isTokenAmountWithMin = isTokenAmountWithMin; exports.isTokenAmountWithMinTypes = isTokenAmountWithMinTypes; exports.isTokenAmountsWithMin = isTokenAmountsWithMin; exports.isTokenAmountsWithMinTypes = isTokenAmountsWithMinTypes; const tslib_1 = require("tslib"); const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js")); const token_1 = require("./token"); const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant")); const orderBy_1 = tslib_1.__importDefault(require("lodash/orderBy")); const utils_1 = require("../utils"); const token_amount_1 = require("./token-amount"); class TokenAmountWithMin { constructor(arg0, arg1, arg2) { var _a, _b, _c, _d, _e, _f, _g; if ((0, token_1.isTokenTypes)(arg0)) { this.token = token_1.Token.from(arg0); this.amount = TokenAmountWithMin.precise(arg1 !== null && arg1 !== void 0 ? arg1 : '0', this.token.decimals); this.amountMin = TokenAmountWithMin.precise((_a = arg2 !== null && arg2 !== void 0 ? arg2 : arg1) !== null && _a !== void 0 ? _a : '0', this.token.decimals); } else if (isTokenAmountWithMin(arg0)) { this.token = arg0.token; this.amount = arg0.amount; this.amountMin = arg0.amountMin; } else if (isTokenAmountWithMinObject(arg0)) { this.token = token_1.Token.from(arg0.token); this.amount = TokenAmountWithMin.precise((_b = arg0.amount) !== null && _b !== void 0 ? _b : '0', this.token.decimals); this.amountMin = TokenAmountWithMin.precise((_d = (_c = arg0.amountMin) !== null && _c !== void 0 ? _c : arg0.amount) !== null && _d !== void 0 ? _d : '0', this.token.decimals); } else if ((0, token_amount_1.isTokenAmount)(arg0)) { this.token = arg0.token; this.amount = arg0.amount; this.amountMin = arg0.amount; } else { this.token = (0, token_1.isToken)(arg0[0]) ? arg0[0] : token_1.Token.from(arg0[0]); this.amount = TokenAmountWithMin.precise((_e = arg0[1]) !== null && _e !== void 0 ? _e : '0', this.token.decimals); this.amountMin = TokenAmountWithMin.precise((_g = (_f = arg0[2]) !== null && _f !== void 0 ? _f : arg0[1]) !== null && _g !== void 0 ? _g : '0', this.token.decimals); } } static from(tokenAmount) { return isTokenAmountWithMin(tokenAmount) ? tokenAmount : new TokenAmountWithMin(tokenAmount); } static precise(amount, decimals) { return (0, bignumber_js_1.default)(amount).decimalPlaces(decimals, bignumber_js_1.default.ROUND_DOWN).toFixed(); } get amountWei() { return (0, utils_1.toSmallUnit)(this.amount, this.token.decimals); } get amountMinWei() { return (0, utils_1.toSmallUnit)(this.amountMin, this.token.decimals); } precise(arg0) { let amount; if (isTokenAmountWithMin(arg0)) { (0, tiny_invariant_1.default)(arg0.token.is(this.token), "different tokens can't be clone"); amount = arg0.amount; } else { amount = TokenAmountWithMin.precise(arg0, this.token.decimals); } return amount; } set(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { this.amount = this.precise(arg0.amount); this.amountMin = this.precise(arg0.amountMin); } else { this.amount = this.precise(arg0); this.amountMin = this.precise(arg1 !== null && arg1 !== void 0 ? arg1 : arg0); } return this; } setWei(amountWei, amountMinWei) { this.amount = (0, utils_1.toBigUnit)(amountWei, this.token.decimals); this.amountMin = (0, utils_1.toBigUnit)(amountMinWei !== null && amountMinWei !== void 0 ? amountMinWei : amountWei, this.token.decimals); return this; } add(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { this.amount = (0, bignumber_js_1.default)(this.amount).plus(this.precise(arg0.amount)).toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin).plus(this.precise(arg0.amountMin)).toFixed(); } else if ((0, token_amount_1.isTokenAmount)(arg0)) { this.amount = (0, bignumber_js_1.default)(this.amount).plus(arg0.amount).toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin).plus(arg0.amount).toFixed(); } else { this.amount = (0, bignumber_js_1.default)(this.amount).plus(this.precise(arg0)).toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin) .plus(this.precise(arg1 !== null && arg1 !== void 0 ? arg1 : arg0)) .toFixed(); } return this; } addWei(amountWei, amountMinWei) { this.amount = (0, bignumber_js_1.default)(this.amount) .plus((0, utils_1.toBigUnit)(amountWei, this.token.decimals)) .toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin) .plus((0, utils_1.toBigUnit)(amountMinWei !== null && amountMinWei !== void 0 ? amountMinWei : amountWei, this.token.decimals)) .toFixed(); return this; } sub(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { this.amount = (0, bignumber_js_1.default)(this.amount).minus(this.precise(arg0.amount)).toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin).minus(this.precise(arg0.amountMin)).toFixed(); } else if ((0, token_amount_1.isTokenAmount)(arg0)) { this.amount = (0, bignumber_js_1.default)(this.amount).minus(arg0.amount).toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin).minus(arg0.amount).toFixed(); } else { this.amount = (0, bignumber_js_1.default)(this.amount).minus(this.precise(arg0)).toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin) .minus(this.precise(arg1 !== null && arg1 !== void 0 ? arg1 : arg0)) .toFixed(); } return this; } subWei(amountWei, amountMinWei) { this.amount = (0, bignumber_js_1.default)(this.amount) .minus((0, utils_1.toBigUnit)(amountWei, this.token.decimals)) .toFixed(); this.amountMin = (0, bignumber_js_1.default)(this.amountMin) .minus((0, utils_1.toBigUnit)(amountMinWei !== null && amountMinWei !== void 0 ? amountMinWei : amountWei, this.token.decimals)) .toFixed(); return this; } get isZero() { return (0, bignumber_js_1.default)(this.amount).isZero() && (0, bignumber_js_1.default)(this.amountMin).isZero(); } eq(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { return this.amountWei.eq(arg0.amountWei) && this.amountMinWei.eq(arg0.amountMinWei); } else { return (0, bignumber_js_1.default)(this.amount).eq(arg0) && (0, bignumber_js_1.default)(this.amountMin).eq(arg1 !== null && arg1 !== void 0 ? arg1 : arg0); } } gt(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { return this.amountWei.gt(arg0.amountWei) && this.amountMinWei.gt(arg0.amountMinWei); } else { return (0, bignumber_js_1.default)(this.amount).gt(arg0) && (0, bignumber_js_1.default)(this.amountMin).gt(arg1 !== null && arg1 !== void 0 ? arg1 : arg0); } } gte(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { return this.amountWei.gte(arg0.amountWei) && this.amountMinWei.gte(arg0.amountMinWei); } else { return (0, bignumber_js_1.default)(this.amount).gte(arg0) && (0, bignumber_js_1.default)(this.amountMin).gte(arg1 !== null && arg1 !== void 0 ? arg1 : arg0); } } lt(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { return this.amountWei.lt(arg0.amountWei) && this.amountMinWei.lt(arg0.amountMinWei); } else { return (0, bignumber_js_1.default)(this.amount).lt(arg0) && (0, bignumber_js_1.default)(this.amountMin).lt(arg1 !== null && arg1 !== void 0 ? arg1 : arg0); } } lte(arg0, arg1) { if (isTokenAmountWithMin(arg0)) { return this.amountWei.lte(arg0.amountWei) && this.amountMinWei.lte(arg0.amountMinWei); } else { return (0, bignumber_js_1.default)(this.amount).lte(arg0) && (0, bignumber_js_1.default)(this.amountMin).lte(arg1 !== null && arg1 !== void 0 ? arg1 : arg0); } } toObject() { return { token: this.token.toObject(), amount: this.amount, amountMin: this.amountMin, }; } toValues() { return [this.token.address, this.amountWei, this.amountMinWei]; } clone() { return new TokenAmountWithMin(this.token, this.amount, this.amountMin); } } exports.TokenAmountWithMin = TokenAmountWithMin; function isTokenAmountWithMinObject(v) { return (typeof v === 'object' && (0, token_1.isTokenTypes)(v.token) && typeof v.amount === 'string' && typeof v.amountMin === 'string' && !isTokenAmountWithMin(v)); } function isTokenAmountWithMinPair(v) { return (Array.isArray(v) && (0, token_1.isTokenTypes)(v[0]) && typeof v[1] === 'string' && (typeof v[2] === 'string' || typeof v[2] === 'undefined')); } function isTokenAmountWithMin(v) { return v instanceof TokenAmountWithMin; } function isTokenAmountWithMinTypes(v) { return isTokenAmountWithMinObject(v) || isTokenAmountWithMinPair(v) || isTokenAmountWithMin(v); } class TokenAmountsWithMin { constructor(arg0, ...otherArgs) { this.tokenAmountMap = {}; if (arg0) { if (isTokenAmountWithMinTypes(arg0)) { this.add(arg0); } else { for (const tokenAmount of arg0) { this.add(tokenAmount); } } } for (const tokenAmount of otherArgs) { this.add(tokenAmount); } } static from(tokenAmounts) { return isTokenAmountsWithMin(tokenAmounts) ? tokenAmounts : new TokenAmountsWithMin(tokenAmounts); } static fromTokenAmounts(tokenAmounts) { return new TokenAmountsWithMin(tokenAmounts.map((tokenAmount) => new TokenAmountWithMin(tokenAmount.token, tokenAmount.amount, tokenAmount.amount))); } get length() { return Object.keys(this.tokenAmountMap).length; } at(index) { return this.toArray()[index]; } get(token) { return this.tokenAmountMap[token_1.Token.getIid(token)]; } set(arg0, arg1) { const tokenAmount = new TokenAmountWithMin(arg0, arg1); this.tokenAmountMap[token_1.Token.getIid(tokenAmount.token)] = tokenAmount; return this; } has(token) { return !!this.get(token); } add(arg0, arg1) { const tokenAmount = new TokenAmountWithMin(arg0, arg1); if (this.has(tokenAmount.token)) { this.tokenAmountMap[token_1.Token.getIid(tokenAmount.token)].add(tokenAmount); } else { this.set(tokenAmount); } return this; } sub(arg0, arg1) { const tokenAmount = new TokenAmountWithMin(arg0, arg1); if (this.has(tokenAmount.token)) { this.tokenAmountMap[token_1.Token.getIid(tokenAmount.token)].sub(tokenAmount); } return this; } toArray() { return Object.keys(this.tokenAmountMap).map((tokenIid) => this.tokenAmountMap[tokenIid]); } toObject() { return (0, orderBy_1.default)(Object.keys(this.tokenAmountMap).map((tokenIid) => this.tokenAmountMap[tokenIid].toObject()), 'token.symbol'); } toJSON() { return this.toObject(); } toValues() { return Object.keys(this.tokenAmountMap).reduce((accumulator, tokenIid) => { accumulator[0].push(tokenIid); accumulator[1].push(this.tokenAmountMap[tokenIid].amountWei); accumulator[2].push(this.tokenAmountMap[tokenIid].amountMinWei); return accumulator; }, [[], [], []]); } compact() { const tokenAmounts = new TokenAmountsWithMin(); Object.keys(this.tokenAmountMap).forEach((tokenIid) => { if (!this.tokenAmountMap[tokenIid].isZero) { tokenAmounts.add(this.tokenAmountMap[tokenIid]); } }); return tokenAmounts; } get isEmpty() { return this.length === 0; } get native() { let nativeTokenAmount; for (const tokenIid of Object.keys(this.tokenAmountMap)) { const tokenAmount = this.tokenAmountMap[tokenIid]; if (tokenAmount.token.isNative) { nativeTokenAmount = tokenAmount; break; } } return nativeTokenAmount; } get erc20() { return Object.keys(this.tokenAmountMap).reduce((accumulator, tokenIid) => { const tokenAmount = this.tokenAmountMap[tokenIid]; if (!tokenAmount.token.isNative) accumulator.set(tokenAmount); return accumulator; }, new TokenAmountsWithMin()); } get tokens() { return Object.keys(this.tokenAmountMap).reduce((accumulator, tokenIid) => { accumulator.push(this.tokenAmountMap[tokenIid].token); return accumulator; }, []); } forEach(callbackfn) { Object.keys(this.tokenAmountMap).map((tokenIid, index) => callbackfn(this.tokenAmountMap[tokenIid], index, this)); } map(callbackfn) { return Object.keys(this.tokenAmountMap).map((tokenIid, index) => callbackfn(this.tokenAmountMap[tokenIid], index, this)); } merge(sources) { let tokenAmountsArray = [this]; if (Array.isArray(sources)) { tokenAmountsArray = tokenAmountsArray.concat(sources); } else { tokenAmountsArray.push(sources); } const newTokenAmounts = new TokenAmountsWithMin(); for (const tokenAmounts of tokenAmountsArray) { Object.keys(tokenAmounts.tokenAmountMap).forEach((tokenIid) => { newTokenAmounts.add(tokenAmounts.tokenAmountMap[tokenIid]); }); } return newTokenAmounts; } } exports.TokenAmountsWithMin = TokenAmountsWithMin; function isTokenAmountsWithMin(v) { return v instanceof TokenAmountsWithMin; } function isTokenAmountsWithMinTypes(v) { return (Array.isArray(v) && isTokenAmountWithMinTypes(v[0])) || isTokenAmountsWithMin(v); } //# sourceMappingURL=token-amount-with-min.js.map