From dfe3a05e0b850c579a6c50efdd92ef43d4e668eb Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Fri, 26 Mar 2021 00:26:18 +0300 Subject: [PATCH] Fix eslint errors manually --- src/utils/amount-formatter.ts | 46 +++++++++++++++++++++++------------ src/utils/bignumber.ts | 11 ++++++--- test/unit/amount-formatter.ts | 8 +++--- tsconfig.eslint.json | 6 +++++ tsconfig.json | 3 ++- 5 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 tsconfig.eslint.json diff --git a/src/utils/amount-formatter.ts b/src/utils/amount-formatter.ts index ef541c20fb..70ebb4a2a2 100644 --- a/src/utils/amount-formatter.ts +++ b/src/utils/amount-formatter.ts @@ -56,7 +56,10 @@ export const DENOMINATION_MAGNITUDE = { * @param {String} [options.denomination='aettos'] denomination of amount, can be ['ae', 'aettos'] * @return {String} */ -export const toAe = (value: string | number | BigNumber, { denomination = AE_AMOUNT_FORMATS.AETTOS } = {}) => formatAmount(value, { denomination, targetDenomination: AE_AMOUNT_FORMATS.AE }) +export const toAe = ( + value: string | number | BigNumber, + { denomination = AE_AMOUNT_FORMATS.AETTOS } = {} +): string => formatAmount(value, { denomination, targetDenomination: AE_AMOUNT_FORMATS.AE }) /** * Convert amount to aettos @@ -65,7 +68,10 @@ export const toAe = (value: string | number | BigNumber, { denomination = AE_AMO * @param {String} [options.denomination='ae'] denomination of amount, can be ['ae', 'aettos'] * @return {String} */ -export const toAettos = (value: string | number | BigNumber, { denomination = AE_AMOUNT_FORMATS.AE } = {}) => formatAmount(value, { denomination }) +export const toAettos = ( + value: string | number | BigNumber, + { denomination = AE_AMOUNT_FORMATS.AE } = {} +): string => formatAmount(value, { denomination }) /** * Convert amount from one to other denomination @@ -75,36 +81,46 @@ export const toAettos = (value: string | number | BigNumber, { denomination = AE * @param {String} [options.targetDenomination='aettos'] target denomination, can be ['ae', 'aettos'] * @return {String} */ -export const formatAmount = (value: string | number | BigNumber, { denomination = AE_AMOUNT_FORMATS.AETTOS, targetDenomination = AE_AMOUNT_FORMATS.AETTOS } = {}) => { - if (!Object.values(AE_AMOUNT_FORMATS).includes(denomination)) throw new Error(`Invalid denomination. Current: ${denomination}, available [${Object.keys(AE_AMOUNT_FORMATS)}]`) - if (!Object.values(AE_AMOUNT_FORMATS).includes(targetDenomination)) throw new Error(`Invalid target denomination. Current: ${targetDenomination}, available [${Object.keys(AE_AMOUNT_FORMATS)}]`) - if (!isBigNumber(value)) throw new Error(`Value ${value} is not type of number`) +export const formatAmount = ( + value: string | number | BigNumber, + { denomination = AE_AMOUNT_FORMATS.AETTOS, targetDenomination = AE_AMOUNT_FORMATS.AETTOS } = {} +): string => { + const denominations = Object.values(AE_AMOUNT_FORMATS) + if (!denominations.includes(denomination)) throw new Error(`Invalid denomination: ${denomination}`) + if (!denominations.includes(targetDenomination)) throw new Error(`Invalid target denomination: ${targetDenomination}`) + if (!isBigNumber(value)) throw new Error(`Value ${value.toString()} is not type of number`) return asBigNumber(value) .shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination]) .toFixed() } -const prefixes = [ +interface Prefix { + name: string + magnitude: number +} + +const prefixes: Prefix[] = [ { name: 'exa', magnitude: 18 }, { name: 'giga', magnitude: 9 }, { name: '', magnitude: 0 }, { name: 'pico', magnitude: -12 } ] -const getNearestPrefix = (exponent: number) => prefixes.reduce((p, n) => ( +const getNearestPrefix = (exponent: number): Prefix => prefixes.reduce((p, n) => ( Math.abs(n.magnitude - exponent) < Math.abs(p.magnitude - exponent) ? n : p)) -const getLowerBoundPrefix = (exponent: number) => prefixes - .find(p => p.magnitude <= exponent) || prefixes[prefixes.length - 1] +const getLowerBoundPrefix = (exponent: number): Prefix => prefixes + .find(p => p.magnitude <= exponent) ?? prefixes[prefixes.length - 1] -export default (value: string | number | BigNumber) => { - if (!BigNumber.isBigNumber(value)) value = new BigNumber(value) +export default (rawValue: string | number | BigNumber): string => { + const value: BigNumber = new BigNumber(rawValue) - const { name, magnitude } = (value.e < 0 ? getNearestPrefix : getLowerBoundPrefix)(value.e) + const exp = value.e ?? 0 + const { name, magnitude } = (exp < 0 ? getNearestPrefix : getLowerBoundPrefix)(exp) const v = value .shiftedBy(-magnitude) - .precision(9 + Math.min(value.e - magnitude, 0)) + .precision(9 + Math.min(exp - magnitude, 0)) .toFixed() - return `${v}${name ? ' ' : ''}${name}` + return `${v}${name !== '' ? ' ' : ''}${name}` } diff --git a/src/utils/bignumber.ts b/src/utils/bignumber.ts index 9373644cc3..10ae91dcac 100644 --- a/src/utils/bignumber.ts +++ b/src/utils/bignumber.ts @@ -10,25 +10,28 @@ import BigNumber from 'bignumber.js' * @param {String|Number|BigNumber} number number to convert * @return {String} */ -export const parseBigNumber = (number: string | number | BigNumber) => new BigNumber(number.toString()).toString(10) +export const parseBigNumber = (number: string | number | BigNumber): string => + new BigNumber(number.toString()).toString(10) /** * Convert number to BigNumber instance * @param {String|Number|BigNumber} number number to convert * @return {BigNumber} */ -export const asBigNumber = (number: string | number | BigNumber) => new BigNumber(number.toString()) +export const asBigNumber = (number: string | number | BigNumber): BigNumber => + new BigNumber(number.toString()) /** * Check if value is BigNumber, Number or number string representation * @param {String|Number|BigNumber} number number to convert * @return {Boolean} */ -export const isBigNumber = (number: string | number | BigNumber) => !isNaN(number as number) || Number.isInteger(number) || BigNumber.isBigNumber(number) +export const isBigNumber = (number: string | number | BigNumber): boolean => + !isNaN(number as number) || Number.isInteger(number) || BigNumber.isBigNumber(number) /** * BigNumber ceil operation * @param {BigNumber} bigNumber * @return {BigNumber} */ -export const ceil = (bigNumber: BigNumber) => bigNumber.integerValue(BigNumber.ROUND_CEIL) +export const ceil = (bigNumber: BigNumber): BigNumber => bigNumber.integerValue(BigNumber.ROUND_CEIL) diff --git a/test/unit/amount-formatter.ts b/test/unit/amount-formatter.ts index bd2e3bae78..b4e2989666 100644 --- a/test/unit/amount-formatter.ts +++ b/test/unit/amount-formatter.ts @@ -70,10 +70,10 @@ describe('Amount Formatter', function () { }) it('Invalid value', () => { [ - [true, [AE_AMOUNT_FORMATS.AE, AE_AMOUNT_FORMATS.AE], `Value ${true} is not type of number`], - [1, [AE_AMOUNT_FORMATS.AE, 'ASD'], `Invalid target denomination. Current: ASD, available [${Object.keys(AE_AMOUNT_FORMATS)}]`], - [1, ['ASD', AE_AMOUNT_FORMATS.AE], `Invalid denomination. Current: ASD, available [${Object.keys(AE_AMOUNT_FORMATS)}]`] - ].forEach(([v, [dF, dT], error]: Array) => { + [true, [AE_AMOUNT_FORMATS.AE, AE_AMOUNT_FORMATS.AE], 'Value true is not type of number'], + [1, [AE_AMOUNT_FORMATS.AE, 'ASD'], 'Invalid target denomination: ASD'], + [1, ['ASD', AE_AMOUNT_FORMATS.AE], 'Invalid denomination: ASD'] + ].forEach(([v, [dF, dT], error]: any[]) => { try { formatAmount(v, { denomination: dF, targetDenomination: dT }) } catch (e) { diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000000..513349b53b --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig", + "include": [ + "test/**/*" + ], +} diff --git a/tsconfig.json b/tsconfig.json index e8cb831c0c..da20783605 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,8 @@ "moduleResolution": "node", "preserveConstEnums": true, "declaration": true, - "allowJs": true + "allowJs": true, + "strictNullChecks": true }, "include": [ "src/**/*"