Skip to content

Commit

Permalink
Fix eslint errors manually
Browse files Browse the repository at this point in the history
  • Loading branch information
davidyuk committed Mar 26, 2021
1 parent be5aece commit dfe3a05
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 24 deletions.
46 changes: 31 additions & 15 deletions src/utils/amount-formatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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}`
}
11 changes: 7 additions & 4 deletions src/utils/bignumber.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
8 changes: 4 additions & 4 deletions test/unit/amount-formatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<any>) => {
[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) {
Expand Down
6 changes: 6 additions & 0 deletions tsconfig.eslint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"extends": "./tsconfig",
"include": [
"test/**/*"
],
}
3 changes: 2 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
"moduleResolution": "node",
"preserveConstEnums": true,
"declaration": true,
"allowJs": true
"allowJs": true,
"strictNullChecks": true
},
"include": [
"src/**/*"
Expand Down

0 comments on commit dfe3a05

Please sign in to comment.