diff --git a/packages/controller-utils/src/util.ts b/packages/controller-utils/src/util.ts index b8110c0c6a..f4e928691a 100644 --- a/packages/controller-utils/src/util.ts +++ b/packages/controller-utils/src/util.ts @@ -70,7 +70,7 @@ export function isSafeChainId(chainId: Hex): boolean { */ // TODO: Either fix this lint violation or explain why it's necessary to ignore. // eslint-disable-next-line @typescript-eslint/naming-convention -export function BNToHex(inputBn: BN | BN4 | BigNumber) { +export function BNToHex(inputBn: BN | BN4 | BigNumber): string { return add0x(inputBn.toString(16)); } @@ -79,6 +79,8 @@ export function BNToHex(inputBn: BN | BN4 | BigNumber) { * @param targetBN - A BN instance * @returns A bn.js instance */ +function getBNImplementation(targetBN: BN4): typeof BN4; +function getBNImplementation(targetBN: BN): typeof BN; function getBNImplementation(targetBN: BN | BN4): typeof BN4 | typeof BN { return Object.keys(targetBN).includes('_strip') ? BN4 : BN; } @@ -91,17 +93,27 @@ function getBNImplementation(targetBN: BN | BN4): typeof BN4 | typeof BN { * @param denominator - Denominator of the fraction multiplier. * @returns Product of the multiplication. */ +export function fractionBN( + targetBN: BN, + numerator: number | string, + denominator: number | string, +): BN; +export function fractionBN( + targetBN: BN4, + numerator: number | string, + denominator: number | string, +): BN4; export function fractionBN( targetBN: BN | BN4, numerator: number | string, denominator: number | string, -) { +): BN | BN4 { + // @ts-expect-error - Signature overload confusion const BNImplementation = getBNImplementation(targetBN); - // @ts-expect-error - Incompatible constructor signatures are actually compatible here const numBN = new BNImplementation(numerator); - // @ts-expect-error - Incompatible constructor signatures are actually compatible here const denomBN = new BNImplementation(denominator); + // @ts-expect-error - BNImplementation gets unexpected typed return targetBN.mul(numBN).div(denomBN); } @@ -213,6 +225,8 @@ export function hexToText(hex: string) { * @param value - A base-16 number encoded as a string. * @returns The number as a BN object in base-16 mode. */ +export function fromHex(value: string | BN): BN; +export function fromHex(value: BN4): BN4; export function fromHex(value: string | BN | BN4): BN | BN4 { if (BN.isBN(value)) { return value;