@exponent-labs/precise-number 0.1.7 → 0.9.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/build/pnum.d.ts CHANGED
@@ -15,7 +15,8 @@ export declare class PreciseNumber {
15
15
  anchorify(): {
16
16
  0: PNumRaw;
17
17
  };
18
- static fromRaw(raw: BN[]): PreciseNumber;
18
+ static fromRaw(raw: BN[] | bigint[]): PreciseNumber;
19
19
  }
20
20
  export declare function stringToU256(str: string, decimalPlaces?: number): PNumRaw;
21
+ export declare function bigintU256ToString(raw: bigint[], decimalPlaces?: number): string;
21
22
  export declare function u256ToString(bnArray: BN[], decimalPlaces?: number): string;
package/build/pnum.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.u256ToString = exports.stringToU256 = exports.PreciseNumber = exports.ONE = exports.DECIMAL_PLACES = void 0;
6
+ exports.u256ToString = exports.bigintU256ToString = exports.stringToU256 = exports.PreciseNumber = exports.ONE = exports.DECIMAL_PLACES = void 0;
7
7
  const bn_js_1 = __importDefault(require("bn.js"));
8
8
  const decimal_js_1 = __importDefault(require("decimal.js"));
9
9
  exports.DECIMAL_PLACES = 12;
@@ -26,9 +26,11 @@ class PreciseNumber {
26
26
  }
27
27
  static fromRaw(raw) {
28
28
  if (raw.length !== 4) {
29
- throw new Error("Invalid input: raw must be an array of 4 BNs");
29
+ throw new Error("Invalid input: raw must be an array of 4 BNs or bigints");
30
30
  }
31
- const n = u256ToString(raw);
31
+ const n = typeof raw[0] === "bigint"
32
+ ? bigintU256ToString(raw)
33
+ : u256ToString(raw);
32
34
  return new PreciseNumber(n);
33
35
  }
34
36
  }
@@ -52,6 +54,16 @@ function stringToU256(str, decimalPlaces = exports.DECIMAL_PLACES) {
52
54
  }
53
55
  }
54
56
  exports.stringToU256 = stringToU256;
57
+ function bigintU256ToString(raw, decimalPlaces = exports.DECIMAL_PLACES) {
58
+ if (raw.length !== 4) {
59
+ throw new Error("Invalid input: raw must be an array of 4 bigints");
60
+ }
61
+ const integer = raw[0] + (raw[1] << 64n) + (raw[2] << 128n) + (raw[3] << 192n);
62
+ const decimalValue = new decimal_js_1.default(integer.toString());
63
+ const originalValue = decimalValue.div(new decimal_js_1.default(10).pow(decimalPlaces));
64
+ return originalValue.toString();
65
+ }
66
+ exports.bigintU256ToString = bigintU256ToString;
55
67
  function u256ToString(bnArray, decimalPlaces = exports.DECIMAL_PLACES) {
56
68
  if (bnArray.length !== 4) {
57
69
  throw new Error("Invalid input: bnArray must be an array of 4 BNs");
package/build/pnum.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pnum.js","sourceRoot":"","sources":["../src/pnum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pnum.js","sourceRoot":"","sources":["../src/pnum.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exponent-labs/precise-number",
3
- "version": "0.1.7",
3
+ "version": "0.9.0",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "license": "AGPL-3.0",
package/src/pnum.test.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import BN from "bn.js"
2
- import { ONE, stringToU256, u256ToString } from "./pnum"
2
+ import { ONE, PreciseNumber, stringToU256, u256ToString, bigintU256ToString } from "./pnum"
3
3
 
4
4
  describe("precise-number", () => {
5
5
  it("handles 0", () => {
@@ -29,4 +29,28 @@ describe("precise-number", () => {
29
29
  const s = u256ToString(pn)
30
30
  expect(s).toEqual(val)
31
31
  })
32
+
33
+ it("fromRaw handles bigint[] (Codama-decoded values)", () => {
34
+ const val = "1000000000"
35
+ // Convert to BN[] via stringToU256, then to bigint[] to simulate Codama output
36
+ const bnRaw = stringToU256(val)
37
+ const bigintRaw: bigint[] = bnRaw.map((bn) => BigInt("0x" + bn.toString("hex")))
38
+
39
+ const fromBn = PreciseNumber.fromRaw(bnRaw)
40
+ const fromBigint = PreciseNumber.fromRaw(bigintRaw)
41
+
42
+ expect(fromBigint.valueString).toEqual(fromBn.valueString)
43
+ expect(fromBigint.valueString).toEqual(val)
44
+ })
45
+
46
+ it("bigintU256ToString matches u256ToString", () => {
47
+ const val = "123.456789012345"
48
+ const bnRaw = stringToU256(val)
49
+ const bigintRaw: bigint[] = bnRaw.map((bn) => BigInt("0x" + bn.toString("hex")))
50
+
51
+ const fromBn = u256ToString(bnRaw)
52
+ const fromBigint = bigintU256ToString(bigintRaw)
53
+
54
+ expect(fromBigint).toEqual(fromBn)
55
+ })
32
56
  })
package/src/pnum.ts CHANGED
@@ -26,11 +26,13 @@ export class PreciseNumber {
26
26
  return this.serialize()
27
27
  }
28
28
 
29
- static fromRaw(raw: BN[]): PreciseNumber {
29
+ static fromRaw(raw: BN[] | bigint[]): PreciseNumber {
30
30
  if (raw.length !== 4) {
31
- throw new Error("Invalid input: raw must be an array of 4 BNs")
31
+ throw new Error("Invalid input: raw must be an array of 4 BNs or bigints")
32
32
  }
33
- const n = u256ToString(raw)
33
+ const n = typeof raw[0] === "bigint"
34
+ ? bigintU256ToString(raw as bigint[])
35
+ : u256ToString(raw as BN[])
34
36
  return new PreciseNumber(n)
35
37
  }
36
38
  }
@@ -55,6 +57,16 @@ export function stringToU256(str: string, decimalPlaces = DECIMAL_PLACES): PNumR
55
57
  }
56
58
  }
57
59
 
60
+ export function bigintU256ToString(raw: bigint[], decimalPlaces = DECIMAL_PLACES): string {
61
+ if (raw.length !== 4) {
62
+ throw new Error("Invalid input: raw must be an array of 4 bigints")
63
+ }
64
+ const integer = raw[0] + (raw[1] << 64n) + (raw[2] << 128n) + (raw[3] << 192n)
65
+ const decimalValue = new Decimal(integer.toString())
66
+ const originalValue = decimalValue.div(new Decimal(10).pow(decimalPlaces))
67
+ return originalValue.toString()
68
+ }
69
+
58
70
  export function u256ToString(bnArray: BN[], decimalPlaces = DECIMAL_PLACES): string {
59
71
  if (bnArray.length !== 4) {
60
72
  throw new Error("Invalid input: bnArray must be an array of 4 BNs")