{"version":3,"sources":["../../src/math/decimalAdjustment.ts"],"sourcesContent":["import { BigDecimal, BigDecimalish, toBigDecimal } from './bigDecimal';\n\n// All Vertex balances have 18 decimals. Ex. 1e18 = 1.0\nexport const VERTEX_PRODUCT_DECIMALS = 18;\n\n/**\n * Determines the result type after adjusting decimals based on the input type `T`.\n *\n * - If `T` is `undefined`, the result is `undefined`.\n * - If `T` is a `number`, the result is a `number`.\n * - Otherwise, the result is a `BigDecimal`.\n */\ntype AdjustDecimalsResult<T extends BigDecimalish | undefined> =\n  T extends undefined ? undefined : T extends number ? number : BigDecimal;\n\n/**\n * Adds the specified # of decimals to the number. For example, value = 1, decimals = 2, returns 100.\n *\n * @param value can be undefined for better developer experience. If undefined, returns undefined.\n * @param decimals number of decimal places to add, defaults to 18, which is the standard within Vertex\n */\n\nexport function addDecimals<T extends BigDecimalish | undefined>(\n  value: T,\n  decimals: number = VERTEX_PRODUCT_DECIMALS,\n): AdjustDecimalsResult<T> {\n  const getResult = () => {\n    if (value == null) {\n      return undefined;\n    }\n\n    const adjustedValue = toBigDecimal(value).multipliedBy(\n      toBigDecimal(10).pow(decimals),\n    );\n    return typeof value === 'number' ? adjustedValue.toNumber() : adjustedValue;\n  };\n\n  return getResult() as AdjustDecimalsResult<T>;\n}\n\n/**\n * Removes the specified # of decimals from the number. For example, value = 100, decimals = 2, returns 1.\n *\n * @param value can be undefined for better developer experience. If undefined, returns undefined.\n * @param decimals number of decimal places to remove, defaults to 18, which is the standard within Vertex\n */\nexport function removeDecimals<T extends BigDecimalish | undefined>(\n  value: T,\n  decimals: number = VERTEX_PRODUCT_DECIMALS,\n): AdjustDecimalsResult<T> {\n  const getResult = () => {\n    if (value == null) {\n      return undefined;\n    }\n\n    const adjustedValue = toBigDecimal(value).dividedBy(\n      toBigDecimal(10).pow(decimals),\n    );\n    return typeof value === 'number' ? adjustedValue.toNumber() : adjustedValue;\n  };\n\n  return getResult() as AdjustDecimalsResult<T>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAwD;AAGjD,IAAM,0BAA0B;AAmBhC,SAAS,YACd,OACA,WAAmB,yBACM;AACzB,QAAM,YAAY,MAAM;AACtB,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,IACT;AAEA,UAAM,oBAAgB,gCAAa,KAAK,EAAE;AAAA,UACxC,gCAAa,EAAE,EAAE,IAAI,QAAQ;AAAA,IAC/B;AACA,WAAO,OAAO,UAAU,WAAW,cAAc,SAAS,IAAI;AAAA,EAChE;AAEA,SAAO,UAAU;AACnB;AAQO,SAAS,eACd,OACA,WAAmB,yBACM;AACzB,QAAM,YAAY,MAAM;AACtB,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,IACT;AAEA,UAAM,oBAAgB,gCAAa,KAAK,EAAE;AAAA,UACxC,gCAAa,EAAE,EAAE,IAAI,QAAQ;AAAA,IAC/B;AACA,WAAO,OAAO,UAAU,WAAW,cAAc,SAAS,IAAI;AAAA,EAChE;AAEA,SAAO,UAAU;AACnB;","names":[]}