@fleet-sdk/common 0.1.3 → 0.2.1
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/CHANGELOG.md +17 -0
- package/README.md +1 -1
- package/dist/index.cjs.js +604 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.mts +268 -0
- package/dist/index.d.ts +268 -0
- package/dist/index.esm.js +551 -0
- package/dist/index.esm.js.map +1 -0
- package/package.json +9 -9
- package/src/utils/{arrayUtils.ts → array.ts} +4 -0
- package/src/utils/assertions.ts +68 -22
- package/src/utils/{bigIntUtils.ts → bigInt.ts} +10 -76
- package/src/utils/bytes.bench.ts +43 -0
- package/src/utils/bytes.ts +34 -0
- package/src/utils/index.ts +5 -6
- package/src/utils/object.ts +28 -0
- package/src/utils/{boxUtils.ts → utxo.ts} +3 -4
- package/dist/cjs/index.d.ts +0 -3
- package/dist/cjs/index.js +0 -20
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/models/collection.d.ts +0 -20
- package/dist/cjs/models/collection.js +0 -76
- package/dist/cjs/models/collection.js.map +0 -1
- package/dist/cjs/models/index.d.ts +0 -1
- package/dist/cjs/models/index.js +0 -18
- package/dist/cjs/models/index.js.map +0 -1
- package/dist/cjs/types/boxes.d.ts +0 -22
- package/dist/cjs/types/boxes.js +0 -3
- package/dist/cjs/types/boxes.js.map +0 -1
- package/dist/cjs/types/common.d.ts +0 -23
- package/dist/cjs/types/common.js +0 -19
- package/dist/cjs/types/common.js.map +0 -1
- package/dist/cjs/types/contextExtension.d.ts +0 -4
- package/dist/cjs/types/contextExtension.js +0 -3
- package/dist/cjs/types/contextExtension.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -8
- package/dist/cjs/types/index.js +0 -25
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/inputs.d.ts +0 -37
- package/dist/cjs/types/inputs.js +0 -3
- package/dist/cjs/types/inputs.js.map +0 -1
- package/dist/cjs/types/proverResult.d.ts +0 -6
- package/dist/cjs/types/proverResult.js +0 -3
- package/dist/cjs/types/proverResult.js.map +0 -1
- package/dist/cjs/types/registers.d.ts +0 -9
- package/dist/cjs/types/registers.js +0 -3
- package/dist/cjs/types/registers.js.map +0 -1
- package/dist/cjs/types/token.d.ts +0 -18
- package/dist/cjs/types/token.js +0 -3
- package/dist/cjs/types/token.js.map +0 -1
- package/dist/cjs/types/transactions.d.ts +0 -22
- package/dist/cjs/types/transactions.js +0 -3
- package/dist/cjs/types/transactions.js.map +0 -1
- package/dist/cjs/utils/arrayUtils.d.ts +0 -25
- package/dist/cjs/utils/arrayUtils.js +0 -155
- package/dist/cjs/utils/arrayUtils.js.map +0 -1
- package/dist/cjs/utils/assertions.d.ts +0 -8
- package/dist/cjs/utils/assertions.js +0 -40
- package/dist/cjs/utils/assertions.js.map +0 -1
- package/dist/cjs/utils/bigIntLiterals.d.ts +0 -7
- package/dist/cjs/utils/bigIntLiterals.js +0 -12
- package/dist/cjs/utils/bigIntLiterals.js.map +0 -1
- package/dist/cjs/utils/bigIntUtils.d.ts +0 -54
- package/dist/cjs/utils/bigIntUtils.js +0 -183
- package/dist/cjs/utils/bigIntUtils.js.map +0 -1
- package/dist/cjs/utils/boxUtils.d.ts +0 -23
- package/dist/cjs/utils/boxUtils.js +0 -121
- package/dist/cjs/utils/boxUtils.js.map +0 -1
- package/dist/cjs/utils/index.d.ts +0 -7
- package/dist/cjs/utils/index.js +0 -24
- package/dist/cjs/utils/index.js.map +0 -1
- package/dist/cjs/utils/objectUtils.d.ts +0 -4
- package/dist/cjs/utils/objectUtils.js +0 -27
- package/dist/cjs/utils/objectUtils.js.map +0 -1
- package/dist/cjs/utils/stringUtils.d.ts +0 -7
- package/dist/cjs/utils/stringUtils.js +0 -21
- package/dist/cjs/utils/stringUtils.js.map +0 -1
- package/dist/esm/index.d.ts +0 -3
- package/dist/esm/index.js +0 -4
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/models/collection.d.ts +0 -20
- package/dist/esm/models/collection.js +0 -72
- package/dist/esm/models/collection.js.map +0 -1
- package/dist/esm/models/index.d.ts +0 -1
- package/dist/esm/models/index.js +0 -2
- package/dist/esm/models/index.js.map +0 -1
- package/dist/esm/types/boxes.d.ts +0 -22
- package/dist/esm/types/boxes.js +0 -2
- package/dist/esm/types/boxes.js.map +0 -1
- package/dist/esm/types/common.d.ts +0 -23
- package/dist/esm/types/common.js +0 -16
- package/dist/esm/types/common.js.map +0 -1
- package/dist/esm/types/contextExtension.d.ts +0 -4
- package/dist/esm/types/contextExtension.js +0 -2
- package/dist/esm/types/contextExtension.js.map +0 -1
- package/dist/esm/types/index.d.ts +0 -8
- package/dist/esm/types/index.js +0 -9
- package/dist/esm/types/index.js.map +0 -1
- package/dist/esm/types/inputs.d.ts +0 -37
- package/dist/esm/types/inputs.js +0 -2
- package/dist/esm/types/inputs.js.map +0 -1
- package/dist/esm/types/proverResult.d.ts +0 -6
- package/dist/esm/types/proverResult.js +0 -2
- package/dist/esm/types/proverResult.js.map +0 -1
- package/dist/esm/types/registers.d.ts +0 -9
- package/dist/esm/types/registers.js +0 -2
- package/dist/esm/types/registers.js.map +0 -1
- package/dist/esm/types/token.d.ts +0 -18
- package/dist/esm/types/token.js +0 -2
- package/dist/esm/types/token.js.map +0 -1
- package/dist/esm/types/transactions.d.ts +0 -22
- package/dist/esm/types/transactions.js +0 -2
- package/dist/esm/types/transactions.js.map +0 -1
- package/dist/esm/utils/arrayUtils.d.ts +0 -25
- package/dist/esm/utils/arrayUtils.js +0 -139
- package/dist/esm/utils/arrayUtils.js.map +0 -1
- package/dist/esm/utils/assertions.d.ts +0 -8
- package/dist/esm/utils/assertions.js +0 -32
- package/dist/esm/utils/assertions.js.map +0 -1
- package/dist/esm/utils/bigIntLiterals.d.ts +0 -7
- package/dist/esm/utils/bigIntLiterals.js +0 -9
- package/dist/esm/utils/bigIntLiterals.js.map +0 -1
- package/dist/esm/utils/bigIntUtils.d.ts +0 -54
- package/dist/esm/utils/bigIntUtils.js +0 -170
- package/dist/esm/utils/bigIntUtils.js.map +0 -1
- package/dist/esm/utils/boxUtils.d.ts +0 -23
- package/dist/esm/utils/boxUtils.js +0 -113
- package/dist/esm/utils/boxUtils.js.map +0 -1
- package/dist/esm/utils/index.d.ts +0 -7
- package/dist/esm/utils/index.js +0 -8
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils/objectUtils.d.ts +0 -4
- package/dist/esm/utils/objectUtils.js +0 -20
- package/dist/esm/utils/objectUtils.js.map +0 -1
- package/dist/esm/utils/stringUtils.d.ts +0 -7
- package/dist/esm/utils/stringUtils.js +0 -16
- package/dist/esm/utils/stringUtils.js.map +0 -1
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/utils/bigIntLiterals.ts +0 -9
- package/src/utils/objectUtils.ts +0 -23
- package/src/utils/stringUtils.ts +0 -18
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# @fleet-sdk/common
|
2
2
|
|
3
|
+
## 0.2.1
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- edf2830: Fix module exporting.
|
8
|
+
|
9
|
+
## 0.2.0
|
10
|
+
|
11
|
+
### Minor Changes
|
12
|
+
|
13
|
+
- 5a79c57: Add `concatBytes()` function.
|
14
|
+
- a491ab9: Add `ensureDefaults()` function.
|
15
|
+
- 3236dd8: Add new assertion functions:
|
16
|
+
- `assertTypeOf()` - uses `typeof` to check for JavaScript type primitives;
|
17
|
+
- `assertInstanceOf()` - uses `instanceof` to check for object instances.
|
18
|
+
- 9bd393b: Add `depthOf()` function.
|
19
|
+
|
3
20
|
## 0.1.3
|
4
21
|
|
5
22
|
### Patch Changes
|
package/README.md
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
# @fleet-sdk/
|
1
|
+
# @fleet-sdk/common [](https://github.com/fleet-sdk/fleet/blob/master/LICENSE) [](https://www.npmjs.com/package/@fleet-sdk/common)
|
2
2
|
|
3
3
|
Internal utility functions, constants and types shared across @fleet-sdk packages.
|
@@ -0,0 +1,604 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
// src/utils/assertions.ts
|
4
|
+
function assert(condition, error) {
|
5
|
+
if (condition)
|
6
|
+
return;
|
7
|
+
let err = void 0;
|
8
|
+
switch (typeof error) {
|
9
|
+
case "string":
|
10
|
+
err = new Error(error);
|
11
|
+
break;
|
12
|
+
case "function":
|
13
|
+
err = new Error(error());
|
14
|
+
break;
|
15
|
+
default:
|
16
|
+
err = error;
|
17
|
+
}
|
18
|
+
throw err;
|
19
|
+
}
|
20
|
+
function assertTypeOf(obj, expected) {
|
21
|
+
const type = typeof obj;
|
22
|
+
if (type !== expected) {
|
23
|
+
throw new Error(`Expected an object of type '${expected}', got '${type}'.`);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
var toString = (value) => Object.prototype.toString.call(value);
|
27
|
+
function getTypeName(value) {
|
28
|
+
if (value === null)
|
29
|
+
return "null";
|
30
|
+
const type = typeof value;
|
31
|
+
return type === "object" || type === "function" ? toString(value).slice(8, -1) : type;
|
32
|
+
}
|
33
|
+
function assertInstanceOf(obj, expected) {
|
34
|
+
const condition = obj instanceof expected;
|
35
|
+
if (!condition) {
|
36
|
+
throw new Error(`Expected an instance of '${expected.name}', got '${getTypeName(obj)}'.`);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
function isEmpty(obj) {
|
40
|
+
if (!obj)
|
41
|
+
return true;
|
42
|
+
return Array.isArray(obj) ? obj.length === 0 : Object.keys(obj).length === 0;
|
43
|
+
}
|
44
|
+
function some(obj) {
|
45
|
+
return !isEmpty(obj);
|
46
|
+
}
|
47
|
+
function isTruthy(value) {
|
48
|
+
return !!value;
|
49
|
+
}
|
50
|
+
function isFalsy(value) {
|
51
|
+
return !value;
|
52
|
+
}
|
53
|
+
function isUndefined(v) {
|
54
|
+
return v === void 0 || v === null || Number.isNaN(v);
|
55
|
+
}
|
56
|
+
function isDefined(v) {
|
57
|
+
return !isUndefined(v);
|
58
|
+
}
|
59
|
+
function hasKey(o, key) {
|
60
|
+
return Object.prototype.hasOwnProperty.call(o, key);
|
61
|
+
}
|
62
|
+
|
63
|
+
// src/utils/array.ts
|
64
|
+
function first(array) {
|
65
|
+
if (!array)
|
66
|
+
return void 0;
|
67
|
+
assert(array.length > 0, "Empty array.");
|
68
|
+
return array[0];
|
69
|
+
}
|
70
|
+
function last(array) {
|
71
|
+
if (!array)
|
72
|
+
return void 0;
|
73
|
+
assert(array.length > 0, "Empty array.");
|
74
|
+
return at(array, -1);
|
75
|
+
}
|
76
|
+
function at(array, index) {
|
77
|
+
const len = array?.length;
|
78
|
+
if (!len)
|
79
|
+
return void 0;
|
80
|
+
if (index < 0) {
|
81
|
+
index += len;
|
82
|
+
}
|
83
|
+
return array[index];
|
84
|
+
}
|
85
|
+
function hasDuplicates(array) {
|
86
|
+
return array.some((item, index) => {
|
87
|
+
return array.indexOf(item) !== index;
|
88
|
+
});
|
89
|
+
}
|
90
|
+
function hasDuplicatesBy(array, selector) {
|
91
|
+
return array.some((item, index) => {
|
92
|
+
return array.findIndex((x) => selector(x) === selector(item)) !== index;
|
93
|
+
});
|
94
|
+
}
|
95
|
+
function chunk(array, size) {
|
96
|
+
if (array.length <= size) {
|
97
|
+
return [array];
|
98
|
+
}
|
99
|
+
const chunks = [];
|
100
|
+
for (let i = 0; i < array.length; i += size) {
|
101
|
+
chunks.push(array.slice(i, i + size));
|
102
|
+
}
|
103
|
+
return chunks;
|
104
|
+
}
|
105
|
+
function orderBy(array, iteratee, order = "asc") {
|
106
|
+
return [...array].sort((a, b) => {
|
107
|
+
if (iteratee(a) > iteratee(b)) {
|
108
|
+
return order === "asc" ? 1 : -1;
|
109
|
+
} else if (iteratee(a) < iteratee(b)) {
|
110
|
+
return order === "asc" ? -1 : 1;
|
111
|
+
} else {
|
112
|
+
return 0;
|
113
|
+
}
|
114
|
+
});
|
115
|
+
}
|
116
|
+
function areEqual(array1, array2) {
|
117
|
+
if (array1 === array2) {
|
118
|
+
return true;
|
119
|
+
}
|
120
|
+
if (array1.length != array2.length) {
|
121
|
+
return false;
|
122
|
+
}
|
123
|
+
for (let i = 0; i < array1.length; i++) {
|
124
|
+
if (array1[i] !== array2[i]) {
|
125
|
+
return false;
|
126
|
+
}
|
127
|
+
}
|
128
|
+
return true;
|
129
|
+
}
|
130
|
+
function areEqualBy(array1, array2, selector) {
|
131
|
+
if (array1 === array2) {
|
132
|
+
return true;
|
133
|
+
}
|
134
|
+
if (array1.length != array2.length) {
|
135
|
+
return false;
|
136
|
+
}
|
137
|
+
for (let i = 0; i < array1.length; i++) {
|
138
|
+
if (selector(array1[i]) !== selector(array2[i])) {
|
139
|
+
return false;
|
140
|
+
}
|
141
|
+
}
|
142
|
+
return true;
|
143
|
+
}
|
144
|
+
function startsWith(array, target) {
|
145
|
+
if (array === target) {
|
146
|
+
return true;
|
147
|
+
}
|
148
|
+
if (target.length > array.length) {
|
149
|
+
return false;
|
150
|
+
}
|
151
|
+
for (let i = 0; i < target.length; i++) {
|
152
|
+
if (target[i] !== array[i]) {
|
153
|
+
return false;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
return true;
|
157
|
+
}
|
158
|
+
function endsWith(array, target) {
|
159
|
+
if (array === target) {
|
160
|
+
return true;
|
161
|
+
}
|
162
|
+
if (target.length > array.length) {
|
163
|
+
return false;
|
164
|
+
}
|
165
|
+
const offset = array.length - target.length;
|
166
|
+
for (let i = target.length - 1; i >= 0; i--) {
|
167
|
+
if (target[i] !== array[i + offset]) {
|
168
|
+
return false;
|
169
|
+
}
|
170
|
+
}
|
171
|
+
return true;
|
172
|
+
}
|
173
|
+
function uniq(array) {
|
174
|
+
if (isEmpty(array)) {
|
175
|
+
return array;
|
176
|
+
}
|
177
|
+
return Array.from(new Set(array));
|
178
|
+
}
|
179
|
+
function uniqBy(array, selector, selection = "keep-first") {
|
180
|
+
if (isEmpty(array)) {
|
181
|
+
return array;
|
182
|
+
}
|
183
|
+
return Array.from(
|
184
|
+
array.reduce((map, e) => {
|
185
|
+
const key = selector(e);
|
186
|
+
if (selection === "keep-first" && map.has(key)) {
|
187
|
+
return map;
|
188
|
+
}
|
189
|
+
return map.set(key, e);
|
190
|
+
}, /* @__PURE__ */ new Map()).values()
|
191
|
+
);
|
192
|
+
}
|
193
|
+
function depthOf(array) {
|
194
|
+
return Array.isArray(array) ? 1 + Math.max(0, ...array.map(depthOf)) : 0;
|
195
|
+
}
|
196
|
+
|
197
|
+
// src/utils/bigInt.ts
|
198
|
+
var _0n = BigInt(0);
|
199
|
+
var _1n = BigInt(1);
|
200
|
+
var _7n = BigInt(7);
|
201
|
+
var _10n = BigInt(10);
|
202
|
+
var _63n = BigInt(63);
|
203
|
+
var _127n = BigInt(127);
|
204
|
+
var _128n = BigInt(128);
|
205
|
+
function ensureBigInt(number) {
|
206
|
+
return typeof number === "bigint" ? number : BigInt(number);
|
207
|
+
}
|
208
|
+
function undecimalize(decimalStr, options) {
|
209
|
+
if (!decimalStr) {
|
210
|
+
return _0n;
|
211
|
+
}
|
212
|
+
options = typeof options == "number" ? { decimals: options } : options;
|
213
|
+
if (isUndefined(options)) {
|
214
|
+
options = {};
|
215
|
+
}
|
216
|
+
options.decimals = options.decimals || 0;
|
217
|
+
options.decimalMark = options.decimalMark || ".";
|
218
|
+
const fragments = decimalStr.split(options.decimalMark);
|
219
|
+
if (fragments.length > 2) {
|
220
|
+
throw new Error("Invalid numeric string.");
|
221
|
+
}
|
222
|
+
let [integer, decimal] = fragments;
|
223
|
+
integer = _removeLeadingZeros(integer);
|
224
|
+
const negative = integer.startsWith("-") ? "-" : "";
|
225
|
+
if (!decimal) {
|
226
|
+
decimal = "0".repeat(options.decimals);
|
227
|
+
} else if (decimal.length < options.decimals) {
|
228
|
+
decimal = decimal.padEnd(options.decimals, "0");
|
229
|
+
}
|
230
|
+
return BigInt(negative + _stripNonDigits(integer + decimal));
|
231
|
+
}
|
232
|
+
function _stripNonDigits(value) {
|
233
|
+
return value.replace(/\D/g, "");
|
234
|
+
}
|
235
|
+
function decimalize(value, options) {
|
236
|
+
value = ensureBigInt(value);
|
237
|
+
if (!options) {
|
238
|
+
return value.toString();
|
239
|
+
}
|
240
|
+
options = typeof options == "number" ? { decimals: options } : options;
|
241
|
+
options.decimals = options.decimals || 0;
|
242
|
+
options.decimalMark = options.decimalMark || ".";
|
243
|
+
const pow = _10n ** BigInt(options.decimals);
|
244
|
+
const integer = value / pow;
|
245
|
+
const decimal = value - integer * pow;
|
246
|
+
return _buildFormattedDecimal(integer.toString(10), decimal.toString(10), options);
|
247
|
+
}
|
248
|
+
function percent(value, percentage, precision = 2n) {
|
249
|
+
return value * percentage / 10n ** precision;
|
250
|
+
}
|
251
|
+
function _buildFormattedDecimal(integer, decimal, options) {
|
252
|
+
const integerPart = _addThousandMarks(integer, options.thousandMark);
|
253
|
+
const decimalPart = _stripTrailingZeros(decimal.padStart(options.decimals, "0"));
|
254
|
+
if (decimalPart) {
|
255
|
+
return `${integerPart}${options.decimalMark}${decimalPart}`;
|
256
|
+
} else {
|
257
|
+
return integerPart;
|
258
|
+
}
|
259
|
+
}
|
260
|
+
function _addThousandMarks(value, mark) {
|
261
|
+
if (!mark) {
|
262
|
+
return value;
|
263
|
+
}
|
264
|
+
return value.replace(/\B(?=(\d{3})+(?!\d))/g, mark);
|
265
|
+
}
|
266
|
+
function _stripTrailingZeros(value) {
|
267
|
+
if (!value.endsWith("0")) {
|
268
|
+
return value;
|
269
|
+
}
|
270
|
+
return value.replace(/\.?0+$/, "");
|
271
|
+
}
|
272
|
+
function _removeLeadingZeros(value) {
|
273
|
+
if (!value.startsWith("0")) {
|
274
|
+
return value;
|
275
|
+
}
|
276
|
+
return value.replace(/^0+\.?/, "");
|
277
|
+
}
|
278
|
+
function sumBy(collection, iteratee, condition) {
|
279
|
+
let acc = _0n;
|
280
|
+
if (isEmpty(collection)) {
|
281
|
+
return acc;
|
282
|
+
}
|
283
|
+
for (const item of collection) {
|
284
|
+
if (isUndefined(condition) || condition(item)) {
|
285
|
+
acc += iteratee(item);
|
286
|
+
}
|
287
|
+
}
|
288
|
+
return acc;
|
289
|
+
}
|
290
|
+
function min(...numbers) {
|
291
|
+
let min2 = first(numbers);
|
292
|
+
for (const num of numbers) {
|
293
|
+
if (num < min2) {
|
294
|
+
min2 = num;
|
295
|
+
}
|
296
|
+
}
|
297
|
+
return min2;
|
298
|
+
}
|
299
|
+
function max(...numbers) {
|
300
|
+
let max2 = first(numbers);
|
301
|
+
for (const num of numbers) {
|
302
|
+
if (num > max2) {
|
303
|
+
max2 = num;
|
304
|
+
}
|
305
|
+
}
|
306
|
+
return max2;
|
307
|
+
}
|
308
|
+
|
309
|
+
// src/utils/utxo.ts
|
310
|
+
var NANOERGS_TOKEN_ID = "nanoErgs";
|
311
|
+
function utxoSum(boxes, tokenId) {
|
312
|
+
const balances = {};
|
313
|
+
for (const box of boxes) {
|
314
|
+
if (isUndefined(tokenId) || tokenId === NANOERGS_TOKEN_ID) {
|
315
|
+
balances[NANOERGS_TOKEN_ID] = (balances[NANOERGS_TOKEN_ID] || _0n) + ensureBigInt(box.value);
|
316
|
+
}
|
317
|
+
if (tokenId !== NANOERGS_TOKEN_ID) {
|
318
|
+
for (const token of box.assets) {
|
319
|
+
if (isDefined(tokenId) && tokenId !== token.tokenId) {
|
320
|
+
continue;
|
321
|
+
}
|
322
|
+
balances[token.tokenId] = (balances[token.tokenId] || _0n) + ensureBigInt(token.amount);
|
323
|
+
}
|
324
|
+
}
|
325
|
+
}
|
326
|
+
if (isDefined(tokenId)) {
|
327
|
+
return balances[tokenId] || _0n;
|
328
|
+
}
|
329
|
+
return {
|
330
|
+
nanoErgs: balances[NANOERGS_TOKEN_ID] || _0n,
|
331
|
+
tokens: Object.keys(balances).filter((x) => x !== NANOERGS_TOKEN_ID).map((tokenId2) => ({ tokenId: tokenId2, amount: balances[tokenId2] }))
|
332
|
+
};
|
333
|
+
}
|
334
|
+
function utxoDiff(minuend, subtrahend) {
|
335
|
+
if (Array.isArray(minuend)) {
|
336
|
+
minuend = utxoSum(minuend);
|
337
|
+
}
|
338
|
+
if (Array.isArray(subtrahend)) {
|
339
|
+
subtrahend = utxoSum(subtrahend);
|
340
|
+
}
|
341
|
+
const tokens = [];
|
342
|
+
const nanoErgs = minuend.nanoErgs - subtrahend.nanoErgs;
|
343
|
+
for (const token of minuend.tokens) {
|
344
|
+
const balance = token.amount - (subtrahend.tokens.find((t) => t.tokenId === token.tokenId)?.amount || _0n);
|
345
|
+
if (balance !== _0n) {
|
346
|
+
tokens.push({ tokenId: token.tokenId, amount: balance });
|
347
|
+
}
|
348
|
+
}
|
349
|
+
return { nanoErgs, tokens };
|
350
|
+
}
|
351
|
+
var MIN_NON_MANDATORY_REGISTER_INDEX = 4;
|
352
|
+
var MAX_NON_MANDATORY_REGISTER_INDEX = 9;
|
353
|
+
function areRegistersDenselyPacked(registers) {
|
354
|
+
let lastIndex = 0;
|
355
|
+
for (let i = MIN_NON_MANDATORY_REGISTER_INDEX; i <= MAX_NON_MANDATORY_REGISTER_INDEX; i++) {
|
356
|
+
const key = `R${i}`;
|
357
|
+
if (registers[key]) {
|
358
|
+
if (i === MIN_NON_MANDATORY_REGISTER_INDEX) {
|
359
|
+
lastIndex = i;
|
360
|
+
continue;
|
361
|
+
}
|
362
|
+
if (i - lastIndex > 1) {
|
363
|
+
return false;
|
364
|
+
}
|
365
|
+
lastIndex = i;
|
366
|
+
}
|
367
|
+
}
|
368
|
+
return true;
|
369
|
+
}
|
370
|
+
function utxoFilter(utxos, filterParams) {
|
371
|
+
if (isEmpty(filterParams) || isEmpty(utxos)) {
|
372
|
+
return utxos;
|
373
|
+
}
|
374
|
+
const { by, max: max2 } = filterParams;
|
375
|
+
let filtered = utxos;
|
376
|
+
if (by) {
|
377
|
+
filtered = utxos.filter(by);
|
378
|
+
if (isEmpty(filtered)) {
|
379
|
+
return filtered;
|
380
|
+
}
|
381
|
+
}
|
382
|
+
if (!max2) {
|
383
|
+
return filtered;
|
384
|
+
}
|
385
|
+
if (isDefined(max2.aggregatedDistinctTokens)) {
|
386
|
+
const tokenIds = _getDistinctTokenIds(filtered, max2.aggregatedDistinctTokens);
|
387
|
+
filtered = filtered.filter(
|
388
|
+
(utxo) => isEmpty(utxo.assets) || utxo.assets.every((token) => tokenIds.has(token.tokenId))
|
389
|
+
);
|
390
|
+
}
|
391
|
+
if (isDefined(max2.count) && filtered.length > max2.count) {
|
392
|
+
filtered = filtered.slice(0, max2.count);
|
393
|
+
}
|
394
|
+
return filtered;
|
395
|
+
}
|
396
|
+
function _getDistinctTokenIds(utxos, max2) {
|
397
|
+
const tokenIds = /* @__PURE__ */ new Set();
|
398
|
+
for (let i = 0; i < utxos.length && tokenIds.size < max2; i++) {
|
399
|
+
if (isEmpty(utxos[i].assets) || utxos[i].assets.length > max2) {
|
400
|
+
continue;
|
401
|
+
}
|
402
|
+
for (const token of utxos[i].assets) {
|
403
|
+
tokenIds.add(token.tokenId);
|
404
|
+
}
|
405
|
+
}
|
406
|
+
return tokenIds;
|
407
|
+
}
|
408
|
+
function ensureUTxOBigInt(box) {
|
409
|
+
return {
|
410
|
+
...box,
|
411
|
+
value: ensureBigInt(box.value),
|
412
|
+
assets: box.assets.map((token) => ({
|
413
|
+
tokenId: token.tokenId,
|
414
|
+
amount: ensureBigInt(token.amount)
|
415
|
+
}))
|
416
|
+
};
|
417
|
+
}
|
418
|
+
|
419
|
+
// src/utils/object.ts
|
420
|
+
function clearUndefined(value) {
|
421
|
+
const result = {};
|
422
|
+
for (const key in value) {
|
423
|
+
const val = value[key];
|
424
|
+
if (!isUndefined(val)) {
|
425
|
+
result[key] = val;
|
426
|
+
}
|
427
|
+
}
|
428
|
+
return result;
|
429
|
+
}
|
430
|
+
function ensureDefaults(options, defaults) {
|
431
|
+
if (isEmpty(options))
|
432
|
+
return defaults;
|
433
|
+
const newObj = { ...defaults, ...options };
|
434
|
+
for (const key in newObj) {
|
435
|
+
newObj[key] = options[key] ?? defaults[key];
|
436
|
+
}
|
437
|
+
return newObj;
|
438
|
+
}
|
439
|
+
|
440
|
+
// src/utils/bytes.ts
|
441
|
+
function concatBytes(...arrays) {
|
442
|
+
const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));
|
443
|
+
let pad = 0;
|
444
|
+
for (const bytes of arrays) {
|
445
|
+
assertInstanceOf(bytes, Uint8Array);
|
446
|
+
r.set(bytes, pad);
|
447
|
+
pad += bytes.length;
|
448
|
+
}
|
449
|
+
return r;
|
450
|
+
}
|
451
|
+
function isHex(value) {
|
452
|
+
if (!value || value.length % 2)
|
453
|
+
return false;
|
454
|
+
if (!value.startsWith("0x")) {
|
455
|
+
value = "0x" + value;
|
456
|
+
}
|
457
|
+
return !isNaN(Number(value));
|
458
|
+
}
|
459
|
+
function byteSizeOf(hex) {
|
460
|
+
return hex.length / 2;
|
461
|
+
}
|
462
|
+
|
463
|
+
// src/types/common.ts
|
464
|
+
var Network = /* @__PURE__ */ ((Network2) => {
|
465
|
+
Network2[Network2["Mainnet"] = 0] = "Mainnet";
|
466
|
+
Network2[Network2["Testnet"] = 16] = "Testnet";
|
467
|
+
return Network2;
|
468
|
+
})(Network || {});
|
469
|
+
var AddressType = /* @__PURE__ */ ((AddressType2) => {
|
470
|
+
AddressType2[AddressType2["P2PK"] = 1] = "P2PK";
|
471
|
+
AddressType2[AddressType2["P2SH"] = 2] = "P2SH";
|
472
|
+
AddressType2[AddressType2["P2S"] = 3] = "P2S";
|
473
|
+
return AddressType2;
|
474
|
+
})(AddressType || {});
|
475
|
+
var ergoTreeHeaderFlags = {
|
476
|
+
sizeInclusion: 8,
|
477
|
+
constantSegregation: 16
|
478
|
+
};
|
479
|
+
|
480
|
+
// src/models/collection.ts
|
481
|
+
var Collection = class {
|
482
|
+
_items;
|
483
|
+
constructor() {
|
484
|
+
this._items = [];
|
485
|
+
}
|
486
|
+
_isIndexOutOfBounds(index) {
|
487
|
+
return index < 0 || index >= this._items.length;
|
488
|
+
}
|
489
|
+
[Symbol.iterator]() {
|
490
|
+
let counter = 0;
|
491
|
+
return {
|
492
|
+
next: () => {
|
493
|
+
return {
|
494
|
+
done: counter >= this.length,
|
495
|
+
value: this._items[counter++]
|
496
|
+
};
|
497
|
+
}
|
498
|
+
};
|
499
|
+
}
|
500
|
+
get length() {
|
501
|
+
return this._items.length;
|
502
|
+
}
|
503
|
+
get isEmpty() {
|
504
|
+
return this.length === 0;
|
505
|
+
}
|
506
|
+
at(index) {
|
507
|
+
if (this._isIndexOutOfBounds(index)) {
|
508
|
+
throw new RangeError(`Index '${index}' is out of range.`);
|
509
|
+
}
|
510
|
+
return this._items[index];
|
511
|
+
}
|
512
|
+
add(items, options) {
|
513
|
+
return this._addOneOrMore(items, options);
|
514
|
+
}
|
515
|
+
_addOne(item, options) {
|
516
|
+
if (isDefined(options) && isDefined(options.index)) {
|
517
|
+
if (options.index === this.length) {
|
518
|
+
this._items.push(this._map(item));
|
519
|
+
return this.length;
|
520
|
+
}
|
521
|
+
if (this._isIndexOutOfBounds(options.index)) {
|
522
|
+
throw new RangeError(`Index '${options.index}' is out of range.`);
|
523
|
+
}
|
524
|
+
this._items.splice(options.index, 0, this._map(item));
|
525
|
+
return this.length;
|
526
|
+
}
|
527
|
+
this._items.push(this._map(item));
|
528
|
+
return this._items.length;
|
529
|
+
}
|
530
|
+
_addOneOrMore(items, options) {
|
531
|
+
if (Array.isArray(items)) {
|
532
|
+
if (isDefined(options) && isDefined(options.index)) {
|
533
|
+
items = items.reverse();
|
534
|
+
}
|
535
|
+
for (const item of items) {
|
536
|
+
this._addOne(item, options);
|
537
|
+
}
|
538
|
+
} else {
|
539
|
+
this._addOne(items, options);
|
540
|
+
}
|
541
|
+
return this.length;
|
542
|
+
}
|
543
|
+
toArray() {
|
544
|
+
return [...this._items];
|
545
|
+
}
|
546
|
+
reduce(callbackFn, initialValue) {
|
547
|
+
return this._items.reduce(callbackFn, initialValue);
|
548
|
+
}
|
549
|
+
};
|
550
|
+
|
551
|
+
exports.AddressType = AddressType;
|
552
|
+
exports.Collection = Collection;
|
553
|
+
exports.Network = Network;
|
554
|
+
exports._0n = _0n;
|
555
|
+
exports._10n = _10n;
|
556
|
+
exports._127n = _127n;
|
557
|
+
exports._128n = _128n;
|
558
|
+
exports._1n = _1n;
|
559
|
+
exports._63n = _63n;
|
560
|
+
exports._7n = _7n;
|
561
|
+
exports.areEqual = areEqual;
|
562
|
+
exports.areEqualBy = areEqualBy;
|
563
|
+
exports.areRegistersDenselyPacked = areRegistersDenselyPacked;
|
564
|
+
exports.assert = assert;
|
565
|
+
exports.assertInstanceOf = assertInstanceOf;
|
566
|
+
exports.assertTypeOf = assertTypeOf;
|
567
|
+
exports.at = at;
|
568
|
+
exports.byteSizeOf = byteSizeOf;
|
569
|
+
exports.chunk = chunk;
|
570
|
+
exports.clearUndefined = clearUndefined;
|
571
|
+
exports.concatBytes = concatBytes;
|
572
|
+
exports.decimalize = decimalize;
|
573
|
+
exports.depthOf = depthOf;
|
574
|
+
exports.endsWith = endsWith;
|
575
|
+
exports.ensureBigInt = ensureBigInt;
|
576
|
+
exports.ensureDefaults = ensureDefaults;
|
577
|
+
exports.ensureUTxOBigInt = ensureUTxOBigInt;
|
578
|
+
exports.ergoTreeHeaderFlags = ergoTreeHeaderFlags;
|
579
|
+
exports.first = first;
|
580
|
+
exports.hasDuplicates = hasDuplicates;
|
581
|
+
exports.hasDuplicatesBy = hasDuplicatesBy;
|
582
|
+
exports.hasKey = hasKey;
|
583
|
+
exports.isDefined = isDefined;
|
584
|
+
exports.isEmpty = isEmpty;
|
585
|
+
exports.isFalsy = isFalsy;
|
586
|
+
exports.isHex = isHex;
|
587
|
+
exports.isTruthy = isTruthy;
|
588
|
+
exports.isUndefined = isUndefined;
|
589
|
+
exports.last = last;
|
590
|
+
exports.max = max;
|
591
|
+
exports.min = min;
|
592
|
+
exports.orderBy = orderBy;
|
593
|
+
exports.percent = percent;
|
594
|
+
exports.some = some;
|
595
|
+
exports.startsWith = startsWith;
|
596
|
+
exports.sumBy = sumBy;
|
597
|
+
exports.undecimalize = undecimalize;
|
598
|
+
exports.uniq = uniq;
|
599
|
+
exports.uniqBy = uniqBy;
|
600
|
+
exports.utxoDiff = utxoDiff;
|
601
|
+
exports.utxoFilter = utxoFilter;
|
602
|
+
exports.utxoSum = utxoSum;
|
603
|
+
//# sourceMappingURL=out.js.map
|
604
|
+
//# sourceMappingURL=index.cjs.js.map
|