{"version":3,"file":"utilities.cjs","names":[],"sources":["../src/utilities.ts"],"sourcesContent":["import type { OrderBookSummary, TickSize } from \"./types/index.js\";\n\nexport const roundNormal = (num: number, decimals: number): number => {\n\tif (decimalPlaces(num) <= decimals) {\n\t\treturn num;\n\t}\n\treturn Math.round((num + Number.EPSILON) * 10 ** decimals) / 10 ** decimals;\n};\n\nexport const roundDown = (num: number, decimals: number): number => {\n\tif (decimalPlaces(num) <= decimals) {\n\t\treturn num;\n\t}\n\treturn Math.floor(num * 10 ** decimals) / 10 ** decimals;\n};\n\nexport const roundUp = (num: number, decimals: number): number => {\n\tif (decimalPlaces(num) <= decimals) {\n\t\treturn num;\n\t}\n\treturn Math.ceil(num * 10 ** decimals) / 10 ** decimals;\n};\n\nexport const decimalPlaces = (num: number): number => {\n\tif (Number.isInteger(num)) {\n\t\treturn 0;\n\t}\n\n\tconst arr = num.toString().split(\".\");\n\tif (arr.length <= 1) {\n\t\treturn 0;\n\t}\n\n\treturn arr[1].length;\n};\n\n/**\n * Calculates the hash for the given orderbook\n * @param orderbook\n * @returns\n */\nexport const generateOrderBookSummaryHash = async (\n\torderbook: OrderBookSummary,\n): Promise<string> => {\n\tif (!globalThis.crypto?.subtle) {\n\t\tthrow new Error(\n\t\t\t\"generateOrderBookSummaryHash: globalThis.crypto.subtle is unavailable. Requires Node >=20 or a secure browser context (HTTPS or localhost).\",\n\t\t);\n\t}\n\torderbook.hash = \"\";\n\tconst data = new TextEncoder().encode(JSON.stringify(orderbook));\n\tconst hashBuffer = await globalThis.crypto.subtle.digest(\"SHA-1\", data);\n\tconst hashArray = Array.from(new Uint8Array(hashBuffer));\n\tconst hash = hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n\torderbook.hash = hash;\n\treturn hash;\n};\n\nexport const isTickSizeSmaller = (a: TickSize, b: TickSize): boolean => {\n\treturn parseFloat(a) < parseFloat(b);\n};\n\nexport const priceValid = (price: number, tickSize: TickSize): boolean => {\n\treturn price >= parseFloat(tickSize) && price <= 1 - parseFloat(tickSize);\n};\n"],"mappings":";;AAEA,MAAa,eAAe,KAAa,aAA6B;AACrE,KAAI,cAAc,IAAI,IAAI,SACzB,QAAO;AAER,QAAO,KAAK,OAAO,MAAM,OAAO,WAAW,MAAM,SAAS,GAAG,MAAM;;AAGpE,MAAa,aAAa,KAAa,aAA6B;AACnE,KAAI,cAAc,IAAI,IAAI,SACzB,QAAO;AAER,QAAO,KAAK,MAAM,MAAM,MAAM,SAAS,GAAG,MAAM;;AAGjD,MAAa,WAAW,KAAa,aAA6B;AACjE,KAAI,cAAc,IAAI,IAAI,SACzB,QAAO;AAER,QAAO,KAAK,KAAK,MAAM,MAAM,SAAS,GAAG,MAAM;;AAGhD,MAAa,iBAAiB,QAAwB;AACrD,KAAI,OAAO,UAAU,IAAI,CACxB,QAAO;CAGR,MAAM,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI;AACrC,KAAI,IAAI,UAAU,EACjB,QAAO;AAGR,QAAO,IAAI,GAAG;;;;;;;AAQf,MAAa,+BAA+B,OAC3C,cACqB;AACrB,KAAI,CAAC,WAAW,QAAQ,OACvB,OAAM,IAAI,MACT,8IACA;AAEF,WAAU,OAAO;CACjB,MAAM,OAAO,IAAI,aAAa,CAAC,OAAO,KAAK,UAAU,UAAU,CAAC;CAChE,MAAM,aAAa,MAAM,WAAW,OAAO,OAAO,OAAO,SAAS,KAAK;CAEvE,MAAM,OADY,MAAM,KAAK,IAAI,WAAW,WAAW,CAAC,CACjC,KAAI,MAAK,EAAE,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG;AACzE,WAAU,OAAO;AACjB,QAAO;;AAGR,MAAa,qBAAqB,GAAa,MAAyB;AACvE,QAAO,WAAW,EAAE,GAAG,WAAW,EAAE;;AAGrC,MAAa,cAAc,OAAe,aAAgC;AACzE,QAAO,SAAS,WAAW,SAAS,IAAI,SAAS,IAAI,WAAW,SAAS"}