UNPKG

@hiero-ledger/sdk

Version:
139 lines (126 loc) 3.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _bignumber = _interopRequireDefault(require("bignumber.js")); var _long = require("./long.cjs"); var _HbarUnit = _interopRequireDefault(require("./HbarUnit.cjs")); var _long2 = _interopRequireDefault(require("long")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } // SPDX-License-Identifier: Apache-2.0 /** * @typedef {import("./long.js").LongObject} LongObject */ /** * Represents a quantity of hbar (ℏ), the native currency of the Hedera network. * Provides utilities for handling different hbar denominations and conversions. */ class Hbar { /** * @param {number | string | Long | LongObject | BigNumber} amount * @param {HbarUnit=} unit */ constructor(amount, unit = _HbarUnit.default.Hbar) { if (unit === _HbarUnit.default.Tinybar) { this._valueInTinybar = (0, _long.valueToLong)(amount); } else { /** @type {BigNumber} */ let bigAmount; if (_long2.default.isLong(amount)) { bigAmount = new _bignumber.default(amount.toString(10)); } else if (_bignumber.default.isBigNumber(amount) || typeof amount === "string" || typeof amount === "number") { bigAmount = new _bignumber.default(amount); } else { bigAmount = new _bignumber.default(0); } /** * @type {BigNumber} */ this._valueInTinybar = bigAmount.multipliedBy(unit._tinybar); } if (!this._valueInTinybar.isInteger()) { throw new Error("Hbar in tinybars contains decimals"); } } /** * @param {number | Long | string | BigNumber} amount * @param {HbarUnit} unit * @returns {Hbar} */ static from(amount, unit) { return new Hbar(amount, unit); } /** * @param {number | Long | string | BigNumber} amount * @returns {Hbar} */ static fromTinybars(amount) { if (typeof amount === "string") { return this.fromString(amount, _HbarUnit.default.Tinybar); } return new Hbar(amount, _HbarUnit.default.Tinybar); } /** * @param {string} str * @param {HbarUnit=} unit * @returns {Hbar} */ static fromString(str, unit = _HbarUnit.default.Hbar) { const pattern = /^((?:\+|-)?\d+(?:\.\d+)?)(?: (tℏ|μℏ|mℏ|ℏ|kℏ|Mℏ|Gℏ))?$/; if (pattern.test(str)) { let [amount, symbol] = str.split(" "); if (symbol != null) { unit = _HbarUnit.default.fromString(symbol); } return new Hbar(new _bignumber.default(amount), unit); } else { throw new Error("invalid argument provided"); } } /** * @param {HbarUnit} unit * @returns {BigNumber} */ to(unit) { return this._valueInTinybar.dividedBy(unit._tinybar); } /** * @returns {BigNumber} */ toBigNumber() { return this.to(_HbarUnit.default.Hbar); } /** * @returns {Long} */ toTinybars() { return _long2.default.fromValue(this._valueInTinybar.toFixed()); } /** * @returns {Hbar} */ negated() { return Hbar.fromTinybars(this._valueInTinybar.negated()); } /** * @returns {boolean} */ isNegative() { return this._valueInTinybar.isNegative(); } /** * @param {HbarUnit=} unit * @returns {string} */ toString(unit) { if (unit != null) { return `${this._valueInTinybar.dividedBy(unit._tinybar).toString()} ${unit._symbol}`; } if (this._valueInTinybar.isLessThan(10000) && this._valueInTinybar.isGreaterThan(-10000)) { return `${this._valueInTinybar.toFixed()} ${_HbarUnit.default.Tinybar._symbol}`; } return `${this.to(_HbarUnit.default.Hbar).toString()} ${_HbarUnit.default.Hbar._symbol}`; } } exports.default = Hbar;