@kodiak-finance/orderly-utils 2.8.15-rc.0 → 2.8.16-rc.0
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.
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -5,8 +5,8 @@ import { API, OrderType, OrderSide, OrderLevel, BBOOrderType } from '@kodiak-fin
|
|
|
5
5
|
|
|
6
6
|
declare const cutNumber: (num: number | string, lenght: number) => void;
|
|
7
7
|
declare const zero: Decimal;
|
|
8
|
-
/** if num is undefined, returns options?.fallback || '-', otherwise it formats */
|
|
9
|
-
declare const commifyOptional: (num?: number | string, options?: {
|
|
8
|
+
/** if num is undefined or null, returns options?.fallback || '-', otherwise it formats */
|
|
9
|
+
declare const commifyOptional: (num?: number | string | null, options?: {
|
|
10
10
|
fix?: number;
|
|
11
11
|
fallback?: string;
|
|
12
12
|
padEnd?: boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ import { API, OrderType, OrderSide, OrderLevel, BBOOrderType } from '@kodiak-fin
|
|
|
5
5
|
|
|
6
6
|
declare const cutNumber: (num: number | string, lenght: number) => void;
|
|
7
7
|
declare const zero: Decimal;
|
|
8
|
-
/** if num is undefined, returns options?.fallback || '-', otherwise it formats */
|
|
9
|
-
declare const commifyOptional: (num?: number | string, options?: {
|
|
8
|
+
/** if num is undefined or null, returns options?.fallback || '-', otherwise it formats */
|
|
9
|
+
declare const commifyOptional: (num?: number | string | null, options?: {
|
|
10
10
|
fix?: number;
|
|
11
11
|
fallback?: string;
|
|
12
12
|
padEnd?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var O=Object.create;var
|
|
1
|
+
"use strict";var O=Object.create;var d=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var A=(e,t)=>{for(var r in t)d(e,r,{get:t[r],enumerable:!0})},p=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of y(t))!I.call(e,i)&&i!==r&&d(e,i,{get:()=>t[i],enumerable:!(n=h(t,i))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?O(D(e)):{},p(t||!e||!e.__esModule?d(r,"default",{value:e,enumerable:!0}):r,e)),C=e=>p(d({},"__esModule",{value:!0}),e);var oe={};A(oe,{Decimal:()=>a,camelCaseToUnderscoreCase:()=>v,capitalizeString:()=>V,checkIsNaN:()=>G,commify:()=>N,commifyOptional:()=>R,cutNumber:()=>_,dayjs:()=>w.default,findLongestCommonSubString:()=>ee,formatSymbol:()=>te,getBBOType:()=>ne,getGlobalObject:()=>g,getPrecisionByNumber:()=>B,getTPSLDirection:()=>ie,getTimestamp:()=>E,getTrailingStopPrice:()=>re,hex2int:()=>m,int2hex:()=>Q,isSolana:()=>q,isTestnet:()=>Z,numberToHumanStyle:()=>L,parseChainIdToNumber:()=>X,parseNumStr:()=>Y,praseChainId:()=>K,praseChainIdToNumber:()=>T,removeTrailingZeros:()=>F,subtractDaysFromCurrentDate:()=>z,timeConvertString:()=>W,timestampToString:()=>j,toNonExponential:()=>x,todpIfNeed:()=>H,transSymbolformString:()=>J,windowGuard:()=>S,zero:()=>U});module.exports=C(oe);var c=b(require("decimal.js-light"));c.default.set({rounding:c.default.ROUND_DOWN});var a=c.default,_=(e,t)=>{},U=new c.default(0),R=(e,t)=>{if(typeof e=="string"&&Number.isNaN(Number(e)))return(t==null?void 0:t.fallback)||"--";let r=(t==null?void 0:t.prefix)||"";if(typeof e=="undefined"||e===null)return r+((t==null?void 0:t.fallback)||"--");let n=N(e,t==null?void 0:t.fix);if(t&&t.padEnd&&t.fix){let i=(t==null?void 0:t.fillString)||"0",o=n.includes("."),f=n.split(".");return o?r+f[0]+"."+f[1].padEnd(t.fix,i):r+f[0]+"."+"".padEnd(t.fix,i)}return r+n},$=/\B(?=(\d{3})+(?!\d))/g,N=(e,t)=>{let r=`${e}`,n=r.split("."),i=n[0],o=n[1],f=r.endsWith(".")&&r.length>1,l=i.replace($,",")+(o?"."+o.substring(0,t||o.length):f?".":"");return t===0&&l.includes(".")?l.substring(0,l.indexOf(".")):l},P=/\d(?:\.(\d*))?e([+-]\d+)/,x=e=>{let t=e.toExponential().match(P);return Array.isArray(t)?e.toFixed(Math.max(0,(t[1]||"").length-t[2])):e},B=e=>{e=x(Number(e));let t=e.toString().split(".");return t[1]?t[1].length:0};function L(e,t=2,r){let{padding:n}=r||{},i=["","K","M","B","T"],o=0;for(;e>=1e3&&o<i.length-1;)e/=1e3,o++;return`${new c.default(e).toFixed(t,c.default.ROUND_DOWN).toString().replace(/\.0+$/,"")}${i[o]}`}function Y(e){let r=e.toString().replace(/,/g,""),n=new c.default(r),i=r.slice(-1);if(Number.isNaN(n.toNumber()))return;let o;switch(i){case"k":case"K":o=n.mul(1e3);break;case"m":case"M":o=n.mul(1e6);break;case"b":case"B":o=n.mul(1e9);break;case"t":case"T":o=n.mul(1e12);break;default:o=n}return o}var k=/^[-+]?[0-9]+(\.[0-9]+)?[eE][-+]?[0-9]+$/,M=/(\.[0-9]*[1-9])0+$/,F=(e,t=16)=>{let r=`${e}`,n=k.test(r);return!e.toString().includes(".")&&!n?`${e}`:new c.default(e).toFixed(t).replace(M,"$1")},H=(e,t)=>{if(e===void 0||e===""||(typeof e=="number"&&(e=e.toString()),e.endsWith(".")))return e;let r=e.split(".");return r.length===1||r[1].length<=t||!r[1]?e:`${r[0]}.${r[1].substring(0,t)}`},G=e=>e===void 0||e===""||e===null?!0:Number.isNaN(Number(e));var W=e=>{e/=1e3;let t=Math.floor(e/3600),r=Math.floor(e/60%60),n=Math.floor(e%60);return[t,r,n]},j=e=>{let t=new Date(e),r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0"),o=String(t.getHours()).padStart(2,"0"),f=String(t.getMinutes()).padStart(2,"0"),l=String(t.getSeconds()).padStart(2,"0");return`${r}-${n}-${i} ${o}:${f}:${l}`};function z(e,t){let r=t||new Date,n=new Date(r);return n.setDate(r.getDate()-e),n}var u=require("@kodiak-finance/orderly-types"),m=e=>parseInt(e),Q=e=>`0x${e.toString(16)}`,K=e=>typeof e=="string"?m(e):e,T=e=>typeof e=="string"&&e.startsWith("0x")&&/^[a-f0-9]+$/iu.test(e.slice(2))?m(e):e,X=T,Z=e=>[u.ARBITRUM_TESTNET_CHAINID,u.SOLANA_TESTNET_CHAINID,u.STORY_TESTNET_CHAINID,u.MONAD_TESTNET_CHAINID,u.ABSTRACT_TESTNET_CHAINID,u.BSC_TESTNET_CHAINID].includes(e),q=e=>[u.SOLANA_TESTNET_CHAINID,u.SOLANA_MAINNET_CHAINID].includes(e);function V(e){let t=e.toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function J(e){let t=e.split("_");if(t.length!==3)throw new Error("Invalid string format");let[r,n,i]=t;if(!r.startsWith("PERP"))throw new Error("Invalid string format");return`${n}-${r}`}function v(e){return e.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}var ee=(e,t)=>{for(let r=0;r<e.length;r++){let n=e.at(r),i=t.at(r);if(n!==i)return r}return-1};var S=e=>{typeof window!="undefined"&&e()},g=()=>{if(typeof globalThis!="undefined")return globalThis;if(typeof self!="undefined")return self;if(typeof window!="undefined")return window;if(typeof global!="undefined")return global;throw new Error("cannot find the global object")},E=()=>{var e;if(typeof window!="undefined"){let t=(e=g())==null?void 0:e.__ORDERLY_timestamp_offset;if(typeof t=="number")return Date.now()+(t||0)}return Date.now()};var w=b(require("dayjs"));function te(e,t="base-type"){if(!e)return"";let r=e.split("_"),n=r[0],i=r[1],o=r[2];return t.replace("type",n).replace("base",i).replace("quote",o)}var s=require("@kodiak-finance/orderly-types");function re(e){let{side:t,extreme_price:r,callback_value:n,callback_rate:i}=e,o=t===s.OrderSide.BUY;return r?n?o?new a(r).plus(n).toNumber():new a(r).minus(n).toNumber():i?o?new a(r).mul(new a(1).plus(i)).toNumber():new a(r).mul(new a(1).minus(i)).toNumber():0:0}function ne(e){let{type:t,side:r,level:n}=e;if(t===s.OrderType.ASK){if(n===s.OrderLevel.ONE)return r===s.OrderSide.BUY?s.BBOOrderType.COUNTERPARTY1:s.BBOOrderType.QUEUE1;if(n===s.OrderLevel.FIVE)return r===s.OrderSide.BUY?s.BBOOrderType.COUNTERPARTY5:s.BBOOrderType.QUEUE5}if(t===s.OrderType.BID){if(n===s.OrderLevel.ONE)return r===s.OrderSide.BUY?s.BBOOrderType.QUEUE1:s.BBOOrderType.COUNTERPARTY1;if(n===s.OrderLevel.FIVE)return r===s.OrderSide.BUY?s.BBOOrderType.QUEUE5:s.BBOOrderType.COUNTERPARTY5}}function ie(e){let{side:t,type:r,closePrice:n,orderPrice:i}=e,o=1;return t===s.OrderSide.BUY&&(r==="tp"?o=n>=i?1:-1:o=n<i?-1:1),t===s.OrderSide.SELL&&(r==="tp"?o=n<=i?1:-1:o=n>i?-1:1),o}0&&(module.exports={Decimal,camelCaseToUnderscoreCase,capitalizeString,checkIsNaN,commify,commifyOptional,cutNumber,dayjs,findLongestCommonSubString,formatSymbol,getBBOType,getGlobalObject,getPrecisionByNumber,getTPSLDirection,getTimestamp,getTrailingStopPrice,hex2int,int2hex,isSolana,isTestnet,numberToHumanStyle,parseChainIdToNumber,parseNumStr,praseChainId,praseChainIdToNumber,removeTrailingZeros,subtractDaysFromCurrentDate,timeConvertString,timestampToString,toNonExponential,todpIfNeed,transSymbolformString,windowGuard,zero});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"],"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\";\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","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 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 \"@kodiak-finance/orderly-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 ];\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\n/// \"PERP_ETH_USDC\" => \"ETH_PERP\"\nexport function transSymbolformString(input: string): string {\n const parts = input.split(\"_\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid string format\");\n }\n\n const [first, second, third] = parts;\n\n if (!first.startsWith(\"PERP\")) {\n throw new Error(\"Invalid string format\");\n }\n\n const result = `${second}-${first}`;\n return result;\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}","/**\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","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@kodiak-finance/orderly-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"],"mappings":"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","names":["src_exports","__export","decimal_default","camelCaseToUnderscoreCase","capitalizeString","checkIsNaN","commify","commifyOptional","cutNumber","findLongestCommonSubString","formatSymbol","getBBOType","getGlobalObject","getPrecisionByNumber","getTPSLDirection","getTimestamp","getTrailingStopPrice","hex2int","int2hex","isSolana","isTestnet","numberToHumanStyle","parseChainIdToNumber","parseNumStr","praseChainId","praseChainIdToNumber","removeTrailingZeros","subtractDaysFromCurrentDate","timeConvertString","timestampToString","toNonExponential","todpIfNeed","transSymbolformString","windowGuard","zero","__toCommonJS","import_decimal","Decimal","decimal_default","cutNumber","num","lenght","zero","commifyOptional","options","prefix","value","commify","fillString","hasDecimal","list","THOUSANDS_REGEXP","fix","str","parts","numberPart","decimalPart","endsWithPoint","result","SCIENTIFICNOTATION_REGEX","toNonExponential","m","getPrecisionByNumber","numberToHumanStyle","number","decimalPlaces","padding","abbreviations","index","parseNumStr","cleanedStr","unitPart","SCIENTIFICNOTATIONPATTERN","TRAILINGZERODECIMAL_REGEX","removeTrailingZeros","fixedCount","text","isScientific","todpIfNeed","dp","numbers","checkIsNaN","timeConvertString","time","h","m","s","timestampToString","timestamp","date","year","month","day","hours","minutes","seconds","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","import_orderly_types","hex2int","chainId","int2hex","praseChainId","praseChainIdToNumber","parseChainIdToNumber","isTestnet","isSolana","capitalizeString","str","lowercaseStr","transSymbolformString","input","parts","first","second","third","camelCaseToUnderscoreCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset","import_dayjs","formatSymbol","symbol","formatString","arr","type","base","quote","import_orderly_types","getTrailingStopPrice","order","side","extreme_price","callback_value","callback_rate","isBuy","decimal_default","getBBOType","options","type","level","getTPSLDirection","inputs","closePrice","orderPrice","direction"]}
|
|
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"],"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\";\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 or null, returns options?.fallback || '-', otherwise it formats */\nexport const commifyOptional = (\n num?: number | string | null,\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\" || num === null) {\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","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 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 \"@kodiak-finance/orderly-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 ];\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\n/// \"PERP_ETH_USDC\" => \"ETH_PERP\"\nexport function transSymbolformString(input: string): string {\n const parts = input.split(\"_\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid string format\");\n }\n\n const [first, second, third] = parts;\n\n if (!first.startsWith(\"PERP\")) {\n throw new Error(\"Invalid string format\");\n }\n\n const result = `${second}-${first}`;\n return result;\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}","/**\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","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@kodiak-finance/orderly-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"],"mappings":"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","names":["src_exports","__export","decimal_default","camelCaseToUnderscoreCase","capitalizeString","checkIsNaN","commify","commifyOptional","cutNumber","findLongestCommonSubString","formatSymbol","getBBOType","getGlobalObject","getPrecisionByNumber","getTPSLDirection","getTimestamp","getTrailingStopPrice","hex2int","int2hex","isSolana","isTestnet","numberToHumanStyle","parseChainIdToNumber","parseNumStr","praseChainId","praseChainIdToNumber","removeTrailingZeros","subtractDaysFromCurrentDate","timeConvertString","timestampToString","toNonExponential","todpIfNeed","transSymbolformString","windowGuard","zero","__toCommonJS","import_decimal","Decimal","decimal_default","cutNumber","num","lenght","zero","commifyOptional","options","prefix","value","commify","fillString","hasDecimal","list","THOUSANDS_REGEXP","fix","str","parts","numberPart","decimalPart","endsWithPoint","result","SCIENTIFICNOTATION_REGEX","toNonExponential","m","getPrecisionByNumber","numberToHumanStyle","number","decimalPlaces","padding","abbreviations","index","parseNumStr","cleanedStr","unitPart","SCIENTIFICNOTATIONPATTERN","TRAILINGZERODECIMAL_REGEX","removeTrailingZeros","fixedCount","text","isScientific","todpIfNeed","dp","numbers","checkIsNaN","timeConvertString","time","h","m","s","timestampToString","timestamp","date","year","month","day","hours","minutes","seconds","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","import_orderly_types","hex2int","chainId","int2hex","praseChainId","praseChainIdToNumber","parseChainIdToNumber","isTestnet","isSolana","capitalizeString","str","lowercaseStr","transSymbolformString","input","parts","first","second","third","camelCaseToUnderscoreCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset","import_dayjs","formatSymbol","symbol","formatString","arr","type","base","quote","import_orderly_types","getTrailingStopPrice","order","side","extreme_price","callback_value","callback_rate","isBuy","decimal_default","getBBOType","options","type","level","getTPSLDirection","inputs","closePrice","orderPrice","direction"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import u from"decimal.js-light";u.set({rounding:u.ROUND_DOWN});var c=u,$=(e,t)=>{},P=new u(0),B=(e,t)=>{if(typeof e=="string"&&Number.isNaN(Number(e)))return(t==null?void 0:t.fallback)||"--";let r=(t==null?void 0:t.prefix)||"";if(typeof e=="undefined")return r+((t==null?void 0:t.fallback)||"--");let n=x(e,t==null?void 0:t.fix);if(t&&t.padEnd&&t.fix){let o=(t==null?void 0:t.fillString)||"0",i=n.includes("."),s=n.split(".");return i?r+s[0]+"."+s[1].padEnd(t.fix,o):r+s[0]+"."+"".padEnd(t.fix,o)}return r+n},N=/\B(?=(\d{3})+(?!\d))/g,x=(e,t)=>{let r=`${e}`,n=r.split("."),o=n[0],i=n[1],s=r.endsWith(".")&&r.length>1,l=o.replace(N,",")+(i?"."+i.substring(0,t||i.length):s?".":"");return t===0&&l.includes(".")?l.substring(0,l.indexOf(".")):l},T=/\d(?:\.(\d*))?e([+-]\d+)/,S=e=>{let t=e.toExponential().match(T);return Array.isArray(t)?e.toFixed(Math.max(0,(t[1]||"").length-t[2])):e},L=e=>{e=S(Number(e));let t=e.toString().split(".");return t[1]?t[1].length:0};function Y(e,t=2,r){let{padding:n}=r||{},o=["","K","M","B","T"],i=0;for(;e>=1e3&&i<o.length-1;)e/=1e3,i++;return`${new u(e).toFixed(t,u.ROUND_DOWN).toString().replace(/\.0+$/,"")}${o[i]}`}function k(e){let r=e.toString().replace(/,/g,""),n=new u(r),o=r.slice(-1);if(Number.isNaN(n.toNumber()))return;let i;switch(o){case"k":case"K":i=n.mul(1e3);break;case"m":case"M":i=n.mul(1e6);break;case"b":case"B":i=n.mul(1e9);break;case"t":case"T":i=n.mul(1e12);break;default:i=n}return i}var E=/^[-+]?[0-9]+(\.[0-9]+)?[eE][-+]?[0-9]+$/,w=/(\.[0-9]*[1-9])0+$/,M=(e,t=16)=>{let r=`${e}`,n=E.test(r);return!e.toString().includes(".")&&!n?`${e}`:new u(e).toFixed(t).replace(w,"$1")},F=(e,t)=>{if(e===void 0||e===""||(typeof e=="number"&&(e=e.toString()),e.endsWith(".")))return e;let r=e.split(".");return r.length===1||r[1].length<=t||!r[1]?e:`${r[0]}.${r[1].substring(0,t)}`},H=e=>e===void 0||e===""||e===null?!0:Number.isNaN(Number(e));var W=e=>{e/=1e3;let t=Math.floor(e/3600),r=Math.floor(e/60%60),n=Math.floor(e%60);return[t,r,n]},j=e=>{let t=new Date(e),r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),l=String(t.getSeconds()).padStart(2,"0");return`${r}-${n}-${o} ${i}:${s}:${l}`};function z(e,t){let r=t||new Date,n=new Date(r);return n.setDate(r.getDate()-e),n}import{ABSTRACT_TESTNET_CHAINID as O,ARBITRUM_TESTNET_CHAINID as h,BSC_TESTNET_CHAINID as y,MONAD_TESTNET_CHAINID as D,SOLANA_TESTNET_CHAINID as
|
|
1
|
+
import u from"decimal.js-light";u.set({rounding:u.ROUND_DOWN});var c=u,$=(e,t)=>{},P=new u(0),B=(e,t)=>{if(typeof e=="string"&&Number.isNaN(Number(e)))return(t==null?void 0:t.fallback)||"--";let r=(t==null?void 0:t.prefix)||"";if(typeof e=="undefined"||e===null)return r+((t==null?void 0:t.fallback)||"--");let n=x(e,t==null?void 0:t.fix);if(t&&t.padEnd&&t.fix){let o=(t==null?void 0:t.fillString)||"0",i=n.includes("."),s=n.split(".");return i?r+s[0]+"."+s[1].padEnd(t.fix,o):r+s[0]+"."+"".padEnd(t.fix,o)}return r+n},N=/\B(?=(\d{3})+(?!\d))/g,x=(e,t)=>{let r=`${e}`,n=r.split("."),o=n[0],i=n[1],s=r.endsWith(".")&&r.length>1,l=o.replace(N,",")+(i?"."+i.substring(0,t||i.length):s?".":"");return t===0&&l.includes(".")?l.substring(0,l.indexOf(".")):l},T=/\d(?:\.(\d*))?e([+-]\d+)/,S=e=>{let t=e.toExponential().match(T);return Array.isArray(t)?e.toFixed(Math.max(0,(t[1]||"").length-t[2])):e},L=e=>{e=S(Number(e));let t=e.toString().split(".");return t[1]?t[1].length:0};function Y(e,t=2,r){let{padding:n}=r||{},o=["","K","M","B","T"],i=0;for(;e>=1e3&&i<o.length-1;)e/=1e3,i++;return`${new u(e).toFixed(t,u.ROUND_DOWN).toString().replace(/\.0+$/,"")}${o[i]}`}function k(e){let r=e.toString().replace(/,/g,""),n=new u(r),o=r.slice(-1);if(Number.isNaN(n.toNumber()))return;let i;switch(o){case"k":case"K":i=n.mul(1e3);break;case"m":case"M":i=n.mul(1e6);break;case"b":case"B":i=n.mul(1e9);break;case"t":case"T":i=n.mul(1e12);break;default:i=n}return i}var E=/^[-+]?[0-9]+(\.[0-9]+)?[eE][-+]?[0-9]+$/,w=/(\.[0-9]*[1-9])0+$/,M=(e,t=16)=>{let r=`${e}`,n=E.test(r);return!e.toString().includes(".")&&!n?`${e}`:new u(e).toFixed(t).replace(w,"$1")},F=(e,t)=>{if(e===void 0||e===""||(typeof e=="number"&&(e=e.toString()),e.endsWith(".")))return e;let r=e.split(".");return r.length===1||r[1].length<=t||!r[1]?e:`${r[0]}.${r[1].substring(0,t)}`},H=e=>e===void 0||e===""||e===null?!0:Number.isNaN(Number(e));var W=e=>{e/=1e3;let t=Math.floor(e/3600),r=Math.floor(e/60%60),n=Math.floor(e%60);return[t,r,n]},j=e=>{let t=new Date(e),r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),l=String(t.getSeconds()).padStart(2,"0");return`${r}-${n}-${o} ${i}:${s}:${l}`};function z(e,t){let r=t||new Date,n=new Date(r);return n.setDate(r.getDate()-e),n}import{ABSTRACT_TESTNET_CHAINID as O,ARBITRUM_TESTNET_CHAINID as h,BSC_TESTNET_CHAINID as y,MONAD_TESTNET_CHAINID as D,SOLANA_TESTNET_CHAINID as m,STORY_TESTNET_CHAINID as I,SOLANA_MAINNET_CHAINID as A}from"@kodiak-finance/orderly-types";var g=e=>parseInt(e),X=e=>`0x${e.toString(16)}`,Z=e=>typeof e=="string"?g(e):e,C=e=>typeof e=="string"&&e.startsWith("0x")&&/^[a-f0-9]+$/iu.test(e.slice(2))?g(e):e,q=C,V=e=>[h,m,I,D,O,y].includes(e),J=e=>[m,A].includes(e);function ee(e){let t=e.toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function te(e){let t=e.split("_");if(t.length!==3)throw new Error("Invalid string format");let[r,n,o]=t;if(!r.startsWith("PERP"))throw new Error("Invalid string format");return`${n}-${r}`}function re(e){return e.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}var ne=(e,t)=>{for(let r=0;r<e.length;r++){let n=e.at(r),o=t.at(r);if(n!==o)return r}return-1};var _=e=>{typeof window!="undefined"&&e()},p=()=>{if(typeof globalThis!="undefined")return globalThis;if(typeof self!="undefined")return self;if(typeof window!="undefined")return window;if(typeof global!="undefined")return global;throw new Error("cannot find the global object")},U=()=>{var e;if(typeof window!="undefined"){let t=(e=p())==null?void 0:e.__ORDERLY_timestamp_offset;if(typeof t=="number")return Date.now()+(t||0)}return Date.now()};import{default as Oe}from"dayjs";function se(e,t="base-type"){if(!e)return"";let r=e.split("_"),n=r[0],o=r[1],i=r[2];return t.replace("type",n).replace("base",o).replace("quote",i)}import{BBOOrderType as a,OrderLevel as d,OrderSide as f,OrderType as b}from"@kodiak-finance/orderly-types";function le(e){let{side:t,extreme_price:r,callback_value:n,callback_rate:o}=e,i=t===f.BUY;return r?n?i?new c(r).plus(n).toNumber():new c(r).minus(n).toNumber():o?i?new c(r).mul(new c(1).plus(o)).toNumber():new c(r).mul(new c(1).minus(o)).toNumber():0:0}function de(e){let{type:t,side:r,level:n}=e;if(t===b.ASK){if(n===d.ONE)return r===f.BUY?a.COUNTERPARTY1:a.QUEUE1;if(n===d.FIVE)return r===f.BUY?a.COUNTERPARTY5:a.QUEUE5}if(t===b.BID){if(n===d.ONE)return r===f.BUY?a.QUEUE1:a.COUNTERPARTY1;if(n===d.FIVE)return r===f.BUY?a.QUEUE5:a.COUNTERPARTY5}}function me(e){let{side:t,type:r,closePrice:n,orderPrice:o}=e,i=1;return t===f.BUY&&(r==="tp"?i=n>=o?1:-1:i=n<o?-1:1),t===f.SELL&&(r==="tp"?i=n<=o?1:-1:i=n>o?-1:1),i}export{c as Decimal,re as camelCaseToUnderscoreCase,ee as capitalizeString,H as checkIsNaN,x as commify,B as commifyOptional,$ as cutNumber,Oe as dayjs,ne as findLongestCommonSubString,se as formatSymbol,de as getBBOType,p as getGlobalObject,L as getPrecisionByNumber,me as getTPSLDirection,U as getTimestamp,le as getTrailingStopPrice,g as hex2int,X as int2hex,J as isSolana,V as isTestnet,Y as numberToHumanStyle,q as parseChainIdToNumber,k as parseNumStr,Z as praseChainId,C as praseChainIdToNumber,M as removeTrailingZeros,z as subtractDaysFromCurrentDate,W as timeConvertString,j as timestampToString,S as toNonExponential,F as todpIfNeed,te as transSymbolformString,_ as windowGuard,P as zero};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"],"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","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 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 \"@kodiak-finance/orderly-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 ];\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\n/// \"PERP_ETH_USDC\" => \"ETH_PERP\"\nexport function transSymbolformString(input: string): string {\n const parts = input.split(\"_\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid string format\");\n }\n\n const [first, second, third] = parts;\n\n if (!first.startsWith(\"PERP\")) {\n throw new Error(\"Invalid string format\");\n }\n\n const result = `${second}-${first}`;\n return result;\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\";\n\n// export { dayjs };\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","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@kodiak-finance/orderly-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"],"mappings":"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","names":["Decimal","decimal_default","cutNumber","num","lenght","zero","commifyOptional","options","prefix","value","commify","fillString","hasDecimal","list","THOUSANDS_REGEXP","fix","str","parts","numberPart","decimalPart","endsWithPoint","result","SCIENTIFICNOTATION_REGEX","toNonExponential","m","getPrecisionByNumber","numberToHumanStyle","number","decimalPlaces","padding","abbreviations","index","parseNumStr","cleanedStr","unitPart","SCIENTIFICNOTATIONPATTERN","TRAILINGZERODECIMAL_REGEX","removeTrailingZeros","fixedCount","text","isScientific","todpIfNeed","dp","numbers","checkIsNaN","timeConvertString","time","h","m","s","timestampToString","timestamp","date","year","month","day","hours","minutes","seconds","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","ABSTRACT_TESTNET_CHAINID","ARBITRUM_TESTNET_CHAINID","BSC_TESTNET_CHAINID","MONAD_TESTNET_CHAINID","SOLANA_TESTNET_CHAINID","STORY_TESTNET_CHAINID","SOLANA_MAINNET_CHAINID","hex2int","chainId","int2hex","praseChainId","praseChainIdToNumber","parseChainIdToNumber","isTestnet","isSolana","capitalizeString","str","lowercaseStr","transSymbolformString","input","parts","first","second","third","camelCaseToUnderscoreCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset","default","formatSymbol","symbol","formatString","arr","type","base","quote","BBOOrderType","OrderLevel","OrderSide","OrderType","getTrailingStopPrice","order","side","extreme_price","callback_value","callback_rate","isBuy","OrderSide","decimal_default","getBBOType","options","type","level","OrderType","OrderLevel","BBOOrderType","getTPSLDirection","inputs","closePrice","orderPrice","direction"]}
|
|
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"],"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 or null, returns options?.fallback || '-', otherwise it formats */\nexport const commifyOptional = (\n num?: number | string | null,\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\" || num === null) {\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","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 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 \"@kodiak-finance/orderly-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 ];\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\n/// \"PERP_ETH_USDC\" => \"ETH_PERP\"\nexport function transSymbolformString(input: string): string {\n const parts = input.split(\"_\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid string format\");\n }\n\n const [first, second, third] = parts;\n\n if (!first.startsWith(\"PERP\")) {\n throw new Error(\"Invalid string format\");\n }\n\n const result = `${second}-${first}`;\n return result;\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\";\n\n// export { dayjs };\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","import {\n API,\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@kodiak-finance/orderly-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"],"mappings":"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","names":["Decimal","decimal_default","cutNumber","num","lenght","zero","commifyOptional","options","prefix","value","commify","fillString","hasDecimal","list","THOUSANDS_REGEXP","fix","str","parts","numberPart","decimalPart","endsWithPoint","result","SCIENTIFICNOTATION_REGEX","toNonExponential","m","getPrecisionByNumber","numberToHumanStyle","number","decimalPlaces","padding","abbreviations","index","parseNumStr","cleanedStr","unitPart","SCIENTIFICNOTATIONPATTERN","TRAILINGZERODECIMAL_REGEX","removeTrailingZeros","fixedCount","text","isScientific","todpIfNeed","dp","numbers","checkIsNaN","timeConvertString","time","h","m","s","timestampToString","timestamp","date","year","month","day","hours","minutes","seconds","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","ABSTRACT_TESTNET_CHAINID","ARBITRUM_TESTNET_CHAINID","BSC_TESTNET_CHAINID","MONAD_TESTNET_CHAINID","SOLANA_TESTNET_CHAINID","STORY_TESTNET_CHAINID","SOLANA_MAINNET_CHAINID","hex2int","chainId","int2hex","praseChainId","praseChainIdToNumber","parseChainIdToNumber","isTestnet","isSolana","capitalizeString","str","lowercaseStr","transSymbolformString","input","parts","first","second","third","camelCaseToUnderscoreCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset","default","formatSymbol","symbol","formatString","arr","type","base","quote","BBOOrderType","OrderLevel","OrderSide","OrderType","getTrailingStopPrice","order","side","extreme_price","callback_value","callback_rate","isBuy","OrderSide","decimal_default","getBBOType","options","type","level","OrderType","OrderLevel","BBOOrderType","getTPSLDirection","inputs","closePrice","orderPrice","direction"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kodiak-finance/orderly-utils",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.16-rc.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
"jest": "^29.6.1",
|
|
19
19
|
"tsup": "^7.1.0",
|
|
20
20
|
"typescript": "^5.1.6",
|
|
21
|
-
"tsconfig": "0.11.
|
|
21
|
+
"tsconfig": "0.11.15-rc.0"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"dayjs": "^1.11.9",
|
|
25
25
|
"decimal.js-light": "^2.5.1",
|
|
26
|
-
"@kodiak-finance/orderly-types": "2.8.
|
|
26
|
+
"@kodiak-finance/orderly-types": "2.8.16-rc.0"
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|