ripple-binary-codec 2.4.1 → 2.5.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/src/types/index.js +2 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/st-number.d.ts +54 -0
- package/dist/src/types/st-number.js +208 -0
- package/dist/src/types/st-number.js.map +1 -0
- package/dist/src/types/st-object.js +6 -1
- package/dist/src/types/st-object.js.map +1 -1
- package/dist/src/types/uint-64.js +10 -6
- package/dist/src/types/uint-64.js.map +1 -1
- package/dist/src/utils.d.ts +32 -0
- package/dist/src/utils.js +45 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/st-number.d.ts +54 -0
- package/dist/types/st-number.js +208 -0
- package/dist/types/st-number.js.map +1 -0
- package/dist/types/st-object.js +6 -1
- package/dist/types/st-object.js.map +1 -1
- package/dist/types/uint-64.js +10 -6
- package/dist/types/uint-64.js.map +1 -1
- package/dist/utils.d.ts +32 -0
- package/dist/utils.js +45 -1
- package/dist/utils.js.map +1 -1
- package/package.json +3 -2
- package/src/types/index.ts +2 -0
- package/src/types/st-number.ts +233 -0
- package/src/types/st-object.ts +7 -1
- package/src/types/uint-64.ts +11 -8
- package/src/utils.ts +68 -0
- package/dist/types/number.d.ts +0 -19
- package/dist/types/number.js +0 -158
- package/dist/types/number.js.map +0 -1
package/dist/types/number.js
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SerializedNumber = void 0;
|
|
4
|
-
const serialized_type_1 = require("./serialized-type");
|
|
5
|
-
/**
|
|
6
|
-
* Limits of representation after normalization of mantissa and exponent
|
|
7
|
-
*/
|
|
8
|
-
const MIN_MANTISSA = BigInt('1000000000000000');
|
|
9
|
-
const MAX_MANTISSA = BigInt('9999999999999999');
|
|
10
|
-
const MIN_EXPONENT = -32768;
|
|
11
|
-
const MAX_EXPONENT = 32768;
|
|
12
|
-
const DEFAULT_VALUE_EXPONENT = -2147483648;
|
|
13
|
-
/**
|
|
14
|
-
* Helper: Write 64-bit big-endian integer to buffer.
|
|
15
|
-
*/
|
|
16
|
-
function add64(val) {
|
|
17
|
-
const buf = new Uint8Array(8);
|
|
18
|
-
for (let i = 0; i < 8; i++) {
|
|
19
|
-
buf[7 - i] = Number((val >> BigInt(8 * i)) & BigInt(0xff));
|
|
20
|
-
}
|
|
21
|
-
return buf;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Helper: Write 32-bit big-endian integer to buffer.
|
|
25
|
-
*/
|
|
26
|
-
function add32(val) {
|
|
27
|
-
const buf = new Uint8Array(4);
|
|
28
|
-
for (let i = 0; i < 4; i++) {
|
|
29
|
-
buf[3 - i] = (val >> (8 * i)) & 0xff;
|
|
30
|
-
}
|
|
31
|
-
return buf;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Extract mantissa, exponent, and sign from string.
|
|
35
|
-
*/
|
|
36
|
-
function extractNumberPartsFromString(val) {
|
|
37
|
-
// Regex: sign, integer part, optional .fraction, optional e/E exponent
|
|
38
|
-
const regex = /^([-+]?)(0|[1-9][0-9]*)(?:\.([0-9]+))?(?:[eE]([+-]?[0-9]+))?$/;
|
|
39
|
-
const match = regex.exec(val);
|
|
40
|
-
if (!match)
|
|
41
|
-
throw new Error(`Unable to parse number from string: ${val}`);
|
|
42
|
-
const [, sign, intPart, fracPart, expPart] = match;
|
|
43
|
-
let mantissaStr = intPart;
|
|
44
|
-
let exponent = 0;
|
|
45
|
-
if (fracPart) {
|
|
46
|
-
mantissaStr += fracPart;
|
|
47
|
-
exponent -= fracPart.length;
|
|
48
|
-
}
|
|
49
|
-
if (expPart)
|
|
50
|
-
exponent += parseInt(expPart, 10);
|
|
51
|
-
let mantissa = BigInt(mantissaStr);
|
|
52
|
-
if (sign === '-')
|
|
53
|
-
mantissa = -mantissa;
|
|
54
|
-
const isNegative = mantissa < BigInt(0);
|
|
55
|
-
return { mantissa, exponent, isNegative };
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Normalize mantissa and exponent to XRP Number constraints.
|
|
59
|
-
*/
|
|
60
|
-
function normalize(mantissa, exponent) {
|
|
61
|
-
let m = mantissa < BigInt(0) ? -mantissa : mantissa;
|
|
62
|
-
const isNegative = mantissa < BigInt(0);
|
|
63
|
-
while (m !== BigInt(0) && m < MIN_MANTISSA && exponent > MIN_EXPONENT) {
|
|
64
|
-
exponent -= 1;
|
|
65
|
-
m *= BigInt(10);
|
|
66
|
-
}
|
|
67
|
-
while (m > MAX_MANTISSA) {
|
|
68
|
-
if (exponent >= MAX_EXPONENT)
|
|
69
|
-
throw new Error('Mantissa and exponent are too large');
|
|
70
|
-
exponent += 1;
|
|
71
|
-
m /= BigInt(10);
|
|
72
|
-
}
|
|
73
|
-
if (isNegative)
|
|
74
|
-
m = -m;
|
|
75
|
-
return { mantissa: m, exponent };
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* SerializedType for the XRPL Number type (12 bytes).
|
|
79
|
-
*/
|
|
80
|
-
class SerializedNumber extends serialized_type_1.SerializedType {
|
|
81
|
-
constructor(bytes) {
|
|
82
|
-
super(bytes);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Creates a SerializedNumber from a string value.
|
|
86
|
-
* Accepts only string input to avoid precision loss (as per XRPL and blockchain best practices).
|
|
87
|
-
* Throws if a number or bigint is passed.
|
|
88
|
-
* @param value string representing the number (decimal, integer, or scientific notation)
|
|
89
|
-
* @returns SerializedNumber instance
|
|
90
|
-
*/
|
|
91
|
-
static from(value) {
|
|
92
|
-
if (typeof value !== 'string') {
|
|
93
|
-
throw new Error('SerializedNumber.from: value must be a string representing the number. ' +
|
|
94
|
-
'Numbers and bigints are not accepted to avoid precision loss. ' +
|
|
95
|
-
'Convert your value to a string first.');
|
|
96
|
-
}
|
|
97
|
-
return SerializedNumber.fromValue(value);
|
|
98
|
-
}
|
|
99
|
-
static fromValue(val) {
|
|
100
|
-
const { mantissa, exponent, isNegative } = extractNumberPartsFromString(val);
|
|
101
|
-
let normalizedMantissa, normalizedExponent;
|
|
102
|
-
if (mantissa === BigInt(0) && exponent === 0 && !isNegative) {
|
|
103
|
-
normalizedMantissa = BigInt(0);
|
|
104
|
-
normalizedExponent = DEFAULT_VALUE_EXPONENT;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
;
|
|
108
|
-
({ mantissa: normalizedMantissa, exponent: normalizedExponent } =
|
|
109
|
-
normalize(mantissa, exponent));
|
|
110
|
-
}
|
|
111
|
-
const mantissaBytes = add64(normalizedMantissa);
|
|
112
|
-
const exponentBytes = add32(normalizedExponent);
|
|
113
|
-
const bytes = new Uint8Array(12);
|
|
114
|
-
bytes.set(mantissaBytes, 0);
|
|
115
|
-
bytes.set(exponentBytes, 8);
|
|
116
|
-
return new SerializedNumber(bytes);
|
|
117
|
-
}
|
|
118
|
-
static fromParser(parser) {
|
|
119
|
-
return new SerializedNumber(parser.read(12));
|
|
120
|
-
}
|
|
121
|
-
// eslint-disable-next-line complexity -- needed
|
|
122
|
-
toJSON() {
|
|
123
|
-
// Decompose mantissa (signed 64-bit) and exponent (signed 32-bit)
|
|
124
|
-
const b = this.bytes;
|
|
125
|
-
let mantissa = BigInt(0);
|
|
126
|
-
for (let i = 0; i < 8; i++) {
|
|
127
|
-
mantissa = (mantissa << BigInt(8)) | BigInt(b[i]);
|
|
128
|
-
}
|
|
129
|
-
// interpret as signed 64
|
|
130
|
-
if (b[0] & 0x80)
|
|
131
|
-
mantissa -= BigInt('0x10000000000000000');
|
|
132
|
-
let exponent = (b[8] << 24) | (b[9] << 16) | (b[10] << 8) | b[11];
|
|
133
|
-
if (b[8] & 0x80)
|
|
134
|
-
exponent = exponent - 0x100000000;
|
|
135
|
-
// Special case: 0
|
|
136
|
-
if (mantissa === BigInt(0) && exponent === DEFAULT_VALUE_EXPONENT) {
|
|
137
|
-
return '0';
|
|
138
|
-
}
|
|
139
|
-
if (exponent === 0)
|
|
140
|
-
return mantissa.toString();
|
|
141
|
-
// Use scientific notation for small/large exponents, decimal otherwise
|
|
142
|
-
if (exponent < -25 || exponent > -5) {
|
|
143
|
-
return `${mantissa}e${exponent}`;
|
|
144
|
-
}
|
|
145
|
-
// Else, output as decimal with a dot
|
|
146
|
-
const isNegative = mantissa < BigInt(0);
|
|
147
|
-
let mantissaAbs = mantissa < BigInt(0) ? -mantissa : mantissa;
|
|
148
|
-
const padPrefix = 27, padSuffix = 23;
|
|
149
|
-
let mantissaStr = mantissaAbs.toString();
|
|
150
|
-
let rawValue = '0'.repeat(padPrefix) + mantissaStr + '0'.repeat(padSuffix);
|
|
151
|
-
const OFFSET = exponent + 43;
|
|
152
|
-
let integerPart = rawValue.slice(0, OFFSET).replace(/^0+/, '') || '0';
|
|
153
|
-
let fractionPart = rawValue.slice(OFFSET).replace(/0+$/, '');
|
|
154
|
-
return `${isNegative ? '-' : ''}${integerPart}${fractionPart ? '.' + fractionPart : ''}`;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
exports.SerializedNumber = SerializedNumber;
|
|
158
|
-
//# sourceMappingURL=number.js.map
|
package/dist/types/number.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/types/number.ts"],"names":[],"mappings":"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"}
|