@leather.io/utils 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
 
2
- > @leather.io/utils@0.9.0 build /home/runner/work/mono/mono/packages/utils
2
+ > @leather.io/utils@0.9.2 build /home/runner/work/mono/mono/packages/utils
3
3
  > tsup
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -9,9 +9,9 @@
9
9
  CLI Target: es2022
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
- ESM dist/index.js 13.25 KB
13
- ESM dist/index.js.map 25.31 KB
12
+ ESM dist/index.js 13.49 KB
13
+ ESM dist/index.js.map 25.78 KB
14
14
  ESM ⚡️ Build success in 20ms
15
15
  DTS Build start
16
- DTS ⚡️ Build success in 1353ms
17
- DTS dist/index.d.ts 5.91 KB
16
+ DTS ⚡️ Build success in 1375ms
17
+ DTS dist/index.d.ts 5.99 KB
package/CHANGELOG.md CHANGED
@@ -49,6 +49,20 @@
49
49
  * @leather.io/models bumped to 0.9.0
50
50
  * @leather.io/rpc bumped to 1.0.4
51
51
 
52
+ ## [0.9.2](https://github.com/leather-io/mono/compare/@leather.io/utils-v0.9.1...@leather.io/utils-v0.9.2) (2024-07-02)
53
+
54
+
55
+ ### Bug Fixes
56
+
57
+ * change spam replacement text, add test cases, ref leather-wallet/issues[#5589](https://github.com/leather-io/mono/issues/5589) ([f5b1237](https://github.com/leather-io/mono/commit/f5b1237ee01b07dc7a94668881f635f9c77a2e70))
58
+
59
+ ## [0.9.1](https://github.com/leather-io/mono/compare/@leather.io/utils-v0.9.0...@leather.io/utils-v0.9.1) (2024-06-26)
60
+
61
+
62
+ ### Bug Fixes
63
+
64
+ * setup dialog component in monorepo, ref leather-wallet/issues[#108](https://github.com/leather-io/mono/issues/108) ([d5053f2](https://github.com/leather-io/mono/commit/d5053f2031f139b9dae621df3a4f5944bad7dd05))
65
+
52
66
  ## [0.9.0](https://github.com/leather-io/mono/compare/@leather.io/utils-v0.8.3...@leather.io/utils-v0.9.0) (2024-06-21)
53
67
 
54
68
 
package/dist/index.d.ts CHANGED
@@ -55,6 +55,8 @@ declare function spamFilter(input: string): string;
55
55
 
56
56
  declare function extractPhraseFromString(value: string): string;
57
57
 
58
+ declare function pxStringToNumber(pxString: string): number;
59
+
58
60
  declare function isNumber(value: unknown): value is number;
59
61
  declare function isString(value: unknown): value is string;
60
62
  declare function isBigInt(value: unknown): value is bigint;
@@ -90,4 +92,4 @@ declare function propIfDefined(prop: string, value: any): {
90
92
  [x: string]: boolean;
91
93
  };
92
94
 
93
- export { baseCurrencyAmountInQuote, btcToSat, calculateMeanAverage, convertAmountToBaseUnit, convertAmountToFractionalUnit, convertToMoneyTypeWithDefaultOfZero, countDecimals, createCounter, createMoney, createMoneyFromDecimal, createNullArrayOfLength, createNumArrayOfRange, defaultWalletKeyId, delay, ensureArray, extractPhraseFromString, fibonacciGenerator, formatContractId, formatDustUsdAmounts, formatMoney, formatMoneyPadded, formatMoneyWithoutSymbol, getPrincipalFromContractId, getTicker, i18nFormatCurrency, increaseValueByOneMicroStx, initBigNumber, isBigInt, isBoolean, isDefined, isEmpty, isEmptyArray, isError, isEven, isFulfilled, isFunction, isMoney, isMoneyGreaterThanZero, isNumber, isObject, isRejected, isString, isTypedArray, isUndefined, makeNumberRange, microStxToStx, migratePositiveAssetBalancesToTop, moneyToBaseUnit, noop, propIfDefined, reverseBytes, safelyFormatHexTxid, satToBtc, sortAssetsByName, spamFilter, stxToMicroStx, subtractMoney, sumMoney, sumNumbers, truncateMiddle, undefinedIfLengthZero, unitToFractionalUnit, whenNetwork };
95
+ export { baseCurrencyAmountInQuote, btcToSat, calculateMeanAverage, convertAmountToBaseUnit, convertAmountToFractionalUnit, convertToMoneyTypeWithDefaultOfZero, countDecimals, createCounter, createMoney, createMoneyFromDecimal, createNullArrayOfLength, createNumArrayOfRange, defaultWalletKeyId, delay, ensureArray, extractPhraseFromString, fibonacciGenerator, formatContractId, formatDustUsdAmounts, formatMoney, formatMoneyPadded, formatMoneyWithoutSymbol, getPrincipalFromContractId, getTicker, i18nFormatCurrency, increaseValueByOneMicroStx, initBigNumber, isBigInt, isBoolean, isDefined, isEmpty, isEmptyArray, isError, isEven, isFulfilled, isFunction, isMoney, isMoneyGreaterThanZero, isNumber, isObject, isRejected, isString, isTypedArray, isUndefined, makeNumberRange, microStxToStx, migratePositiveAssetBalancesToTop, moneyToBaseUnit, noop, propIfDefined, pxStringToNumber, reverseBytes, safelyFormatHexTxid, satToBtc, sortAssetsByName, spamFilter, stxToMicroStx, subtractMoney, sumMoney, sumNumbers, truncateMiddle, undefinedIfLengthZero, unitToFractionalUnit, whenNetwork };
package/dist/index.js CHANGED
@@ -244,7 +244,7 @@ function truncateMiddle(input, offset = 5) {
244
244
  // src/spam-filter/spam-filter.ts
245
245
  var urlRegex = /(http|https|ftp)|(((http|ftp|https):\/\/)?(((http|ftp|https):\/\/)?(([\w.-]*)\.([\w]*))))/g;
246
246
  var spamWords = ["won", "win", "click"];
247
- var spamReplacement = "Unknown token";
247
+ var spamReplacement = "Suspicious token";
248
248
  function spamUrlFilter(input) {
249
249
  return input.match(urlRegex);
250
250
  }
@@ -272,6 +272,14 @@ function extractPhraseFromString(value) {
272
272
  }
273
273
  }
274
274
 
275
+ // src/px-string-to-number/px-string-to-number.ts
276
+ function pxStringToNumber(pxString) {
277
+ if (!/^\d+px$/.test(pxString)) {
278
+ throw new Error("Invalid pixel string format");
279
+ }
280
+ return +pxString.replace("px", "");
281
+ }
282
+
275
283
  // src/index.ts
276
284
  function isNumber(value) {
277
285
  return typeof value === "number";
@@ -436,6 +444,7 @@ export {
436
444
  moneyToBaseUnit,
437
445
  noop,
438
446
  propIfDefined,
447
+ pxStringToNumber,
439
448
  reverseBytes,
440
449
  safelyFormatHexTxid,
441
450
  satToBtc,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/counter.ts","../src/math/calculate-averages.ts","../src/math/helpers.ts","../src/math/fibonacci.ts","../src/money/calculate-money.ts","../src/money/format-money.ts","../src/money/is-money.ts","../src/money/unit-conversion.ts","../src/sort-assets.ts","../src/truncate-middle.ts","../src/spam-filter/spam-filter.ts","../src/extract-phrase-from-string/extract-phrase-from-string.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js';\n\nimport { KEBAB_REGEX } from '@leather.io/constants';\nimport type { NetworkModes } from '@leather.io/models';\n\nexport { createCounter } from './counter';\nexport * from './math';\nexport * from './money';\nexport * from './sort-assets';\nexport * from './truncate-middle';\nexport { spamFilter } from './spam-filter/spam-filter';\nexport { extractPhraseFromString } from './extract-phrase-from-string/extract-phrase-from-string';\n\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint';\n}\n\nexport function isUndefined(value: unknown): value is undefined {\n return typeof value === 'undefined';\n}\n\nexport function isFunction(value: unknown): value is () => void {\n return typeof value === 'function';\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\nexport function isObject(value: unknown): value is object {\n return typeof value === 'object';\n}\n\nexport function isError(value: unknown): value is Error {\n return value instanceof Error;\n}\n\nexport function isEmpty(value: object) {\n return Object.keys(value).length === 0;\n}\n\nexport function isDefined<T>(argument: T | undefined): argument is T {\n return !isUndefined(argument);\n}\n\nexport function isTypedArray(val: unknown): val is Uint8Array {\n const TypedArray = Object.getPrototypeOf(Uint8Array);\n return val instanceof TypedArray;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n\nexport function ensureArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nexport function undefinedIfLengthZero<T extends any[]>(arr: T) {\n return arr.length ? arr : undefined;\n}\n\ntype NetworkMap<T> = Record<NetworkModes, T>;\n\nexport function whenNetwork(mode: NetworkModes) {\n return <T extends NetworkMap<unknown>>(networkMap: T) => networkMap[mode] as T[NetworkModes];\n}\n\nexport function isEmptyArray(data: unknown[]) {\n return data.length === 0;\n}\n\nexport const defaultWalletKeyId = 'default' as const;\n\nexport function reverseBytes(bytes: Buffer): Buffer;\nexport function reverseBytes(bytes: Uint8Array): Uint8Array;\nexport function reverseBytes(bytes: Buffer | Uint8Array) {\n if (Buffer.isBuffer(bytes)) return Buffer.from(bytes).reverse();\n return new Uint8Array(bytes.slice().reverse());\n}\n\nexport function makeNumberRange(num: number) {\n return [...Array(num).keys()];\n}\n\nexport function createNumArrayOfRange(fromIndex: number, toIndex: number) {\n const result = [];\n for (let i = fromIndex; i <= toIndex; i++) {\n result.push(i);\n }\n return result;\n}\n\nexport async function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nexport function isFulfilled<T>(p: PromiseSettledResult<T>): p is PromiseFulfilledResult<T> {\n return p.status === 'fulfilled';\n}\n\nexport function isRejected<T>(p: PromiseSettledResult<T>): p is PromiseRejectedResult {\n return p.status === 'rejected';\n}\n\nexport function getPrincipalFromContractId(identifier: string) {\n return identifier.split('::')[0];\n}\n\nexport function formatContractId(address: string, name: string) {\n return `${address}.${name}`;\n}\n\nexport function createNullArrayOfLength(length: number) {\n return new Array(length).fill(null);\n}\n\nexport function safelyFormatHexTxid(id: string) {\n const prefix = '0x';\n if (id.startsWith(prefix)) return id;\n return prefix + id;\n}\n\nfunction kebabCase(str: string) {\n return str.replace(KEBAB_REGEX, match => '-' + match.toLowerCase());\n}\n\nfunction getLetters(string: string, offset = 1) {\n return string.slice(0, offset);\n}\n\nexport function getTicker(value: string) {\n let name = kebabCase(value);\n if (name.includes('-')) {\n const words = name.split('-');\n if (words.length >= 3) {\n name = `${getLetters(words[0])}${getLetters(words[1])}${getLetters(words[2])}`;\n } else {\n name = `${getLetters(words[0])}${getLetters(words[1], 2)}`;\n }\n } else if (name.length >= 3) {\n name = `${getLetters(name, 3)}`;\n }\n return name.toUpperCase();\n}\n\nexport function propIfDefined(prop: string, value: any) {\n return isBoolean(value) ? { [prop]: value } : {};\n}\n","export function createCounter(startPosition = 0) {\n let count = startPosition;\n return {\n getValue() {\n return count;\n },\n increment() {\n return (count += 1);\n },\n incrementBy(amount: number) {\n return (count += amount);\n },\n decrement() {\n return (count -= 1);\n },\n };\n}\n","import BigNumber from 'bignumber.js';\n\nimport { initBigNumber } from './helpers';\n\nexport function calculateMeanAverage(numbers: BigNumber[] | number[]) {\n if (numbers.length === 0) return new BigNumber(0);\n return numbers\n .map(initBigNumber)\n .reduce((acc, price) => acc.plus(price), new BigNumber(0))\n .dividedBy(numbers.length);\n}\n","import BigNumber from 'bignumber.js';\n\nimport { isBigInt } from '..';\n\nexport function initBigNumber(num: string | number | BigNumber | bigint) {\n if (BigNumber.isBigNumber(num)) return num;\n return isBigInt(num) ? new BigNumber(num.toString()) : new BigNumber(num);\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nfunction isMultipleOf(multiple: number) {\n return (num: number) => num % multiple === 0;\n}\n\nexport function isEven(num: number) {\n return isMultipleOf(2)(num);\n}\n\nexport function countDecimals(num: string | number | BigNumber) {\n const LARGE_NUMBER_OF_DECIMALS = 100;\n BigNumber.config({ DECIMAL_PLACES: LARGE_NUMBER_OF_DECIMALS });\n const amount = initBigNumber(num);\n const decimals = amount.toString(10).split('.')[1];\n return decimals ? decimals.length : 0;\n}\n\nexport function increaseValueByOneMicroStx(value: string | number | BigNumber) {\n return new BigNumber(value).plus(0.000001).toNumber();\n}\n","function fibonacci(n = 0): number {\n if (n < 0) throw 'Cannot calculate from negative number';\n if (n < 2) return n;\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function* fibonacciGenerator(startIndex = 0): IterableIterator<number> {\n let index = startIndex;\n while (index < Infinity) yield fibonacci(index++);\n return Infinity;\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport type { MarketData, Money, NumType } from '@leather.io/models';\nimport { formatMarketPair } from '@leather.io/models';\n\nimport { isNumber } from '..';\nimport { initBigNumber, sumNumbers } from '../math/helpers';\nimport { createMoney, formatMoney } from './format-money';\nimport { isMoney } from './is-money';\n\nexport function baseCurrencyAmountInQuote(quantity: Money, { pair, price }: MarketData) {\n if (quantity.symbol !== pair.base)\n throw new Error(\n `Cannot calculate value of ${formatMoney(quantity)} with market pair of ${formatMarketPair(\n pair\n )}`\n );\n\n return createMoney(\n convertAmountToFractionalUnit(\n convertAmountToBaseUnit(quantity).times(convertAmountToBaseUnit(price)),\n price.decimals\n ),\n pair.quote\n );\n}\n\nexport function convertAmountToFractionalUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(decimals);\n}\n\nexport function convertToMoneyTypeWithDefaultOfZero(\n symbol: string,\n num?: NumType,\n decimals?: number\n) {\n return createMoney(initBigNumber(num ?? 0), symbol.toUpperCase(), decimals);\n}\n\n// ts-unused-exports:disable-next-line\nexport function convertAmountToBaseUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(-num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(-decimals);\n}\n\nexport function subtractMoney(xAmount: Money, yAmount: Money) {\n if (xAmount.symbol !== yAmount.symbol) throw new Error('Cannot subtract different currencies');\n return createMoney(xAmount.amount.minus(yAmount.amount), xAmount.symbol, xAmount.decimals);\n}\n\nexport function sumMoney(moneysArr: Money[]) {\n if (moneysArr.some(item => item.symbol !== moneysArr[0].symbol))\n throw new Error('Cannot sum different currencies');\n\n const sum = sumNumbers(moneysArr.map(item => item.amount.toNumber()));\n return createMoney(sum, moneysArr[0].symbol, moneysArr[0].decimals);\n}\n","import BigNumber from 'bignumber.js';\n\nimport { currencyDecimalsMap } from '@leather.io/constants';\nimport type { Currencies, Money, NumType } from '@leather.io/models';\n\nimport { isBigInt, isUndefined } from '..';\n\ntype KnownCurrencyDecimals = keyof typeof currencyDecimalsMap;\n\nfunction isResolutionOfCurrencyKnown(symbol: Currencies): symbol is KnownCurrencyDecimals {\n return symbol in currencyDecimalsMap;\n}\n\nfunction getDecimalsOfSymbolIfKnown(symbol: Currencies) {\n if (isResolutionOfCurrencyKnown(symbol)) return currencyDecimalsMap[symbol];\n return null;\n}\n\nfunction throwWhenDecimalUnknown(\n symbol: Currencies,\n decimals?: number\n): asserts decimals is number {\n if (isUndefined(decimals) && isUndefined(getDecimalsOfSymbolIfKnown(symbol)))\n throw new Error(`Resolution of currency ${symbol} is unknown, must be described`);\n}\n\n/**\n * @param value Amount described in currency's primary unit\n * @param symbol Identifying letter code, e.g. EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoneyFromDecimal(\n value: NumType,\n symbol: Currencies,\n resolution?: number\n): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value).shiftedBy(decimals);\n return Object.freeze({ amount, symbol, decimals });\n}\n\n/**\n * @param value Amount described in currency's fractional base unit, e.g. cents for USD amounts\n * @param symbol Identifying letter code, e.g. EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoney(value: NumType, symbol: Currencies, resolution?: number): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value);\n return Object.freeze({ amount, symbol, decimals });\n}\n\nconst thinSpace = ' ';\n\nexport function formatMoney({ amount, symbol, decimals }: Money) {\n return `${amount.shiftedBy(-decimals).toString()} ${symbol}`;\n}\n\nexport function formatMoneyWithoutSymbol({ amount, decimals }: Money) {\n return `${amount.shiftedBy(-decimals).toString()}`;\n}\n\nexport function formatMoneyPadded({ amount, symbol, decimals }: Money) {\n return `${amount.shiftedBy(-decimals).toFormat(decimals)} ${symbol}`;\n}\n\nexport function i18nFormatCurrency(quantity: Money, decimals: number = 2) {\n if (quantity.symbol !== 'USD') throw new Error('Cannot format non-USD amounts');\n const currencyFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n maximumFractionDigits: decimals,\n });\n\n const formatted = currencyFormatter.format(\n quantity.amount.shiftedBy(-quantity.decimals).toNumber()\n );\n\n if (quantity.amount.isGreaterThan(0) && formatted === '$0.00')\n return '<' + thinSpace + formatted.replace('0.00', '0.01');\n\n return formatted;\n}\n\nexport function formatDustUsdAmounts(value: string) {\n return value.endsWith('0.00') ? '<' + thinSpace + value.replace('0.00', '0.01') : value;\n}\n","import BigNumber from 'bignumber.js';\n\nimport { Money } from '@leather.io/models';\n\nimport { isObject } from '..';\n\nexport function isMoney(val: unknown): val is Money {\n if (!isObject(val)) return false;\n return 'amount' in val && 'symbol' in val && 'decimals' in val;\n}\n\nexport function isMoneyGreaterThanZero(money: Money) {\n if (!BigNumber.isBigNumber(money.amount)) return;\n return !(money.amount.isNaN() || money.amount.isZero());\n}\n","import BigNumber from 'bignumber.js';\n\nimport { BTC_DECIMALS, STX_DECIMALS } from '@leather.io/constants';\nimport { Money } from '@leather.io/models';\n\nimport { initBigNumber } from '../math/helpers';\n\nfunction fractionalUnitToUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(-decimals);\n };\n}\n\nexport function unitToFractionalUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(decimals);\n };\n}\n\nexport const satToBtc = fractionalUnitToUnit(BTC_DECIMALS);\nexport const btcToSat = unitToFractionalUnit(BTC_DECIMALS);\n\nexport const microStxToStx = fractionalUnitToUnit(STX_DECIMALS);\nexport const stxToMicroStx = unitToFractionalUnit(STX_DECIMALS);\n\nexport function moneyToBaseUnit(sum: Money) {\n return fractionalUnitToUnit(sum.decimals)(sum.amount);\n}\n","import type { Money } from '@leather.io/models';\n\nexport function sortAssetsByName<T extends { name: string }[]>(assets: T) {\n return assets\n .sort((a, b) => {\n if (a.name < b.name) return -1;\n if (a.name > b.name) return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'STX') return -1;\n if (b.name !== 'STX') return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'BTC') return -1;\n if (b.name !== 'BTC') return 1;\n return 0;\n });\n}\n\nexport function migratePositiveAssetBalancesToTop<T extends { balance: Money }[]>(assets: T) {\n const assetsWithPositiveBalance = assets.filter(asset => asset.balance.amount.isGreaterThan(0));\n const assetsWithZeroBalance = assets.filter(asset => asset.balance.amount.isEqualTo(0));\n return [...assetsWithPositiveBalance, ...assetsWithZeroBalance] as T;\n}\n","function truncateHex(hex: string, offset = 5): string {\n return `${hex.substring(0, offset + 2)}…${hex.substring(hex.length - offset)}`;\n}\n\nexport function truncateMiddle(input: string, offset = 5): string {\n if (!input) return '';\n // Hex\n if (input.startsWith('0x')) {\n return truncateHex(input, offset);\n }\n // For contracts\n if (input.includes('.')) {\n const parts = input.split('.');\n const start = parts[0]?.substring(0, offset);\n const end = parts[0]?.substring(parts[0].length - offset, parts[0].length);\n return `${start}…${end}.${parts[1]}`;\n } else {\n // Everything else\n const start = input?.substring(0, offset);\n const end = input?.substring(input.length - offset, input.length);\n return `${start}…${end}`;\n }\n}\n","const urlRegex =\n /(http|https|ftp)|(((http|ftp|https):\\/\\/)?(((http|ftp|https):\\/\\/)?(([\\w.-]*)\\.([\\w]*))))/g;\nconst spamWords = ['won', 'win', 'click'];\nexport const spamReplacement = 'Unknown token';\n\nfunction spamUrlFilter(input: string) {\n return input.match(urlRegex);\n}\n\nfunction spamWordFilter(input: string): boolean {\n const containsSpam = (element: string) => input.toLowerCase().includes(element);\n return spamWords.some(containsSpam);\n}\n\nexport function spamFilter(input: string): string {\n const urlFound = spamUrlFilter(input);\n const spamWordsFound = spamWordFilter(input);\n\n if (urlFound || spamWordsFound) {\n return spamReplacement;\n }\n\n return input;\n}\n","export function extractPhraseFromString(value: string) {\n const clean = value.trim();\n const words = clean.match(/\\S+/g);\n if (words?.length) {\n return words\n .map(word => (word.match(/[^0-9]+/g) ? word : null))\n .filter(Boolean)\n .join(' ');\n } else {\n return clean;\n }\n}\n"],"mappings":"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","names":["BigNumber","BigNumber","BigNumber","BigNumber","BigNumber","BigNumber","BigNumber","sumNumbers","BigNumber"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/counter.ts","../src/math/calculate-averages.ts","../src/math/helpers.ts","../src/math/fibonacci.ts","../src/money/calculate-money.ts","../src/money/format-money.ts","../src/money/is-money.ts","../src/money/unit-conversion.ts","../src/sort-assets.ts","../src/truncate-middle.ts","../src/spam-filter/spam-filter.ts","../src/extract-phrase-from-string/extract-phrase-from-string.ts","../src/px-string-to-number/px-string-to-number.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js';\n\nimport { KEBAB_REGEX } from '@leather.io/constants';\nimport type { NetworkModes } from '@leather.io/models';\n\nexport { createCounter } from './counter';\nexport * from './math';\nexport * from './money';\nexport * from './sort-assets';\nexport * from './truncate-middle';\nexport { spamFilter } from './spam-filter/spam-filter';\nexport { extractPhraseFromString } from './extract-phrase-from-string/extract-phrase-from-string';\nexport { pxStringToNumber } from './px-string-to-number/px-string-to-number';\n\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint';\n}\n\nexport function isUndefined(value: unknown): value is undefined {\n return typeof value === 'undefined';\n}\n\nexport function isFunction(value: unknown): value is () => void {\n return typeof value === 'function';\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\nexport function isObject(value: unknown): value is object {\n return typeof value === 'object';\n}\n\nexport function isError(value: unknown): value is Error {\n return value instanceof Error;\n}\n\nexport function isEmpty(value: object) {\n return Object.keys(value).length === 0;\n}\n\nexport function isDefined<T>(argument: T | undefined): argument is T {\n return !isUndefined(argument);\n}\n\nexport function isTypedArray(val: unknown): val is Uint8Array {\n const TypedArray = Object.getPrototypeOf(Uint8Array);\n return val instanceof TypedArray;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n\nexport function ensureArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nexport function undefinedIfLengthZero<T extends any[]>(arr: T) {\n return arr.length ? arr : undefined;\n}\n\ntype NetworkMap<T> = Record<NetworkModes, T>;\n\nexport function whenNetwork(mode: NetworkModes) {\n return <T extends NetworkMap<unknown>>(networkMap: T) => networkMap[mode] as T[NetworkModes];\n}\n\nexport function isEmptyArray(data: unknown[]) {\n return data.length === 0;\n}\n\nexport const defaultWalletKeyId = 'default' as const;\n\nexport function reverseBytes(bytes: Buffer): Buffer;\nexport function reverseBytes(bytes: Uint8Array): Uint8Array;\nexport function reverseBytes(bytes: Buffer | Uint8Array) {\n if (Buffer.isBuffer(bytes)) return Buffer.from(bytes).reverse();\n return new Uint8Array(bytes.slice().reverse());\n}\n\nexport function makeNumberRange(num: number) {\n return [...Array(num).keys()];\n}\n\nexport function createNumArrayOfRange(fromIndex: number, toIndex: number) {\n const result = [];\n for (let i = fromIndex; i <= toIndex; i++) {\n result.push(i);\n }\n return result;\n}\n\nexport async function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nexport function isFulfilled<T>(p: PromiseSettledResult<T>): p is PromiseFulfilledResult<T> {\n return p.status === 'fulfilled';\n}\n\nexport function isRejected<T>(p: PromiseSettledResult<T>): p is PromiseRejectedResult {\n return p.status === 'rejected';\n}\n\nexport function getPrincipalFromContractId(identifier: string) {\n return identifier.split('::')[0];\n}\n\nexport function formatContractId(address: string, name: string) {\n return `${address}.${name}`;\n}\n\nexport function createNullArrayOfLength(length: number) {\n return new Array(length).fill(null);\n}\n\nexport function safelyFormatHexTxid(id: string) {\n const prefix = '0x';\n if (id.startsWith(prefix)) return id;\n return prefix + id;\n}\n\nfunction kebabCase(str: string) {\n return str.replace(KEBAB_REGEX, match => '-' + match.toLowerCase());\n}\n\nfunction getLetters(string: string, offset = 1) {\n return string.slice(0, offset);\n}\n\nexport function getTicker(value: string) {\n let name = kebabCase(value);\n if (name.includes('-')) {\n const words = name.split('-');\n if (words.length >= 3) {\n name = `${getLetters(words[0])}${getLetters(words[1])}${getLetters(words[2])}`;\n } else {\n name = `${getLetters(words[0])}${getLetters(words[1], 2)}`;\n }\n } else if (name.length >= 3) {\n name = `${getLetters(name, 3)}`;\n }\n return name.toUpperCase();\n}\n\nexport function propIfDefined(prop: string, value: any) {\n return isBoolean(value) ? { [prop]: value } : {};\n}\n","export function createCounter(startPosition = 0) {\n let count = startPosition;\n return {\n getValue() {\n return count;\n },\n increment() {\n return (count += 1);\n },\n incrementBy(amount: number) {\n return (count += amount);\n },\n decrement() {\n return (count -= 1);\n },\n };\n}\n","import BigNumber from 'bignumber.js';\n\nimport { initBigNumber } from './helpers';\n\nexport function calculateMeanAverage(numbers: BigNumber[] | number[]) {\n if (numbers.length === 0) return new BigNumber(0);\n return numbers\n .map(initBigNumber)\n .reduce((acc, price) => acc.plus(price), new BigNumber(0))\n .dividedBy(numbers.length);\n}\n","import BigNumber from 'bignumber.js';\n\nimport { isBigInt } from '..';\n\nexport function initBigNumber(num: string | number | BigNumber | bigint) {\n if (BigNumber.isBigNumber(num)) return num;\n return isBigInt(num) ? new BigNumber(num.toString()) : new BigNumber(num);\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nfunction isMultipleOf(multiple: number) {\n return (num: number) => num % multiple === 0;\n}\n\nexport function isEven(num: number) {\n return isMultipleOf(2)(num);\n}\n\nexport function countDecimals(num: string | number | BigNumber) {\n const LARGE_NUMBER_OF_DECIMALS = 100;\n BigNumber.config({ DECIMAL_PLACES: LARGE_NUMBER_OF_DECIMALS });\n const amount = initBigNumber(num);\n const decimals = amount.toString(10).split('.')[1];\n return decimals ? decimals.length : 0;\n}\n\nexport function increaseValueByOneMicroStx(value: string | number | BigNumber) {\n return new BigNumber(value).plus(0.000001).toNumber();\n}\n","function fibonacci(n = 0): number {\n if (n < 0) throw 'Cannot calculate from negative number';\n if (n < 2) return n;\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function* fibonacciGenerator(startIndex = 0): IterableIterator<number> {\n let index = startIndex;\n while (index < Infinity) yield fibonacci(index++);\n return Infinity;\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport type { MarketData, Money, NumType } from '@leather.io/models';\nimport { formatMarketPair } from '@leather.io/models';\n\nimport { isNumber } from '..';\nimport { initBigNumber, sumNumbers } from '../math/helpers';\nimport { createMoney, formatMoney } from './format-money';\nimport { isMoney } from './is-money';\n\nexport function baseCurrencyAmountInQuote(quantity: Money, { pair, price }: MarketData) {\n if (quantity.symbol !== pair.base)\n throw new Error(\n `Cannot calculate value of ${formatMoney(quantity)} with market pair of ${formatMarketPair(\n pair\n )}`\n );\n\n return createMoney(\n convertAmountToFractionalUnit(\n convertAmountToBaseUnit(quantity).times(convertAmountToBaseUnit(price)),\n price.decimals\n ),\n pair.quote\n );\n}\n\nexport function convertAmountToFractionalUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(decimals);\n}\n\nexport function convertToMoneyTypeWithDefaultOfZero(\n symbol: string,\n num?: NumType,\n decimals?: number\n) {\n return createMoney(initBigNumber(num ?? 0), symbol.toUpperCase(), decimals);\n}\n\n// ts-unused-exports:disable-next-line\nexport function convertAmountToBaseUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(-num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(-decimals);\n}\n\nexport function subtractMoney(xAmount: Money, yAmount: Money) {\n if (xAmount.symbol !== yAmount.symbol) throw new Error('Cannot subtract different currencies');\n return createMoney(xAmount.amount.minus(yAmount.amount), xAmount.symbol, xAmount.decimals);\n}\n\nexport function sumMoney(moneysArr: Money[]) {\n if (moneysArr.some(item => item.symbol !== moneysArr[0].symbol))\n throw new Error('Cannot sum different currencies');\n\n const sum = sumNumbers(moneysArr.map(item => item.amount.toNumber()));\n return createMoney(sum, moneysArr[0].symbol, moneysArr[0].decimals);\n}\n","import BigNumber from 'bignumber.js';\n\nimport { currencyDecimalsMap } from '@leather.io/constants';\nimport type { Currencies, Money, NumType } from '@leather.io/models';\n\nimport { isBigInt, isUndefined } from '..';\n\ntype KnownCurrencyDecimals = keyof typeof currencyDecimalsMap;\n\nfunction isResolutionOfCurrencyKnown(symbol: Currencies): symbol is KnownCurrencyDecimals {\n return symbol in currencyDecimalsMap;\n}\n\nfunction getDecimalsOfSymbolIfKnown(symbol: Currencies) {\n if (isResolutionOfCurrencyKnown(symbol)) return currencyDecimalsMap[symbol];\n return null;\n}\n\nfunction throwWhenDecimalUnknown(\n symbol: Currencies,\n decimals?: number\n): asserts decimals is number {\n if (isUndefined(decimals) && isUndefined(getDecimalsOfSymbolIfKnown(symbol)))\n throw new Error(`Resolution of currency ${symbol} is unknown, must be described`);\n}\n\n/**\n * @param value Amount described in currency's primary unit\n * @param symbol Identifying letter code, e.g. EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoneyFromDecimal(\n value: NumType,\n symbol: Currencies,\n resolution?: number\n): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value).shiftedBy(decimals);\n return Object.freeze({ amount, symbol, decimals });\n}\n\n/**\n * @param value Amount described in currency's fractional base unit, e.g. cents for USD amounts\n * @param symbol Identifying letter code, e.g. EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoney(value: NumType, symbol: Currencies, resolution?: number): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value);\n return Object.freeze({ amount, symbol, decimals });\n}\n\nconst thinSpace = ' ';\n\nexport function formatMoney({ amount, symbol, decimals }: Money) {\n return `${amount.shiftedBy(-decimals).toString()} ${symbol}`;\n}\n\nexport function formatMoneyWithoutSymbol({ amount, decimals }: Money) {\n return `${amount.shiftedBy(-decimals).toString()}`;\n}\n\nexport function formatMoneyPadded({ amount, symbol, decimals }: Money) {\n return `${amount.shiftedBy(-decimals).toFormat(decimals)} ${symbol}`;\n}\n\nexport function i18nFormatCurrency(quantity: Money, decimals: number = 2) {\n if (quantity.symbol !== 'USD') throw new Error('Cannot format non-USD amounts');\n const currencyFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n maximumFractionDigits: decimals,\n });\n\n const formatted = currencyFormatter.format(\n quantity.amount.shiftedBy(-quantity.decimals).toNumber()\n );\n\n if (quantity.amount.isGreaterThan(0) && formatted === '$0.00')\n return '<' + thinSpace + formatted.replace('0.00', '0.01');\n\n return formatted;\n}\n\nexport function formatDustUsdAmounts(value: string) {\n return value.endsWith('0.00') ? '<' + thinSpace + value.replace('0.00', '0.01') : value;\n}\n","import BigNumber from 'bignumber.js';\n\nimport { Money } from '@leather.io/models';\n\nimport { isObject } from '..';\n\nexport function isMoney(val: unknown): val is Money {\n if (!isObject(val)) return false;\n return 'amount' in val && 'symbol' in val && 'decimals' in val;\n}\n\nexport function isMoneyGreaterThanZero(money: Money) {\n if (!BigNumber.isBigNumber(money.amount)) return;\n return !(money.amount.isNaN() || money.amount.isZero());\n}\n","import BigNumber from 'bignumber.js';\n\nimport { BTC_DECIMALS, STX_DECIMALS } from '@leather.io/constants';\nimport { Money } from '@leather.io/models';\n\nimport { initBigNumber } from '../math/helpers';\n\nfunction fractionalUnitToUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(-decimals);\n };\n}\n\nexport function unitToFractionalUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(decimals);\n };\n}\n\nexport const satToBtc = fractionalUnitToUnit(BTC_DECIMALS);\nexport const btcToSat = unitToFractionalUnit(BTC_DECIMALS);\n\nexport const microStxToStx = fractionalUnitToUnit(STX_DECIMALS);\nexport const stxToMicroStx = unitToFractionalUnit(STX_DECIMALS);\n\nexport function moneyToBaseUnit(sum: Money) {\n return fractionalUnitToUnit(sum.decimals)(sum.amount);\n}\n","import type { Money } from '@leather.io/models';\n\nexport function sortAssetsByName<T extends { name: string }[]>(assets: T) {\n return assets\n .sort((a, b) => {\n if (a.name < b.name) return -1;\n if (a.name > b.name) return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'STX') return -1;\n if (b.name !== 'STX') return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'BTC') return -1;\n if (b.name !== 'BTC') return 1;\n return 0;\n });\n}\n\nexport function migratePositiveAssetBalancesToTop<T extends { balance: Money }[]>(assets: T) {\n const assetsWithPositiveBalance = assets.filter(asset => asset.balance.amount.isGreaterThan(0));\n const assetsWithZeroBalance = assets.filter(asset => asset.balance.amount.isEqualTo(0));\n return [...assetsWithPositiveBalance, ...assetsWithZeroBalance] as T;\n}\n","function truncateHex(hex: string, offset = 5): string {\n return `${hex.substring(0, offset + 2)}…${hex.substring(hex.length - offset)}`;\n}\n\nexport function truncateMiddle(input: string, offset = 5): string {\n if (!input) return '';\n // Hex\n if (input.startsWith('0x')) {\n return truncateHex(input, offset);\n }\n // For contracts\n if (input.includes('.')) {\n const parts = input.split('.');\n const start = parts[0]?.substring(0, offset);\n const end = parts[0]?.substring(parts[0].length - offset, parts[0].length);\n return `${start}…${end}.${parts[1]}`;\n } else {\n // Everything else\n const start = input?.substring(0, offset);\n const end = input?.substring(input.length - offset, input.length);\n return `${start}…${end}`;\n }\n}\n","const urlRegex =\n /(http|https|ftp)|(((http|ftp|https):\\/\\/)?(((http|ftp|https):\\/\\/)?(([\\w.-]*)\\.([\\w]*))))/g;\nconst spamWords = ['won', 'win', 'click'];\nexport const spamReplacement = 'Suspicious token';\n\nfunction spamUrlFilter(input: string) {\n return input.match(urlRegex);\n}\n\nfunction spamWordFilter(input: string): boolean {\n const containsSpam = (element: string) => input.toLowerCase().includes(element);\n return spamWords.some(containsSpam);\n}\n\nexport function spamFilter(input: string): string {\n const urlFound = spamUrlFilter(input);\n const spamWordsFound = spamWordFilter(input);\n\n if (urlFound || spamWordsFound) {\n return spamReplacement;\n }\n\n return input;\n}\n","export function extractPhraseFromString(value: string) {\n const clean = value.trim();\n const words = clean.match(/\\S+/g);\n if (words?.length) {\n return words\n .map(word => (word.match(/[^0-9]+/g) ? word : null))\n .filter(Boolean)\n .join(' ');\n } else {\n return clean;\n }\n}\n","export function pxStringToNumber(pxString: string): number {\n if (!/^\\d+px$/.test(pxString)) {\n throw new Error('Invalid pixel string format');\n }\n return +pxString.replace('px', '');\n}\n"],"mappings":"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","names":["BigNumber","BigNumber","BigNumber","BigNumber","BigNumber","BigNumber","BigNumber","sumNumbers","BigNumber"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@leather.io/utils",
3
3
  "author": "Leather.io contact@leather.io",
4
4
  "description": "Shared bitcoin utilities",
5
- "version": "0.9.0",
5
+ "version": "0.9.2",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/leather-io/mono/tree/dev/packages/utils",
8
8
  "repository": {
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ export * from './sort-assets';
10
10
  export * from './truncate-middle';
11
11
  export { spamFilter } from './spam-filter/spam-filter';
12
12
  export { extractPhraseFromString } from './extract-phrase-from-string/extract-phrase-from-string';
13
+ export { pxStringToNumber } from './px-string-to-number/px-string-to-number';
13
14
 
14
15
  export function isNumber(value: unknown): value is number {
15
16
  return typeof value === 'number';
@@ -0,0 +1,12 @@
1
+ import { pxStringToNumber } from './px-string-to-number';
2
+
3
+ describe('convert px string to number for calculation', () => {
4
+ it('converts standard px string to number', () => {
5
+ const result = pxStringToNumber('10px');
6
+ expect(result).toEqual(10);
7
+ });
8
+ it('converts token px string to number', () => {
9
+ const result = pxStringToNumber('600px');
10
+ expect(result).toEqual(600);
11
+ });
12
+ });
@@ -0,0 +1,6 @@
1
+ export function pxStringToNumber(pxString: string): number {
2
+ if (!/^\d+px$/.test(pxString)) {
3
+ throw new Error('Invalid pixel string format');
4
+ }
5
+ return +pxString.replace('px', '');
6
+ }
@@ -16,6 +16,10 @@ describe('Spam filter', () => {
16
16
  expect(spamFilter('https://fake')).toEqual(spamReplacement);
17
17
  expect(spamFilter('http://fake')).toEqual(spamReplacement);
18
18
  });
19
+ it('should flag tokens containing . as suspicious', () => {
20
+ expect(spamFilter('xxx.com')).toEqual(spamReplacement);
21
+ expect(spamFilter('xxxx.fund')).toEqual(spamReplacement);
22
+ });
19
23
  it('should detect spam words in strings and replace content', () => {
20
24
  expect(spamFilter('You won some stx')).toEqual(spamReplacement);
21
25
  expect(spamFilter('You Win some stx')).toEqual(spamReplacement);
@@ -1,7 +1,7 @@
1
1
  const urlRegex =
2
2
  /(http|https|ftp)|(((http|ftp|https):\/\/)?(((http|ftp|https):\/\/)?(([\w.-]*)\.([\w]*))))/g;
3
3
  const spamWords = ['won', 'win', 'click'];
4
- export const spamReplacement = 'Unknown token';
4
+ export const spamReplacement = 'Suspicious token';
5
5
 
6
6
  function spamUrlFilter(input: string) {
7
7
  return input.match(urlRegex);