@orderly.network/utils
Advanced tools
+2
-1
@@ -260,3 +260,4 @@ "use strict"; | ||
| import_types.BSC_TESTNET_CHAINID, | ||
| import_types.ADI_TESTNET_CHAINID | ||
| import_types.ADI_TESTNET_CHAINID, | ||
| import_types.XLAYER_TESTNET_CHAINID | ||
| ]; | ||
@@ -263,0 +264,0 @@ return testnetIds.includes(chainId); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/decimal.ts","../src/dateTime.ts","../src/chain.ts","../src/string.ts","../src/window.ts","../src/symbol.ts","../src/order.ts","../src/formatNum.ts"],"sourcesContent":["// import dayjs from \"dayjs\";\n\nexport { default as Decimal } from \"./decimal\";\nexport * from \"./decimal\";\nexport * from \"./dateTime\";\nexport * from \"./chain\";\nexport * from \"./string\";\nexport { windowGuard, getGlobalObject, getTimestamp } from \"./window\";\nexport { default as dayjs } from \"dayjs\";\nexport * from \"./symbol\";\nexport * from \"./order\";\nexport * from \"./formatNum\";\n\n// export { dayjs };\n","import Decimal from \"decimal.js-light\";\n\nexport type { Numeric } from \"decimal.js-light\";\n\nDecimal.set({ rounding: Decimal.ROUND_DOWN });\n\nexport default Decimal;\n\nexport const cutNumber = (num: number | string, lenght: number) => {};\n\nexport const zero = new Decimal(0);\n\n/** if num is undefined, returns options?.fallback || '-', otherwise it formats */\nexport const commifyOptional = (\n num?: number | string,\n options?: {\n fix?: number;\n fallback?: string;\n padEnd?: boolean;\n /// default is '0'\n fillString?: string;\n prefix?: string;\n },\n): string => {\n // if num convert to num failed, return fallback\n if (typeof num === \"string\" && Number.isNaN(Number(num))) {\n return options?.fallback || \"--\";\n }\n\n const prefix = options?.prefix || \"\";\n if (typeof num === \"undefined\") {\n return prefix + (options?.fallback || \"--\");\n }\n const value = commify(num, options?.fix);\n\n if (options && options.padEnd && options.fix) {\n const fillString = options?.fillString || \"0\";\n const hasDecimal = value.includes(\".\");\n const list = value.split(\".\");\n if (hasDecimal) {\n return prefix + list[0] + \".\" + list[1].padEnd(options.fix, fillString);\n }\n return prefix + list[0] + \".\" + \"\".padEnd(options.fix, fillString);\n }\n return prefix + value;\n};\n\nconst THOUSANDS_REGEXP = /\\B(?=(\\d{3})+(?!\\d))/g;\nexport const commify = (num: number | string, fix?: number): string => {\n const str = `${num}`;\n const parts = str.split(\".\");\n const numberPart = parts[0];\n const decimalPart = parts[1];\n const endsWithPoint = str.endsWith(\".\") && str.length > 1;\n const result =\n numberPart.replace(THOUSANDS_REGEXP, \",\") +\n (decimalPart\n ? \".\" + decimalPart.substring(0, fix || decimalPart.length)\n : endsWithPoint\n ? \".\"\n : \"\");\n\n if (fix === 0 && result.includes(\".\")) {\n return result.substring(0, result.indexOf(\".\"));\n }\n return result;\n};\n\nconst SCIENTIFICNOTATION_REGEX = /\\d(?:\\.(\\d*))?e([+-]\\d+)/;\nexport const toNonExponential = (num: number) => {\n const m = num.toExponential().match(SCIENTIFICNOTATION_REGEX);\n if (!Array.isArray(m)) {\n return num;\n }\n return num.toFixed(\n Math.max(0, (m[1] || \"\").length - (m[2] as unknown as number)),\n );\n};\n\nexport const getPrecisionByNumber = (num: number | string) => {\n num = toNonExponential(Number(num));\n const parts = num.toString().split(\".\");\n return parts[1] ? parts[1].length : 0;\n};\n\n/**\n *\n * @example\n * const number1 = 12345;\n * const number2 = 987654321;\n */\nexport function numberToHumanStyle(\n number: number,\n decimalPlaces: number = 2,\n options?: {\n padding?: boolean;\n },\n): string {\n const { padding } = options || {};\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\"];\n\n let index = 0;\n while (number >= 1000 && index < abbreviations.length - 1) {\n number /= 1000;\n index++;\n }\n\n const roundedNumber = new Decimal(number)\n .toFixed(decimalPlaces, Decimal.ROUND_DOWN)\n .toString()\n .replace(/\\.0+$/, \"\");\n\n return `${roundedNumber}${abbreviations[index]}`;\n}\n\n// export function numberToHumanStyle(num: number, dp: number = 0): string {\n// const absNum = Math.abs(num);\n// let formattedNum = \"\";\n\n// let exp;\n\n// if (absNum >= 1e12) {\n// formattedNum = (num / 1e12).toFixed(dp) + \"T\";\n// } else if (absNum >= 1e9) {\n// formattedNum = (num / 1e9).toFixed(dp) + \"B\";\n// } else if (absNum >= 1e6) {\n// formattedNum = (num / 1e6).toFixed(dp) + \"M\";\n// } else if (absNum >= 1e3) {\n// formattedNum = (num / 1e3).toFixed(dp) + \"K\";\n// } else {\n// formattedNum = num.toString();\n// }\n\n// formattedNum = formattedNum.replace(/\\.0$/, \"\");\n\n// return formattedNum;\n// }\n\nexport function parseNumStr(str: string | number): Decimal | undefined {\n const value = str.toString();\n const cleanedStr = value.replace(/,/g, \"\"); // remove `,` char\n const numberPart = new Decimal(cleanedStr);\n const unitPart = cleanedStr.slice(-1);\n\n if (Number.isNaN(numberPart.toNumber())) {\n return undefined; // invalid data\n }\n\n let result;\n\n switch (unitPart) {\n case \"k\":\n case \"K\":\n result = numberPart.mul(1000);\n break;\n case \"m\":\n case \"M\":\n result = numberPart.mul(1000000);\n break;\n case \"b\":\n case \"B\":\n result = numberPart.mul(1000000000);\n break;\n case \"t\":\n case \"T\":\n result = numberPart.mul(1000000000000);\n break;\n default:\n result = numberPart;\n }\n\n return result;\n}\n\nconst SCIENTIFICNOTATIONPATTERN = /^[-+]?[0-9]+(\\.[0-9]+)?[eE][-+]?[0-9]+$/;\n\nconst TRAILINGZERODECIMAL_REGEX = /(\\.[0-9]*[1-9])0+$/;\n\n//** remove trailing zeros 0.00000100 => 0.000001, 1 => 1 */\nexport const removeTrailingZeros = (value: number, fixedCount: number = 16) => {\n const text = `${value}`;\n const isScientific = SCIENTIFICNOTATIONPATTERN.test(text);\n if (!value.toString().includes(\".\") && !isScientific) {\n return `${value}`;\n }\n const formattedNumber = new Decimal(value)\n .toFixed(fixedCount)\n .replace(TRAILINGZERODECIMAL_REGEX, \"$1\");\n return formattedNumber;\n};\n\nexport const todpIfNeed = (value: string | number, dp: number) => {\n if (value === undefined || value === \"\") {\n return value;\n }\n\n if (typeof value === \"number\") {\n value = value.toString();\n }\n\n if (value.endsWith(\".\")) {\n return value;\n }\n\n const numbers = value.split(\".\");\n\n if (numbers.length === 1) {\n return value;\n }\n\n if (numbers[1].length <= dp || !numbers[1]) {\n return value;\n }\n\n return `${numbers[0]}.${numbers[1].substring(0, dp)}`;\n};\n\nexport const checkIsNaN = (value: string | number | undefined | null) => {\n if (value === undefined || value === \"\" || value === null) {\n return true;\n }\n return Number.isNaN(Number(value));\n};\n\n/**\n * Format number for display: use decimal places when >= 1, otherwise significant digits.\n * Returns number when >= 1, string when < 1 (to preserve leading zeros in small numbers).\n * @example\n * formatWithPrecision(new Decimal(0.0000000123456), 2) => 0.000000012\n * formatWithPrecision(new Decimal(1.23456), 2) => 1.23\n */\nexport const formatWithPrecision = (\n num: number | string | Decimal,\n precision: number = 2,\n): number | string => {\n const numDecimal = new Decimal(num || 0);\n\n if (numDecimal.gte(1)) {\n return numDecimal.todp(precision, Decimal.ROUND_DOWN).toNumber();\n }\n return numDecimal\n .toSignificantDigits(precision, Decimal.ROUND_DOWN)\n .toFixed();\n};\n","export const timeConvertString = (time: number): number[] => {\n time /= 1000;\n const h = Math.floor(time / 3600);\n const m = Math.floor((time / 60) % 60);\n const s = Math.floor(time % 60);\n return [h, m, s];\n};\n\n/// will be return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number): string => {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n","import {\n ADI_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n SOLANA_MAINNET_CHAINID,\n} from \"@orderly.network/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\nexport const praseChainId = (chainId: string | number): number => {\n if (typeof chainId === \"string\") return hex2int(chainId);\n return chainId;\n};\n\nexport const praseChainIdToNumber = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const parseChainIdToNumber = praseChainIdToNumber;\n\nexport const isTestnet = (chainId: number) => {\n const testnetIds = [\n ARBITRUM_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n ADI_TESTNET_CHAINID,\n ];\n\n return testnetIds.includes(chainId);\n};\n\nexport const isSolana = (chainId: number) => {\n return [SOLANA_TESTNET_CHAINID, SOLANA_MAINNET_CHAINID].includes(chainId);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToUnderscoreCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n // let index = 0;\n\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n\n return index;\n }\n\n return -1;\n};\n","export const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__ORDERLY_timestamp_offset;\n if (typeof timeOffset === 'number') {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n}","import { numberToHumanStyle } from \"./decimal\";\n\n/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n\n/**\n * Optimize symbol text display by converting leading numbers to human-readable format\n *\n * This function matches numbers at the beginning of a symbol string and converts them\n * to abbreviated format (K, M, B, T) for better readability.\n *\n * @param symbol - The symbol string to optimize (e.g., \"1000000BABYDOGE\")\n * @param decimalPlaces - Number of decimal places for the abbreviated number (default: 0)\n * @returns Optimized symbol string (e.g., \"1MBABYDOGE\")\n *\n * @example\n * ```typescript\n * // Basic usage - convert large numbers to abbreviated format\n * optimizeSymbolDisplay(\"1000000BABYDOGE\") // \"1MBABYDOGE\"\n * optimizeSymbolDisplay(\"5000ETH\") // \"5KETH\"\n * optimizeSymbolDisplay(\"1500000000SHIB\") // \"1BSHIB\"\n * optimizeSymbolDisplay(\"2000000000000TOKEN\") // \"2TTOKEN\"\n *\n * // With decimal places\n * optimizeSymbolDisplay(\"1500000TOKEN\", 1) // \"1.5MTOKEN\"\n * optimizeSymbolDisplay(\"2750000COIN\", 2) // \"2.75MTOKEN\"\n *\n * // Edge cases - no modification needed\n * optimizeSymbolDisplay(\"BITCOIN\") // \"BITCOIN\" (no leading number)\n * optimizeSymbolDisplay(\"123.45TOKEN\") // \"123.45TOKEN\" (less than 1000)\n * optimizeSymbolDisplay(\"999COIN\") // \"999COIN\" (less than 1000)\n *\n * // Usage in React component\n * <SymbolText size=\"sm\" optimizeDisplay={true} decimalPlaces={1}>\n * 1000000BABYDOGE\n * </SymbolText>\n * // Renders: \"1MBABYDOGE\" with token icon\n * ```\n */\nexport function optimizeSymbolDisplay(\n symbol: string,\n decimalPlaces: number = 0,\n): string {\n if (!symbol) {\n return \"\";\n }\n\n // Regular expression to match numbers at the beginning of the string\n // Matches: optional decimal numbers starting from the beginning\n const numberRegex = /^(\\d+(?:\\.\\d+)?)/;\n const match = symbol.match(numberRegex);\n\n if (!match) {\n // No leading number found, return original symbol\n return symbol;\n }\n\n const numberPart = match[1]; // The matched number string\n const textPart = symbol.slice(numberPart.length); // The remaining text after the number\n const numericValue = parseFloat(numberPart);\n\n // Only convert numbers >= 1000 to abbreviated format\n if (numericValue < 1000) {\n return symbol;\n }\n\n // Use the imported numberToHumanStyle function from decimal utils\n const abbreviatedNumber = numberToHumanStyle(numericValue, decimalPlaces);\n\n return abbreviatedNumber + textPart;\n}\n","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport Decimal from \"./decimal\";\n\n/**\n * Trailing stop price calculation\n * If using trailing_value\n * Long (buy): trailing_stop = extreme_price - trailing_value\n * Short (sell): trailing_stop = extreme_price + trailing_value\n *\n * If using trailing_rate\n * Long (buy): extreme_price * (1 - trailing_rate)\n * Short (sell): extreme_price * (1 + trailing_rate)\n */\nexport function getTrailingStopPrice(order: API.AlgoOrderExt) {\n const { side, extreme_price, callback_value, callback_rate } = order;\n\n const isBuy = side === OrderSide.BUY;\n\n if (!extreme_price) {\n return 0;\n }\n\n if (callback_value) {\n return isBuy\n ? new Decimal(extreme_price).plus(callback_value).toNumber()\n : new Decimal(extreme_price).minus(callback_value).toNumber();\n }\n\n if (callback_rate) {\n return isBuy\n ? new Decimal(extreme_price)\n .mul(new Decimal(1).plus(callback_rate))\n .toNumber()\n : new Decimal(extreme_price)\n .mul(new Decimal(1).minus(callback_rate))\n .toNumber();\n }\n\n return 0;\n}\n\nexport function getBBOType(options: {\n type: OrderType;\n side: OrderSide;\n level: OrderLevel;\n}) {\n const { type, side, level } = options;\n if (type === OrderType.ASK) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY1\n : BBOOrderType.QUEUE1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY5\n : BBOOrderType.QUEUE5;\n }\n }\n\n if (type === OrderType.BID) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE1\n : BBOOrderType.COUNTERPARTY1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE5\n : BBOOrderType.COUNTERPARTY5;\n }\n }\n}\n\nexport function getTPSLDirection(inputs: {\n side: OrderSide;\n type: \"tp\" | \"sl\";\n closePrice: number;\n orderPrice: number;\n}) {\n const { side, type, closePrice, orderPrice } = inputs;\n\n let direction = 1;\n if (side === OrderSide.BUY) {\n if (type === \"tp\") {\n // close price >= order price\n direction = closePrice >= orderPrice ? 1 : -1;\n } else {\n // close price < order price\n direction = closePrice < orderPrice ? -1 : 1;\n }\n }\n\n if (side === OrderSide.SELL) {\n if (type === \"tp\") {\n // close price <= order price\n direction = closePrice <= orderPrice ? 1 : -1;\n } else {\n // close price > order price\n direction = closePrice > orderPrice ? -1 : 1;\n }\n }\n\n return direction;\n}\n","import Decimal from \"./decimal\";\n\nenum FormatNumType {\n pnl,\n notional,\n roi,\n assetValue,\n collateral,\n}\n\nfunction formatNum(\n type: FormatNumType,\n dp: number = 2,\n num?: number | Decimal | string,\n rm?: number,\n): Decimal | undefined {\n // parse to decimal\n const decimalNum = parseToDecimal(num);\n\n // if parse to decimal failed, return fallback\n if (!decimalNum) {\n return undefined;\n }\n\n // check if the number is greater than 0\n const isMoreThanZero = decimalNum.greaterThan(0);\n\n // format the number based on the type\n switch (type) {\n case FormatNumType.pnl:\n case FormatNumType.roi:\n const innerRm =\n rm ?? (isMoreThanZero ? Decimal.ROUND_DOWN : Decimal.ROUND_UP);\n return format(decimalNum, dp, innerRm);\n case FormatNumType.notional:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.assetValue:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.collateral:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n }\n}\n\n// format the number to the number of decimal places\nfunction format(num: Decimal, dp: number, rm: number) {\n return num.toDecimalPlaces(dp, rm);\n}\n\nfunction parseToDecimal(num?: number | Decimal | string): Decimal | undefined {\n try {\n if (num instanceof Decimal) {\n return num;\n }\n if (!num) {\n return undefined;\n }\n if (typeof num === \"number\") {\n return new Decimal(num);\n }\n if (typeof num === \"string\") {\n if (!num.trim()) {\n return undefined;\n }\n return new Decimal(num);\n }\n return num;\n } catch (error) {\n return undefined;\n }\n}\n\n// export the formatNum with namespace\ntype FormatNumWithNamespace = typeof formatNum & {\n pnl: (num?: number | Decimal | string) => Decimal | undefined;\n notional: (num?: number | Decimal | string) => Decimal | undefined;\n roi: (num?: number | Decimal | string, dp?: number) => Decimal | undefined;\n assetValue: (num?: number | Decimal | string) => Decimal | undefined;\n collateral: (num?: number | Decimal | string) => Decimal | undefined;\n};\n\nconst formatNumWithNamespace = formatNum as FormatNumWithNamespace;\n\n// add namespace method to formatNum\nformatNumWithNamespace.pnl = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.pnl, 2, num);\n};\n\nformatNumWithNamespace.notional = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.notional, 2, num);\n};\n\nformatNumWithNamespace.roi = (num?: number | Decimal | string, dp?: number) => {\n return formatNum(FormatNumType.roi, dp ?? 4, num);\n};\n\nformatNumWithNamespace.assetValue = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.assetValue, 2, num);\n};\n\nformatNumWithNamespace.collateral = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.collateral, 2, num);\n};\n\nexport { formatNumWithNamespace as formatNum };\n"],"mappings":"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","names":["Decimal","import_types"]} | ||
| {"version":3,"sources":["../src/index.ts","../src/decimal.ts","../src/dateTime.ts","../src/chain.ts","../src/string.ts","../src/window.ts","../src/symbol.ts","../src/order.ts","../src/formatNum.ts"],"sourcesContent":["// import dayjs from \"dayjs\";\n\nexport { default as Decimal } from \"./decimal\";\nexport * from \"./decimal\";\nexport * from \"./dateTime\";\nexport * from \"./chain\";\nexport * from \"./string\";\nexport { windowGuard, getGlobalObject, getTimestamp } from \"./window\";\nexport { default as dayjs } from \"dayjs\";\nexport * from \"./symbol\";\nexport * from \"./order\";\nexport * from \"./formatNum\";\n\n// export { dayjs };\n","import Decimal from \"decimal.js-light\";\n\nexport type { Numeric } from \"decimal.js-light\";\n\nDecimal.set({ rounding: Decimal.ROUND_DOWN });\n\nexport default Decimal;\n\nexport const cutNumber = (num: number | string, lenght: number) => {};\n\nexport const zero = new Decimal(0);\n\n/** if num is undefined, returns options?.fallback || '-', otherwise it formats */\nexport const commifyOptional = (\n num?: number | string,\n options?: {\n fix?: number;\n fallback?: string;\n padEnd?: boolean;\n /// default is '0'\n fillString?: string;\n prefix?: string;\n },\n): string => {\n // if num convert to num failed, return fallback\n if (typeof num === \"string\" && Number.isNaN(Number(num))) {\n return options?.fallback || \"--\";\n }\n\n const prefix = options?.prefix || \"\";\n if (typeof num === \"undefined\") {\n return prefix + (options?.fallback || \"--\");\n }\n const value = commify(num, options?.fix);\n\n if (options && options.padEnd && options.fix) {\n const fillString = options?.fillString || \"0\";\n const hasDecimal = value.includes(\".\");\n const list = value.split(\".\");\n if (hasDecimal) {\n return prefix + list[0] + \".\" + list[1].padEnd(options.fix, fillString);\n }\n return prefix + list[0] + \".\" + \"\".padEnd(options.fix, fillString);\n }\n return prefix + value;\n};\n\nconst THOUSANDS_REGEXP = /\\B(?=(\\d{3})+(?!\\d))/g;\nexport const commify = (num: number | string, fix?: number): string => {\n const str = `${num}`;\n const parts = str.split(\".\");\n const numberPart = parts[0];\n const decimalPart = parts[1];\n const endsWithPoint = str.endsWith(\".\") && str.length > 1;\n const result =\n numberPart.replace(THOUSANDS_REGEXP, \",\") +\n (decimalPart\n ? \".\" + decimalPart.substring(0, fix || decimalPart.length)\n : endsWithPoint\n ? \".\"\n : \"\");\n\n if (fix === 0 && result.includes(\".\")) {\n return result.substring(0, result.indexOf(\".\"));\n }\n return result;\n};\n\nconst SCIENTIFICNOTATION_REGEX = /\\d(?:\\.(\\d*))?e([+-]\\d+)/;\nexport const toNonExponential = (num: number) => {\n const m = num.toExponential().match(SCIENTIFICNOTATION_REGEX);\n if (!Array.isArray(m)) {\n return num;\n }\n return num.toFixed(\n Math.max(0, (m[1] || \"\").length - (m[2] as unknown as number)),\n );\n};\n\nexport const getPrecisionByNumber = (num: number | string) => {\n num = toNonExponential(Number(num));\n const parts = num.toString().split(\".\");\n return parts[1] ? parts[1].length : 0;\n};\n\n/**\n *\n * @example\n * const number1 = 12345;\n * const number2 = 987654321;\n */\nexport function numberToHumanStyle(\n number: number,\n decimalPlaces: number = 2,\n options?: {\n padding?: boolean;\n },\n): string {\n const { padding } = options || {};\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\"];\n\n let index = 0;\n while (number >= 1000 && index < abbreviations.length - 1) {\n number /= 1000;\n index++;\n }\n\n const roundedNumber = new Decimal(number)\n .toFixed(decimalPlaces, Decimal.ROUND_DOWN)\n .toString()\n .replace(/\\.0+$/, \"\");\n\n return `${roundedNumber}${abbreviations[index]}`;\n}\n\n// export function numberToHumanStyle(num: number, dp: number = 0): string {\n// const absNum = Math.abs(num);\n// let formattedNum = \"\";\n\n// let exp;\n\n// if (absNum >= 1e12) {\n// formattedNum = (num / 1e12).toFixed(dp) + \"T\";\n// } else if (absNum >= 1e9) {\n// formattedNum = (num / 1e9).toFixed(dp) + \"B\";\n// } else if (absNum >= 1e6) {\n// formattedNum = (num / 1e6).toFixed(dp) + \"M\";\n// } else if (absNum >= 1e3) {\n// formattedNum = (num / 1e3).toFixed(dp) + \"K\";\n// } else {\n// formattedNum = num.toString();\n// }\n\n// formattedNum = formattedNum.replace(/\\.0$/, \"\");\n\n// return formattedNum;\n// }\n\nexport function parseNumStr(str: string | number): Decimal | undefined {\n const value = str.toString();\n const cleanedStr = value.replace(/,/g, \"\"); // remove `,` char\n const numberPart = new Decimal(cleanedStr);\n const unitPart = cleanedStr.slice(-1);\n\n if (Number.isNaN(numberPart.toNumber())) {\n return undefined; // invalid data\n }\n\n let result;\n\n switch (unitPart) {\n case \"k\":\n case \"K\":\n result = numberPart.mul(1000);\n break;\n case \"m\":\n case \"M\":\n result = numberPart.mul(1000000);\n break;\n case \"b\":\n case \"B\":\n result = numberPart.mul(1000000000);\n break;\n case \"t\":\n case \"T\":\n result = numberPart.mul(1000000000000);\n break;\n default:\n result = numberPart;\n }\n\n return result;\n}\n\nconst SCIENTIFICNOTATIONPATTERN = /^[-+]?[0-9]+(\\.[0-9]+)?[eE][-+]?[0-9]+$/;\n\nconst TRAILINGZERODECIMAL_REGEX = /(\\.[0-9]*[1-9])0+$/;\n\n//** remove trailing zeros 0.00000100 => 0.000001, 1 => 1 */\nexport const removeTrailingZeros = (value: number, fixedCount: number = 16) => {\n const text = `${value}`;\n const isScientific = SCIENTIFICNOTATIONPATTERN.test(text);\n if (!value.toString().includes(\".\") && !isScientific) {\n return `${value}`;\n }\n const formattedNumber = new Decimal(value)\n .toFixed(fixedCount)\n .replace(TRAILINGZERODECIMAL_REGEX, \"$1\");\n return formattedNumber;\n};\n\nexport const todpIfNeed = (value: string | number, dp: number) => {\n if (value === undefined || value === \"\") {\n return value;\n }\n\n if (typeof value === \"number\") {\n value = value.toString();\n }\n\n if (value.endsWith(\".\")) {\n return value;\n }\n\n const numbers = value.split(\".\");\n\n if (numbers.length === 1) {\n return value;\n }\n\n if (numbers[1].length <= dp || !numbers[1]) {\n return value;\n }\n\n return `${numbers[0]}.${numbers[1].substring(0, dp)}`;\n};\n\nexport const checkIsNaN = (value: string | number | undefined | null) => {\n if (value === undefined || value === \"\" || value === null) {\n return true;\n }\n return Number.isNaN(Number(value));\n};\n\n/**\n * Format number for display: use decimal places when >= 1, otherwise significant digits.\n * Returns number when >= 1, string when < 1 (to preserve leading zeros in small numbers).\n * @example\n * formatWithPrecision(new Decimal(0.0000000123456), 2) => 0.000000012\n * formatWithPrecision(new Decimal(1.23456), 2) => 1.23\n */\nexport const formatWithPrecision = (\n num: number | string | Decimal,\n precision: number = 2,\n): number | string => {\n const numDecimal = new Decimal(num || 0);\n\n if (numDecimal.gte(1)) {\n return numDecimal.todp(precision, Decimal.ROUND_DOWN).toNumber();\n }\n return numDecimal\n .toSignificantDigits(precision, Decimal.ROUND_DOWN)\n .toFixed();\n};\n","export const timeConvertString = (time: number): number[] => {\n time /= 1000;\n const h = Math.floor(time / 3600);\n const m = Math.floor((time / 60) % 60);\n const s = Math.floor(time % 60);\n return [h, m, s];\n};\n\n/// will be return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number): string => {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n","import {\n ADI_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n SOLANA_MAINNET_CHAINID,\n XLAYER_TESTNET_CHAINID,\n} from \"@orderly.network/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\nexport const praseChainId = (chainId: string | number): number => {\n if (typeof chainId === \"string\") return hex2int(chainId);\n return chainId;\n};\n\nexport const praseChainIdToNumber = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const parseChainIdToNumber = praseChainIdToNumber;\n\nexport const isTestnet = (chainId: number) => {\n const testnetIds = [\n ARBITRUM_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n ADI_TESTNET_CHAINID,\n XLAYER_TESTNET_CHAINID,\n ];\n\n return testnetIds.includes(chainId);\n};\n\nexport const isSolana = (chainId: number) => {\n return [SOLANA_TESTNET_CHAINID, SOLANA_MAINNET_CHAINID].includes(chainId);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToUnderscoreCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n // let index = 0;\n\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n\n return index;\n }\n\n return -1;\n};\n","export const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__ORDERLY_timestamp_offset;\n if (typeof timeOffset === 'number') {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n}","import { numberToHumanStyle } from \"./decimal\";\n\n/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n\n/**\n * Optimize symbol text display by converting leading numbers to human-readable format\n *\n * This function matches numbers at the beginning of a symbol string and converts them\n * to abbreviated format (K, M, B, T) for better readability.\n *\n * @param symbol - The symbol string to optimize (e.g., \"1000000BABYDOGE\")\n * @param decimalPlaces - Number of decimal places for the abbreviated number (default: 0)\n * @returns Optimized symbol string (e.g., \"1MBABYDOGE\")\n *\n * @example\n * ```typescript\n * // Basic usage - convert large numbers to abbreviated format\n * optimizeSymbolDisplay(\"1000000BABYDOGE\") // \"1MBABYDOGE\"\n * optimizeSymbolDisplay(\"5000ETH\") // \"5KETH\"\n * optimizeSymbolDisplay(\"1500000000SHIB\") // \"1BSHIB\"\n * optimizeSymbolDisplay(\"2000000000000TOKEN\") // \"2TTOKEN\"\n *\n * // With decimal places\n * optimizeSymbolDisplay(\"1500000TOKEN\", 1) // \"1.5MTOKEN\"\n * optimizeSymbolDisplay(\"2750000COIN\", 2) // \"2.75MTOKEN\"\n *\n * // Edge cases - no modification needed\n * optimizeSymbolDisplay(\"BITCOIN\") // \"BITCOIN\" (no leading number)\n * optimizeSymbolDisplay(\"123.45TOKEN\") // \"123.45TOKEN\" (less than 1000)\n * optimizeSymbolDisplay(\"999COIN\") // \"999COIN\" (less than 1000)\n *\n * // Usage in React component\n * <SymbolText size=\"sm\" optimizeDisplay={true} decimalPlaces={1}>\n * 1000000BABYDOGE\n * </SymbolText>\n * // Renders: \"1MBABYDOGE\" with token icon\n * ```\n */\nexport function optimizeSymbolDisplay(\n symbol: string,\n decimalPlaces: number = 0,\n): string {\n if (!symbol) {\n return \"\";\n }\n\n // Regular expression to match numbers at the beginning of the string\n // Matches: optional decimal numbers starting from the beginning\n const numberRegex = /^(\\d+(?:\\.\\d+)?)/;\n const match = symbol.match(numberRegex);\n\n if (!match) {\n // No leading number found, return original symbol\n return symbol;\n }\n\n const numberPart = match[1]; // The matched number string\n const textPart = symbol.slice(numberPart.length); // The remaining text after the number\n const numericValue = parseFloat(numberPart);\n\n // Only convert numbers >= 1000 to abbreviated format\n if (numericValue < 1000) {\n return symbol;\n }\n\n // Use the imported numberToHumanStyle function from decimal utils\n const abbreviatedNumber = numberToHumanStyle(numericValue, decimalPlaces);\n\n return abbreviatedNumber + textPart;\n}\n","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport Decimal from \"./decimal\";\n\n/**\n * Trailing stop price calculation\n * If using trailing_value\n * Long (buy): trailing_stop = extreme_price - trailing_value\n * Short (sell): trailing_stop = extreme_price + trailing_value\n *\n * If using trailing_rate\n * Long (buy): extreme_price * (1 - trailing_rate)\n * Short (sell): extreme_price * (1 + trailing_rate)\n */\nexport function getTrailingStopPrice(order: API.AlgoOrderExt) {\n const { side, extreme_price, callback_value, callback_rate } = order;\n\n const isBuy = side === OrderSide.BUY;\n\n if (!extreme_price) {\n return 0;\n }\n\n if (callback_value) {\n return isBuy\n ? new Decimal(extreme_price).plus(callback_value).toNumber()\n : new Decimal(extreme_price).minus(callback_value).toNumber();\n }\n\n if (callback_rate) {\n return isBuy\n ? new Decimal(extreme_price)\n .mul(new Decimal(1).plus(callback_rate))\n .toNumber()\n : new Decimal(extreme_price)\n .mul(new Decimal(1).minus(callback_rate))\n .toNumber();\n }\n\n return 0;\n}\n\nexport function getBBOType(options: {\n type: OrderType;\n side: OrderSide;\n level: OrderLevel;\n}) {\n const { type, side, level } = options;\n if (type === OrderType.ASK) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY1\n : BBOOrderType.QUEUE1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY5\n : BBOOrderType.QUEUE5;\n }\n }\n\n if (type === OrderType.BID) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE1\n : BBOOrderType.COUNTERPARTY1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE5\n : BBOOrderType.COUNTERPARTY5;\n }\n }\n}\n\nexport function getTPSLDirection(inputs: {\n side: OrderSide;\n type: \"tp\" | \"sl\";\n closePrice: number;\n orderPrice: number;\n}) {\n const { side, type, closePrice, orderPrice } = inputs;\n\n let direction = 1;\n if (side === OrderSide.BUY) {\n if (type === \"tp\") {\n // close price >= order price\n direction = closePrice >= orderPrice ? 1 : -1;\n } else {\n // close price < order price\n direction = closePrice < orderPrice ? -1 : 1;\n }\n }\n\n if (side === OrderSide.SELL) {\n if (type === \"tp\") {\n // close price <= order price\n direction = closePrice <= orderPrice ? 1 : -1;\n } else {\n // close price > order price\n direction = closePrice > orderPrice ? -1 : 1;\n }\n }\n\n return direction;\n}\n","import Decimal from \"./decimal\";\n\nenum FormatNumType {\n pnl,\n notional,\n roi,\n assetValue,\n collateral,\n}\n\nfunction formatNum(\n type: FormatNumType,\n dp: number = 2,\n num?: number | Decimal | string,\n rm?: number,\n): Decimal | undefined {\n // parse to decimal\n const decimalNum = parseToDecimal(num);\n\n // if parse to decimal failed, return fallback\n if (!decimalNum) {\n return undefined;\n }\n\n // check if the number is greater than 0\n const isMoreThanZero = decimalNum.greaterThan(0);\n\n // format the number based on the type\n switch (type) {\n case FormatNumType.pnl:\n case FormatNumType.roi:\n const innerRm =\n rm ?? (isMoreThanZero ? Decimal.ROUND_DOWN : Decimal.ROUND_UP);\n return format(decimalNum, dp, innerRm);\n case FormatNumType.notional:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.assetValue:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.collateral:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n }\n}\n\n// format the number to the number of decimal places\nfunction format(num: Decimal, dp: number, rm: number) {\n return num.toDecimalPlaces(dp, rm);\n}\n\nfunction parseToDecimal(num?: number | Decimal | string): Decimal | undefined {\n try {\n if (num instanceof Decimal) {\n return num;\n }\n if (!num) {\n return undefined;\n }\n if (typeof num === \"number\") {\n return new Decimal(num);\n }\n if (typeof num === \"string\") {\n if (!num.trim()) {\n return undefined;\n }\n return new Decimal(num);\n }\n return num;\n } catch (error) {\n return undefined;\n }\n}\n\n// export the formatNum with namespace\ntype FormatNumWithNamespace = typeof formatNum & {\n pnl: (num?: number | Decimal | string) => Decimal | undefined;\n notional: (num?: number | Decimal | string) => Decimal | undefined;\n roi: (num?: number | Decimal | string, dp?: number) => Decimal | undefined;\n assetValue: (num?: number | Decimal | string) => Decimal | undefined;\n collateral: (num?: number | Decimal | string) => Decimal | undefined;\n};\n\nconst formatNumWithNamespace = formatNum as FormatNumWithNamespace;\n\n// add namespace method to formatNum\nformatNumWithNamespace.pnl = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.pnl, 2, num);\n};\n\nformatNumWithNamespace.notional = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.notional, 2, num);\n};\n\nformatNumWithNamespace.roi = (num?: number | Decimal | string, dp?: number) => {\n return formatNum(FormatNumType.roi, dp ?? 4, num);\n};\n\nformatNumWithNamespace.assetValue = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.assetValue, 2, num);\n};\n\nformatNumWithNamespace.collateral = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.collateral, 2, num);\n};\n\nexport { formatNumWithNamespace as formatNum };\n"],"mappings":"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","names":["Decimal","import_types"]} |
+4
-2
@@ -176,3 +176,4 @@ // src/decimal.ts | ||
| STORY_TESTNET_CHAINID, | ||
| SOLANA_MAINNET_CHAINID | ||
| SOLANA_MAINNET_CHAINID, | ||
| XLAYER_TESTNET_CHAINID | ||
| } from "@orderly.network/types"; | ||
@@ -199,3 +200,4 @@ var hex2int = (chainId) => parseInt(chainId); | ||
| BSC_TESTNET_CHAINID, | ||
| ADI_TESTNET_CHAINID | ||
| ADI_TESTNET_CHAINID, | ||
| XLAYER_TESTNET_CHAINID | ||
| ]; | ||
@@ -202,0 +204,0 @@ return testnetIds.includes(chainId); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/decimal.ts","../src/dateTime.ts","../src/chain.ts","../src/string.ts","../src/window.ts","../src/index.ts","../src/symbol.ts","../src/order.ts","../src/formatNum.ts"],"sourcesContent":["import Decimal from \"decimal.js-light\";\n\nexport type { Numeric } from \"decimal.js-light\";\n\nDecimal.set({ rounding: Decimal.ROUND_DOWN });\n\nexport default Decimal;\n\nexport const cutNumber = (num: number | string, lenght: number) => {};\n\nexport const zero = new Decimal(0);\n\n/** if num is undefined, returns options?.fallback || '-', otherwise it formats */\nexport const commifyOptional = (\n num?: number | string,\n options?: {\n fix?: number;\n fallback?: string;\n padEnd?: boolean;\n /// default is '0'\n fillString?: string;\n prefix?: string;\n },\n): string => {\n // if num convert to num failed, return fallback\n if (typeof num === \"string\" && Number.isNaN(Number(num))) {\n return options?.fallback || \"--\";\n }\n\n const prefix = options?.prefix || \"\";\n if (typeof num === \"undefined\") {\n return prefix + (options?.fallback || \"--\");\n }\n const value = commify(num, options?.fix);\n\n if (options && options.padEnd && options.fix) {\n const fillString = options?.fillString || \"0\";\n const hasDecimal = value.includes(\".\");\n const list = value.split(\".\");\n if (hasDecimal) {\n return prefix + list[0] + \".\" + list[1].padEnd(options.fix, fillString);\n }\n return prefix + list[0] + \".\" + \"\".padEnd(options.fix, fillString);\n }\n return prefix + value;\n};\n\nconst THOUSANDS_REGEXP = /\\B(?=(\\d{3})+(?!\\d))/g;\nexport const commify = (num: number | string, fix?: number): string => {\n const str = `${num}`;\n const parts = str.split(\".\");\n const numberPart = parts[0];\n const decimalPart = parts[1];\n const endsWithPoint = str.endsWith(\".\") && str.length > 1;\n const result =\n numberPart.replace(THOUSANDS_REGEXP, \",\") +\n (decimalPart\n ? \".\" + decimalPart.substring(0, fix || decimalPart.length)\n : endsWithPoint\n ? \".\"\n : \"\");\n\n if (fix === 0 && result.includes(\".\")) {\n return result.substring(0, result.indexOf(\".\"));\n }\n return result;\n};\n\nconst SCIENTIFICNOTATION_REGEX = /\\d(?:\\.(\\d*))?e([+-]\\d+)/;\nexport const toNonExponential = (num: number) => {\n const m = num.toExponential().match(SCIENTIFICNOTATION_REGEX);\n if (!Array.isArray(m)) {\n return num;\n }\n return num.toFixed(\n Math.max(0, (m[1] || \"\").length - (m[2] as unknown as number)),\n );\n};\n\nexport const getPrecisionByNumber = (num: number | string) => {\n num = toNonExponential(Number(num));\n const parts = num.toString().split(\".\");\n return parts[1] ? parts[1].length : 0;\n};\n\n/**\n *\n * @example\n * const number1 = 12345;\n * const number2 = 987654321;\n */\nexport function numberToHumanStyle(\n number: number,\n decimalPlaces: number = 2,\n options?: {\n padding?: boolean;\n },\n): string {\n const { padding } = options || {};\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\"];\n\n let index = 0;\n while (number >= 1000 && index < abbreviations.length - 1) {\n number /= 1000;\n index++;\n }\n\n const roundedNumber = new Decimal(number)\n .toFixed(decimalPlaces, Decimal.ROUND_DOWN)\n .toString()\n .replace(/\\.0+$/, \"\");\n\n return `${roundedNumber}${abbreviations[index]}`;\n}\n\n// export function numberToHumanStyle(num: number, dp: number = 0): string {\n// const absNum = Math.abs(num);\n// let formattedNum = \"\";\n\n// let exp;\n\n// if (absNum >= 1e12) {\n// formattedNum = (num / 1e12).toFixed(dp) + \"T\";\n// } else if (absNum >= 1e9) {\n// formattedNum = (num / 1e9).toFixed(dp) + \"B\";\n// } else if (absNum >= 1e6) {\n// formattedNum = (num / 1e6).toFixed(dp) + \"M\";\n// } else if (absNum >= 1e3) {\n// formattedNum = (num / 1e3).toFixed(dp) + \"K\";\n// } else {\n// formattedNum = num.toString();\n// }\n\n// formattedNum = formattedNum.replace(/\\.0$/, \"\");\n\n// return formattedNum;\n// }\n\nexport function parseNumStr(str: string | number): Decimal | undefined {\n const value = str.toString();\n const cleanedStr = value.replace(/,/g, \"\"); // remove `,` char\n const numberPart = new Decimal(cleanedStr);\n const unitPart = cleanedStr.slice(-1);\n\n if (Number.isNaN(numberPart.toNumber())) {\n return undefined; // invalid data\n }\n\n let result;\n\n switch (unitPart) {\n case \"k\":\n case \"K\":\n result = numberPart.mul(1000);\n break;\n case \"m\":\n case \"M\":\n result = numberPart.mul(1000000);\n break;\n case \"b\":\n case \"B\":\n result = numberPart.mul(1000000000);\n break;\n case \"t\":\n case \"T\":\n result = numberPart.mul(1000000000000);\n break;\n default:\n result = numberPart;\n }\n\n return result;\n}\n\nconst SCIENTIFICNOTATIONPATTERN = /^[-+]?[0-9]+(\\.[0-9]+)?[eE][-+]?[0-9]+$/;\n\nconst TRAILINGZERODECIMAL_REGEX = /(\\.[0-9]*[1-9])0+$/;\n\n//** remove trailing zeros 0.00000100 => 0.000001, 1 => 1 */\nexport const removeTrailingZeros = (value: number, fixedCount: number = 16) => {\n const text = `${value}`;\n const isScientific = SCIENTIFICNOTATIONPATTERN.test(text);\n if (!value.toString().includes(\".\") && !isScientific) {\n return `${value}`;\n }\n const formattedNumber = new Decimal(value)\n .toFixed(fixedCount)\n .replace(TRAILINGZERODECIMAL_REGEX, \"$1\");\n return formattedNumber;\n};\n\nexport const todpIfNeed = (value: string | number, dp: number) => {\n if (value === undefined || value === \"\") {\n return value;\n }\n\n if (typeof value === \"number\") {\n value = value.toString();\n }\n\n if (value.endsWith(\".\")) {\n return value;\n }\n\n const numbers = value.split(\".\");\n\n if (numbers.length === 1) {\n return value;\n }\n\n if (numbers[1].length <= dp || !numbers[1]) {\n return value;\n }\n\n return `${numbers[0]}.${numbers[1].substring(0, dp)}`;\n};\n\nexport const checkIsNaN = (value: string | number | undefined | null) => {\n if (value === undefined || value === \"\" || value === null) {\n return true;\n }\n return Number.isNaN(Number(value));\n};\n\n/**\n * Format number for display: use decimal places when >= 1, otherwise significant digits.\n * Returns number when >= 1, string when < 1 (to preserve leading zeros in small numbers).\n * @example\n * formatWithPrecision(new Decimal(0.0000000123456), 2) => 0.000000012\n * formatWithPrecision(new Decimal(1.23456), 2) => 1.23\n */\nexport const formatWithPrecision = (\n num: number | string | Decimal,\n precision: number = 2,\n): number | string => {\n const numDecimal = new Decimal(num || 0);\n\n if (numDecimal.gte(1)) {\n return numDecimal.todp(precision, Decimal.ROUND_DOWN).toNumber();\n }\n return numDecimal\n .toSignificantDigits(precision, Decimal.ROUND_DOWN)\n .toFixed();\n};\n","export const timeConvertString = (time: number): number[] => {\n time /= 1000;\n const h = Math.floor(time / 3600);\n const m = Math.floor((time / 60) % 60);\n const s = Math.floor(time % 60);\n return [h, m, s];\n};\n\n/// will be return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number): string => {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n","import {\n ADI_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n SOLANA_MAINNET_CHAINID,\n} from \"@orderly.network/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\nexport const praseChainId = (chainId: string | number): number => {\n if (typeof chainId === \"string\") return hex2int(chainId);\n return chainId;\n};\n\nexport const praseChainIdToNumber = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const parseChainIdToNumber = praseChainIdToNumber;\n\nexport const isTestnet = (chainId: number) => {\n const testnetIds = [\n ARBITRUM_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n ADI_TESTNET_CHAINID,\n ];\n\n return testnetIds.includes(chainId);\n};\n\nexport const isSolana = (chainId: number) => {\n return [SOLANA_TESTNET_CHAINID, SOLANA_MAINNET_CHAINID].includes(chainId);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToUnderscoreCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n // let index = 0;\n\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n\n return index;\n }\n\n return -1;\n};\n","export const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__ORDERLY_timestamp_offset;\n if (typeof timeOffset === 'number') {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n}","// import dayjs from \"dayjs\";\n\nexport { default as Decimal } from \"./decimal\";\nexport * from \"./decimal\";\nexport * from \"./dateTime\";\nexport * from \"./chain\";\nexport * from \"./string\";\nexport { windowGuard, getGlobalObject, getTimestamp } from \"./window\";\nexport { default as dayjs } from \"dayjs\";\nexport * from \"./symbol\";\nexport * from \"./order\";\nexport * from \"./formatNum\";\n\n// export { dayjs };\n","import { numberToHumanStyle } from \"./decimal\";\n\n/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n\n/**\n * Optimize symbol text display by converting leading numbers to human-readable format\n *\n * This function matches numbers at the beginning of a symbol string and converts them\n * to abbreviated format (K, M, B, T) for better readability.\n *\n * @param symbol - The symbol string to optimize (e.g., \"1000000BABYDOGE\")\n * @param decimalPlaces - Number of decimal places for the abbreviated number (default: 0)\n * @returns Optimized symbol string (e.g., \"1MBABYDOGE\")\n *\n * @example\n * ```typescript\n * // Basic usage - convert large numbers to abbreviated format\n * optimizeSymbolDisplay(\"1000000BABYDOGE\") // \"1MBABYDOGE\"\n * optimizeSymbolDisplay(\"5000ETH\") // \"5KETH\"\n * optimizeSymbolDisplay(\"1500000000SHIB\") // \"1BSHIB\"\n * optimizeSymbolDisplay(\"2000000000000TOKEN\") // \"2TTOKEN\"\n *\n * // With decimal places\n * optimizeSymbolDisplay(\"1500000TOKEN\", 1) // \"1.5MTOKEN\"\n * optimizeSymbolDisplay(\"2750000COIN\", 2) // \"2.75MTOKEN\"\n *\n * // Edge cases - no modification needed\n * optimizeSymbolDisplay(\"BITCOIN\") // \"BITCOIN\" (no leading number)\n * optimizeSymbolDisplay(\"123.45TOKEN\") // \"123.45TOKEN\" (less than 1000)\n * optimizeSymbolDisplay(\"999COIN\") // \"999COIN\" (less than 1000)\n *\n * // Usage in React component\n * <SymbolText size=\"sm\" optimizeDisplay={true} decimalPlaces={1}>\n * 1000000BABYDOGE\n * </SymbolText>\n * // Renders: \"1MBABYDOGE\" with token icon\n * ```\n */\nexport function optimizeSymbolDisplay(\n symbol: string,\n decimalPlaces: number = 0,\n): string {\n if (!symbol) {\n return \"\";\n }\n\n // Regular expression to match numbers at the beginning of the string\n // Matches: optional decimal numbers starting from the beginning\n const numberRegex = /^(\\d+(?:\\.\\d+)?)/;\n const match = symbol.match(numberRegex);\n\n if (!match) {\n // No leading number found, return original symbol\n return symbol;\n }\n\n const numberPart = match[1]; // The matched number string\n const textPart = symbol.slice(numberPart.length); // The remaining text after the number\n const numericValue = parseFloat(numberPart);\n\n // Only convert numbers >= 1000 to abbreviated format\n if (numericValue < 1000) {\n return symbol;\n }\n\n // Use the imported numberToHumanStyle function from decimal utils\n const abbreviatedNumber = numberToHumanStyle(numericValue, decimalPlaces);\n\n return abbreviatedNumber + textPart;\n}\n","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport Decimal from \"./decimal\";\n\n/**\n * Trailing stop price calculation\n * If using trailing_value\n * Long (buy): trailing_stop = extreme_price - trailing_value\n * Short (sell): trailing_stop = extreme_price + trailing_value\n *\n * If using trailing_rate\n * Long (buy): extreme_price * (1 - trailing_rate)\n * Short (sell): extreme_price * (1 + trailing_rate)\n */\nexport function getTrailingStopPrice(order: API.AlgoOrderExt) {\n const { side, extreme_price, callback_value, callback_rate } = order;\n\n const isBuy = side === OrderSide.BUY;\n\n if (!extreme_price) {\n return 0;\n }\n\n if (callback_value) {\n return isBuy\n ? new Decimal(extreme_price).plus(callback_value).toNumber()\n : new Decimal(extreme_price).minus(callback_value).toNumber();\n }\n\n if (callback_rate) {\n return isBuy\n ? new Decimal(extreme_price)\n .mul(new Decimal(1).plus(callback_rate))\n .toNumber()\n : new Decimal(extreme_price)\n .mul(new Decimal(1).minus(callback_rate))\n .toNumber();\n }\n\n return 0;\n}\n\nexport function getBBOType(options: {\n type: OrderType;\n side: OrderSide;\n level: OrderLevel;\n}) {\n const { type, side, level } = options;\n if (type === OrderType.ASK) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY1\n : BBOOrderType.QUEUE1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY5\n : BBOOrderType.QUEUE5;\n }\n }\n\n if (type === OrderType.BID) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE1\n : BBOOrderType.COUNTERPARTY1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE5\n : BBOOrderType.COUNTERPARTY5;\n }\n }\n}\n\nexport function getTPSLDirection(inputs: {\n side: OrderSide;\n type: \"tp\" | \"sl\";\n closePrice: number;\n orderPrice: number;\n}) {\n const { side, type, closePrice, orderPrice } = inputs;\n\n let direction = 1;\n if (side === OrderSide.BUY) {\n if (type === \"tp\") {\n // close price >= order price\n direction = closePrice >= orderPrice ? 1 : -1;\n } else {\n // close price < order price\n direction = closePrice < orderPrice ? -1 : 1;\n }\n }\n\n if (side === OrderSide.SELL) {\n if (type === \"tp\") {\n // close price <= order price\n direction = closePrice <= orderPrice ? 1 : -1;\n } else {\n // close price > order price\n direction = closePrice > orderPrice ? -1 : 1;\n }\n }\n\n return direction;\n}\n","import Decimal from \"./decimal\";\n\nenum FormatNumType {\n pnl,\n notional,\n roi,\n assetValue,\n collateral,\n}\n\nfunction formatNum(\n type: FormatNumType,\n dp: number = 2,\n num?: number | Decimal | string,\n rm?: number,\n): Decimal | undefined {\n // parse to decimal\n const decimalNum = parseToDecimal(num);\n\n // if parse to decimal failed, return fallback\n if (!decimalNum) {\n return undefined;\n }\n\n // check if the number is greater than 0\n const isMoreThanZero = decimalNum.greaterThan(0);\n\n // format the number based on the type\n switch (type) {\n case FormatNumType.pnl:\n case FormatNumType.roi:\n const innerRm =\n rm ?? (isMoreThanZero ? Decimal.ROUND_DOWN : Decimal.ROUND_UP);\n return format(decimalNum, dp, innerRm);\n case FormatNumType.notional:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.assetValue:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.collateral:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n }\n}\n\n// format the number to the number of decimal places\nfunction format(num: Decimal, dp: number, rm: number) {\n return num.toDecimalPlaces(dp, rm);\n}\n\nfunction parseToDecimal(num?: number | Decimal | string): Decimal | undefined {\n try {\n if (num instanceof Decimal) {\n return num;\n }\n if (!num) {\n return undefined;\n }\n if (typeof num === \"number\") {\n return new Decimal(num);\n }\n if (typeof num === \"string\") {\n if (!num.trim()) {\n return undefined;\n }\n return new Decimal(num);\n }\n return num;\n } catch (error) {\n return undefined;\n }\n}\n\n// export the formatNum with namespace\ntype FormatNumWithNamespace = typeof formatNum & {\n pnl: (num?: number | Decimal | string) => Decimal | undefined;\n notional: (num?: number | Decimal | string) => Decimal | undefined;\n roi: (num?: number | Decimal | string, dp?: number) => Decimal | undefined;\n assetValue: (num?: number | Decimal | string) => Decimal | undefined;\n collateral: (num?: number | Decimal | string) => Decimal | undefined;\n};\n\nconst formatNumWithNamespace = formatNum as FormatNumWithNamespace;\n\n// add namespace method to formatNum\nformatNumWithNamespace.pnl = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.pnl, 2, num);\n};\n\nformatNumWithNamespace.notional = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.notional, 2, num);\n};\n\nformatNumWithNamespace.roi = (num?: number | Decimal | string, dp?: number) => {\n return formatNum(FormatNumType.roi, dp ?? 4, num);\n};\n\nformatNumWithNamespace.assetValue = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.assetValue, 2, num);\n};\n\nformatNumWithNamespace.collateral = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.collateral, 2, num);\n};\n\nexport { formatNumWithNamespace as formatNum };\n"],"mappings":"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","names":["default"]} | ||
| {"version":3,"sources":["../src/decimal.ts","../src/dateTime.ts","../src/chain.ts","../src/string.ts","../src/window.ts","../src/index.ts","../src/symbol.ts","../src/order.ts","../src/formatNum.ts"],"sourcesContent":["import Decimal from \"decimal.js-light\";\n\nexport type { Numeric } from \"decimal.js-light\";\n\nDecimal.set({ rounding: Decimal.ROUND_DOWN });\n\nexport default Decimal;\n\nexport const cutNumber = (num: number | string, lenght: number) => {};\n\nexport const zero = new Decimal(0);\n\n/** if num is undefined, returns options?.fallback || '-', otherwise it formats */\nexport const commifyOptional = (\n num?: number | string,\n options?: {\n fix?: number;\n fallback?: string;\n padEnd?: boolean;\n /// default is '0'\n fillString?: string;\n prefix?: string;\n },\n): string => {\n // if num convert to num failed, return fallback\n if (typeof num === \"string\" && Number.isNaN(Number(num))) {\n return options?.fallback || \"--\";\n }\n\n const prefix = options?.prefix || \"\";\n if (typeof num === \"undefined\") {\n return prefix + (options?.fallback || \"--\");\n }\n const value = commify(num, options?.fix);\n\n if (options && options.padEnd && options.fix) {\n const fillString = options?.fillString || \"0\";\n const hasDecimal = value.includes(\".\");\n const list = value.split(\".\");\n if (hasDecimal) {\n return prefix + list[0] + \".\" + list[1].padEnd(options.fix, fillString);\n }\n return prefix + list[0] + \".\" + \"\".padEnd(options.fix, fillString);\n }\n return prefix + value;\n};\n\nconst THOUSANDS_REGEXP = /\\B(?=(\\d{3})+(?!\\d))/g;\nexport const commify = (num: number | string, fix?: number): string => {\n const str = `${num}`;\n const parts = str.split(\".\");\n const numberPart = parts[0];\n const decimalPart = parts[1];\n const endsWithPoint = str.endsWith(\".\") && str.length > 1;\n const result =\n numberPart.replace(THOUSANDS_REGEXP, \",\") +\n (decimalPart\n ? \".\" + decimalPart.substring(0, fix || decimalPart.length)\n : endsWithPoint\n ? \".\"\n : \"\");\n\n if (fix === 0 && result.includes(\".\")) {\n return result.substring(0, result.indexOf(\".\"));\n }\n return result;\n};\n\nconst SCIENTIFICNOTATION_REGEX = /\\d(?:\\.(\\d*))?e([+-]\\d+)/;\nexport const toNonExponential = (num: number) => {\n const m = num.toExponential().match(SCIENTIFICNOTATION_REGEX);\n if (!Array.isArray(m)) {\n return num;\n }\n return num.toFixed(\n Math.max(0, (m[1] || \"\").length - (m[2] as unknown as number)),\n );\n};\n\nexport const getPrecisionByNumber = (num: number | string) => {\n num = toNonExponential(Number(num));\n const parts = num.toString().split(\".\");\n return parts[1] ? parts[1].length : 0;\n};\n\n/**\n *\n * @example\n * const number1 = 12345;\n * const number2 = 987654321;\n */\nexport function numberToHumanStyle(\n number: number,\n decimalPlaces: number = 2,\n options?: {\n padding?: boolean;\n },\n): string {\n const { padding } = options || {};\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\"];\n\n let index = 0;\n while (number >= 1000 && index < abbreviations.length - 1) {\n number /= 1000;\n index++;\n }\n\n const roundedNumber = new Decimal(number)\n .toFixed(decimalPlaces, Decimal.ROUND_DOWN)\n .toString()\n .replace(/\\.0+$/, \"\");\n\n return `${roundedNumber}${abbreviations[index]}`;\n}\n\n// export function numberToHumanStyle(num: number, dp: number = 0): string {\n// const absNum = Math.abs(num);\n// let formattedNum = \"\";\n\n// let exp;\n\n// if (absNum >= 1e12) {\n// formattedNum = (num / 1e12).toFixed(dp) + \"T\";\n// } else if (absNum >= 1e9) {\n// formattedNum = (num / 1e9).toFixed(dp) + \"B\";\n// } else if (absNum >= 1e6) {\n// formattedNum = (num / 1e6).toFixed(dp) + \"M\";\n// } else if (absNum >= 1e3) {\n// formattedNum = (num / 1e3).toFixed(dp) + \"K\";\n// } else {\n// formattedNum = num.toString();\n// }\n\n// formattedNum = formattedNum.replace(/\\.0$/, \"\");\n\n// return formattedNum;\n// }\n\nexport function parseNumStr(str: string | number): Decimal | undefined {\n const value = str.toString();\n const cleanedStr = value.replace(/,/g, \"\"); // remove `,` char\n const numberPart = new Decimal(cleanedStr);\n const unitPart = cleanedStr.slice(-1);\n\n if (Number.isNaN(numberPart.toNumber())) {\n return undefined; // invalid data\n }\n\n let result;\n\n switch (unitPart) {\n case \"k\":\n case \"K\":\n result = numberPart.mul(1000);\n break;\n case \"m\":\n case \"M\":\n result = numberPart.mul(1000000);\n break;\n case \"b\":\n case \"B\":\n result = numberPart.mul(1000000000);\n break;\n case \"t\":\n case \"T\":\n result = numberPart.mul(1000000000000);\n break;\n default:\n result = numberPart;\n }\n\n return result;\n}\n\nconst SCIENTIFICNOTATIONPATTERN = /^[-+]?[0-9]+(\\.[0-9]+)?[eE][-+]?[0-9]+$/;\n\nconst TRAILINGZERODECIMAL_REGEX = /(\\.[0-9]*[1-9])0+$/;\n\n//** remove trailing zeros 0.00000100 => 0.000001, 1 => 1 */\nexport const removeTrailingZeros = (value: number, fixedCount: number = 16) => {\n const text = `${value}`;\n const isScientific = SCIENTIFICNOTATIONPATTERN.test(text);\n if (!value.toString().includes(\".\") && !isScientific) {\n return `${value}`;\n }\n const formattedNumber = new Decimal(value)\n .toFixed(fixedCount)\n .replace(TRAILINGZERODECIMAL_REGEX, \"$1\");\n return formattedNumber;\n};\n\nexport const todpIfNeed = (value: string | number, dp: number) => {\n if (value === undefined || value === \"\") {\n return value;\n }\n\n if (typeof value === \"number\") {\n value = value.toString();\n }\n\n if (value.endsWith(\".\")) {\n return value;\n }\n\n const numbers = value.split(\".\");\n\n if (numbers.length === 1) {\n return value;\n }\n\n if (numbers[1].length <= dp || !numbers[1]) {\n return value;\n }\n\n return `${numbers[0]}.${numbers[1].substring(0, dp)}`;\n};\n\nexport const checkIsNaN = (value: string | number | undefined | null) => {\n if (value === undefined || value === \"\" || value === null) {\n return true;\n }\n return Number.isNaN(Number(value));\n};\n\n/**\n * Format number for display: use decimal places when >= 1, otherwise significant digits.\n * Returns number when >= 1, string when < 1 (to preserve leading zeros in small numbers).\n * @example\n * formatWithPrecision(new Decimal(0.0000000123456), 2) => 0.000000012\n * formatWithPrecision(new Decimal(1.23456), 2) => 1.23\n */\nexport const formatWithPrecision = (\n num: number | string | Decimal,\n precision: number = 2,\n): number | string => {\n const numDecimal = new Decimal(num || 0);\n\n if (numDecimal.gte(1)) {\n return numDecimal.todp(precision, Decimal.ROUND_DOWN).toNumber();\n }\n return numDecimal\n .toSignificantDigits(precision, Decimal.ROUND_DOWN)\n .toFixed();\n};\n","export const timeConvertString = (time: number): number[] => {\n time /= 1000;\n const h = Math.floor(time / 3600);\n const m = Math.floor((time / 60) % 60);\n const s = Math.floor(time % 60);\n return [h, m, s];\n};\n\n/// will be return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number): string => {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n","import {\n ADI_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n SOLANA_MAINNET_CHAINID,\n XLAYER_TESTNET_CHAINID,\n} from \"@orderly.network/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\nexport const praseChainId = (chainId: string | number): number => {\n if (typeof chainId === \"string\") return hex2int(chainId);\n return chainId;\n};\n\nexport const praseChainIdToNumber = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const parseChainIdToNumber = praseChainIdToNumber;\n\nexport const isTestnet = (chainId: number) => {\n const testnetIds = [\n ARBITRUM_TESTNET_CHAINID,\n SOLANA_TESTNET_CHAINID,\n STORY_TESTNET_CHAINID,\n MONAD_TESTNET_CHAINID,\n ABSTRACT_TESTNET_CHAINID,\n BSC_TESTNET_CHAINID,\n ADI_TESTNET_CHAINID,\n XLAYER_TESTNET_CHAINID,\n ];\n\n return testnetIds.includes(chainId);\n};\n\nexport const isSolana = (chainId: number) => {\n return [SOLANA_TESTNET_CHAINID, SOLANA_MAINNET_CHAINID].includes(chainId);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToUnderscoreCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n // let index = 0;\n\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n\n return index;\n }\n\n return -1;\n};\n","export const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__ORDERLY_timestamp_offset;\n if (typeof timeOffset === 'number') {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n}","// import dayjs from \"dayjs\";\n\nexport { default as Decimal } from \"./decimal\";\nexport * from \"./decimal\";\nexport * from \"./dateTime\";\nexport * from \"./chain\";\nexport * from \"./string\";\nexport { windowGuard, getGlobalObject, getTimestamp } from \"./window\";\nexport { default as dayjs } from \"dayjs\";\nexport * from \"./symbol\";\nexport * from \"./order\";\nexport * from \"./formatNum\";\n\n// export { dayjs };\n","import { numberToHumanStyle } from \"./decimal\";\n\n/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n\n/**\n * Optimize symbol text display by converting leading numbers to human-readable format\n *\n * This function matches numbers at the beginning of a symbol string and converts them\n * to abbreviated format (K, M, B, T) for better readability.\n *\n * @param symbol - The symbol string to optimize (e.g., \"1000000BABYDOGE\")\n * @param decimalPlaces - Number of decimal places for the abbreviated number (default: 0)\n * @returns Optimized symbol string (e.g., \"1MBABYDOGE\")\n *\n * @example\n * ```typescript\n * // Basic usage - convert large numbers to abbreviated format\n * optimizeSymbolDisplay(\"1000000BABYDOGE\") // \"1MBABYDOGE\"\n * optimizeSymbolDisplay(\"5000ETH\") // \"5KETH\"\n * optimizeSymbolDisplay(\"1500000000SHIB\") // \"1BSHIB\"\n * optimizeSymbolDisplay(\"2000000000000TOKEN\") // \"2TTOKEN\"\n *\n * // With decimal places\n * optimizeSymbolDisplay(\"1500000TOKEN\", 1) // \"1.5MTOKEN\"\n * optimizeSymbolDisplay(\"2750000COIN\", 2) // \"2.75MTOKEN\"\n *\n * // Edge cases - no modification needed\n * optimizeSymbolDisplay(\"BITCOIN\") // \"BITCOIN\" (no leading number)\n * optimizeSymbolDisplay(\"123.45TOKEN\") // \"123.45TOKEN\" (less than 1000)\n * optimizeSymbolDisplay(\"999COIN\") // \"999COIN\" (less than 1000)\n *\n * // Usage in React component\n * <SymbolText size=\"sm\" optimizeDisplay={true} decimalPlaces={1}>\n * 1000000BABYDOGE\n * </SymbolText>\n * // Renders: \"1MBABYDOGE\" with token icon\n * ```\n */\nexport function optimizeSymbolDisplay(\n symbol: string,\n decimalPlaces: number = 0,\n): string {\n if (!symbol) {\n return \"\";\n }\n\n // Regular expression to match numbers at the beginning of the string\n // Matches: optional decimal numbers starting from the beginning\n const numberRegex = /^(\\d+(?:\\.\\d+)?)/;\n const match = symbol.match(numberRegex);\n\n if (!match) {\n // No leading number found, return original symbol\n return symbol;\n }\n\n const numberPart = match[1]; // The matched number string\n const textPart = symbol.slice(numberPart.length); // The remaining text after the number\n const numericValue = parseFloat(numberPart);\n\n // Only convert numbers >= 1000 to abbreviated format\n if (numericValue < 1000) {\n return symbol;\n }\n\n // Use the imported numberToHumanStyle function from decimal utils\n const abbreviatedNumber = numberToHumanStyle(numericValue, decimalPlaces);\n\n return abbreviatedNumber + textPart;\n}\n","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport Decimal from \"./decimal\";\n\n/**\n * Trailing stop price calculation\n * If using trailing_value\n * Long (buy): trailing_stop = extreme_price - trailing_value\n * Short (sell): trailing_stop = extreme_price + trailing_value\n *\n * If using trailing_rate\n * Long (buy): extreme_price * (1 - trailing_rate)\n * Short (sell): extreme_price * (1 + trailing_rate)\n */\nexport function getTrailingStopPrice(order: API.AlgoOrderExt) {\n const { side, extreme_price, callback_value, callback_rate } = order;\n\n const isBuy = side === OrderSide.BUY;\n\n if (!extreme_price) {\n return 0;\n }\n\n if (callback_value) {\n return isBuy\n ? new Decimal(extreme_price).plus(callback_value).toNumber()\n : new Decimal(extreme_price).minus(callback_value).toNumber();\n }\n\n if (callback_rate) {\n return isBuy\n ? new Decimal(extreme_price)\n .mul(new Decimal(1).plus(callback_rate))\n .toNumber()\n : new Decimal(extreme_price)\n .mul(new Decimal(1).minus(callback_rate))\n .toNumber();\n }\n\n return 0;\n}\n\nexport function getBBOType(options: {\n type: OrderType;\n side: OrderSide;\n level: OrderLevel;\n}) {\n const { type, side, level } = options;\n if (type === OrderType.ASK) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY1\n : BBOOrderType.QUEUE1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.COUNTERPARTY5\n : BBOOrderType.QUEUE5;\n }\n }\n\n if (type === OrderType.BID) {\n if (level === OrderLevel.ONE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE1\n : BBOOrderType.COUNTERPARTY1;\n }\n\n if (level === OrderLevel.FIVE) {\n return side === OrderSide.BUY\n ? BBOOrderType.QUEUE5\n : BBOOrderType.COUNTERPARTY5;\n }\n }\n}\n\nexport function getTPSLDirection(inputs: {\n side: OrderSide;\n type: \"tp\" | \"sl\";\n closePrice: number;\n orderPrice: number;\n}) {\n const { side, type, closePrice, orderPrice } = inputs;\n\n let direction = 1;\n if (side === OrderSide.BUY) {\n if (type === \"tp\") {\n // close price >= order price\n direction = closePrice >= orderPrice ? 1 : -1;\n } else {\n // close price < order price\n direction = closePrice < orderPrice ? -1 : 1;\n }\n }\n\n if (side === OrderSide.SELL) {\n if (type === \"tp\") {\n // close price <= order price\n direction = closePrice <= orderPrice ? 1 : -1;\n } else {\n // close price > order price\n direction = closePrice > orderPrice ? -1 : 1;\n }\n }\n\n return direction;\n}\n","import Decimal from \"./decimal\";\n\nenum FormatNumType {\n pnl,\n notional,\n roi,\n assetValue,\n collateral,\n}\n\nfunction formatNum(\n type: FormatNumType,\n dp: number = 2,\n num?: number | Decimal | string,\n rm?: number,\n): Decimal | undefined {\n // parse to decimal\n const decimalNum = parseToDecimal(num);\n\n // if parse to decimal failed, return fallback\n if (!decimalNum) {\n return undefined;\n }\n\n // check if the number is greater than 0\n const isMoreThanZero = decimalNum.greaterThan(0);\n\n // format the number based on the type\n switch (type) {\n case FormatNumType.pnl:\n case FormatNumType.roi:\n const innerRm =\n rm ?? (isMoreThanZero ? Decimal.ROUND_DOWN : Decimal.ROUND_UP);\n return format(decimalNum, dp, innerRm);\n case FormatNumType.notional:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.assetValue:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n case FormatNumType.collateral:\n return format(decimalNum, dp, rm ?? Decimal.ROUND_DOWN);\n }\n}\n\n// format the number to the number of decimal places\nfunction format(num: Decimal, dp: number, rm: number) {\n return num.toDecimalPlaces(dp, rm);\n}\n\nfunction parseToDecimal(num?: number | Decimal | string): Decimal | undefined {\n try {\n if (num instanceof Decimal) {\n return num;\n }\n if (!num) {\n return undefined;\n }\n if (typeof num === \"number\") {\n return new Decimal(num);\n }\n if (typeof num === \"string\") {\n if (!num.trim()) {\n return undefined;\n }\n return new Decimal(num);\n }\n return num;\n } catch (error) {\n return undefined;\n }\n}\n\n// export the formatNum with namespace\ntype FormatNumWithNamespace = typeof formatNum & {\n pnl: (num?: number | Decimal | string) => Decimal | undefined;\n notional: (num?: number | Decimal | string) => Decimal | undefined;\n roi: (num?: number | Decimal | string, dp?: number) => Decimal | undefined;\n assetValue: (num?: number | Decimal | string) => Decimal | undefined;\n collateral: (num?: number | Decimal | string) => Decimal | undefined;\n};\n\nconst formatNumWithNamespace = formatNum as FormatNumWithNamespace;\n\n// add namespace method to formatNum\nformatNumWithNamespace.pnl = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.pnl, 2, num);\n};\n\nformatNumWithNamespace.notional = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.notional, 2, num);\n};\n\nformatNumWithNamespace.roi = (num?: number | Decimal | string, dp?: number) => {\n return formatNum(FormatNumType.roi, dp ?? 4, num);\n};\n\nformatNumWithNamespace.assetValue = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.assetValue, 2, num);\n};\n\nformatNumWithNamespace.collateral = (num?: number | Decimal | string) => {\n return formatNum(FormatNumType.collateral, 2, num);\n};\n\nexport { formatNumWithNamespace as formatNum };\n"],"mappings":"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","names":["default"]} |
+3
-3
| { | ||
| "name": "@orderly.network/utils", | ||
| "version": "3.1.7", | ||
| "version": "3.1.8-alpha.0", | ||
| "description": "", | ||
@@ -21,3 +21,3 @@ "main": "dist/index.js", | ||
| "typescript": "^5.1.6", | ||
| "tsconfig": "1.1.7" | ||
| "tsconfig": "1.1.8-alpha.0" | ||
| }, | ||
@@ -27,3 +27,3 @@ "dependencies": { | ||
| "decimal.js-light": "^2.5.1", | ||
| "@orderly.network/types": "3.1.7" | ||
| "@orderly.network/types": "3.1.8-alpha.0" | ||
| }, | ||
@@ -30,0 +30,0 @@ "publishConfig": { |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
106729
0.25%1095
0.27%2
100%+ Added
- Removed