@hyperlane-xyz/utils 0.0.0-beta-20251201221151
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/README.md +20 -0
- package/dist/addresses.d.ts +65 -0
- package/dist/addresses.d.ts.map +1 -0
- package/dist/addresses.js +475 -0
- package/dist/addresses.js.map +1 -0
- package/dist/addresses.test.d.ts +2 -0
- package/dist/addresses.test.d.ts.map +1 -0
- package/dist/addresses.test.js +68 -0
- package/dist/addresses.test.js.map +1 -0
- package/dist/amount.d.ts +70 -0
- package/dist/amount.d.ts.map +1 -0
- package/dist/amount.js +143 -0
- package/dist/amount.js.map +1 -0
- package/dist/amount.test.d.ts +2 -0
- package/dist/amount.test.d.ts.map +1 -0
- package/dist/amount.test.js +113 -0
- package/dist/amount.test.js.map +1 -0
- package/dist/arrays.d.ts +11 -0
- package/dist/arrays.d.ts.map +1 -0
- package/dist/arrays.js +26 -0
- package/dist/arrays.js.map +1 -0
- package/dist/arrays.test.d.ts +2 -0
- package/dist/arrays.test.d.ts.map +1 -0
- package/dist/arrays.test.js +77 -0
- package/dist/arrays.test.js.map +1 -0
- package/dist/async.d.ts +66 -0
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +146 -0
- package/dist/async.js.map +1 -0
- package/dist/async.test.d.ts +2 -0
- package/dist/async.test.d.ts.map +1 -0
- package/dist/async.test.js +204 -0
- package/dist/async.test.js.map +1 -0
- package/dist/base58.d.ts +5 -0
- package/dist/base58.d.ts.map +1 -0
- package/dist/base58.js +15 -0
- package/dist/base58.js.map +1 -0
- package/dist/base58.test.d.ts +2 -0
- package/dist/base58.test.d.ts.map +1 -0
- package/dist/base58.test.js +31 -0
- package/dist/base58.test.js.map +1 -0
- package/dist/base64.d.ts +3 -0
- package/dist/base64.d.ts.map +1 -0
- package/dist/base64.js +25 -0
- package/dist/base64.js.map +1 -0
- package/dist/base64.test.d.ts +2 -0
- package/dist/base64.test.d.ts.map +1 -0
- package/dist/base64.test.js +54 -0
- package/dist/base64.test.js.map +1 -0
- package/dist/big-numbers.d.ts +50 -0
- package/dist/big-numbers.d.ts.map +1 -0
- package/dist/big-numbers.js +80 -0
- package/dist/big-numbers.js.map +1 -0
- package/dist/big-numbers.test.d.ts +2 -0
- package/dist/big-numbers.test.d.ts.map +1 -0
- package/dist/big-numbers.test.js +96 -0
- package/dist/big-numbers.test.js.map +1 -0
- package/dist/calldata.d.ts +3 -0
- package/dist/calldata.d.ts.map +1 -0
- package/dist/calldata.js +4 -0
- package/dist/calldata.js.map +1 -0
- package/dist/checkpoints.d.ts +6 -0
- package/dist/checkpoints.d.ts.map +1 -0
- package/dist/checkpoints.js +24 -0
- package/dist/checkpoints.js.map +1 -0
- package/dist/checkpoints.test.d.ts +2 -0
- package/dist/checkpoints.test.d.ts.map +1 -0
- package/dist/checkpoints.test.js +105 -0
- package/dist/checkpoints.test.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +84 -0
- package/dist/config.js.map +1 -0
- package/dist/domains.d.ts +2 -0
- package/dist/domains.d.ts.map +1 -0
- package/dist/domains.js +6 -0
- package/dist/domains.js.map +1 -0
- package/dist/env.d.ts +4 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +17 -0
- package/dist/env.js.map +1 -0
- package/dist/env.test.d.ts +2 -0
- package/dist/env.test.d.ts.map +1 -0
- package/dist/env.test.js +16 -0
- package/dist/env.test.js.map +1 -0
- package/dist/eslint-rules/index.d.ts +157 -0
- package/dist/eslint-rules/index.d.ts.map +1 -0
- package/dist/eslint-rules/index.js +58 -0
- package/dist/eslint-rules/index.js.map +1 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.d.ts +4 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.d.ts.map +1 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.js +141 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.js.map +1 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.test.d.ts +2 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.test.d.ts.map +1 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.test.js +258 -0
- package/dist/eslint-rules/no-restricted-imports-from-exports.test.js.map +1 -0
- package/dist/eslint-rules/sort-yaml-arrays.d.ts +39 -0
- package/dist/eslint-rules/sort-yaml-arrays.d.ts.map +1 -0
- package/dist/eslint-rules/sort-yaml-arrays.js +74 -0
- package/dist/eslint-rules/sort-yaml-arrays.js.map +1 -0
- package/dist/eslint-rules/sort-yaml-arrays.test.d.ts +2 -0
- package/dist/eslint-rules/sort-yaml-arrays.test.d.ts.map +1 -0
- package/dist/eslint-rules/sort-yaml-arrays.test.js +621 -0
- package/dist/eslint-rules/sort-yaml-arrays.test.js.map +1 -0
- package/dist/ids.d.ts +20 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/ids.js +42 -0
- package/dist/ids.js.map +1 -0
- package/dist/ids.test.d.ts +2 -0
- package/dist/ids.test.d.ts.map +1 -0
- package/dist/ids.test.js +39 -0
- package/dist/ids.test.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +32 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +146 -0
- package/dist/logging.js.map +1 -0
- package/dist/logging.test.d.ts +2 -0
- package/dist/logging.test.d.ts.map +1 -0
- package/dist/logging.test.js +35 -0
- package/dist/logging.test.js.map +1 -0
- package/dist/math.d.ts +6 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +21 -0
- package/dist/math.js.map +1 -0
- package/dist/math.test.d.ts +2 -0
- package/dist/math.test.d.ts.map +1 -0
- package/dist/math.test.js +45 -0
- package/dist/math.test.js.map +1 -0
- package/dist/messages.d.ts +22 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +64 -0
- package/dist/messages.js.map +1 -0
- package/dist/multisig.d.ts +4 -0
- package/dist/multisig.d.ts.map +1 -0
- package/dist/multisig.js +53 -0
- package/dist/multisig.js.map +1 -0
- package/dist/objects.d.ts +74 -0
- package/dist/objects.d.ts.map +1 -0
- package/dist/objects.js +331 -0
- package/dist/objects.js.map +1 -0
- package/dist/objects.test.d.ts +2 -0
- package/dist/objects.test.d.ts.map +1 -0
- package/dist/objects.test.js +655 -0
- package/dist/objects.test.js.map +1 -0
- package/dist/result.d.ts +11 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +7 -0
- package/dist/result.js.map +1 -0
- package/dist/sets.d.ts +5 -0
- package/dist/sets.d.ts.map +1 -0
- package/dist/sets.js +33 -0
- package/dist/sets.js.map +1 -0
- package/dist/sets.test.d.ts +2 -0
- package/dist/sets.test.d.ts.map +1 -0
- package/dist/sets.test.js +35 -0
- package/dist/sets.test.js.map +1 -0
- package/dist/strings.d.ts +11 -0
- package/dist/strings.d.ts.map +1 -0
- package/dist/strings.js +49 -0
- package/dist/strings.js.map +1 -0
- package/dist/strings.test.d.ts +2 -0
- package/dist/strings.test.d.ts.map +1 -0
- package/dist/strings.test.js +42 -0
- package/dist/strings.test.js.map +1 -0
- package/dist/typeof.d.ts +3 -0
- package/dist/typeof.d.ts.map +1 -0
- package/dist/typeof.js +7 -0
- package/dist/typeof.js.map +1 -0
- package/dist/typeof.test.d.ts +2 -0
- package/dist/typeof.test.d.ts.map +1 -0
- package/dist/typeof.test.js +34 -0
- package/dist/typeof.test.js.map +1 -0
- package/dist/types.d.ts +111 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/url.d.ts +4 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +34 -0
- package/dist/url.js.map +1 -0
- package/dist/url.test.d.ts +2 -0
- package/dist/url.test.d.ts.map +1 -0
- package/dist/url.test.js +29 -0
- package/dist/url.test.js.map +1 -0
- package/dist/validation.d.ts +2 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +6 -0
- package/dist/validation.js.map +1 -0
- package/dist/validation.test.d.ts +2 -0
- package/dist/validation.test.d.ts.map +1 -0
- package/dist/validation.test.js +11 -0
- package/dist/validation.test.js.map +1 -0
- package/dist/validator.d.ts +30 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +76 -0
- package/dist/validator.js.map +1 -0
- package/dist/yaml.d.ts +22 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +293 -0
- package/dist/yaml.js.map +1 -0
- package/dist/yaml.test.d.ts +2 -0
- package/dist/yaml.test.d.ts.map +1 -0
- package/dist/yaml.test.js +519 -0
- package/dist/yaml.test.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,SAAoB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAQZ;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,EACrB,OAAO,SAAS,qBAUjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC5B,QAAQ,SAAI,EACZ,WAAW,SAAK,cAqBjB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,SAAM,EACb,WAAW,GAAE,MAAM,GAAG,SAAqB,cAgB5C;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAK9D;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,CAAC,EAAE,EACP,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAYd"}
|
package/dist/async.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { rootLogger } from './logging.js';
|
|
2
|
+
import { assert } from './validation.js';
|
|
3
|
+
/**
|
|
4
|
+
* Return a promise that resolves in ms milliseconds.
|
|
5
|
+
* @param ms Time to wait
|
|
6
|
+
*/
|
|
7
|
+
export function sleep(ms) {
|
|
8
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Wait up to a given amount of time, and throw an error if the promise does not resolve in time.
|
|
12
|
+
* @param promise The promise to timeout on.
|
|
13
|
+
* @param timeoutMs How long to wait for the promise in milliseconds.
|
|
14
|
+
* @param message The error message if a timeout occurs.
|
|
15
|
+
*/
|
|
16
|
+
export function timeout(promise, timeoutMs, message = 'Timeout reached') {
|
|
17
|
+
if (!timeoutMs || timeoutMs <= 0)
|
|
18
|
+
return promise;
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
setTimeout(() => {
|
|
21
|
+
reject(new Error(message));
|
|
22
|
+
}, timeoutMs);
|
|
23
|
+
promise.then(resolve).catch(reject);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Run a callback with a timeout.
|
|
28
|
+
* @param timeoutMs How long to wait for the promise in milliseconds.
|
|
29
|
+
* @param callback The callback to run.
|
|
30
|
+
* @returns callback return value
|
|
31
|
+
* @throws Error if the timeout is reached before the callback completes
|
|
32
|
+
*/
|
|
33
|
+
export async function runWithTimeout(timeoutMs, callback) {
|
|
34
|
+
let timeoutId;
|
|
35
|
+
const timeoutProm = new Promise((_, reject) => {
|
|
36
|
+
timeoutId = setTimeout(() => {
|
|
37
|
+
reject(new Error(`Timed out in ${timeoutMs}ms.`));
|
|
38
|
+
}, timeoutMs);
|
|
39
|
+
});
|
|
40
|
+
try {
|
|
41
|
+
const result = await Promise.race([callback(), timeoutProm]);
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
// @ts-ignore timeout gets set immediately by the promise constructor
|
|
46
|
+
clearTimeout(timeoutId);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Executes a fetch request that fails after a timeout via an AbortController.
|
|
51
|
+
* @param resource resource to fetch (e.g URL)
|
|
52
|
+
* @param options fetch call options object
|
|
53
|
+
* @param timeout timeout MS (default 10_000)
|
|
54
|
+
* @returns fetch response
|
|
55
|
+
*/
|
|
56
|
+
export async function fetchWithTimeout(resource, options, timeout = 10000) {
|
|
57
|
+
const controller = new AbortController();
|
|
58
|
+
const id = setTimeout(() => controller.abort(), timeout);
|
|
59
|
+
const response = await fetch(resource, {
|
|
60
|
+
...options,
|
|
61
|
+
signal: controller.signal,
|
|
62
|
+
});
|
|
63
|
+
clearTimeout(id);
|
|
64
|
+
return response;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Retries an async function with exponential backoff.
|
|
68
|
+
* Always executes at least once, even if `attempts` is 0 or negative.
|
|
69
|
+
* Stops retrying if `error.isRecoverable` is set to false.
|
|
70
|
+
* @param runner callback to run
|
|
71
|
+
* @param attempts max number of attempts (defaults to 5, minimum 1)
|
|
72
|
+
* @param baseRetryMs base delay between attempts in milliseconds (defaults to 50ms)
|
|
73
|
+
* @returns runner return value
|
|
74
|
+
*/
|
|
75
|
+
export async function retryAsync(runner, attempts = 5, baseRetryMs = 50) {
|
|
76
|
+
// Guard against invalid attempts - always try at least once
|
|
77
|
+
attempts = attempts > 0 ? attempts : 1;
|
|
78
|
+
let i = 0;
|
|
79
|
+
for (;;) {
|
|
80
|
+
try {
|
|
81
|
+
const result = await runner();
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
const error = e;
|
|
86
|
+
// Non-recoverable only if the flag is present _and_ set to false
|
|
87
|
+
if (error.isRecoverable === false || ++i >= attempts) {
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
await sleep(baseRetryMs * 2 ** (i - 1));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Run a callback with a timeout, and retry if the callback throws an error.
|
|
96
|
+
* @param runner callback to run
|
|
97
|
+
* @param delayMs base delay between attempts
|
|
98
|
+
* @param maxAttempts maximum number of attempts
|
|
99
|
+
* @returns runner return value
|
|
100
|
+
*/
|
|
101
|
+
export async function pollAsync(runner, delayMs = 500, maxAttempts = undefined) {
|
|
102
|
+
let attempts = 0;
|
|
103
|
+
let saveError;
|
|
104
|
+
while (!maxAttempts || attempts < maxAttempts) {
|
|
105
|
+
try {
|
|
106
|
+
const ret = await runner();
|
|
107
|
+
return ret;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
rootLogger.debug(`Error in pollAsync`, { error });
|
|
111
|
+
saveError = error;
|
|
112
|
+
attempts += 1;
|
|
113
|
+
await sleep(delayMs);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
throw saveError;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* An enhanced Promise.race that returns
|
|
120
|
+
* objects with the promise itself and index
|
|
121
|
+
* instead of just the resolved value.
|
|
122
|
+
*/
|
|
123
|
+
export async function raceWithContext(promises) {
|
|
124
|
+
const promisesWithContext = promises.map((p, i) => p.then((resolved) => ({ resolved, promise: p, index: i })));
|
|
125
|
+
return Promise.race(promisesWithContext);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Map an async function over a list xs with a given concurrency level
|
|
129
|
+
* Forked from https://github.com/celo-org/developer-tooling/blob/0c61e7e02c741fe10ecd1d733a33692d324cdc82/packages/sdk/base/src/async.ts#L128
|
|
130
|
+
*
|
|
131
|
+
* @param concurrency number of `mapFn` concurrent executions
|
|
132
|
+
* @param xs list of value
|
|
133
|
+
* @param mapFn mapping function
|
|
134
|
+
*/
|
|
135
|
+
export async function concurrentMap(concurrency, xs, mapFn) {
|
|
136
|
+
let res = [];
|
|
137
|
+
assert(concurrency > 0, 'concurrency must be greater than 0');
|
|
138
|
+
for (let i = 0; i < xs.length; i += concurrency) {
|
|
139
|
+
const remaining = xs.length - i;
|
|
140
|
+
const sliceSize = Math.min(remaining, concurrency);
|
|
141
|
+
const slice = xs.slice(i, i + sliceSize);
|
|
142
|
+
res = res.concat(await Promise.all(slice.map((elem, index) => mapFn(elem, i + index))));
|
|
143
|
+
}
|
|
144
|
+
return res;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.test.d.ts","sourceRoot":"","sources":["../src/async.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { concurrentMap, fetchWithTimeout, pollAsync, raceWithContext, retryAsync, runWithTimeout, sleep, timeout, } from './async.js';
|
|
3
|
+
describe('Async Utilities', () => {
|
|
4
|
+
describe('sleep', () => {
|
|
5
|
+
it('should resolve after sleep duration', async () => {
|
|
6
|
+
const start = Date.now();
|
|
7
|
+
await sleep(100);
|
|
8
|
+
const duration = Date.now() - start;
|
|
9
|
+
expect(duration).to.be.at.least(95);
|
|
10
|
+
expect(duration).to.be.lessThan(200);
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
describe('timeout', () => {
|
|
14
|
+
it('should timeout a promise', async () => {
|
|
15
|
+
const promise = new Promise((resolve) => setTimeout(resolve, 200));
|
|
16
|
+
try {
|
|
17
|
+
await timeout(promise, 100);
|
|
18
|
+
throw new Error('Expected timeout error');
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
expect(error.message).to.equal('Timeout reached');
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('runWithTimeout', () => {
|
|
26
|
+
it('should run a callback with a timeout', async () => {
|
|
27
|
+
const result = await runWithTimeout(100, async () => {
|
|
28
|
+
await sleep(50);
|
|
29
|
+
return 'success';
|
|
30
|
+
});
|
|
31
|
+
expect(result).to.equal('success');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('fetchWithTimeout', () => {
|
|
35
|
+
it('should fetch with timeout', async () => {
|
|
36
|
+
// Mock fetch for testing
|
|
37
|
+
global.fetch = async () => {
|
|
38
|
+
await sleep(50);
|
|
39
|
+
return new Response('ok');
|
|
40
|
+
};
|
|
41
|
+
const response = await fetchWithTimeout('https://example.com', {}, 100);
|
|
42
|
+
expect(await response.text()).to.equal('ok');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('retryAsync', () => {
|
|
46
|
+
it('should retry until success', async () => {
|
|
47
|
+
let attempt = 0;
|
|
48
|
+
const runner = async () => {
|
|
49
|
+
attempt++;
|
|
50
|
+
if (attempt < 3)
|
|
51
|
+
throw new Error('fail');
|
|
52
|
+
return 'success';
|
|
53
|
+
};
|
|
54
|
+
const result = await retryAsync(runner, 5, 10);
|
|
55
|
+
expect(result).to.equal('success');
|
|
56
|
+
});
|
|
57
|
+
it('should retry `attempts` times at most', async () => {
|
|
58
|
+
let attempt = 0;
|
|
59
|
+
const runner = async () => {
|
|
60
|
+
attempt++;
|
|
61
|
+
throw new Error('fail');
|
|
62
|
+
};
|
|
63
|
+
try {
|
|
64
|
+
await retryAsync(runner, 5, 10);
|
|
65
|
+
throw new Error('Expected error to be thrown');
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
expect(error.message).to.equal('fail');
|
|
69
|
+
expect(attempt).to.equal(5);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
it('should immediately throw error if isRecoverable is false', async () => {
|
|
73
|
+
let attempts = 0;
|
|
74
|
+
const runner = async () => {
|
|
75
|
+
attempts++;
|
|
76
|
+
const error = new Error('non-recoverable error');
|
|
77
|
+
error.isRecoverable = false;
|
|
78
|
+
throw error;
|
|
79
|
+
};
|
|
80
|
+
try {
|
|
81
|
+
await retryAsync(runner, 5, 10);
|
|
82
|
+
throw new Error('Expected error to be thrown');
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
expect(error.message).to.equal('non-recoverable error');
|
|
86
|
+
expect(error.isRecoverable).to.equal(false);
|
|
87
|
+
expect(attempts).to.equal(1);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
it('should continue retrying if isRecoverable is not set', async () => {
|
|
91
|
+
let attempt = 0;
|
|
92
|
+
const runner = async () => {
|
|
93
|
+
attempt++;
|
|
94
|
+
if (attempt < 3)
|
|
95
|
+
throw new Error('recoverable error');
|
|
96
|
+
return 'success';
|
|
97
|
+
};
|
|
98
|
+
const result = await retryAsync(runner, 5, 10);
|
|
99
|
+
expect(result).to.equal('success');
|
|
100
|
+
expect(attempt).to.equal(3);
|
|
101
|
+
});
|
|
102
|
+
it('should continue retrying if isRecoverable is true', async () => {
|
|
103
|
+
let attempt = 0;
|
|
104
|
+
const runner = async () => {
|
|
105
|
+
attempt++;
|
|
106
|
+
if (attempt < 3) {
|
|
107
|
+
const error = new Error('recoverable error');
|
|
108
|
+
error.isRecoverable = true;
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
return 'success';
|
|
112
|
+
};
|
|
113
|
+
const result = await retryAsync(runner, 5, 10);
|
|
114
|
+
expect(result).to.equal('success');
|
|
115
|
+
expect(attempt).to.equal(3);
|
|
116
|
+
});
|
|
117
|
+
it('should execute at least once even with 0 attempts', async () => {
|
|
118
|
+
let attempts = 0;
|
|
119
|
+
const runner = async () => {
|
|
120
|
+
attempts++;
|
|
121
|
+
return 'success';
|
|
122
|
+
};
|
|
123
|
+
const result = await retryAsync(runner, 0, 10);
|
|
124
|
+
expect(result).to.equal('success');
|
|
125
|
+
expect(attempts).to.equal(1);
|
|
126
|
+
});
|
|
127
|
+
it('should execute at least once even with negative attempts', async () => {
|
|
128
|
+
let attempts = 0;
|
|
129
|
+
const runner = async () => {
|
|
130
|
+
attempts++;
|
|
131
|
+
return 'success';
|
|
132
|
+
};
|
|
133
|
+
const result = await retryAsync(runner, -5, 10);
|
|
134
|
+
expect(result).to.equal('success');
|
|
135
|
+
expect(attempts).to.equal(1);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('pollAsync', () => {
|
|
139
|
+
it('should poll async function until success', async () => {
|
|
140
|
+
let attempt = 0;
|
|
141
|
+
const runner = async () => {
|
|
142
|
+
attempt++;
|
|
143
|
+
if (attempt < 3)
|
|
144
|
+
throw new Error('fail');
|
|
145
|
+
return 'success';
|
|
146
|
+
};
|
|
147
|
+
const result = await pollAsync(runner, 10, 5);
|
|
148
|
+
expect(result).to.equal('success');
|
|
149
|
+
});
|
|
150
|
+
it('should fail after reaching max retries', async () => {
|
|
151
|
+
let attempt = 0;
|
|
152
|
+
const runner = async () => {
|
|
153
|
+
attempt++;
|
|
154
|
+
throw new Error('fail');
|
|
155
|
+
};
|
|
156
|
+
try {
|
|
157
|
+
await pollAsync(runner, 10, 3); // Set maxAttempts to 3
|
|
158
|
+
throw new Error('Expected pollAsync to throw an error');
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
expect(attempt).to.equal(3); // Ensure it attempted 3 times
|
|
162
|
+
expect(error.message).to.equal('fail');
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('raceWithContext', () => {
|
|
167
|
+
it('should race with context', async () => {
|
|
168
|
+
const promises = [
|
|
169
|
+
sleep(50).then(() => 'first'),
|
|
170
|
+
sleep(100).then(() => 'second'),
|
|
171
|
+
];
|
|
172
|
+
const result = await raceWithContext(promises);
|
|
173
|
+
expect(result.resolved).to.equal('first');
|
|
174
|
+
expect(result.index).to.equal(0);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('concurrentMap', () => {
|
|
178
|
+
it('should map concurrently with correct results', async () => {
|
|
179
|
+
const xs = [1, 2, 3, 4, 5, 6];
|
|
180
|
+
const mapFn = async (val) => {
|
|
181
|
+
await new Promise((resolve) => setTimeout(resolve, 50)); // Simulate async work
|
|
182
|
+
return val * 2;
|
|
183
|
+
};
|
|
184
|
+
const result = await concurrentMap(2, xs, mapFn);
|
|
185
|
+
expect(result).to.deep.equal([2, 4, 6, 8, 10, 12]);
|
|
186
|
+
});
|
|
187
|
+
it('should respect concurrency limit', async () => {
|
|
188
|
+
const xs = [1, 2, 3, 4, 5, 6];
|
|
189
|
+
const concurrency = 2;
|
|
190
|
+
let activeTasks = 0;
|
|
191
|
+
let maxActiveTasks = 0;
|
|
192
|
+
const mapFn = async (val) => {
|
|
193
|
+
activeTasks++;
|
|
194
|
+
maxActiveTasks = Math.max(maxActiveTasks, activeTasks);
|
|
195
|
+
await new Promise((resolve) => setTimeout(resolve, 50)); // Simulate async work
|
|
196
|
+
activeTasks--;
|
|
197
|
+
return val * 2;
|
|
198
|
+
};
|
|
199
|
+
await concurrentMap(concurrency, xs, mapFn);
|
|
200
|
+
expect(maxActiveTasks).to.equal(concurrency);
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
//# sourceMappingURL=async.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.test.js","sourceRoot":"","sources":["../src/async.test.ts"],"names":[],"mappings":"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"}
|
package/dist/base58.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
export declare function base58ToBuffer(value: string): Buffer;
|
|
3
|
+
export declare function bufferToBase58(value: Buffer): string;
|
|
4
|
+
export declare function hexOrBase58ToHex(value: string): string;
|
|
5
|
+
//# sourceMappingURL=base58.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base58.d.ts","sourceRoot":"","sources":["../src/base58.ts"],"names":[],"mappings":";AAEA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,UAE3C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,UAE3C;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,UAI7C"}
|
package/dist/base58.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { utils } from 'ethers';
|
|
2
|
+
export function base58ToBuffer(value) {
|
|
3
|
+
return Buffer.from(utils.base58.decode(value));
|
|
4
|
+
}
|
|
5
|
+
export function bufferToBase58(value) {
|
|
6
|
+
return utils.base58.encode(value);
|
|
7
|
+
}
|
|
8
|
+
// If the value is already hex (checked by 0x prefix), return it as is.
|
|
9
|
+
// Otherwise, treat it as base58 and convert it to hex.
|
|
10
|
+
export function hexOrBase58ToHex(value) {
|
|
11
|
+
if (value.startsWith('0x'))
|
|
12
|
+
return value;
|
|
13
|
+
return utils.hexlify(base58ToBuffer(value));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=base58.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base58.js","sourceRoot":"","sources":["../src/base58.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,uEAAuE;AACvE,uDAAuD;AACvD,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzC,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base58.test.d.ts","sourceRoot":"","sources":["../src/base58.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { utils } from 'ethers';
|
|
3
|
+
import { base58ToBuffer, bufferToBase58, hexOrBase58ToHex } from './base58.js';
|
|
4
|
+
describe('Base58 Utilities', () => {
|
|
5
|
+
describe('base58ToBuffer', () => {
|
|
6
|
+
it('should convert a base58 string to a buffer', () => {
|
|
7
|
+
const base58String = '3mJr7AoUXx2Wqd';
|
|
8
|
+
const expectedBuffer = Buffer.from(utils.base58.decode(base58String));
|
|
9
|
+
expect(base58ToBuffer(base58String)).to.deep.equal(expectedBuffer);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
describe('bufferToBase58', () => {
|
|
13
|
+
it('should convert a buffer to a base58 string', () => {
|
|
14
|
+
const buffer = Buffer.from([1, 2, 3, 4]);
|
|
15
|
+
const expectedBase58String = utils.base58.encode(buffer);
|
|
16
|
+
expect(bufferToBase58(buffer)).to.equal(expectedBase58String);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('hexOrBase58ToHex', () => {
|
|
20
|
+
it('should return the hex string as is if it starts with 0x', () => {
|
|
21
|
+
const hexString = '0x1234abcd';
|
|
22
|
+
expect(hexOrBase58ToHex(hexString)).to.equal(hexString);
|
|
23
|
+
});
|
|
24
|
+
it('should convert a base58 string to a hex string', () => {
|
|
25
|
+
const base58String = '3mJr7AoUXx2Wqd';
|
|
26
|
+
const expectedHexString = utils.hexlify(Buffer.from(utils.base58.decode(base58String)));
|
|
27
|
+
expect(hexOrBase58ToHex(base58String)).to.equal(expectedHexString);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=base58.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base58.test.js","sourceRoot":"","sources":["../src/base58.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,YAAY,GAAG,gBAAgB,CAAC;YACtC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,SAAS,GAAG,YAAY,CAAC;YAC/B,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,YAAY,GAAG,gBAAgB,CAAC;YACtC,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAC/C,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/base64.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAQtD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CASpE"}
|
package/dist/base64.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { rootLogger } from './logging.js';
|
|
2
|
+
export function toBase64(data) {
|
|
3
|
+
try {
|
|
4
|
+
if (!data)
|
|
5
|
+
throw new Error('No data to encode');
|
|
6
|
+
return btoa(JSON.stringify(data));
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
rootLogger.error('Unable to serialize + encode data to base64', data);
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function fromBase64(data) {
|
|
14
|
+
try {
|
|
15
|
+
if (!data)
|
|
16
|
+
throw new Error('No data to decode');
|
|
17
|
+
const msg = Array.isArray(data) ? data[0] : data;
|
|
18
|
+
return JSON.parse(atob(msg));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
rootLogger.error('Unable to decode + deserialize data from base64', data);
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,QAAQ,CAAC,IAAS;IAChC,IAAI,CAAC;QACH,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,KAAK,CAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,IAAuB;IACnD,IAAI,CAAC;QACH,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,KAAK,CAAC,iDAAiD,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.test.d.ts","sourceRoot":"","sources":["../src/base64.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import Sinon from 'sinon';
|
|
3
|
+
import { fromBase64, toBase64 } from './base64.js';
|
|
4
|
+
import { rootLogger } from './logging.js';
|
|
5
|
+
describe('Base64 Utility Functions', () => {
|
|
6
|
+
let loggerStub;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
loggerStub = Sinon.stub(rootLogger, 'error');
|
|
9
|
+
});
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
loggerStub.restore();
|
|
12
|
+
});
|
|
13
|
+
describe('toBase64', () => {
|
|
14
|
+
it('should encode a valid object to a base64 string', () => {
|
|
15
|
+
const data = { key: 'value' };
|
|
16
|
+
const result = toBase64(data);
|
|
17
|
+
expect(result).to.be.a('string');
|
|
18
|
+
expect(result).to.equal(btoa(JSON.stringify(data)));
|
|
19
|
+
});
|
|
20
|
+
it('should return undefined for null or undefined input', () => {
|
|
21
|
+
expect(toBase64(null)).to.be.undefined;
|
|
22
|
+
expect(toBase64(undefined)).to.be.undefined;
|
|
23
|
+
});
|
|
24
|
+
it('should log an error for invalid input', () => {
|
|
25
|
+
toBase64(null);
|
|
26
|
+
expect(loggerStub.calledOnce).to.be.true;
|
|
27
|
+
expect(loggerStub.calledWith('Unable to serialize + encode data to base64', null)).to.be.true;
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('fromBase64', () => {
|
|
31
|
+
it('should decode a valid base64 string to an object', () => {
|
|
32
|
+
const data = { key: 'value' };
|
|
33
|
+
const base64String = btoa(JSON.stringify(data));
|
|
34
|
+
const result = fromBase64(base64String);
|
|
35
|
+
expect(result).to.deep.equal(data);
|
|
36
|
+
});
|
|
37
|
+
it('should return undefined for null or undefined input', () => {
|
|
38
|
+
expect(fromBase64(null)).to.be.undefined;
|
|
39
|
+
expect(fromBase64(undefined)).to.be.undefined;
|
|
40
|
+
});
|
|
41
|
+
it('should handle array input and decode the first element', () => {
|
|
42
|
+
const data = { key: 'value' };
|
|
43
|
+
const base64String = btoa(JSON.stringify(data));
|
|
44
|
+
const result = fromBase64([base64String, 'anotherString']);
|
|
45
|
+
expect(result).to.deep.equal(data);
|
|
46
|
+
});
|
|
47
|
+
it('should log an error for invalid base64 input', () => {
|
|
48
|
+
fromBase64('invalidBase64');
|
|
49
|
+
expect(loggerStub.calledOnce).to.be.true;
|
|
50
|
+
expect(loggerStub.calledWith('Unable to decode + deserialize data from base64', 'invalidBase64')).to.be.true;
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=base64.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.test.js","sourceRoot":"","sources":["../src/base64.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { BigNumber } from 'bignumber.js';
|
|
2
|
+
import { FixedNumber } from 'ethers';
|
|
3
|
+
/**
|
|
4
|
+
* Check if a value is bigNumberish (e.g. valid numbers, bigNumber).
|
|
5
|
+
* @param value The value to check.
|
|
6
|
+
* @returns true/false.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isBigNumberish(value: BigNumber.Value | undefined | null): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Check if a value (e.g. hex string or number) is zeroish (0, 0x0, 0x00, etc.).
|
|
11
|
+
* @param value The value to check.
|
|
12
|
+
* @returns true/false.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isZeroish(value: BigNumber.Value): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Converts a BigNumber to a FixedNumber of the format fixed128x18.
|
|
17
|
+
* @param big The BigNumber to convert.
|
|
18
|
+
* @returns A FixedNumber representation of a BigNumber.
|
|
19
|
+
*/
|
|
20
|
+
export declare function bigToFixed(big: BigNumber.Value): FixedNumber;
|
|
21
|
+
/**
|
|
22
|
+
* Converts a FixedNumber (of any format) to a BigNumber.
|
|
23
|
+
* @param fixed The FixedNumber to convert.
|
|
24
|
+
* @param ceil If true, the ceiling of fixed is used. Otherwise, the floor is used.
|
|
25
|
+
* @returns A BigNumber representation of a FixedNumber.
|
|
26
|
+
*/
|
|
27
|
+
export declare function fixedToBig(fixed: FixedNumber, ceil?: boolean): BigNumber;
|
|
28
|
+
/**
|
|
29
|
+
* Multiplies a BigNumber by a FixedNumber, returning the BigNumber product.
|
|
30
|
+
* @param big The BigNumber to multiply.
|
|
31
|
+
* @param fixed The FixedNumber to multiply.
|
|
32
|
+
* @param ceil If true, the ceiling of the product is used. Otherwise, the floor is used.
|
|
33
|
+
* @returns The BigNumber product in string type.
|
|
34
|
+
*/
|
|
35
|
+
export declare function mulBigAndFixed(big: BigNumber.Value, fixed: FixedNumber, ceil?: boolean): string;
|
|
36
|
+
/**
|
|
37
|
+
* Return the smaller in the given two BigNumbers.
|
|
38
|
+
* @param bn1 The BigNumber to compare.
|
|
39
|
+
* @param bn2 The BigNumber to compare.
|
|
40
|
+
* @returns The smaller BigNumber in string type.
|
|
41
|
+
*/
|
|
42
|
+
export declare function BigNumberMin(bn1: BigNumber.Value, bn2: BigNumber.Value): string;
|
|
43
|
+
/**
|
|
44
|
+
* Return the bigger in the given two BigNumbers.
|
|
45
|
+
* @param bn1 The BigNumber to compare.
|
|
46
|
+
* @param bn2 The BigNumber to compare.
|
|
47
|
+
* @returns The bigger BigNumber in string type.
|
|
48
|
+
*/
|
|
49
|
+
export declare function BigNumberMax(bn1: BigNumber.Value, bn2: BigNumber.Value): string;
|
|
50
|
+
//# sourceMappingURL=big-numbers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"big-numbers.d.ts","sourceRoot":"","sources":["../src/big-numbers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAKrC;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,SAAS,GAAG,IAAI,GACxC,OAAO,CAOT;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,OAAO,CAMzD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,GAAG,WAAW,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,UAAQ,GAAG,SAAS,CAGtE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,SAAS,CAAC,KAAK,EACpB,KAAK,EAAE,WAAW,EAClB,IAAI,UAAQ,GACX,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,SAAS,CAAC,KAAK,EACpB,GAAG,EAAE,SAAS,CAAC,KAAK,GACnB,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,SAAS,CAAC,KAAK,EACpB,GAAG,EAAE,SAAS,CAAC,KAAK,GACnB,MAAM,CAER"}
|