@talismn/util 1.0.1 → 1.1.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/index.d.mts +25 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.js +21 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +19 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -5
package/dist/index.d.mts
CHANGED
|
@@ -172,6 +172,19 @@ declare const isBigInt: (value: unknown) => value is bigint;
|
|
|
172
172
|
|
|
173
173
|
declare const isBooleanTrue: <T>(x: T | null | undefined) => x is T;
|
|
174
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Robust replacement for `error instanceof SomeErrorClass` when the class comes from a
|
|
177
|
+
* package that gets bundled into multiple chunks/contexts (e.g. viem, @solana/web3.js).
|
|
178
|
+
*
|
|
179
|
+
* `instanceof` returns `false` whenever the error originates from a different bundled copy of
|
|
180
|
+
* the module than the imported class reference — which silently broke Solana transfers (see
|
|
181
|
+
* apps/extension/src/__tests__/no-instanceof-bundled-class.test.ts). An error's `.name` is
|
|
182
|
+
* stable across copies, *provided the class sets it explicitly* (viem does:
|
|
183
|
+
* `super({ name: 'ContractFunctionExecutionError' })`). For classes that don't set `.name`,
|
|
184
|
+
* duck-type the shape instead.
|
|
185
|
+
*/
|
|
186
|
+
declare const isErrorOfName: (error: unknown, ...names: string[]) => boolean;
|
|
187
|
+
|
|
175
188
|
type HexString = `0x${string}`;
|
|
176
189
|
declare const REGEX_HEX_STRING: RegExp;
|
|
177
190
|
declare const isHexString: (value: unknown) => value is HexString;
|
|
@@ -245,6 +258,17 @@ declare const sleep: (ms: number) => Promise<void>;
|
|
|
245
258
|
*/
|
|
246
259
|
declare function splitSubject<T>(subject: Subject<T>): readonly [(value: T) => void, Observable<T>];
|
|
247
260
|
|
|
261
|
+
/**
|
|
262
|
+
* @name stripHexPrefix
|
|
263
|
+
* @description Removes a leading `0x` prefix from a string, if present.
|
|
264
|
+
* @param {string} str - string to strip
|
|
265
|
+
* @returns {string} - the string without its leading `0x` prefix
|
|
266
|
+
* @example
|
|
267
|
+
* stripHexPrefix("0x1234") // "1234"
|
|
268
|
+
* stripHexPrefix("1234") // "1234"
|
|
269
|
+
**/
|
|
270
|
+
declare const stripHexPrefix: (str: string) => string;
|
|
271
|
+
|
|
248
272
|
declare const throwAfter: (ms: number, reason: string) => Promise<never>;
|
|
249
273
|
|
|
250
274
|
declare function tokensToPlanck(tokens: string, tokenDecimals: number): string;
|
|
@@ -263,4 +287,4 @@ declare function tokensToPlanck(tokens?: string, tokenDecimals?: number): string
|
|
|
263
287
|
**/
|
|
264
288
|
declare const validateHexString: (str: string) => `0x${string}`;
|
|
265
289
|
|
|
266
|
-
export { BigMath, Deferred, type FunctionProperties, type FunctionPropertyNames, type GetLoadableQueryParams, type HexString, type Loadable, type LoadableOptions, type LoadableStatus, MAX_DECIMALS_FORMAT, type NonFunctionProperties, type NonFunctionPropertyNames, type Prettify, type QueryResult, type QueryStatus, REGEX_HEX_STRING, addTrailingSlash, firstThenDebounce, formatDecimals, formatPrice, getLoadable$, getLoadableQuery$, getQuery$, getSharedObservable, hasOwnProperty, isAbortError, isArrayOf, isAscii, isBigInt, isBooleanTrue, isHexString, isNotNil, isPromise, isSubject, isTruthy, keepAlive, planckToTokens, replaySubjectFrom, sleep, splitSubject, throwAfter, tokensToPlanck, validateHexString };
|
|
290
|
+
export { BigMath, Deferred, type FunctionProperties, type FunctionPropertyNames, type GetLoadableQueryParams, type HexString, type Loadable, type LoadableOptions, type LoadableStatus, MAX_DECIMALS_FORMAT, type NonFunctionProperties, type NonFunctionPropertyNames, type Prettify, type QueryResult, type QueryStatus, REGEX_HEX_STRING, addTrailingSlash, firstThenDebounce, formatDecimals, formatPrice, getLoadable$, getLoadableQuery$, getQuery$, getSharedObservable, hasOwnProperty, isAbortError, isArrayOf, isAscii, isBigInt, isBooleanTrue, isErrorOfName, isHexString, isNotNil, isPromise, isSubject, isTruthy, keepAlive, planckToTokens, replaySubjectFrom, sleep, splitSubject, stripHexPrefix, throwAfter, tokensToPlanck, validateHexString };
|
package/dist/index.d.ts
CHANGED
|
@@ -172,6 +172,19 @@ declare const isBigInt: (value: unknown) => value is bigint;
|
|
|
172
172
|
|
|
173
173
|
declare const isBooleanTrue: <T>(x: T | null | undefined) => x is T;
|
|
174
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Robust replacement for `error instanceof SomeErrorClass` when the class comes from a
|
|
177
|
+
* package that gets bundled into multiple chunks/contexts (e.g. viem, @solana/web3.js).
|
|
178
|
+
*
|
|
179
|
+
* `instanceof` returns `false` whenever the error originates from a different bundled copy of
|
|
180
|
+
* the module than the imported class reference — which silently broke Solana transfers (see
|
|
181
|
+
* apps/extension/src/__tests__/no-instanceof-bundled-class.test.ts). An error's `.name` is
|
|
182
|
+
* stable across copies, *provided the class sets it explicitly* (viem does:
|
|
183
|
+
* `super({ name: 'ContractFunctionExecutionError' })`). For classes that don't set `.name`,
|
|
184
|
+
* duck-type the shape instead.
|
|
185
|
+
*/
|
|
186
|
+
declare const isErrorOfName: (error: unknown, ...names: string[]) => boolean;
|
|
187
|
+
|
|
175
188
|
type HexString = `0x${string}`;
|
|
176
189
|
declare const REGEX_HEX_STRING: RegExp;
|
|
177
190
|
declare const isHexString: (value: unknown) => value is HexString;
|
|
@@ -245,6 +258,17 @@ declare const sleep: (ms: number) => Promise<void>;
|
|
|
245
258
|
*/
|
|
246
259
|
declare function splitSubject<T>(subject: Subject<T>): readonly [(value: T) => void, Observable<T>];
|
|
247
260
|
|
|
261
|
+
/**
|
|
262
|
+
* @name stripHexPrefix
|
|
263
|
+
* @description Removes a leading `0x` prefix from a string, if present.
|
|
264
|
+
* @param {string} str - string to strip
|
|
265
|
+
* @returns {string} - the string without its leading `0x` prefix
|
|
266
|
+
* @example
|
|
267
|
+
* stripHexPrefix("0x1234") // "1234"
|
|
268
|
+
* stripHexPrefix("1234") // "1234"
|
|
269
|
+
**/
|
|
270
|
+
declare const stripHexPrefix: (str: string) => string;
|
|
271
|
+
|
|
248
272
|
declare const throwAfter: (ms: number, reason: string) => Promise<never>;
|
|
249
273
|
|
|
250
274
|
declare function tokensToPlanck(tokens: string, tokenDecimals: number): string;
|
|
@@ -263,4 +287,4 @@ declare function tokensToPlanck(tokens?: string, tokenDecimals?: number): string
|
|
|
263
287
|
**/
|
|
264
288
|
declare const validateHexString: (str: string) => `0x${string}`;
|
|
265
289
|
|
|
266
|
-
export { BigMath, Deferred, type FunctionProperties, type FunctionPropertyNames, type GetLoadableQueryParams, type HexString, type Loadable, type LoadableOptions, type LoadableStatus, MAX_DECIMALS_FORMAT, type NonFunctionProperties, type NonFunctionPropertyNames, type Prettify, type QueryResult, type QueryStatus, REGEX_HEX_STRING, addTrailingSlash, firstThenDebounce, formatDecimals, formatPrice, getLoadable$, getLoadableQuery$, getQuery$, getSharedObservable, hasOwnProperty, isAbortError, isArrayOf, isAscii, isBigInt, isBooleanTrue, isHexString, isNotNil, isPromise, isSubject, isTruthy, keepAlive, planckToTokens, replaySubjectFrom, sleep, splitSubject, throwAfter, tokensToPlanck, validateHexString };
|
|
290
|
+
export { BigMath, Deferred, type FunctionProperties, type FunctionPropertyNames, type GetLoadableQueryParams, type HexString, type Loadable, type LoadableOptions, type LoadableStatus, MAX_DECIMALS_FORMAT, type NonFunctionProperties, type NonFunctionPropertyNames, type Prettify, type QueryResult, type QueryStatus, REGEX_HEX_STRING, addTrailingSlash, firstThenDebounce, formatDecimals, formatPrice, getLoadable$, getLoadableQuery$, getQuery$, getSharedObservable, hasOwnProperty, isAbortError, isArrayOf, isAscii, isBigInt, isBooleanTrue, isErrorOfName, isHexString, isNotNil, isPromise, isSubject, isTruthy, keepAlive, planckToTokens, replaySubjectFrom, sleep, splitSubject, stripHexPrefix, throwAfter, tokensToPlanck, validateHexString };
|
package/dist/index.js
CHANGED
|
@@ -48,6 +48,7 @@ __export(index_exports, {
|
|
|
48
48
|
isAscii: () => isAscii,
|
|
49
49
|
isBigInt: () => isBigInt,
|
|
50
50
|
isBooleanTrue: () => isBooleanTrue,
|
|
51
|
+
isErrorOfName: () => isErrorOfName,
|
|
51
52
|
isHexString: () => isHexString,
|
|
52
53
|
isNotNil: () => isNotNil,
|
|
53
54
|
isPromise: () => isPromise,
|
|
@@ -58,12 +59,18 @@ __export(index_exports, {
|
|
|
58
59
|
replaySubjectFrom: () => replaySubjectFrom,
|
|
59
60
|
sleep: () => sleep,
|
|
60
61
|
splitSubject: () => splitSubject,
|
|
62
|
+
stripHexPrefix: () => stripHexPrefix,
|
|
61
63
|
throwAfter: () => throwAfter,
|
|
62
64
|
tokensToPlanck: () => tokensToPlanck,
|
|
63
65
|
validateHexString: () => validateHexString
|
|
64
66
|
});
|
|
65
67
|
module.exports = __toCommonJS(index_exports);
|
|
66
68
|
|
|
69
|
+
// src/configureBigNumber.ts
|
|
70
|
+
var import_bignumber = __toESM(require("bignumber.js"));
|
|
71
|
+
import_bignumber.default.set({ STRICT: false });
|
|
72
|
+
var configureBigNumber_default = import_bignumber.default;
|
|
73
|
+
|
|
67
74
|
// src/addTrailingSlash.ts
|
|
68
75
|
var addTrailingSlash = (url) => {
|
|
69
76
|
if (url.endsWith("/")) {
|
|
@@ -130,24 +137,23 @@ var import_rxjs = require("rxjs");
|
|
|
130
137
|
var firstThenDebounce = (timeout) => (source) => (0, import_rxjs.concat)(source.pipe((0, import_rxjs.take)(1)), source.pipe((0, import_rxjs.skip)(1)).pipe((0, import_rxjs.debounceTime)(timeout)));
|
|
131
138
|
|
|
132
139
|
// src/formatDecimals.ts
|
|
133
|
-
var import_bignumber = __toESM(require("bignumber.js"));
|
|
134
140
|
var MIN_DIGITS = 4;
|
|
135
141
|
var MAX_DECIMALS_FORMAT = 12;
|
|
136
142
|
var formatDecimals = (num, digits = MIN_DIGITS, options = {}, locale = "en-US") => {
|
|
137
143
|
if (num === null || num === void 0) return "";
|
|
138
144
|
if (digits < MIN_DIGITS) digits = MIN_DIGITS;
|
|
139
|
-
const value = new
|
|
145
|
+
const value = new configureBigNumber_default(num);
|
|
140
146
|
const minDisplayVal = 1 / 10 ** digits;
|
|
141
147
|
if (value.gt(0) && value.lt(minDisplayVal)) return `< ${formatDecimals(minDisplayVal)}`;
|
|
142
148
|
const flooredValue = value.integerValue();
|
|
143
149
|
const intDigits = flooredValue.isEqualTo(0) ? 0 : flooredValue.toString().length;
|
|
144
150
|
let truncatedValue = value;
|
|
145
|
-
const excessFractionDigitsPow10 = new
|
|
151
|
+
const excessFractionDigitsPow10 = new configureBigNumber_default(10).pow(
|
|
146
152
|
digits > intDigits ? digits - intDigits : 0
|
|
147
153
|
);
|
|
148
154
|
truncatedValue = truncatedValue.multipliedBy(excessFractionDigitsPow10).integerValue().dividedBy(excessFractionDigitsPow10);
|
|
149
|
-
const excessIntegerDigits = new
|
|
150
|
-
const excessIntegerDigitsPow10 = new
|
|
155
|
+
const excessIntegerDigits = new configureBigNumber_default(intDigits > digits ? intDigits - digits : 0);
|
|
156
|
+
const excessIntegerDigitsPow10 = new configureBigNumber_default(10).pow(excessIntegerDigits);
|
|
151
157
|
if (excessIntegerDigits.gt(0))
|
|
152
158
|
truncatedValue = truncatedValue.dividedBy(excessIntegerDigitsPow10).integerValue().multipliedBy(excessIntegerDigitsPow10);
|
|
153
159
|
return Intl.NumberFormat(locale, {
|
|
@@ -332,6 +338,9 @@ var isBigInt = (value) => typeof value === "bigint";
|
|
|
332
338
|
// src/isBooleanTrue.ts
|
|
333
339
|
var isBooleanTrue = (x) => !!x;
|
|
334
340
|
|
|
341
|
+
// src/isErrorOfName.ts
|
|
342
|
+
var isErrorOfName = (error, ...names) => error instanceof Error && names.includes(error.name);
|
|
343
|
+
|
|
335
344
|
// src/isHexString.ts
|
|
336
345
|
var REGEX_HEX_STRING = /^0x[0-9a-fA-F]*$/;
|
|
337
346
|
var isHexString = (value) => {
|
|
@@ -383,13 +392,12 @@ var keepSourceSubscribed = (observable, ms) => {
|
|
|
383
392
|
};
|
|
384
393
|
|
|
385
394
|
// src/planckToTokens.ts
|
|
386
|
-
var import_bignumber2 = __toESM(require("bignumber.js"));
|
|
387
395
|
function planckToTokens(planck, tokenDecimals) {
|
|
388
396
|
if (typeof planck !== "string" || typeof tokenDecimals !== "number") return;
|
|
389
397
|
const base = 10;
|
|
390
398
|
const exponent = -1 * tokenDecimals;
|
|
391
399
|
const multiplier = base ** exponent;
|
|
392
|
-
return new
|
|
400
|
+
return new configureBigNumber_default(planck).multipliedBy(multiplier).toString(10);
|
|
393
401
|
}
|
|
394
402
|
|
|
395
403
|
// src/replaySubjectFrom.ts
|
|
@@ -421,17 +429,19 @@ function splitSubject(subject) {
|
|
|
421
429
|
return [next, observable];
|
|
422
430
|
}
|
|
423
431
|
|
|
432
|
+
// src/stripHexPrefix.ts
|
|
433
|
+
var stripHexPrefix = (str) => str.startsWith("0x") ? str.slice(2) : str;
|
|
434
|
+
|
|
424
435
|
// src/throwAfter.ts
|
|
425
436
|
var throwAfter = (ms, reason) => new Promise((_, reject) => setTimeout(() => reject(new Error(reason)), ms));
|
|
426
437
|
|
|
427
438
|
// src/tokensToPlanck.ts
|
|
428
|
-
var import_bignumber3 = __toESM(require("bignumber.js"));
|
|
429
439
|
function tokensToPlanck(tokens, tokenDecimals) {
|
|
430
440
|
if (typeof tokens !== "string" || typeof tokenDecimals !== "number") return;
|
|
431
441
|
const base = 10;
|
|
432
442
|
const exponent = tokenDecimals;
|
|
433
443
|
const multiplier = base ** exponent;
|
|
434
|
-
return new
|
|
444
|
+
return new configureBigNumber_default(tokens).multipliedBy(multiplier).toString(10);
|
|
435
445
|
}
|
|
436
446
|
|
|
437
447
|
// src/validateHexString.ts
|
|
@@ -464,6 +474,7 @@ var validateHexString = (str) => {
|
|
|
464
474
|
isAscii,
|
|
465
475
|
isBigInt,
|
|
466
476
|
isBooleanTrue,
|
|
477
|
+
isErrorOfName,
|
|
467
478
|
isHexString,
|
|
468
479
|
isNotNil,
|
|
469
480
|
isPromise,
|
|
@@ -474,6 +485,7 @@ var validateHexString = (str) => {
|
|
|
474
485
|
replaySubjectFrom,
|
|
475
486
|
sleep,
|
|
476
487
|
splitSubject,
|
|
488
|
+
stripHexPrefix,
|
|
477
489
|
throwAfter,
|
|
478
490
|
tokensToPlanck,
|
|
479
491
|
validateHexString
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/addTrailingSlash.ts","../src/BigMath.ts","../src/deferred.ts","../src/firstThenDebounce.ts","../src/formatDecimals.ts","../src/formatPrice.ts","../src/getLoadable.ts","../src/getLoadableQuery.ts","../src/getQuery.ts","../src/getSharedObservable.ts","../src/hasOwnProperty.ts","../src/isAbortError.ts","../src/isArrayOf.ts","../src/isAscii.ts","../src/isBigInt.ts","../src/isBooleanTrue.ts","../src/isHexString.ts","../src/isNotNil.ts","../src/isPromise.ts","../src/isSubject.ts","../src/isTruthy.ts","../src/keepAlive.ts","../src/planckToTokens.ts","../src/replaySubjectFrom.ts","../src/sleep.ts","../src/splitSubject.ts","../src/throwAfter.ts","../src/tokensToPlanck.ts","../src/validateHexString.ts"],"sourcesContent":["export * from \"./addTrailingSlash\"\nexport * from \"./BigMath\"\nexport * from \"./deferred\"\nexport * from \"./FunctionPropertyNames\"\nexport * from \"./firstThenDebounce\"\nexport * from \"./formatDecimals\"\nexport * from \"./formatPrice\"\nexport * from \"./getLoadable\"\nexport * from \"./getLoadableQuery\"\nexport * from \"./getQuery\"\nexport * from \"./getSharedObservable\"\nexport * from \"./hasOwnProperty\"\nexport * from \"./isAbortError\"\nexport * from \"./isArrayOf\"\nexport * from \"./isAscii\"\nexport * from \"./isBigInt\"\nexport * from \"./isBooleanTrue\"\nexport * from \"./isHexString\"\nexport * from \"./isNotNil\"\nexport * from \"./isPromise\"\nexport * from \"./isSubject\"\nexport * from \"./isTruthy\"\nexport * from \"./keepAlive\"\nexport * from \"./Prettify\"\nexport * from \"./planckToTokens\"\nexport * from \"./replaySubjectFrom\"\nexport * from \"./sleep\"\nexport * from \"./splitSubject\"\nexport * from \"./throwAfter\"\nexport * from \"./tokensToPlanck\"\nexport * from \"./validateHexString\"\n","export const addTrailingSlash = (url: string) => {\n if (url.endsWith(\"/\")) {\n return url\n }\n\n return `${url}/`\n}\n","/**\n * Javascript's `Math` library for `BigInt`.\n * Taken from https://stackoverflow.com/questions/51867270/is-there-a-library-similar-to-math-that-supports-javascript-bigint/64953280#64953280\n */\nexport const BigMath = {\n abs(x: bigint) {\n return x < 0n ? -x : x\n },\n sign(x: bigint) {\n if (x === 0n) return 0n\n return x < 0n ? -1n : 1n\n },\n // TODO: Improve our babel/tsc config to let us use the `**` operator on bigint values.\n // Error thrown: Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later. ts(2791)\n // pow(base: bigint, exponent: bigint) {\n // return base ** exponent\n // },\n min(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v < value) value = v\n return value\n },\n max(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v > value) value = v\n return value\n },\n}\n","/**\n * In TypeScript, a deferred promise refers to a pattern that involves creating a promise that can be\n * resolved or rejected at a later point in time, typically by code outside of the current function scope.\n *\n * This pattern is often used when dealing with asynchronous operations that involve multiple steps or when\n * the result of an operation cannot be immediately determined.\n */\nexport function Deferred<T>(): {\n promise: Promise<T>\n resolve: (value: T | PromiseLike<T>) => void\n reject: (reason?: unknown) => void\n isPending: () => boolean\n isResolved: () => boolean\n isRejected: () => boolean\n} {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: unknown) => void\n\n let isPending = true\n let isResolved = false\n let isRejected = false\n\n const promise = new Promise<T>((innerResolve, innerReject) => {\n resolve = (value) => {\n isPending = false\n isResolved = true\n innerResolve(value)\n }\n reject = (reason) => {\n isPending = false\n isRejected = true\n innerReject(reason)\n }\n })\n\n return {\n promise,\n resolve,\n reject,\n isPending: () => isPending,\n isResolved: () => isResolved,\n isRejected: () => isRejected,\n }\n}\n","import { concat, debounceTime, type Observable, type OperatorFunction, skip, take } from \"rxjs\"\n\n/**\n * An rxjs operator which:\n *\n * 1. Emits the first value it receives from the source observable, then:\n * 2. Debounces any future values by `timeout` ms.\n */\nexport const firstThenDebounce =\n <T>(timeout: number): OperatorFunction<T, T> =>\n (source: Observable<T>) =>\n concat(source.pipe(take(1)), source.pipe(skip(1)).pipe(debounceTime(timeout)))\n","import BigNumber from \"bignumber.js\"\n\nconst MIN_DIGITS = 4 // less truncates more than what compact formating is\nexport const MAX_DECIMALS_FORMAT = 12\n\n/**\n * Custom decimal number formatting for Talisman\n * note that the NumberFormat().format() call is the ressource heavy part, it's not worth trying to optimize other parts\n * @param num input number\n * @param digits number of significant digits to display\n * @param locale locale used to format the number\n * @param options formatting options\n * @returns the formatted value\n */\nexport const formatDecimals = (\n num?: string | number | null | BigNumber,\n digits = MIN_DIGITS,\n options: Partial<Intl.NumberFormatOptions> = {},\n locale = \"en-US\"\n): string => {\n if (num === null || num === undefined) return \"\"\n if (digits < MIN_DIGITS) digits = MIN_DIGITS\n\n const value = new BigNumber(num)\n // very small numbers should display \"< 0.0001\"\n const minDisplayVal = 1 / 10 ** digits\n\n if (value.gt(0) && value.lt(minDisplayVal)) return `< ${formatDecimals(minDisplayVal)}`\n\n // count digits\n const flooredValue = value.integerValue()\n const intDigits = flooredValue.isEqualTo(0) ? 0 : flooredValue.toString().length\n\n // we never want to display a rounded up value\n // to prevent JS default rounding, we will remove/truncate insignificant digits ourselves before formatting\n let truncatedValue = value\n //remove insignificant fraction digits\n const excessFractionDigitsPow10 = new BigNumber(10).pow(\n digits > intDigits ? digits - intDigits : 0\n )\n\n truncatedValue = truncatedValue\n .multipliedBy(excessFractionDigitsPow10)\n .integerValue()\n .dividedBy(excessFractionDigitsPow10)\n\n //remove insignificant integer digits\n const excessIntegerDigits = new BigNumber(intDigits > digits ? intDigits - digits : 0)\n const excessIntegerDigitsPow10 = new BigNumber(10).pow(excessIntegerDigits)\n if (excessIntegerDigits.gt(0))\n truncatedValue = truncatedValue\n .dividedBy(excessIntegerDigitsPow10)\n .integerValue()\n .multipliedBy(excessIntegerDigitsPow10)\n\n // format\n\n return Intl.NumberFormat(locale, {\n // compact notation (K, M, B) if above 9999\n notation: truncatedValue.abs().gt(9999) ? \"compact\" : \"standard\",\n // NOTE: possible values are from `0` to `21`\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#maximumsignificantdigits\n maximumSignificantDigits: Math.max(1, Math.min(digits + (truncatedValue.lt(1) ? 1 : 0), 21)),\n ...options,\n }).format(truncatedValue.toNumber())\n}\n","export const formatPrice = (price: number, currency: string, compact: boolean) => {\n return Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency,\n currencyDisplay: currency === \"usd\" ? \"narrowSymbol\" : \"symbol\",\n minimumSignificantDigits: 3,\n maximumSignificantDigits: compact ? (price < 1 ? 3 : 4) : undefined,\n roundingPriority: compact ? \"auto\" : \"morePrecision\",\n notation: compact ? \"compact\" : \"standard\",\n }).format(price)\n}\n","import { catchError, from, map, type Observable, of, startWith, switchMap, timer } from \"rxjs\"\n\n// Designed to be serializable as it can be sent to the frontend\ntype LoadableError = {\n name: string // can be used to identify the error type\n message: string // display message\n}\n\nexport type Loadable<T = unknown> =\n | { status: \"loading\"; data?: T; error?: undefined }\n | { status: \"success\"; data: T; error?: undefined }\n | { status: \"error\"; data?: T; error: LoadableError }\n\nexport type LoadableStatus = Loadable[\"status\"]\n\nexport type LoadableOptions = {\n getError?: (error: unknown) => LoadableError\n refreshInterval?: number\n}\n\nexport function getLoadable$<T>(\n factory: () => Promise<T>,\n options: LoadableOptions = {}\n): Observable<Loadable<T>> {\n const { getError, refreshInterval } = options\n\n const createLoadableStream = () =>\n from(factory()).pipe(\n map(\n (data): Loadable<T> => ({\n status: \"success\",\n data,\n })\n ),\n catchError((error) =>\n of<Loadable<T>>({\n status: \"error\",\n error: getError ? getError(error) : getGenericError(error),\n })\n )\n )\n\n const source$ = refreshInterval\n ? timer(0, refreshInterval).pipe(switchMap(() => createLoadableStream()))\n : createLoadableStream()\n\n return source$.pipe(\n startWith<Loadable<T>>({\n status: \"loading\",\n } as Loadable<T>)\n )\n}\n\nconst getGenericError = (error: unknown): LoadableError => ({\n name: \"Error\",\n message: getGenericErrorMessage(error),\n})\n\nconst getGenericErrorMessage = (error: unknown): string => {\n if (typeof error === \"string\") {\n return error\n } else if (error instanceof Error) {\n return error.message\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n return (error as { message: string }).message\n }\n return String(error) || \"Unknown error\"\n}\n","import { map, type Observable, startWith } from \"rxjs\"\n\nimport type { Loadable } from \"./getLoadable\"\nimport { getQuery$, type QueryResult } from \"./getQuery\"\n\nexport type GetLoadableQueryParams<TArgs extends unknown[], TResult> = {\n namespace: string\n args: TArgs\n queryFn: (args: TArgs, signal: AbortSignal) => Promise<TResult>\n refreshInterval?: number\n defaultValue?: TResult\n}\n\n/**\n * Thin wrapper around getQuery$ that returns Loadable<T> and optionally\n * primes the stream with a loading state using the provided default value.\n *\n * TODO: consolidate with getQuery$\n */\nexport const getLoadableQuery$ = <TArgs extends unknown[], TResult>(\n params: GetLoadableQueryParams<TArgs, TResult>\n): Observable<Loadable<TResult>> => {\n const initial =\n params.defaultValue === undefined\n ? []\n : ([{ status: \"loading\", data: params.defaultValue }] as Loadable<TResult>[])\n\n return getQuery$(params).pipe(\n map((val: QueryResult<TResult>): Loadable<TResult> => {\n switch (val.status) {\n case \"loading\":\n return { status: \"loading\", data: val.data }\n case \"loaded\":\n return { status: \"success\", data: val.data }\n case \"error\": {\n const err = val.error as Error | undefined\n return {\n status: \"error\",\n error: {\n name: err?.name ?? \"QueryError\",\n message: err?.message ?? \"Failed to execute query\",\n },\n }\n }\n }\n }),\n startWith(...initial)\n )\n}\n","import { isEqual } from \"lodash-es\"\nimport { BehaviorSubject, distinctUntilChanged, Observable, shareReplay } from \"rxjs\"\n\nimport { getSharedObservable } from \"./getSharedObservable\"\n\nexport type QueryStatus = \"loading\" | \"loaded\" | \"error\"\n\nexport type QueryResult<\n T,\n S extends QueryStatus = \"loading\" | \"loaded\" | \"error\",\n> = S extends \"loading\"\n ? { status: \"loading\"; data: T | undefined; error: undefined }\n : S extends \"loaded\"\n ? { status: \"loaded\"; data: T; error: undefined }\n : { status: \"error\"; data: undefined; error: unknown }\n\ntype QueryOptions<Output, Args> = {\n namespace: string\n args: Args\n queryFn: (args: Args, signal: AbortSignal) => Promise<Output>\n defaultValue?: Output\n refreshInterval?: number\n serializer?: (args: Args) => string\n}\n\n/**\n * Creates a shared observable for executing queries with caching, loading states, and automatic refresh capabilities.\n *\n * @example\n * ```typescript\n * const userQuery$ = getQuery$({\n * namespace: 'users',\n * args: { userId: 123 },\n * queryFn: async ({ userId }) => fetchUser(userId),\n * defaultValue: null,\n * refreshInterval: 30000\n * });\n *\n * userQuery$.subscribe(result => {\n * if (result.status === 'loaded') {\n * console.log(result.data);\n * }\n * });\n * ```\n *\n * @deprecated use getLoadableQuery$ instead\n */\nexport const getQuery$ = <Output, Args>({\n namespace,\n args,\n queryFn,\n defaultValue,\n refreshInterval,\n serializer = (args) => JSON.stringify(args),\n}: QueryOptions<Output, Args>): Observable<QueryResult<Output>> => {\n return getSharedObservable(\n namespace,\n args,\n () =>\n new Observable<QueryResult<Output>>((subscriber) => {\n const controller = new AbortController()\n\n const result = new BehaviorSubject<QueryResult<Output>>({\n status: \"loading\",\n data: defaultValue,\n error: undefined,\n })\n\n // result subscription\n const sub = result\n .pipe(distinctUntilChanged<QueryResult<Output>>(isEqual))\n .subscribe(subscriber)\n\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n let timeout: any = null\n\n // fetch result subscription\n const run = () => {\n if (controller.signal.aborted) return\n\n queryFn(args, controller.signal)\n .then((data) => {\n if (controller.signal.aborted) return\n result.next({ status: \"loaded\", data, error: undefined })\n })\n .catch((error) => {\n if (controller.signal.aborted) return\n result.next({ status: \"error\", data: undefined, error })\n })\n .finally(() => {\n if (controller.signal.aborted) return\n if (refreshInterval) timeout = setTimeout(run, refreshInterval)\n })\n }\n\n run()\n\n return () => {\n sub.unsubscribe()\n if (timeout) clearTimeout(timeout)\n controller.abort(new Error(\"getQuery$ unsubscribed\"))\n }\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n serializer\n )\n}\n","import { type Observable, shareReplay } from \"rxjs\"\n\nconst CACHE = new Map<string, unknown>()\n\n/**\n * When using react-rxjs hooks and state observables, the options are used as weak map keys.\n * This means that if the options object is recreated on each render, the observable will be recreated as well.\n * This utility function allows you to create a shared observable based on a namespace and arguments that, so react-rxjs can reuse the same observables\n *\n * @param namespace\n * @param args\n * @param createObservable\n * @param serializer\n * @returns\n */\nexport const getSharedObservable = <Args, Output, ObsOutput = Observable<Output>>(\n namespace: string,\n args: Args,\n createObservable: (args: Args) => ObsOutput,\n serializer = (args: Args): string => JSON.stringify(args)\n): ObsOutput => {\n const cacheKey = `${namespace}:${serializer(args)}`\n\n if (CACHE.has(cacheKey)) return CACHE.get(cacheKey) as ObsOutput\n\n const obs = createObservable(args) as Observable<unknown>\n const sharedObs = obs.pipe(shareReplay({ bufferSize: 1, refCount: true }))\n\n CACHE.set(cacheKey, sharedObs)\n\n return sharedObs as ObsOutput\n}\n","// biome-ignore lint/suspicious/noShadowRestrictedNames: legacy\nexport function hasOwnProperty<X, Y extends PropertyKey>(\n obj: X,\n prop: Y\n): obj is X & Record<Y, unknown> {\n if (typeof obj !== \"object\") return false\n if (obj === null) return false\n return prop in obj\n}\n","export const isAbortError = (error: unknown): boolean => {\n return error instanceof Error && error.name === \"AbortError\"\n}\n","export function isArrayOf<T, P extends Array<unknown>>(\n array: unknown[],\n func: new (...args: P) => T\n): array is T[] {\n if (array.length > 0 && array[0] instanceof func) return true\n return false\n}\n","export const isAscii = (str: string): boolean => {\n return [...str].every((char) => char.charCodeAt(0) <= 127)\n}\n","export const isBigInt = (value: unknown): value is bigint => typeof value === \"bigint\"\n","export const isBooleanTrue = <T>(x: T | null | undefined): x is T => !!x\n","export type HexString = `0x${string}`\n\nexport const REGEX_HEX_STRING = /^0x[0-9a-fA-F]*$/\n\nexport const isHexString = (value: unknown): value is HexString => {\n return typeof value === \"string\" && REGEX_HEX_STRING.test(value)\n}\n","/**\n * WARNING: This function only checks against null or undefined, it does not coerce the value.\n * ie: false and 0 are considered not nil\n * Use isTruthy instead for a regular coercion check.\n *\n * @param value\n * @returns whether the value is neither null nor undefined\n */\nexport const isNotNil = <T>(value: T | null | undefined): value is T =>\n value !== null && value !== undefined\n","// biome-ignore lint/suspicious/noExplicitAny: legacy\nexport const isPromise = <T = any>(value: any): value is Promise<T> =>\n !!value &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n typeof value.then === \"function\"\n","import { Subject } from \"rxjs\"\n\n/**\n * Tests to see if an object is an RxJS {@link Subject}.\n */\nexport function isSubject<T>(object?: Subject<T> | object): object is Subject<T> {\n if (!object) return false\n if (object instanceof Subject) return true\n return (\n \"asObservable\" in object &&\n isFn(object.asObservable) &&\n \"complete\" in object &&\n isFn(object.complete) &&\n \"error\" in object &&\n isFn(object.error) &&\n \"forEach\" in object &&\n isFn(object.forEach) &&\n \"next\" in object &&\n isFn(object.next) &&\n \"pipe\" in object &&\n isFn(object.pipe) &&\n \"subscribe\" in object &&\n isFn(object.subscribe) &&\n \"unsubscribe\" in object &&\n isFn(object.unsubscribe) &&\n \"closed\" in object &&\n isBool(object.closed) &&\n \"observed\" in object &&\n isBool(object.observed)\n )\n}\n\n/**\n * Returns `true` if `value` is a function.\n */\nfunction isFn(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === \"function\"\n}\n\n/**\n * Returns `true` if `value` is a boolean.\n */\nfunction isBool(value: unknown): value is boolean {\n return typeof value === \"boolean\"\n}\n","export const isTruthy = <T>(value: T | null | undefined): value is T => Boolean(value)\n","import type { OperatorFunction } from \"rxjs\"\nimport { type Observable, shareReplay, tap } from \"rxjs\"\n\n/**\n * An RxJS operator that keeps the source observable alive for a specified duration\n * after all subscribers have unsubscribed. This prevents expensive re-subscriptions\n * when subscribers come and go frequently.\n *\n * @param keepAliveMs - Duration in milliseconds to keep the source alive after last unsubscription\n * @returns MonoTypeOperatorFunction that can be used in pipe()\n *\n * @example\n * ```typescript\n * const data$ = expensive_api_call$.pipe(\n * keepAlive(3000) // Keep alive for 3 seconds\n * );\n * ```\n */\nexport const keepAlive = <T>(timeout: number): OperatorFunction<T, T> => {\n let release: ReturnType<typeof keepSourceSubscribed> | null\n\n return (source: Observable<T>) =>\n source.pipe(\n tap({\n subscribe: () => {\n release = keepSourceSubscribed(source, timeout)\n },\n unsubscribe: () => {\n release?.()\n },\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n}\n\nconst keepSourceSubscribed = (observable: Observable<unknown>, ms: number) => {\n const sub = observable.subscribe()\n return () => setTimeout(() => sub.unsubscribe(), ms)\n}\n","import BigNumber from \"bignumber.js\"\n\nexport function planckToTokens(planck: string, tokenDecimals: number): string\nexport function planckToTokens(planck: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined {\n if (typeof planck !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = -1 * tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(planck).multipliedBy(multiplier).toString(10)\n}\n","import { ReplaySubject } from \"rxjs\"\n\nimport { isPromise } from \"./isPromise\"\n\n/**\n * Turns a value into a {@link ReplaySubject} of size 1.\n *\n * If the value is already a {@link ReplaySubject}, it will be returned as-is.\n *\n * If the value is a {@link Promise}, it will be awaited,\n * and the awaited value will be published into the {@link ReplaySubject} when it becomes available.\n *\n * For any other type of value, it will be immediately published into the {@link ReplaySubject}.\n */\nexport const replaySubjectFrom = <T>(\n initialValue: T | Promise<T> | ReplaySubject<T>\n): ReplaySubject<T> => {\n if (initialValue instanceof ReplaySubject) return initialValue\n\n const subject = new ReplaySubject<T>(1)\n\n // if initialValue is a promise, await it and then call `subject.next()` with the awaited value\n if (isPromise(initialValue)) {\n initialValue.then(\n (value) => subject.next(value),\n (error) => subject.error(error)\n )\n return subject\n }\n\n // if initialValue is not a promise, immediately call `subject.next()` with the value\n subject.next(initialValue)\n return subject\n}\n","export const sleep = (ms: number) =>\n new Promise<void>((resolve) => {\n if (process.env.NODE_ENV === \"test\") resolve()\n else setTimeout(resolve, ms)\n })\n","import type { Observable, Subject } from \"rxjs\"\n\n/**\n * Takes a subject and splits it into two parts:\n *\n * 1. A function to submit new values into the subject.\n * 2. An observable for subscribing to new values from the subject.\n *\n * This can be helpful when, to avoid bugs, you want to expose only one\n * of these parts to external code and keep the other part private.\n */\nexport function splitSubject<T>(subject: Subject<T>) {\n const next = (value: T) => subject.next(value)\n const observable: Observable<T> = subject.asObservable()\n\n return [next, observable] as const\n}\n","export const throwAfter = (ms: number, reason: string) =>\n new Promise<never>((_, reject) => setTimeout(() => reject(new Error(reason)), ms))\n","import BigNumber from \"bignumber.js\"\n\nexport function tokensToPlanck(tokens: string, tokenDecimals: number): string\nexport function tokensToPlanck(tokens: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined {\n if (typeof tokens !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(tokens).multipliedBy(multiplier).toString(10)\n}\n","/**\n * @name validateHexString\n * @description Checks if a string is a hex string. Required to account for type differences between different polkadot libraries\n * @param {string} str - string to check\n * @returns {`0x${string}`} - boolean\n * @example\n * validateHexString(\"0x1234\") // \"0x1234\"\n * validateHexString(\"1234\") // Error: Expected a hex string\n * validateHexString(1234) // Error: Expected a string\n **/\nexport const validateHexString = (str: string): `0x${string}` => {\n if (typeof str !== \"string\") {\n throw new Error(\"Expected a string\")\n }\n\n if (str.startsWith(\"0x\")) {\n return str as `0x${string}`\n }\n throw new Error(\"Expected a hex string\")\n}\n"],"mappings":"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","names":["BigNumber","import_rxjs","import_rxjs","import_rxjs","import_rxjs","args","args","import_rxjs","import_rxjs","import_bignumber","BigNumber","import_rxjs","import_bignumber","BigNumber"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/configureBigNumber.ts","../src/addTrailingSlash.ts","../src/BigMath.ts","../src/deferred.ts","../src/firstThenDebounce.ts","../src/formatDecimals.ts","../src/formatPrice.ts","../src/getLoadable.ts","../src/getLoadableQuery.ts","../src/getQuery.ts","../src/getSharedObservable.ts","../src/hasOwnProperty.ts","../src/isAbortError.ts","../src/isArrayOf.ts","../src/isAscii.ts","../src/isBigInt.ts","../src/isBooleanTrue.ts","../src/isErrorOfName.ts","../src/isHexString.ts","../src/isNotNil.ts","../src/isPromise.ts","../src/isSubject.ts","../src/isTruthy.ts","../src/keepAlive.ts","../src/planckToTokens.ts","../src/replaySubjectFrom.ts","../src/sleep.ts","../src/splitSubject.ts","../src/stripHexPrefix.ts","../src/throwAfter.ts","../src/tokensToPlanck.ts","../src/validateHexString.ts"],"sourcesContent":["import \"./configureBigNumber\"\n\nexport * from \"./addTrailingSlash\"\nexport * from \"./BigMath\"\nexport * from \"./deferred\"\nexport * from \"./FunctionPropertyNames\"\nexport * from \"./firstThenDebounce\"\nexport * from \"./formatDecimals\"\nexport * from \"./formatPrice\"\nexport * from \"./getLoadable\"\nexport * from \"./getLoadableQuery\"\nexport * from \"./getQuery\"\nexport * from \"./getSharedObservable\"\nexport * from \"./hasOwnProperty\"\nexport * from \"./isAbortError\"\nexport * from \"./isArrayOf\"\nexport * from \"./isAscii\"\nexport * from \"./isBigInt\"\nexport * from \"./isBooleanTrue\"\nexport * from \"./isErrorOfName\"\nexport * from \"./isHexString\"\nexport * from \"./isNotNil\"\nexport * from \"./isPromise\"\nexport * from \"./isSubject\"\nexport * from \"./isTruthy\"\nexport * from \"./keepAlive\"\nexport * from \"./Prettify\"\nexport * from \"./planckToTokens\"\nexport * from \"./replaySubjectFrom\"\nexport * from \"./sleep\"\nexport * from \"./splitSubject\"\nexport * from \"./stripHexPrefix\"\nexport * from \"./throwAfter\"\nexport * from \"./tokensToPlanck\"\nexport * from \"./validateHexString\"\n","import BigNumber from \"bignumber.js\"\n\n// bignumber.js v10+ throws on invalid input by default (the STRICT option).\n// Restore the v9 behaviour of returning NaN so existing callers are unaffected.\n// The bignumber.js config is a shared singleton, so this applies process-wide.\n// Import BigNumber from here (rather than directly from \"bignumber.js\") to\n// guarantee this config has run before any value is constructed.\nBigNumber.set({ STRICT: false })\n\nexport default BigNumber\n","export const addTrailingSlash = (url: string) => {\n if (url.endsWith(\"/\")) {\n return url\n }\n\n return `${url}/`\n}\n","/**\n * Javascript's `Math` library for `BigInt`.\n * Taken from https://stackoverflow.com/questions/51867270/is-there-a-library-similar-to-math-that-supports-javascript-bigint/64953280#64953280\n */\nexport const BigMath = {\n abs(x: bigint) {\n return x < 0n ? -x : x\n },\n sign(x: bigint) {\n if (x === 0n) return 0n\n return x < 0n ? -1n : 1n\n },\n // TODO: Improve our babel/tsc config to let us use the `**` operator on bigint values.\n // Error thrown: Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later. ts(2791)\n // pow(base: bigint, exponent: bigint) {\n // return base ** exponent\n // },\n min(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v < value) value = v\n return value\n },\n max(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v > value) value = v\n return value\n },\n}\n","/**\n * In TypeScript, a deferred promise refers to a pattern that involves creating a promise that can be\n * resolved or rejected at a later point in time, typically by code outside of the current function scope.\n *\n * This pattern is often used when dealing with asynchronous operations that involve multiple steps or when\n * the result of an operation cannot be immediately determined.\n */\nexport function Deferred<T>(): {\n promise: Promise<T>\n resolve: (value: T | PromiseLike<T>) => void\n reject: (reason?: unknown) => void\n isPending: () => boolean\n isResolved: () => boolean\n isRejected: () => boolean\n} {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: unknown) => void\n\n let isPending = true\n let isResolved = false\n let isRejected = false\n\n const promise = new Promise<T>((innerResolve, innerReject) => {\n resolve = (value) => {\n isPending = false\n isResolved = true\n innerResolve(value)\n }\n reject = (reason) => {\n isPending = false\n isRejected = true\n innerReject(reason)\n }\n })\n\n return {\n promise,\n resolve,\n reject,\n isPending: () => isPending,\n isResolved: () => isResolved,\n isRejected: () => isRejected,\n }\n}\n","import { concat, debounceTime, type Observable, type OperatorFunction, skip, take } from \"rxjs\"\n\n/**\n * An rxjs operator which:\n *\n * 1. Emits the first value it receives from the source observable, then:\n * 2. Debounces any future values by `timeout` ms.\n */\nexport const firstThenDebounce =\n <T>(timeout: number): OperatorFunction<T, T> =>\n (source: Observable<T>) =>\n concat(source.pipe(take(1)), source.pipe(skip(1)).pipe(debounceTime(timeout)))\n","import BigNumber from \"./configureBigNumber\"\n\nconst MIN_DIGITS = 4 // less truncates more than what compact formating is\nexport const MAX_DECIMALS_FORMAT = 12\n\n/**\n * Custom decimal number formatting for Talisman\n * note that the NumberFormat().format() call is the ressource heavy part, it's not worth trying to optimize other parts\n * @param num input number\n * @param digits number of significant digits to display\n * @param locale locale used to format the number\n * @param options formatting options\n * @returns the formatted value\n */\nexport const formatDecimals = (\n num?: string | number | null | BigNumber,\n digits = MIN_DIGITS,\n options: Partial<Intl.NumberFormatOptions> = {},\n locale = \"en-US\"\n): string => {\n if (num === null || num === undefined) return \"\"\n if (digits < MIN_DIGITS) digits = MIN_DIGITS\n\n const value = new BigNumber(num)\n // very small numbers should display \"< 0.0001\"\n const minDisplayVal = 1 / 10 ** digits\n\n if (value.gt(0) && value.lt(minDisplayVal)) return `< ${formatDecimals(minDisplayVal)}`\n\n // count digits\n const flooredValue = value.integerValue()\n const intDigits = flooredValue.isEqualTo(0) ? 0 : flooredValue.toString().length\n\n // we never want to display a rounded up value\n // to prevent JS default rounding, we will remove/truncate insignificant digits ourselves before formatting\n let truncatedValue = value\n //remove insignificant fraction digits\n const excessFractionDigitsPow10 = new BigNumber(10).pow(\n digits > intDigits ? digits - intDigits : 0\n )\n\n truncatedValue = truncatedValue\n .multipliedBy(excessFractionDigitsPow10)\n .integerValue()\n .dividedBy(excessFractionDigitsPow10)\n\n //remove insignificant integer digits\n const excessIntegerDigits = new BigNumber(intDigits > digits ? intDigits - digits : 0)\n const excessIntegerDigitsPow10 = new BigNumber(10).pow(excessIntegerDigits)\n if (excessIntegerDigits.gt(0))\n truncatedValue = truncatedValue\n .dividedBy(excessIntegerDigitsPow10)\n .integerValue()\n .multipliedBy(excessIntegerDigitsPow10)\n\n // format\n\n return Intl.NumberFormat(locale, {\n // compact notation (K, M, B) if above 9999\n notation: truncatedValue.abs().gt(9999) ? \"compact\" : \"standard\",\n // NOTE: possible values are from `0` to `21`\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#maximumsignificantdigits\n maximumSignificantDigits: Math.max(1, Math.min(digits + (truncatedValue.lt(1) ? 1 : 0), 21)),\n ...options,\n }).format(truncatedValue.toNumber())\n}\n","export const formatPrice = (price: number, currency: string, compact: boolean) => {\n return Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency,\n currencyDisplay: currency === \"usd\" ? \"narrowSymbol\" : \"symbol\",\n minimumSignificantDigits: 3,\n maximumSignificantDigits: compact ? (price < 1 ? 3 : 4) : undefined,\n roundingPriority: compact ? \"auto\" : \"morePrecision\",\n notation: compact ? \"compact\" : \"standard\",\n }).format(price)\n}\n","import { catchError, from, map, type Observable, of, startWith, switchMap, timer } from \"rxjs\"\n\n// Designed to be serializable as it can be sent to the frontend\ntype LoadableError = {\n name: string // can be used to identify the error type\n message: string // display message\n}\n\nexport type Loadable<T = unknown> =\n | { status: \"loading\"; data?: T; error?: undefined }\n | { status: \"success\"; data: T; error?: undefined }\n | { status: \"error\"; data?: T; error: LoadableError }\n\nexport type LoadableStatus = Loadable[\"status\"]\n\nexport type LoadableOptions = {\n getError?: (error: unknown) => LoadableError\n refreshInterval?: number\n}\n\nexport function getLoadable$<T>(\n factory: () => Promise<T>,\n options: LoadableOptions = {}\n): Observable<Loadable<T>> {\n const { getError, refreshInterval } = options\n\n const createLoadableStream = () =>\n from(factory()).pipe(\n map(\n (data): Loadable<T> => ({\n status: \"success\",\n data,\n })\n ),\n catchError((error) =>\n of<Loadable<T>>({\n status: \"error\",\n error: getError ? getError(error) : getGenericError(error),\n })\n )\n )\n\n const source$ = refreshInterval\n ? timer(0, refreshInterval).pipe(switchMap(() => createLoadableStream()))\n : createLoadableStream()\n\n return source$.pipe(\n startWith<Loadable<T>>({\n status: \"loading\",\n } as Loadable<T>)\n )\n}\n\nconst getGenericError = (error: unknown): LoadableError => ({\n name: \"Error\",\n message: getGenericErrorMessage(error),\n})\n\nconst getGenericErrorMessage = (error: unknown): string => {\n if (typeof error === \"string\") {\n return error\n } else if (error instanceof Error) {\n return error.message\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n return (error as { message: string }).message\n }\n return String(error) || \"Unknown error\"\n}\n","import { map, type Observable, startWith } from \"rxjs\"\n\nimport type { Loadable } from \"./getLoadable\"\nimport { getQuery$, type QueryResult } from \"./getQuery\"\n\nexport type GetLoadableQueryParams<TArgs extends unknown[], TResult> = {\n namespace: string\n args: TArgs\n queryFn: (args: TArgs, signal: AbortSignal) => Promise<TResult>\n refreshInterval?: number\n defaultValue?: TResult\n}\n\n/**\n * Thin wrapper around getQuery$ that returns Loadable<T> and optionally\n * primes the stream with a loading state using the provided default value.\n *\n * TODO: consolidate with getQuery$\n */\nexport const getLoadableQuery$ = <TArgs extends unknown[], TResult>(\n params: GetLoadableQueryParams<TArgs, TResult>\n): Observable<Loadable<TResult>> => {\n const initial =\n params.defaultValue === undefined\n ? []\n : ([{ status: \"loading\", data: params.defaultValue }] as Loadable<TResult>[])\n\n return getQuery$(params).pipe(\n map((val: QueryResult<TResult>): Loadable<TResult> => {\n switch (val.status) {\n case \"loading\":\n return { status: \"loading\", data: val.data }\n case \"loaded\":\n return { status: \"success\", data: val.data }\n case \"error\": {\n const err = val.error as Error | undefined\n return {\n status: \"error\",\n error: {\n name: err?.name ?? \"QueryError\",\n message: err?.message ?? \"Failed to execute query\",\n },\n }\n }\n }\n }),\n startWith(...initial)\n )\n}\n","import { isEqual } from \"lodash-es\"\nimport { BehaviorSubject, distinctUntilChanged, Observable, shareReplay } from \"rxjs\"\n\nimport { getSharedObservable } from \"./getSharedObservable\"\n\nexport type QueryStatus = \"loading\" | \"loaded\" | \"error\"\n\nexport type QueryResult<\n T,\n S extends QueryStatus = \"loading\" | \"loaded\" | \"error\",\n> = S extends \"loading\"\n ? { status: \"loading\"; data: T | undefined; error: undefined }\n : S extends \"loaded\"\n ? { status: \"loaded\"; data: T; error: undefined }\n : { status: \"error\"; data: undefined; error: unknown }\n\ntype QueryOptions<Output, Args> = {\n namespace: string\n args: Args\n queryFn: (args: Args, signal: AbortSignal) => Promise<Output>\n defaultValue?: Output\n refreshInterval?: number\n serializer?: (args: Args) => string\n}\n\n/**\n * Creates a shared observable for executing queries with caching, loading states, and automatic refresh capabilities.\n *\n * @example\n * ```typescript\n * const userQuery$ = getQuery$({\n * namespace: 'users',\n * args: { userId: 123 },\n * queryFn: async ({ userId }) => fetchUser(userId),\n * defaultValue: null,\n * refreshInterval: 30000\n * });\n *\n * userQuery$.subscribe(result => {\n * if (result.status === 'loaded') {\n * console.log(result.data);\n * }\n * });\n * ```\n *\n * @deprecated use getLoadableQuery$ instead\n */\nexport const getQuery$ = <Output, Args>({\n namespace,\n args,\n queryFn,\n defaultValue,\n refreshInterval,\n serializer = (args) => JSON.stringify(args),\n}: QueryOptions<Output, Args>): Observable<QueryResult<Output>> => {\n return getSharedObservable(\n namespace,\n args,\n () =>\n new Observable<QueryResult<Output>>((subscriber) => {\n const controller = new AbortController()\n\n const result = new BehaviorSubject<QueryResult<Output>>({\n status: \"loading\",\n data: defaultValue,\n error: undefined,\n })\n\n // result subscription\n const sub = result\n .pipe(distinctUntilChanged<QueryResult<Output>>(isEqual))\n .subscribe(subscriber)\n\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n let timeout: any = null\n\n // fetch result subscription\n const run = () => {\n if (controller.signal.aborted) return\n\n queryFn(args, controller.signal)\n .then((data) => {\n if (controller.signal.aborted) return\n result.next({ status: \"loaded\", data, error: undefined })\n })\n .catch((error) => {\n if (controller.signal.aborted) return\n result.next({ status: \"error\", data: undefined, error })\n })\n .finally(() => {\n if (controller.signal.aborted) return\n if (refreshInterval) timeout = setTimeout(run, refreshInterval)\n })\n }\n\n run()\n\n return () => {\n sub.unsubscribe()\n if (timeout) clearTimeout(timeout)\n controller.abort(new Error(\"getQuery$ unsubscribed\"))\n }\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n serializer\n )\n}\n","import { type Observable, shareReplay } from \"rxjs\"\n\nconst CACHE = new Map<string, unknown>()\n\n/**\n * When using react-rxjs hooks and state observables, the options are used as weak map keys.\n * This means that if the options object is recreated on each render, the observable will be recreated as well.\n * This utility function allows you to create a shared observable based on a namespace and arguments that, so react-rxjs can reuse the same observables\n *\n * @param namespace\n * @param args\n * @param createObservable\n * @param serializer\n * @returns\n */\nexport const getSharedObservable = <Args, Output, ObsOutput = Observable<Output>>(\n namespace: string,\n args: Args,\n createObservable: (args: Args) => ObsOutput,\n serializer = (args: Args): string => JSON.stringify(args)\n): ObsOutput => {\n const cacheKey = `${namespace}:${serializer(args)}`\n\n if (CACHE.has(cacheKey)) return CACHE.get(cacheKey) as ObsOutput\n\n const obs = createObservable(args) as Observable<unknown>\n const sharedObs = obs.pipe(shareReplay({ bufferSize: 1, refCount: true }))\n\n CACHE.set(cacheKey, sharedObs)\n\n return sharedObs as ObsOutput\n}\n","// biome-ignore lint/suspicious/noShadowRestrictedNames: legacy\nexport function hasOwnProperty<X, Y extends PropertyKey>(\n obj: X,\n prop: Y\n): obj is X & Record<Y, unknown> {\n if (typeof obj !== \"object\") return false\n if (obj === null) return false\n return prop in obj\n}\n","export const isAbortError = (error: unknown): boolean => {\n return error instanceof Error && error.name === \"AbortError\"\n}\n","export function isArrayOf<T, P extends Array<unknown>>(\n array: unknown[],\n func: new (...args: P) => T\n): array is T[] {\n if (array.length > 0 && array[0] instanceof func) return true\n return false\n}\n","export const isAscii = (str: string): boolean => {\n return [...str].every((char) => char.charCodeAt(0) <= 127)\n}\n","export const isBigInt = (value: unknown): value is bigint => typeof value === \"bigint\"\n","export const isBooleanTrue = <T>(x: T | null | undefined): x is T => !!x\n","/**\n * Robust replacement for `error instanceof SomeErrorClass` when the class comes from a\n * package that gets bundled into multiple chunks/contexts (e.g. viem, @solana/web3.js).\n *\n * `instanceof` returns `false` whenever the error originates from a different bundled copy of\n * the module than the imported class reference — which silently broke Solana transfers (see\n * apps/extension/src/__tests__/no-instanceof-bundled-class.test.ts). An error's `.name` is\n * stable across copies, *provided the class sets it explicitly* (viem does:\n * `super({ name: 'ContractFunctionExecutionError' })`). For classes that don't set `.name`,\n * duck-type the shape instead.\n */\nexport const isErrorOfName = (error: unknown, ...names: string[]): boolean =>\n error instanceof Error && names.includes(error.name)\n","export type HexString = `0x${string}`\n\nexport const REGEX_HEX_STRING = /^0x[0-9a-fA-F]*$/\n\nexport const isHexString = (value: unknown): value is HexString => {\n return typeof value === \"string\" && REGEX_HEX_STRING.test(value)\n}\n","/**\n * WARNING: This function only checks against null or undefined, it does not coerce the value.\n * ie: false and 0 are considered not nil\n * Use isTruthy instead for a regular coercion check.\n *\n * @param value\n * @returns whether the value is neither null nor undefined\n */\nexport const isNotNil = <T>(value: T | null | undefined): value is T =>\n value !== null && value !== undefined\n","// biome-ignore lint/suspicious/noExplicitAny: legacy\nexport const isPromise = <T = any>(value: any): value is Promise<T> =>\n !!value &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n typeof value.then === \"function\"\n","import { Subject } from \"rxjs\"\n\n/**\n * Tests to see if an object is an RxJS {@link Subject}.\n */\nexport function isSubject<T>(object?: Subject<T> | object): object is Subject<T> {\n if (!object) return false\n if (object instanceof Subject) return true\n return (\n \"asObservable\" in object &&\n isFn(object.asObservable) &&\n \"complete\" in object &&\n isFn(object.complete) &&\n \"error\" in object &&\n isFn(object.error) &&\n \"forEach\" in object &&\n isFn(object.forEach) &&\n \"next\" in object &&\n isFn(object.next) &&\n \"pipe\" in object &&\n isFn(object.pipe) &&\n \"subscribe\" in object &&\n isFn(object.subscribe) &&\n \"unsubscribe\" in object &&\n isFn(object.unsubscribe) &&\n \"closed\" in object &&\n isBool(object.closed) &&\n \"observed\" in object &&\n isBool(object.observed)\n )\n}\n\n/**\n * Returns `true` if `value` is a function.\n */\nfunction isFn(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === \"function\"\n}\n\n/**\n * Returns `true` if `value` is a boolean.\n */\nfunction isBool(value: unknown): value is boolean {\n return typeof value === \"boolean\"\n}\n","export const isTruthy = <T>(value: T | null | undefined): value is T => Boolean(value)\n","import type { OperatorFunction } from \"rxjs\"\nimport { type Observable, shareReplay, tap } from \"rxjs\"\n\n/**\n * An RxJS operator that keeps the source observable alive for a specified duration\n * after all subscribers have unsubscribed. This prevents expensive re-subscriptions\n * when subscribers come and go frequently.\n *\n * @param keepAliveMs - Duration in milliseconds to keep the source alive after last unsubscription\n * @returns MonoTypeOperatorFunction that can be used in pipe()\n *\n * @example\n * ```typescript\n * const data$ = expensive_api_call$.pipe(\n * keepAlive(3000) // Keep alive for 3 seconds\n * );\n * ```\n */\nexport const keepAlive = <T>(timeout: number): OperatorFunction<T, T> => {\n let release: ReturnType<typeof keepSourceSubscribed> | null\n\n return (source: Observable<T>) =>\n source.pipe(\n tap({\n subscribe: () => {\n release = keepSourceSubscribed(source, timeout)\n },\n unsubscribe: () => {\n release?.()\n },\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n}\n\nconst keepSourceSubscribed = (observable: Observable<unknown>, ms: number) => {\n const sub = observable.subscribe()\n return () => setTimeout(() => sub.unsubscribe(), ms)\n}\n","import BigNumber from \"./configureBigNumber\"\n\nexport function planckToTokens(planck: string, tokenDecimals: number): string\nexport function planckToTokens(planck: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined {\n if (typeof planck !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = -1 * tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(planck).multipliedBy(multiplier).toString(10)\n}\n","import { ReplaySubject } from \"rxjs\"\n\nimport { isPromise } from \"./isPromise\"\n\n/**\n * Turns a value into a {@link ReplaySubject} of size 1.\n *\n * If the value is already a {@link ReplaySubject}, it will be returned as-is.\n *\n * If the value is a {@link Promise}, it will be awaited,\n * and the awaited value will be published into the {@link ReplaySubject} when it becomes available.\n *\n * For any other type of value, it will be immediately published into the {@link ReplaySubject}.\n */\nexport const replaySubjectFrom = <T>(\n initialValue: T | Promise<T> | ReplaySubject<T>\n): ReplaySubject<T> => {\n if (initialValue instanceof ReplaySubject) return initialValue\n\n const subject = new ReplaySubject<T>(1)\n\n // if initialValue is a promise, await it and then call `subject.next()` with the awaited value\n if (isPromise(initialValue)) {\n initialValue.then(\n (value) => subject.next(value),\n (error) => subject.error(error)\n )\n return subject\n }\n\n // if initialValue is not a promise, immediately call `subject.next()` with the value\n subject.next(initialValue)\n return subject\n}\n","export const sleep = (ms: number) =>\n new Promise<void>((resolve) => {\n if (process.env.NODE_ENV === \"test\") resolve()\n else setTimeout(resolve, ms)\n })\n","import type { Observable, Subject } from \"rxjs\"\n\n/**\n * Takes a subject and splits it into two parts:\n *\n * 1. A function to submit new values into the subject.\n * 2. An observable for subscribing to new values from the subject.\n *\n * This can be helpful when, to avoid bugs, you want to expose only one\n * of these parts to external code and keep the other part private.\n */\nexport function splitSubject<T>(subject: Subject<T>) {\n const next = (value: T) => subject.next(value)\n const observable: Observable<T> = subject.asObservable()\n\n return [next, observable] as const\n}\n","/**\n * @name stripHexPrefix\n * @description Removes a leading `0x` prefix from a string, if present.\n * @param {string} str - string to strip\n * @returns {string} - the string without its leading `0x` prefix\n * @example\n * stripHexPrefix(\"0x1234\") // \"1234\"\n * stripHexPrefix(\"1234\") // \"1234\"\n **/\nexport const stripHexPrefix = (str: string): string => (str.startsWith(\"0x\") ? str.slice(2) : str)\n","export const throwAfter = (ms: number, reason: string) =>\n new Promise<never>((_, reject) => setTimeout(() => reject(new Error(reason)), ms))\n","import BigNumber from \"./configureBigNumber\"\n\nexport function tokensToPlanck(tokens: string, tokenDecimals: number): string\nexport function tokensToPlanck(tokens: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined {\n if (typeof tokens !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(tokens).multipliedBy(multiplier).toString(10)\n}\n","/**\n * @name validateHexString\n * @description Checks if a string is a hex string. Required to account for type differences between different polkadot libraries\n * @param {string} str - string to check\n * @returns {`0x${string}`} - boolean\n * @example\n * validateHexString(\"0x1234\") // \"0x1234\"\n * validateHexString(\"1234\") // Error: Expected a hex string\n * validateHexString(1234) // Error: Expected a string\n **/\nexport const validateHexString = (str: string): `0x${string}` => {\n if (typeof str !== \"string\") {\n throw new Error(\"Expected a string\")\n }\n\n if (str.startsWith(\"0x\")) {\n return str as `0x${string}`\n }\n throw new Error(\"Expected a hex string\")\n}\n"],"mappings":"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","names":["BigNumber","import_rxjs","import_rxjs","import_rxjs","import_rxjs","args","args","import_rxjs","import_rxjs","import_rxjs"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
// src/configureBigNumber.ts
|
|
2
|
+
import BigNumber from "bignumber.js";
|
|
3
|
+
BigNumber.set({ STRICT: false });
|
|
4
|
+
var configureBigNumber_default = BigNumber;
|
|
5
|
+
|
|
1
6
|
// src/addTrailingSlash.ts
|
|
2
7
|
var addTrailingSlash = (url) => {
|
|
3
8
|
if (url.endsWith("/")) {
|
|
@@ -64,24 +69,23 @@ import { concat, debounceTime, skip, take } from "rxjs";
|
|
|
64
69
|
var firstThenDebounce = (timeout) => (source) => concat(source.pipe(take(1)), source.pipe(skip(1)).pipe(debounceTime(timeout)));
|
|
65
70
|
|
|
66
71
|
// src/formatDecimals.ts
|
|
67
|
-
import BigNumber from "bignumber.js";
|
|
68
72
|
var MIN_DIGITS = 4;
|
|
69
73
|
var MAX_DECIMALS_FORMAT = 12;
|
|
70
74
|
var formatDecimals = (num, digits = MIN_DIGITS, options = {}, locale = "en-US") => {
|
|
71
75
|
if (num === null || num === void 0) return "";
|
|
72
76
|
if (digits < MIN_DIGITS) digits = MIN_DIGITS;
|
|
73
|
-
const value = new
|
|
77
|
+
const value = new configureBigNumber_default(num);
|
|
74
78
|
const minDisplayVal = 1 / 10 ** digits;
|
|
75
79
|
if (value.gt(0) && value.lt(minDisplayVal)) return `< ${formatDecimals(minDisplayVal)}`;
|
|
76
80
|
const flooredValue = value.integerValue();
|
|
77
81
|
const intDigits = flooredValue.isEqualTo(0) ? 0 : flooredValue.toString().length;
|
|
78
82
|
let truncatedValue = value;
|
|
79
|
-
const excessFractionDigitsPow10 = new
|
|
83
|
+
const excessFractionDigitsPow10 = new configureBigNumber_default(10).pow(
|
|
80
84
|
digits > intDigits ? digits - intDigits : 0
|
|
81
85
|
);
|
|
82
86
|
truncatedValue = truncatedValue.multipliedBy(excessFractionDigitsPow10).integerValue().dividedBy(excessFractionDigitsPow10);
|
|
83
|
-
const excessIntegerDigits = new
|
|
84
|
-
const excessIntegerDigitsPow10 = new
|
|
87
|
+
const excessIntegerDigits = new configureBigNumber_default(intDigits > digits ? intDigits - digits : 0);
|
|
88
|
+
const excessIntegerDigitsPow10 = new configureBigNumber_default(10).pow(excessIntegerDigits);
|
|
85
89
|
if (excessIntegerDigits.gt(0))
|
|
86
90
|
truncatedValue = truncatedValue.dividedBy(excessIntegerDigitsPow10).integerValue().multipliedBy(excessIntegerDigitsPow10);
|
|
87
91
|
return Intl.NumberFormat(locale, {
|
|
@@ -266,6 +270,9 @@ var isBigInt = (value) => typeof value === "bigint";
|
|
|
266
270
|
// src/isBooleanTrue.ts
|
|
267
271
|
var isBooleanTrue = (x) => !!x;
|
|
268
272
|
|
|
273
|
+
// src/isErrorOfName.ts
|
|
274
|
+
var isErrorOfName = (error, ...names) => error instanceof Error && names.includes(error.name);
|
|
275
|
+
|
|
269
276
|
// src/isHexString.ts
|
|
270
277
|
var REGEX_HEX_STRING = /^0x[0-9a-fA-F]*$/;
|
|
271
278
|
var isHexString = (value) => {
|
|
@@ -317,13 +324,12 @@ var keepSourceSubscribed = (observable, ms) => {
|
|
|
317
324
|
};
|
|
318
325
|
|
|
319
326
|
// src/planckToTokens.ts
|
|
320
|
-
import BigNumber2 from "bignumber.js";
|
|
321
327
|
function planckToTokens(planck, tokenDecimals) {
|
|
322
328
|
if (typeof planck !== "string" || typeof tokenDecimals !== "number") return;
|
|
323
329
|
const base = 10;
|
|
324
330
|
const exponent = -1 * tokenDecimals;
|
|
325
331
|
const multiplier = base ** exponent;
|
|
326
|
-
return new
|
|
332
|
+
return new configureBigNumber_default(planck).multipliedBy(multiplier).toString(10);
|
|
327
333
|
}
|
|
328
334
|
|
|
329
335
|
// src/replaySubjectFrom.ts
|
|
@@ -355,17 +361,19 @@ function splitSubject(subject) {
|
|
|
355
361
|
return [next, observable];
|
|
356
362
|
}
|
|
357
363
|
|
|
364
|
+
// src/stripHexPrefix.ts
|
|
365
|
+
var stripHexPrefix = (str) => str.startsWith("0x") ? str.slice(2) : str;
|
|
366
|
+
|
|
358
367
|
// src/throwAfter.ts
|
|
359
368
|
var throwAfter = (ms, reason) => new Promise((_, reject) => setTimeout(() => reject(new Error(reason)), ms));
|
|
360
369
|
|
|
361
370
|
// src/tokensToPlanck.ts
|
|
362
|
-
import BigNumber3 from "bignumber.js";
|
|
363
371
|
function tokensToPlanck(tokens, tokenDecimals) {
|
|
364
372
|
if (typeof tokens !== "string" || typeof tokenDecimals !== "number") return;
|
|
365
373
|
const base = 10;
|
|
366
374
|
const exponent = tokenDecimals;
|
|
367
375
|
const multiplier = base ** exponent;
|
|
368
|
-
return new
|
|
376
|
+
return new configureBigNumber_default(tokens).multipliedBy(multiplier).toString(10);
|
|
369
377
|
}
|
|
370
378
|
|
|
371
379
|
// src/validateHexString.ts
|
|
@@ -397,6 +405,7 @@ export {
|
|
|
397
405
|
isAscii,
|
|
398
406
|
isBigInt,
|
|
399
407
|
isBooleanTrue,
|
|
408
|
+
isErrorOfName,
|
|
400
409
|
isHexString,
|
|
401
410
|
isNotNil,
|
|
402
411
|
isPromise,
|
|
@@ -407,6 +416,7 @@ export {
|
|
|
407
416
|
replaySubjectFrom,
|
|
408
417
|
sleep,
|
|
409
418
|
splitSubject,
|
|
419
|
+
stripHexPrefix,
|
|
410
420
|
throwAfter,
|
|
411
421
|
tokensToPlanck,
|
|
412
422
|
validateHexString
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/addTrailingSlash.ts","../src/BigMath.ts","../src/deferred.ts","../src/firstThenDebounce.ts","../src/formatDecimals.ts","../src/formatPrice.ts","../src/getLoadable.ts","../src/getLoadableQuery.ts","../src/getQuery.ts","../src/getSharedObservable.ts","../src/hasOwnProperty.ts","../src/isAbortError.ts","../src/isArrayOf.ts","../src/isAscii.ts","../src/isBigInt.ts","../src/isBooleanTrue.ts","../src/isHexString.ts","../src/isNotNil.ts","../src/isPromise.ts","../src/isSubject.ts","../src/isTruthy.ts","../src/keepAlive.ts","../src/planckToTokens.ts","../src/replaySubjectFrom.ts","../src/sleep.ts","../src/splitSubject.ts","../src/throwAfter.ts","../src/tokensToPlanck.ts","../src/validateHexString.ts"],"sourcesContent":["export const addTrailingSlash = (url: string) => {\n if (url.endsWith(\"/\")) {\n return url\n }\n\n return `${url}/`\n}\n","/**\n * Javascript's `Math` library for `BigInt`.\n * Taken from https://stackoverflow.com/questions/51867270/is-there-a-library-similar-to-math-that-supports-javascript-bigint/64953280#64953280\n */\nexport const BigMath = {\n abs(x: bigint) {\n return x < 0n ? -x : x\n },\n sign(x: bigint) {\n if (x === 0n) return 0n\n return x < 0n ? -1n : 1n\n },\n // TODO: Improve our babel/tsc config to let us use the `**` operator on bigint values.\n // Error thrown: Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later. ts(2791)\n // pow(base: bigint, exponent: bigint) {\n // return base ** exponent\n // },\n min(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v < value) value = v\n return value\n },\n max(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v > value) value = v\n return value\n },\n}\n","/**\n * In TypeScript, a deferred promise refers to a pattern that involves creating a promise that can be\n * resolved or rejected at a later point in time, typically by code outside of the current function scope.\n *\n * This pattern is often used when dealing with asynchronous operations that involve multiple steps or when\n * the result of an operation cannot be immediately determined.\n */\nexport function Deferred<T>(): {\n promise: Promise<T>\n resolve: (value: T | PromiseLike<T>) => void\n reject: (reason?: unknown) => void\n isPending: () => boolean\n isResolved: () => boolean\n isRejected: () => boolean\n} {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: unknown) => void\n\n let isPending = true\n let isResolved = false\n let isRejected = false\n\n const promise = new Promise<T>((innerResolve, innerReject) => {\n resolve = (value) => {\n isPending = false\n isResolved = true\n innerResolve(value)\n }\n reject = (reason) => {\n isPending = false\n isRejected = true\n innerReject(reason)\n }\n })\n\n return {\n promise,\n resolve,\n reject,\n isPending: () => isPending,\n isResolved: () => isResolved,\n isRejected: () => isRejected,\n }\n}\n","import { concat, debounceTime, type Observable, type OperatorFunction, skip, take } from \"rxjs\"\n\n/**\n * An rxjs operator which:\n *\n * 1. Emits the first value it receives from the source observable, then:\n * 2. Debounces any future values by `timeout` ms.\n */\nexport const firstThenDebounce =\n <T>(timeout: number): OperatorFunction<T, T> =>\n (source: Observable<T>) =>\n concat(source.pipe(take(1)), source.pipe(skip(1)).pipe(debounceTime(timeout)))\n","import BigNumber from \"bignumber.js\"\n\nconst MIN_DIGITS = 4 // less truncates more than what compact formating is\nexport const MAX_DECIMALS_FORMAT = 12\n\n/**\n * Custom decimal number formatting for Talisman\n * note that the NumberFormat().format() call is the ressource heavy part, it's not worth trying to optimize other parts\n * @param num input number\n * @param digits number of significant digits to display\n * @param locale locale used to format the number\n * @param options formatting options\n * @returns the formatted value\n */\nexport const formatDecimals = (\n num?: string | number | null | BigNumber,\n digits = MIN_DIGITS,\n options: Partial<Intl.NumberFormatOptions> = {},\n locale = \"en-US\"\n): string => {\n if (num === null || num === undefined) return \"\"\n if (digits < MIN_DIGITS) digits = MIN_DIGITS\n\n const value = new BigNumber(num)\n // very small numbers should display \"< 0.0001\"\n const minDisplayVal = 1 / 10 ** digits\n\n if (value.gt(0) && value.lt(minDisplayVal)) return `< ${formatDecimals(minDisplayVal)}`\n\n // count digits\n const flooredValue = value.integerValue()\n const intDigits = flooredValue.isEqualTo(0) ? 0 : flooredValue.toString().length\n\n // we never want to display a rounded up value\n // to prevent JS default rounding, we will remove/truncate insignificant digits ourselves before formatting\n let truncatedValue = value\n //remove insignificant fraction digits\n const excessFractionDigitsPow10 = new BigNumber(10).pow(\n digits > intDigits ? digits - intDigits : 0\n )\n\n truncatedValue = truncatedValue\n .multipliedBy(excessFractionDigitsPow10)\n .integerValue()\n .dividedBy(excessFractionDigitsPow10)\n\n //remove insignificant integer digits\n const excessIntegerDigits = new BigNumber(intDigits > digits ? intDigits - digits : 0)\n const excessIntegerDigitsPow10 = new BigNumber(10).pow(excessIntegerDigits)\n if (excessIntegerDigits.gt(0))\n truncatedValue = truncatedValue\n .dividedBy(excessIntegerDigitsPow10)\n .integerValue()\n .multipliedBy(excessIntegerDigitsPow10)\n\n // format\n\n return Intl.NumberFormat(locale, {\n // compact notation (K, M, B) if above 9999\n notation: truncatedValue.abs().gt(9999) ? \"compact\" : \"standard\",\n // NOTE: possible values are from `0` to `21`\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#maximumsignificantdigits\n maximumSignificantDigits: Math.max(1, Math.min(digits + (truncatedValue.lt(1) ? 1 : 0), 21)),\n ...options,\n }).format(truncatedValue.toNumber())\n}\n","export const formatPrice = (price: number, currency: string, compact: boolean) => {\n return Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency,\n currencyDisplay: currency === \"usd\" ? \"narrowSymbol\" : \"symbol\",\n minimumSignificantDigits: 3,\n maximumSignificantDigits: compact ? (price < 1 ? 3 : 4) : undefined,\n roundingPriority: compact ? \"auto\" : \"morePrecision\",\n notation: compact ? \"compact\" : \"standard\",\n }).format(price)\n}\n","import { catchError, from, map, type Observable, of, startWith, switchMap, timer } from \"rxjs\"\n\n// Designed to be serializable as it can be sent to the frontend\ntype LoadableError = {\n name: string // can be used to identify the error type\n message: string // display message\n}\n\nexport type Loadable<T = unknown> =\n | { status: \"loading\"; data?: T; error?: undefined }\n | { status: \"success\"; data: T; error?: undefined }\n | { status: \"error\"; data?: T; error: LoadableError }\n\nexport type LoadableStatus = Loadable[\"status\"]\n\nexport type LoadableOptions = {\n getError?: (error: unknown) => LoadableError\n refreshInterval?: number\n}\n\nexport function getLoadable$<T>(\n factory: () => Promise<T>,\n options: LoadableOptions = {}\n): Observable<Loadable<T>> {\n const { getError, refreshInterval } = options\n\n const createLoadableStream = () =>\n from(factory()).pipe(\n map(\n (data): Loadable<T> => ({\n status: \"success\",\n data,\n })\n ),\n catchError((error) =>\n of<Loadable<T>>({\n status: \"error\",\n error: getError ? getError(error) : getGenericError(error),\n })\n )\n )\n\n const source$ = refreshInterval\n ? timer(0, refreshInterval).pipe(switchMap(() => createLoadableStream()))\n : createLoadableStream()\n\n return source$.pipe(\n startWith<Loadable<T>>({\n status: \"loading\",\n } as Loadable<T>)\n )\n}\n\nconst getGenericError = (error: unknown): LoadableError => ({\n name: \"Error\",\n message: getGenericErrorMessage(error),\n})\n\nconst getGenericErrorMessage = (error: unknown): string => {\n if (typeof error === \"string\") {\n return error\n } else if (error instanceof Error) {\n return error.message\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n return (error as { message: string }).message\n }\n return String(error) || \"Unknown error\"\n}\n","import { map, type Observable, startWith } from \"rxjs\"\n\nimport type { Loadable } from \"./getLoadable\"\nimport { getQuery$, type QueryResult } from \"./getQuery\"\n\nexport type GetLoadableQueryParams<TArgs extends unknown[], TResult> = {\n namespace: string\n args: TArgs\n queryFn: (args: TArgs, signal: AbortSignal) => Promise<TResult>\n refreshInterval?: number\n defaultValue?: TResult\n}\n\n/**\n * Thin wrapper around getQuery$ that returns Loadable<T> and optionally\n * primes the stream with a loading state using the provided default value.\n *\n * TODO: consolidate with getQuery$\n */\nexport const getLoadableQuery$ = <TArgs extends unknown[], TResult>(\n params: GetLoadableQueryParams<TArgs, TResult>\n): Observable<Loadable<TResult>> => {\n const initial =\n params.defaultValue === undefined\n ? []\n : ([{ status: \"loading\", data: params.defaultValue }] as Loadable<TResult>[])\n\n return getQuery$(params).pipe(\n map((val: QueryResult<TResult>): Loadable<TResult> => {\n switch (val.status) {\n case \"loading\":\n return { status: \"loading\", data: val.data }\n case \"loaded\":\n return { status: \"success\", data: val.data }\n case \"error\": {\n const err = val.error as Error | undefined\n return {\n status: \"error\",\n error: {\n name: err?.name ?? \"QueryError\",\n message: err?.message ?? \"Failed to execute query\",\n },\n }\n }\n }\n }),\n startWith(...initial)\n )\n}\n","import { isEqual } from \"lodash-es\"\nimport { BehaviorSubject, distinctUntilChanged, Observable, shareReplay } from \"rxjs\"\n\nimport { getSharedObservable } from \"./getSharedObservable\"\n\nexport type QueryStatus = \"loading\" | \"loaded\" | \"error\"\n\nexport type QueryResult<\n T,\n S extends QueryStatus = \"loading\" | \"loaded\" | \"error\",\n> = S extends \"loading\"\n ? { status: \"loading\"; data: T | undefined; error: undefined }\n : S extends \"loaded\"\n ? { status: \"loaded\"; data: T; error: undefined }\n : { status: \"error\"; data: undefined; error: unknown }\n\ntype QueryOptions<Output, Args> = {\n namespace: string\n args: Args\n queryFn: (args: Args, signal: AbortSignal) => Promise<Output>\n defaultValue?: Output\n refreshInterval?: number\n serializer?: (args: Args) => string\n}\n\n/**\n * Creates a shared observable for executing queries with caching, loading states, and automatic refresh capabilities.\n *\n * @example\n * ```typescript\n * const userQuery$ = getQuery$({\n * namespace: 'users',\n * args: { userId: 123 },\n * queryFn: async ({ userId }) => fetchUser(userId),\n * defaultValue: null,\n * refreshInterval: 30000\n * });\n *\n * userQuery$.subscribe(result => {\n * if (result.status === 'loaded') {\n * console.log(result.data);\n * }\n * });\n * ```\n *\n * @deprecated use getLoadableQuery$ instead\n */\nexport const getQuery$ = <Output, Args>({\n namespace,\n args,\n queryFn,\n defaultValue,\n refreshInterval,\n serializer = (args) => JSON.stringify(args),\n}: QueryOptions<Output, Args>): Observable<QueryResult<Output>> => {\n return getSharedObservable(\n namespace,\n args,\n () =>\n new Observable<QueryResult<Output>>((subscriber) => {\n const controller = new AbortController()\n\n const result = new BehaviorSubject<QueryResult<Output>>({\n status: \"loading\",\n data: defaultValue,\n error: undefined,\n })\n\n // result subscription\n const sub = result\n .pipe(distinctUntilChanged<QueryResult<Output>>(isEqual))\n .subscribe(subscriber)\n\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n let timeout: any = null\n\n // fetch result subscription\n const run = () => {\n if (controller.signal.aborted) return\n\n queryFn(args, controller.signal)\n .then((data) => {\n if (controller.signal.aborted) return\n result.next({ status: \"loaded\", data, error: undefined })\n })\n .catch((error) => {\n if (controller.signal.aborted) return\n result.next({ status: \"error\", data: undefined, error })\n })\n .finally(() => {\n if (controller.signal.aborted) return\n if (refreshInterval) timeout = setTimeout(run, refreshInterval)\n })\n }\n\n run()\n\n return () => {\n sub.unsubscribe()\n if (timeout) clearTimeout(timeout)\n controller.abort(new Error(\"getQuery$ unsubscribed\"))\n }\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n serializer\n )\n}\n","import { type Observable, shareReplay } from \"rxjs\"\n\nconst CACHE = new Map<string, unknown>()\n\n/**\n * When using react-rxjs hooks and state observables, the options are used as weak map keys.\n * This means that if the options object is recreated on each render, the observable will be recreated as well.\n * This utility function allows you to create a shared observable based on a namespace and arguments that, so react-rxjs can reuse the same observables\n *\n * @param namespace\n * @param args\n * @param createObservable\n * @param serializer\n * @returns\n */\nexport const getSharedObservable = <Args, Output, ObsOutput = Observable<Output>>(\n namespace: string,\n args: Args,\n createObservable: (args: Args) => ObsOutput,\n serializer = (args: Args): string => JSON.stringify(args)\n): ObsOutput => {\n const cacheKey = `${namespace}:${serializer(args)}`\n\n if (CACHE.has(cacheKey)) return CACHE.get(cacheKey) as ObsOutput\n\n const obs = createObservable(args) as Observable<unknown>\n const sharedObs = obs.pipe(shareReplay({ bufferSize: 1, refCount: true }))\n\n CACHE.set(cacheKey, sharedObs)\n\n return sharedObs as ObsOutput\n}\n","// biome-ignore lint/suspicious/noShadowRestrictedNames: legacy\nexport function hasOwnProperty<X, Y extends PropertyKey>(\n obj: X,\n prop: Y\n): obj is X & Record<Y, unknown> {\n if (typeof obj !== \"object\") return false\n if (obj === null) return false\n return prop in obj\n}\n","export const isAbortError = (error: unknown): boolean => {\n return error instanceof Error && error.name === \"AbortError\"\n}\n","export function isArrayOf<T, P extends Array<unknown>>(\n array: unknown[],\n func: new (...args: P) => T\n): array is T[] {\n if (array.length > 0 && array[0] instanceof func) return true\n return false\n}\n","export const isAscii = (str: string): boolean => {\n return [...str].every((char) => char.charCodeAt(0) <= 127)\n}\n","export const isBigInt = (value: unknown): value is bigint => typeof value === \"bigint\"\n","export const isBooleanTrue = <T>(x: T | null | undefined): x is T => !!x\n","export type HexString = `0x${string}`\n\nexport const REGEX_HEX_STRING = /^0x[0-9a-fA-F]*$/\n\nexport const isHexString = (value: unknown): value is HexString => {\n return typeof value === \"string\" && REGEX_HEX_STRING.test(value)\n}\n","/**\n * WARNING: This function only checks against null or undefined, it does not coerce the value.\n * ie: false and 0 are considered not nil\n * Use isTruthy instead for a regular coercion check.\n *\n * @param value\n * @returns whether the value is neither null nor undefined\n */\nexport const isNotNil = <T>(value: T | null | undefined): value is T =>\n value !== null && value !== undefined\n","// biome-ignore lint/suspicious/noExplicitAny: legacy\nexport const isPromise = <T = any>(value: any): value is Promise<T> =>\n !!value &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n typeof value.then === \"function\"\n","import { Subject } from \"rxjs\"\n\n/**\n * Tests to see if an object is an RxJS {@link Subject}.\n */\nexport function isSubject<T>(object?: Subject<T> | object): object is Subject<T> {\n if (!object) return false\n if (object instanceof Subject) return true\n return (\n \"asObservable\" in object &&\n isFn(object.asObservable) &&\n \"complete\" in object &&\n isFn(object.complete) &&\n \"error\" in object &&\n isFn(object.error) &&\n \"forEach\" in object &&\n isFn(object.forEach) &&\n \"next\" in object &&\n isFn(object.next) &&\n \"pipe\" in object &&\n isFn(object.pipe) &&\n \"subscribe\" in object &&\n isFn(object.subscribe) &&\n \"unsubscribe\" in object &&\n isFn(object.unsubscribe) &&\n \"closed\" in object &&\n isBool(object.closed) &&\n \"observed\" in object &&\n isBool(object.observed)\n )\n}\n\n/**\n * Returns `true` if `value` is a function.\n */\nfunction isFn(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === \"function\"\n}\n\n/**\n * Returns `true` if `value` is a boolean.\n */\nfunction isBool(value: unknown): value is boolean {\n return typeof value === \"boolean\"\n}\n","export const isTruthy = <T>(value: T | null | undefined): value is T => Boolean(value)\n","import type { OperatorFunction } from \"rxjs\"\nimport { type Observable, shareReplay, tap } from \"rxjs\"\n\n/**\n * An RxJS operator that keeps the source observable alive for a specified duration\n * after all subscribers have unsubscribed. This prevents expensive re-subscriptions\n * when subscribers come and go frequently.\n *\n * @param keepAliveMs - Duration in milliseconds to keep the source alive after last unsubscription\n * @returns MonoTypeOperatorFunction that can be used in pipe()\n *\n * @example\n * ```typescript\n * const data$ = expensive_api_call$.pipe(\n * keepAlive(3000) // Keep alive for 3 seconds\n * );\n * ```\n */\nexport const keepAlive = <T>(timeout: number): OperatorFunction<T, T> => {\n let release: ReturnType<typeof keepSourceSubscribed> | null\n\n return (source: Observable<T>) =>\n source.pipe(\n tap({\n subscribe: () => {\n release = keepSourceSubscribed(source, timeout)\n },\n unsubscribe: () => {\n release?.()\n },\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n}\n\nconst keepSourceSubscribed = (observable: Observable<unknown>, ms: number) => {\n const sub = observable.subscribe()\n return () => setTimeout(() => sub.unsubscribe(), ms)\n}\n","import BigNumber from \"bignumber.js\"\n\nexport function planckToTokens(planck: string, tokenDecimals: number): string\nexport function planckToTokens(planck: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined {\n if (typeof planck !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = -1 * tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(planck).multipliedBy(multiplier).toString(10)\n}\n","import { ReplaySubject } from \"rxjs\"\n\nimport { isPromise } from \"./isPromise\"\n\n/**\n * Turns a value into a {@link ReplaySubject} of size 1.\n *\n * If the value is already a {@link ReplaySubject}, it will be returned as-is.\n *\n * If the value is a {@link Promise}, it will be awaited,\n * and the awaited value will be published into the {@link ReplaySubject} when it becomes available.\n *\n * For any other type of value, it will be immediately published into the {@link ReplaySubject}.\n */\nexport const replaySubjectFrom = <T>(\n initialValue: T | Promise<T> | ReplaySubject<T>\n): ReplaySubject<T> => {\n if (initialValue instanceof ReplaySubject) return initialValue\n\n const subject = new ReplaySubject<T>(1)\n\n // if initialValue is a promise, await it and then call `subject.next()` with the awaited value\n if (isPromise(initialValue)) {\n initialValue.then(\n (value) => subject.next(value),\n (error) => subject.error(error)\n )\n return subject\n }\n\n // if initialValue is not a promise, immediately call `subject.next()` with the value\n subject.next(initialValue)\n return subject\n}\n","export const sleep = (ms: number) =>\n new Promise<void>((resolve) => {\n if (process.env.NODE_ENV === \"test\") resolve()\n else setTimeout(resolve, ms)\n })\n","import type { Observable, Subject } from \"rxjs\"\n\n/**\n * Takes a subject and splits it into two parts:\n *\n * 1. A function to submit new values into the subject.\n * 2. An observable for subscribing to new values from the subject.\n *\n * This can be helpful when, to avoid bugs, you want to expose only one\n * of these parts to external code and keep the other part private.\n */\nexport function splitSubject<T>(subject: Subject<T>) {\n const next = (value: T) => subject.next(value)\n const observable: Observable<T> = subject.asObservable()\n\n return [next, observable] as const\n}\n","export const throwAfter = (ms: number, reason: string) =>\n new Promise<never>((_, reject) => setTimeout(() => reject(new Error(reason)), ms))\n","import BigNumber from \"bignumber.js\"\n\nexport function tokensToPlanck(tokens: string, tokenDecimals: number): string\nexport function tokensToPlanck(tokens: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined {\n if (typeof tokens !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(tokens).multipliedBy(multiplier).toString(10)\n}\n","/**\n * @name validateHexString\n * @description Checks if a string is a hex string. Required to account for type differences between different polkadot libraries\n * @param {string} str - string to check\n * @returns {`0x${string}`} - boolean\n * @example\n * validateHexString(\"0x1234\") // \"0x1234\"\n * validateHexString(\"1234\") // Error: Expected a hex string\n * validateHexString(1234) // Error: Expected a string\n **/\nexport const validateHexString = (str: string): `0x${string}` => {\n if (typeof str !== \"string\") {\n throw new Error(\"Expected a string\")\n }\n\n if (str.startsWith(\"0x\")) {\n return str as `0x${string}`\n }\n throw new Error(\"Expected a hex string\")\n}\n"],"mappings":"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","names":["map","startWith","shareReplay","args","args","shareReplay","map","startWith","shareReplay","BigNumber","BigNumber"]}
|
|
1
|
+
{"version":3,"sources":["../src/configureBigNumber.ts","../src/addTrailingSlash.ts","../src/BigMath.ts","../src/deferred.ts","../src/firstThenDebounce.ts","../src/formatDecimals.ts","../src/formatPrice.ts","../src/getLoadable.ts","../src/getLoadableQuery.ts","../src/getQuery.ts","../src/getSharedObservable.ts","../src/hasOwnProperty.ts","../src/isAbortError.ts","../src/isArrayOf.ts","../src/isAscii.ts","../src/isBigInt.ts","../src/isBooleanTrue.ts","../src/isErrorOfName.ts","../src/isHexString.ts","../src/isNotNil.ts","../src/isPromise.ts","../src/isSubject.ts","../src/isTruthy.ts","../src/keepAlive.ts","../src/planckToTokens.ts","../src/replaySubjectFrom.ts","../src/sleep.ts","../src/splitSubject.ts","../src/stripHexPrefix.ts","../src/throwAfter.ts","../src/tokensToPlanck.ts","../src/validateHexString.ts"],"sourcesContent":["import BigNumber from \"bignumber.js\"\n\n// bignumber.js v10+ throws on invalid input by default (the STRICT option).\n// Restore the v9 behaviour of returning NaN so existing callers are unaffected.\n// The bignumber.js config is a shared singleton, so this applies process-wide.\n// Import BigNumber from here (rather than directly from \"bignumber.js\") to\n// guarantee this config has run before any value is constructed.\nBigNumber.set({ STRICT: false })\n\nexport default BigNumber\n","export const addTrailingSlash = (url: string) => {\n if (url.endsWith(\"/\")) {\n return url\n }\n\n return `${url}/`\n}\n","/**\n * Javascript's `Math` library for `BigInt`.\n * Taken from https://stackoverflow.com/questions/51867270/is-there-a-library-similar-to-math-that-supports-javascript-bigint/64953280#64953280\n */\nexport const BigMath = {\n abs(x: bigint) {\n return x < 0n ? -x : x\n },\n sign(x: bigint) {\n if (x === 0n) return 0n\n return x < 0n ? -1n : 1n\n },\n // TODO: Improve our babel/tsc config to let us use the `**` operator on bigint values.\n // Error thrown: Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later. ts(2791)\n // pow(base: bigint, exponent: bigint) {\n // return base ** exponent\n // },\n min(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v < value) value = v\n return value\n },\n max(value: bigint, ...values: bigint[]) {\n for (const v of values) if (v > value) value = v\n return value\n },\n}\n","/**\n * In TypeScript, a deferred promise refers to a pattern that involves creating a promise that can be\n * resolved or rejected at a later point in time, typically by code outside of the current function scope.\n *\n * This pattern is often used when dealing with asynchronous operations that involve multiple steps or when\n * the result of an operation cannot be immediately determined.\n */\nexport function Deferred<T>(): {\n promise: Promise<T>\n resolve: (value: T | PromiseLike<T>) => void\n reject: (reason?: unknown) => void\n isPending: () => boolean\n isResolved: () => boolean\n isRejected: () => boolean\n} {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: unknown) => void\n\n let isPending = true\n let isResolved = false\n let isRejected = false\n\n const promise = new Promise<T>((innerResolve, innerReject) => {\n resolve = (value) => {\n isPending = false\n isResolved = true\n innerResolve(value)\n }\n reject = (reason) => {\n isPending = false\n isRejected = true\n innerReject(reason)\n }\n })\n\n return {\n promise,\n resolve,\n reject,\n isPending: () => isPending,\n isResolved: () => isResolved,\n isRejected: () => isRejected,\n }\n}\n","import { concat, debounceTime, type Observable, type OperatorFunction, skip, take } from \"rxjs\"\n\n/**\n * An rxjs operator which:\n *\n * 1. Emits the first value it receives from the source observable, then:\n * 2. Debounces any future values by `timeout` ms.\n */\nexport const firstThenDebounce =\n <T>(timeout: number): OperatorFunction<T, T> =>\n (source: Observable<T>) =>\n concat(source.pipe(take(1)), source.pipe(skip(1)).pipe(debounceTime(timeout)))\n","import BigNumber from \"./configureBigNumber\"\n\nconst MIN_DIGITS = 4 // less truncates more than what compact formating is\nexport const MAX_DECIMALS_FORMAT = 12\n\n/**\n * Custom decimal number formatting for Talisman\n * note that the NumberFormat().format() call is the ressource heavy part, it's not worth trying to optimize other parts\n * @param num input number\n * @param digits number of significant digits to display\n * @param locale locale used to format the number\n * @param options formatting options\n * @returns the formatted value\n */\nexport const formatDecimals = (\n num?: string | number | null | BigNumber,\n digits = MIN_DIGITS,\n options: Partial<Intl.NumberFormatOptions> = {},\n locale = \"en-US\"\n): string => {\n if (num === null || num === undefined) return \"\"\n if (digits < MIN_DIGITS) digits = MIN_DIGITS\n\n const value = new BigNumber(num)\n // very small numbers should display \"< 0.0001\"\n const minDisplayVal = 1 / 10 ** digits\n\n if (value.gt(0) && value.lt(minDisplayVal)) return `< ${formatDecimals(minDisplayVal)}`\n\n // count digits\n const flooredValue = value.integerValue()\n const intDigits = flooredValue.isEqualTo(0) ? 0 : flooredValue.toString().length\n\n // we never want to display a rounded up value\n // to prevent JS default rounding, we will remove/truncate insignificant digits ourselves before formatting\n let truncatedValue = value\n //remove insignificant fraction digits\n const excessFractionDigitsPow10 = new BigNumber(10).pow(\n digits > intDigits ? digits - intDigits : 0\n )\n\n truncatedValue = truncatedValue\n .multipliedBy(excessFractionDigitsPow10)\n .integerValue()\n .dividedBy(excessFractionDigitsPow10)\n\n //remove insignificant integer digits\n const excessIntegerDigits = new BigNumber(intDigits > digits ? intDigits - digits : 0)\n const excessIntegerDigitsPow10 = new BigNumber(10).pow(excessIntegerDigits)\n if (excessIntegerDigits.gt(0))\n truncatedValue = truncatedValue\n .dividedBy(excessIntegerDigitsPow10)\n .integerValue()\n .multipliedBy(excessIntegerDigitsPow10)\n\n // format\n\n return Intl.NumberFormat(locale, {\n // compact notation (K, M, B) if above 9999\n notation: truncatedValue.abs().gt(9999) ? \"compact\" : \"standard\",\n // NOTE: possible values are from `0` to `21`\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#maximumsignificantdigits\n maximumSignificantDigits: Math.max(1, Math.min(digits + (truncatedValue.lt(1) ? 1 : 0), 21)),\n ...options,\n }).format(truncatedValue.toNumber())\n}\n","export const formatPrice = (price: number, currency: string, compact: boolean) => {\n return Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency,\n currencyDisplay: currency === \"usd\" ? \"narrowSymbol\" : \"symbol\",\n minimumSignificantDigits: 3,\n maximumSignificantDigits: compact ? (price < 1 ? 3 : 4) : undefined,\n roundingPriority: compact ? \"auto\" : \"morePrecision\",\n notation: compact ? \"compact\" : \"standard\",\n }).format(price)\n}\n","import { catchError, from, map, type Observable, of, startWith, switchMap, timer } from \"rxjs\"\n\n// Designed to be serializable as it can be sent to the frontend\ntype LoadableError = {\n name: string // can be used to identify the error type\n message: string // display message\n}\n\nexport type Loadable<T = unknown> =\n | { status: \"loading\"; data?: T; error?: undefined }\n | { status: \"success\"; data: T; error?: undefined }\n | { status: \"error\"; data?: T; error: LoadableError }\n\nexport type LoadableStatus = Loadable[\"status\"]\n\nexport type LoadableOptions = {\n getError?: (error: unknown) => LoadableError\n refreshInterval?: number\n}\n\nexport function getLoadable$<T>(\n factory: () => Promise<T>,\n options: LoadableOptions = {}\n): Observable<Loadable<T>> {\n const { getError, refreshInterval } = options\n\n const createLoadableStream = () =>\n from(factory()).pipe(\n map(\n (data): Loadable<T> => ({\n status: \"success\",\n data,\n })\n ),\n catchError((error) =>\n of<Loadable<T>>({\n status: \"error\",\n error: getError ? getError(error) : getGenericError(error),\n })\n )\n )\n\n const source$ = refreshInterval\n ? timer(0, refreshInterval).pipe(switchMap(() => createLoadableStream()))\n : createLoadableStream()\n\n return source$.pipe(\n startWith<Loadable<T>>({\n status: \"loading\",\n } as Loadable<T>)\n )\n}\n\nconst getGenericError = (error: unknown): LoadableError => ({\n name: \"Error\",\n message: getGenericErrorMessage(error),\n})\n\nconst getGenericErrorMessage = (error: unknown): string => {\n if (typeof error === \"string\") {\n return error\n } else if (error instanceof Error) {\n return error.message\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n return (error as { message: string }).message\n }\n return String(error) || \"Unknown error\"\n}\n","import { map, type Observable, startWith } from \"rxjs\"\n\nimport type { Loadable } from \"./getLoadable\"\nimport { getQuery$, type QueryResult } from \"./getQuery\"\n\nexport type GetLoadableQueryParams<TArgs extends unknown[], TResult> = {\n namespace: string\n args: TArgs\n queryFn: (args: TArgs, signal: AbortSignal) => Promise<TResult>\n refreshInterval?: number\n defaultValue?: TResult\n}\n\n/**\n * Thin wrapper around getQuery$ that returns Loadable<T> and optionally\n * primes the stream with a loading state using the provided default value.\n *\n * TODO: consolidate with getQuery$\n */\nexport const getLoadableQuery$ = <TArgs extends unknown[], TResult>(\n params: GetLoadableQueryParams<TArgs, TResult>\n): Observable<Loadable<TResult>> => {\n const initial =\n params.defaultValue === undefined\n ? []\n : ([{ status: \"loading\", data: params.defaultValue }] as Loadable<TResult>[])\n\n return getQuery$(params).pipe(\n map((val: QueryResult<TResult>): Loadable<TResult> => {\n switch (val.status) {\n case \"loading\":\n return { status: \"loading\", data: val.data }\n case \"loaded\":\n return { status: \"success\", data: val.data }\n case \"error\": {\n const err = val.error as Error | undefined\n return {\n status: \"error\",\n error: {\n name: err?.name ?? \"QueryError\",\n message: err?.message ?? \"Failed to execute query\",\n },\n }\n }\n }\n }),\n startWith(...initial)\n )\n}\n","import { isEqual } from \"lodash-es\"\nimport { BehaviorSubject, distinctUntilChanged, Observable, shareReplay } from \"rxjs\"\n\nimport { getSharedObservable } from \"./getSharedObservable\"\n\nexport type QueryStatus = \"loading\" | \"loaded\" | \"error\"\n\nexport type QueryResult<\n T,\n S extends QueryStatus = \"loading\" | \"loaded\" | \"error\",\n> = S extends \"loading\"\n ? { status: \"loading\"; data: T | undefined; error: undefined }\n : S extends \"loaded\"\n ? { status: \"loaded\"; data: T; error: undefined }\n : { status: \"error\"; data: undefined; error: unknown }\n\ntype QueryOptions<Output, Args> = {\n namespace: string\n args: Args\n queryFn: (args: Args, signal: AbortSignal) => Promise<Output>\n defaultValue?: Output\n refreshInterval?: number\n serializer?: (args: Args) => string\n}\n\n/**\n * Creates a shared observable for executing queries with caching, loading states, and automatic refresh capabilities.\n *\n * @example\n * ```typescript\n * const userQuery$ = getQuery$({\n * namespace: 'users',\n * args: { userId: 123 },\n * queryFn: async ({ userId }) => fetchUser(userId),\n * defaultValue: null,\n * refreshInterval: 30000\n * });\n *\n * userQuery$.subscribe(result => {\n * if (result.status === 'loaded') {\n * console.log(result.data);\n * }\n * });\n * ```\n *\n * @deprecated use getLoadableQuery$ instead\n */\nexport const getQuery$ = <Output, Args>({\n namespace,\n args,\n queryFn,\n defaultValue,\n refreshInterval,\n serializer = (args) => JSON.stringify(args),\n}: QueryOptions<Output, Args>): Observable<QueryResult<Output>> => {\n return getSharedObservable(\n namespace,\n args,\n () =>\n new Observable<QueryResult<Output>>((subscriber) => {\n const controller = new AbortController()\n\n const result = new BehaviorSubject<QueryResult<Output>>({\n status: \"loading\",\n data: defaultValue,\n error: undefined,\n })\n\n // result subscription\n const sub = result\n .pipe(distinctUntilChanged<QueryResult<Output>>(isEqual))\n .subscribe(subscriber)\n\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n let timeout: any = null\n\n // fetch result subscription\n const run = () => {\n if (controller.signal.aborted) return\n\n queryFn(args, controller.signal)\n .then((data) => {\n if (controller.signal.aborted) return\n result.next({ status: \"loaded\", data, error: undefined })\n })\n .catch((error) => {\n if (controller.signal.aborted) return\n result.next({ status: \"error\", data: undefined, error })\n })\n .finally(() => {\n if (controller.signal.aborted) return\n if (refreshInterval) timeout = setTimeout(run, refreshInterval)\n })\n }\n\n run()\n\n return () => {\n sub.unsubscribe()\n if (timeout) clearTimeout(timeout)\n controller.abort(new Error(\"getQuery$ unsubscribed\"))\n }\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n serializer\n )\n}\n","import { type Observable, shareReplay } from \"rxjs\"\n\nconst CACHE = new Map<string, unknown>()\n\n/**\n * When using react-rxjs hooks and state observables, the options are used as weak map keys.\n * This means that if the options object is recreated on each render, the observable will be recreated as well.\n * This utility function allows you to create a shared observable based on a namespace and arguments that, so react-rxjs can reuse the same observables\n *\n * @param namespace\n * @param args\n * @param createObservable\n * @param serializer\n * @returns\n */\nexport const getSharedObservable = <Args, Output, ObsOutput = Observable<Output>>(\n namespace: string,\n args: Args,\n createObservable: (args: Args) => ObsOutput,\n serializer = (args: Args): string => JSON.stringify(args)\n): ObsOutput => {\n const cacheKey = `${namespace}:${serializer(args)}`\n\n if (CACHE.has(cacheKey)) return CACHE.get(cacheKey) as ObsOutput\n\n const obs = createObservable(args) as Observable<unknown>\n const sharedObs = obs.pipe(shareReplay({ bufferSize: 1, refCount: true }))\n\n CACHE.set(cacheKey, sharedObs)\n\n return sharedObs as ObsOutput\n}\n","// biome-ignore lint/suspicious/noShadowRestrictedNames: legacy\nexport function hasOwnProperty<X, Y extends PropertyKey>(\n obj: X,\n prop: Y\n): obj is X & Record<Y, unknown> {\n if (typeof obj !== \"object\") return false\n if (obj === null) return false\n return prop in obj\n}\n","export const isAbortError = (error: unknown): boolean => {\n return error instanceof Error && error.name === \"AbortError\"\n}\n","export function isArrayOf<T, P extends Array<unknown>>(\n array: unknown[],\n func: new (...args: P) => T\n): array is T[] {\n if (array.length > 0 && array[0] instanceof func) return true\n return false\n}\n","export const isAscii = (str: string): boolean => {\n return [...str].every((char) => char.charCodeAt(0) <= 127)\n}\n","export const isBigInt = (value: unknown): value is bigint => typeof value === \"bigint\"\n","export const isBooleanTrue = <T>(x: T | null | undefined): x is T => !!x\n","/**\n * Robust replacement for `error instanceof SomeErrorClass` when the class comes from a\n * package that gets bundled into multiple chunks/contexts (e.g. viem, @solana/web3.js).\n *\n * `instanceof` returns `false` whenever the error originates from a different bundled copy of\n * the module than the imported class reference — which silently broke Solana transfers (see\n * apps/extension/src/__tests__/no-instanceof-bundled-class.test.ts). An error's `.name` is\n * stable across copies, *provided the class sets it explicitly* (viem does:\n * `super({ name: 'ContractFunctionExecutionError' })`). For classes that don't set `.name`,\n * duck-type the shape instead.\n */\nexport const isErrorOfName = (error: unknown, ...names: string[]): boolean =>\n error instanceof Error && names.includes(error.name)\n","export type HexString = `0x${string}`\n\nexport const REGEX_HEX_STRING = /^0x[0-9a-fA-F]*$/\n\nexport const isHexString = (value: unknown): value is HexString => {\n return typeof value === \"string\" && REGEX_HEX_STRING.test(value)\n}\n","/**\n * WARNING: This function only checks against null or undefined, it does not coerce the value.\n * ie: false and 0 are considered not nil\n * Use isTruthy instead for a regular coercion check.\n *\n * @param value\n * @returns whether the value is neither null nor undefined\n */\nexport const isNotNil = <T>(value: T | null | undefined): value is T =>\n value !== null && value !== undefined\n","// biome-ignore lint/suspicious/noExplicitAny: legacy\nexport const isPromise = <T = any>(value: any): value is Promise<T> =>\n !!value &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n typeof value.then === \"function\"\n","import { Subject } from \"rxjs\"\n\n/**\n * Tests to see if an object is an RxJS {@link Subject}.\n */\nexport function isSubject<T>(object?: Subject<T> | object): object is Subject<T> {\n if (!object) return false\n if (object instanceof Subject) return true\n return (\n \"asObservable\" in object &&\n isFn(object.asObservable) &&\n \"complete\" in object &&\n isFn(object.complete) &&\n \"error\" in object &&\n isFn(object.error) &&\n \"forEach\" in object &&\n isFn(object.forEach) &&\n \"next\" in object &&\n isFn(object.next) &&\n \"pipe\" in object &&\n isFn(object.pipe) &&\n \"subscribe\" in object &&\n isFn(object.subscribe) &&\n \"unsubscribe\" in object &&\n isFn(object.unsubscribe) &&\n \"closed\" in object &&\n isBool(object.closed) &&\n \"observed\" in object &&\n isBool(object.observed)\n )\n}\n\n/**\n * Returns `true` if `value` is a function.\n */\nfunction isFn(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === \"function\"\n}\n\n/**\n * Returns `true` if `value` is a boolean.\n */\nfunction isBool(value: unknown): value is boolean {\n return typeof value === \"boolean\"\n}\n","export const isTruthy = <T>(value: T | null | undefined): value is T => Boolean(value)\n","import type { OperatorFunction } from \"rxjs\"\nimport { type Observable, shareReplay, tap } from \"rxjs\"\n\n/**\n * An RxJS operator that keeps the source observable alive for a specified duration\n * after all subscribers have unsubscribed. This prevents expensive re-subscriptions\n * when subscribers come and go frequently.\n *\n * @param keepAliveMs - Duration in milliseconds to keep the source alive after last unsubscription\n * @returns MonoTypeOperatorFunction that can be used in pipe()\n *\n * @example\n * ```typescript\n * const data$ = expensive_api_call$.pipe(\n * keepAlive(3000) // Keep alive for 3 seconds\n * );\n * ```\n */\nexport const keepAlive = <T>(timeout: number): OperatorFunction<T, T> => {\n let release: ReturnType<typeof keepSourceSubscribed> | null\n\n return (source: Observable<T>) =>\n source.pipe(\n tap({\n subscribe: () => {\n release = keepSourceSubscribed(source, timeout)\n },\n unsubscribe: () => {\n release?.()\n },\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n}\n\nconst keepSourceSubscribed = (observable: Observable<unknown>, ms: number) => {\n const sub = observable.subscribe()\n return () => setTimeout(() => sub.unsubscribe(), ms)\n}\n","import BigNumber from \"./configureBigNumber\"\n\nexport function planckToTokens(planck: string, tokenDecimals: number): string\nexport function planckToTokens(planck: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined {\n if (typeof planck !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = -1 * tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(planck).multipliedBy(multiplier).toString(10)\n}\n","import { ReplaySubject } from \"rxjs\"\n\nimport { isPromise } from \"./isPromise\"\n\n/**\n * Turns a value into a {@link ReplaySubject} of size 1.\n *\n * If the value is already a {@link ReplaySubject}, it will be returned as-is.\n *\n * If the value is a {@link Promise}, it will be awaited,\n * and the awaited value will be published into the {@link ReplaySubject} when it becomes available.\n *\n * For any other type of value, it will be immediately published into the {@link ReplaySubject}.\n */\nexport const replaySubjectFrom = <T>(\n initialValue: T | Promise<T> | ReplaySubject<T>\n): ReplaySubject<T> => {\n if (initialValue instanceof ReplaySubject) return initialValue\n\n const subject = new ReplaySubject<T>(1)\n\n // if initialValue is a promise, await it and then call `subject.next()` with the awaited value\n if (isPromise(initialValue)) {\n initialValue.then(\n (value) => subject.next(value),\n (error) => subject.error(error)\n )\n return subject\n }\n\n // if initialValue is not a promise, immediately call `subject.next()` with the value\n subject.next(initialValue)\n return subject\n}\n","export const sleep = (ms: number) =>\n new Promise<void>((resolve) => {\n if (process.env.NODE_ENV === \"test\") resolve()\n else setTimeout(resolve, ms)\n })\n","import type { Observable, Subject } from \"rxjs\"\n\n/**\n * Takes a subject and splits it into two parts:\n *\n * 1. A function to submit new values into the subject.\n * 2. An observable for subscribing to new values from the subject.\n *\n * This can be helpful when, to avoid bugs, you want to expose only one\n * of these parts to external code and keep the other part private.\n */\nexport function splitSubject<T>(subject: Subject<T>) {\n const next = (value: T) => subject.next(value)\n const observable: Observable<T> = subject.asObservable()\n\n return [next, observable] as const\n}\n","/**\n * @name stripHexPrefix\n * @description Removes a leading `0x` prefix from a string, if present.\n * @param {string} str - string to strip\n * @returns {string} - the string without its leading `0x` prefix\n * @example\n * stripHexPrefix(\"0x1234\") // \"1234\"\n * stripHexPrefix(\"1234\") // \"1234\"\n **/\nexport const stripHexPrefix = (str: string): string => (str.startsWith(\"0x\") ? str.slice(2) : str)\n","export const throwAfter = (ms: number, reason: string) =>\n new Promise<never>((_, reject) => setTimeout(() => reject(new Error(reason)), ms))\n","import BigNumber from \"./configureBigNumber\"\n\nexport function tokensToPlanck(tokens: string, tokenDecimals: number): string\nexport function tokensToPlanck(tokens: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined {\n if (typeof tokens !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n const base = 10\n const exponent = tokenDecimals\n const multiplier = base ** exponent\n\n return new BigNumber(tokens).multipliedBy(multiplier).toString(10)\n}\n","/**\n * @name validateHexString\n * @description Checks if a string is a hex string. Required to account for type differences between different polkadot libraries\n * @param {string} str - string to check\n * @returns {`0x${string}`} - boolean\n * @example\n * validateHexString(\"0x1234\") // \"0x1234\"\n * validateHexString(\"1234\") // Error: Expected a hex string\n * validateHexString(1234) // Error: Expected a string\n **/\nexport const validateHexString = (str: string): `0x${string}` => {\n if (typeof str !== \"string\") {\n throw new Error(\"Expected a string\")\n }\n\n if (str.startsWith(\"0x\")) {\n return str as `0x${string}`\n }\n throw new Error(\"Expected a hex string\")\n}\n"],"mappings":";AAAA,OAAO,eAAe;AAOtB,UAAU,IAAI,EAAE,QAAQ,MAAM,CAAC;AAE/B,IAAO,6BAAQ;;;ACTR,IAAM,mBAAmB,CAAC,QAAgB;AAC/C,MAAI,IAAI,SAAS,GAAG,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,GAAG;AACf;;;ACFO,IAAM,UAAU;AAAA,EACrB,IAAI,GAAW;AACb,WAAO,IAAI,KAAK,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,KAAK,GAAW;AACd,QAAI,MAAM,GAAI,QAAO;AACrB,WAAO,IAAI,KAAK,CAAC,KAAK;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAkB,QAAkB;AACtC,eAAW,KAAK,OAAQ,KAAI,IAAI,MAAO,SAAQ;AAC/C,WAAO;AAAA,EACT;AAAA,EACA,IAAI,UAAkB,QAAkB;AACtC,eAAW,KAAK,OAAQ,KAAI,IAAI,MAAO,SAAQ;AAC/C,WAAO;AAAA,EACT;AACF;;;AClBO,SAAS,WAOd;AACA,MAAI;AACJ,MAAI;AAEJ,MAAI,YAAY;AAChB,MAAI,aAAa;AACjB,MAAI,aAAa;AAEjB,QAAM,UAAU,IAAI,QAAW,CAAC,cAAc,gBAAgB;AAC5D,cAAU,CAAC,UAAU;AACnB,kBAAY;AACZ,mBAAa;AACb,mBAAa,KAAK;AAAA,IACpB;AACA,aAAS,CAAC,WAAW;AACnB,kBAAY;AACZ,mBAAa;AACb,kBAAY,MAAM;AAAA,IACpB;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,YAAY,MAAM;AAAA,IAClB,YAAY,MAAM;AAAA,EACpB;AACF;;;AC3CA,SAAS,QAAQ,cAAsD,MAAM,YAAY;AAQlF,IAAM,oBACX,CAAI,YACJ,CAAC,WACC,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,aAAa,OAAO,CAAC,CAAC;;;ACTjF,IAAM,aAAa;AACZ,IAAM,sBAAsB;AAW5B,IAAM,iBAAiB,CAC5B,KACA,SAAS,YACT,UAA6C,CAAC,GAC9C,SAAS,YACE;AACX,MAAI,QAAQ,QAAQ,QAAQ,OAAW,QAAO;AAC9C,MAAI,SAAS,WAAY,UAAS;AAElC,QAAM,QAAQ,IAAI,2BAAU,GAAG;AAE/B,QAAM,gBAAgB,IAAI,MAAM;AAEhC,MAAI,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,aAAa,EAAG,QAAO,KAAK,eAAe,aAAa,CAAC;AAGrF,QAAM,eAAe,MAAM,aAAa;AACxC,QAAM,YAAY,aAAa,UAAU,CAAC,IAAI,IAAI,aAAa,SAAS,EAAE;AAI1E,MAAI,iBAAiB;AAErB,QAAM,4BAA4B,IAAI,2BAAU,EAAE,EAAE;AAAA,IAClD,SAAS,YAAY,SAAS,YAAY;AAAA,EAC5C;AAEA,mBAAiB,eACd,aAAa,yBAAyB,EACtC,aAAa,EACb,UAAU,yBAAyB;AAGtC,QAAM,sBAAsB,IAAI,2BAAU,YAAY,SAAS,YAAY,SAAS,CAAC;AACrF,QAAM,2BAA2B,IAAI,2BAAU,EAAE,EAAE,IAAI,mBAAmB;AAC1E,MAAI,oBAAoB,GAAG,CAAC;AAC1B,qBAAiB,eACd,UAAU,wBAAwB,EAClC,aAAa,EACb,aAAa,wBAAwB;AAI1C,SAAO,KAAK,aAAa,QAAQ;AAAA;AAAA,IAE/B,UAAU,eAAe,IAAI,EAAE,GAAG,IAAI,IAAI,YAAY;AAAA;AAAA;AAAA,IAGtD,0BAA0B,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,eAAe,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,IAC3F,GAAG;AAAA,EACL,CAAC,EAAE,OAAO,eAAe,SAAS,CAAC;AACrC;;;ACjEO,IAAM,cAAc,CAAC,OAAe,UAAkB,YAAqB;AAChF,SAAO,KAAK,aAAa,QAAW;AAAA,IAClC,OAAO;AAAA,IACP;AAAA,IACA,iBAAiB,aAAa,QAAQ,iBAAiB;AAAA,IACvD,0BAA0B;AAAA,IAC1B,0BAA0B,UAAW,QAAQ,IAAI,IAAI,IAAK;AAAA,IAC1D,kBAAkB,UAAU,SAAS;AAAA,IACrC,UAAU,UAAU,YAAY;AAAA,EAClC,CAAC,EAAE,OAAO,KAAK;AACjB;;;ACVA,SAAS,YAAY,MAAM,KAAsB,IAAI,WAAW,WAAW,aAAa;AAoBjF,SAAS,aACd,SACA,UAA2B,CAAC,GACH;AACzB,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,QAAM,uBAAuB,MAC3B,KAAK,QAAQ,CAAC,EAAE;AAAA,IACd;AAAA,MACE,CAAC,UAAuB;AAAA,QACtB,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MAAW,CAAC,UACV,GAAgB;AAAA,QACd,QAAQ;AAAA,QACR,OAAO,WAAW,SAAS,KAAK,IAAI,gBAAgB,KAAK;AAAA,MAC3D,CAAC;AAAA,IACH;AAAA,EACF;AAEF,QAAM,UAAU,kBACZ,MAAM,GAAG,eAAe,EAAE,KAAK,UAAU,MAAM,qBAAqB,CAAC,CAAC,IACtE,qBAAqB;AAEzB,SAAO,QAAQ;AAAA,IACb,UAAuB;AAAA,MACrB,QAAQ;AAAA,IACV,CAAgB;AAAA,EAClB;AACF;AAEA,IAAM,kBAAkB,CAAC,WAAmC;AAAA,EAC1D,MAAM;AAAA,EACN,SAAS,uBAAuB,KAAK;AACvC;AAEA,IAAM,yBAAyB,CAAC,UAA2B;AACzD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT,WAAW,iBAAiB,OAAO;AACjC,WAAO,MAAM;AAAA,EACf,WAAW,SAAS,OAAO,UAAU,YAAY,aAAa,OAAO;AACnE,WAAQ,MAA8B;AAAA,EACxC;AACA,SAAO,OAAO,KAAK,KAAK;AAC1B;;;ACnEA,SAAS,OAAAA,MAAsB,aAAAC,kBAAiB;;;ACAhD,SAAS,eAAe;AACxB,SAAS,iBAAiB,sBAAsB,YAAY,eAAAC,oBAAmB;;;ACD/E,SAA0B,mBAAmB;AAE7C,IAAM,QAAQ,oBAAI,IAAqB;AAahC,IAAM,sBAAsB,CACjC,WACA,MACA,kBACA,aAAa,CAACC,UAAuB,KAAK,UAAUA,KAAI,MAC1C;AACd,QAAM,WAAW,GAAG,SAAS,IAAI,WAAW,IAAI,CAAC;AAEjD,MAAI,MAAM,IAAI,QAAQ,EAAG,QAAO,MAAM,IAAI,QAAQ;AAElD,QAAM,MAAM,iBAAiB,IAAI;AACjC,QAAM,YAAY,IAAI,KAAK,YAAY,EAAE,YAAY,GAAG,UAAU,KAAK,CAAC,CAAC;AAEzE,QAAM,IAAI,UAAU,SAAS;AAE7B,SAAO;AACT;;;ADgBO,IAAM,YAAY,CAAe;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa,CAACC,UAAS,KAAK,UAAUA,KAAI;AAC5C,MAAmE;AACjE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MACE,IAAI,WAAgC,CAAC,eAAe;AAClD,YAAM,aAAa,IAAI,gBAAgB;AAEvC,YAAM,SAAS,IAAI,gBAAqC;AAAA,QACtD,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAGD,YAAM,MAAM,OACT,KAAK,qBAA0C,OAAO,CAAC,EACvD,UAAU,UAAU;AAGvB,UAAI,UAAe;AAGnB,YAAM,MAAM,MAAM;AAChB,YAAI,WAAW,OAAO,QAAS;AAE/B,gBAAQ,MAAM,WAAW,MAAM,EAC5B,KAAK,CAAC,SAAS;AACd,cAAI,WAAW,OAAO,QAAS;AAC/B,iBAAO,KAAK,EAAE,QAAQ,UAAU,MAAM,OAAO,OAAU,CAAC;AAAA,QAC1D,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,cAAI,WAAW,OAAO,QAAS;AAC/B,iBAAO,KAAK,EAAE,QAAQ,SAAS,MAAM,QAAW,MAAM,CAAC;AAAA,QACzD,CAAC,EACA,QAAQ,MAAM;AACb,cAAI,WAAW,OAAO,QAAS;AAC/B,cAAI,gBAAiB,WAAU,WAAW,KAAK,eAAe;AAAA,QAChE,CAAC;AAAA,MACL;AAEA,UAAI;AAEJ,aAAO,MAAM;AACX,YAAI,YAAY;AAChB,YAAI,QAAS,cAAa,OAAO;AACjC,mBAAW,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAAA,MACtD;AAAA,IACF,CAAC,EAAE,KAAKC,aAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AAAA,IACxD;AAAA,EACF;AACF;;;ADtFO,IAAM,oBAAoB,CAC/B,WACkC;AAClC,QAAM,UACJ,OAAO,iBAAiB,SACpB,CAAC,IACA,CAAC,EAAE,QAAQ,WAAW,MAAM,OAAO,aAAa,CAAC;AAExD,SAAO,UAAU,MAAM,EAAE;AAAA,IACvBC,KAAI,CAAC,QAAiD;AACpD,cAAQ,IAAI,QAAQ;AAAA,QAClB,KAAK;AACH,iBAAO,EAAE,QAAQ,WAAW,MAAM,IAAI,KAAK;AAAA,QAC7C,KAAK;AACH,iBAAO,EAAE,QAAQ,WAAW,MAAM,IAAI,KAAK;AAAA,QAC7C,KAAK,SAAS;AACZ,gBAAM,MAAM,IAAI;AAChB,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO;AAAA,cACL,MAAM,KAAK,QAAQ;AAAA,cACnB,SAAS,KAAK,WAAW;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACDC,WAAU,GAAG,OAAO;AAAA,EACtB;AACF;;;AG/CO,SAAS,eACd,KACA,MAC+B;AAC/B,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,MAAI,QAAQ,KAAM,QAAO;AACzB,SAAO,QAAQ;AACjB;;;ACRO,IAAM,eAAe,CAAC,UAA4B;AACvD,SAAO,iBAAiB,SAAS,MAAM,SAAS;AAClD;;;ACFO,SAAS,UACd,OACA,MACc;AACd,MAAI,MAAM,SAAS,KAAK,MAAM,CAAC,aAAa,KAAM,QAAO;AACzD,SAAO;AACT;;;ACNO,IAAM,UAAU,CAAC,QAAyB;AAC/C,SAAO,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,SAAS,KAAK,WAAW,CAAC,KAAK,GAAG;AAC3D;;;ACFO,IAAM,WAAW,CAAC,UAAoC,OAAO,UAAU;;;ACAvE,IAAM,gBAAgB,CAAI,MAAoC,CAAC,CAAC;;;ACWhE,IAAM,gBAAgB,CAAC,UAAmB,UAC/C,iBAAiB,SAAS,MAAM,SAAS,MAAM,IAAI;;;ACV9C,IAAM,mBAAmB;AAEzB,IAAM,cAAc,CAAC,UAAuC;AACjE,SAAO,OAAO,UAAU,YAAY,iBAAiB,KAAK,KAAK;AACjE;;;ACEO,IAAM,WAAW,CAAI,UAC1B,UAAU,QAAQ,UAAU;;;ACRvB,IAAM,YAAY,CAAU,UACjC,CAAC,CAAC,UACD,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,OAAO,MAAM,SAAS;;;ACJxB,SAAS,eAAe;AAKjB,SAAS,UAAa,QAAoD;AAC/E,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,kBAAkB,QAAS,QAAO;AACtC,SACE,kBAAkB,UAClB,KAAK,OAAO,YAAY,KACxB,cAAc,UACd,KAAK,OAAO,QAAQ,KACpB,WAAW,UACX,KAAK,OAAO,KAAK,KACjB,aAAa,UACb,KAAK,OAAO,OAAO,KACnB,UAAU,UACV,KAAK,OAAO,IAAI,KAChB,UAAU,UACV,KAAK,OAAO,IAAI,KAChB,eAAe,UACf,KAAK,OAAO,SAAS,KACrB,iBAAiB,UACjB,KAAK,OAAO,WAAW,KACvB,YAAY,UACZ,OAAO,OAAO,MAAM,KACpB,cAAc,UACd,OAAO,OAAO,QAAQ;AAE1B;AAKA,SAAS,KAAK,OAA0D;AACtE,SAAO,OAAO,UAAU;AAC1B;AAKA,SAAS,OAAO,OAAkC;AAChD,SAAO,OAAO,UAAU;AAC1B;;;AC5CO,IAAM,WAAW,CAAI,UAA4C,QAAQ,KAAK;;;ACCrF,SAA0B,eAAAC,cAAa,WAAW;AAiB3C,IAAM,YAAY,CAAI,YAA4C;AACvE,MAAI;AAEJ,SAAO,CAAC,WACN,OAAO;AAAA,IACL,IAAI;AAAA,MACF,WAAW,MAAM;AACf,kBAAU,qBAAqB,QAAQ,OAAO;AAAA,MAChD;AAAA,MACA,aAAa,MAAM;AACjB,kBAAU;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,IACDA,aAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC;AAAA,EAC/C;AACJ;AAEA,IAAM,uBAAuB,CAAC,YAAiC,OAAe;AAC5E,QAAM,MAAM,WAAW,UAAU;AACjC,SAAO,MAAM,WAAW,MAAM,IAAI,YAAY,GAAG,EAAE;AACrD;;;ACjCO,SAAS,eAAe,QAAiB,eAA4C;AAC1F,MAAI,OAAO,WAAW,YAAY,OAAO,kBAAkB,SAAU;AAErE,QAAM,OAAO;AACb,QAAM,WAAW,KAAK;AACtB,QAAM,aAAa,QAAQ;AAE3B,SAAO,IAAI,2BAAU,MAAM,EAAE,aAAa,UAAU,EAAE,SAAS,EAAE;AACnE;;;ACbA,SAAS,qBAAqB;AAcvB,IAAM,oBAAoB,CAC/B,iBACqB;AACrB,MAAI,wBAAwB,cAAe,QAAO;AAElD,QAAM,UAAU,IAAI,cAAiB,CAAC;AAGtC,MAAI,UAAU,YAAY,GAAG;AAC3B,iBAAa;AAAA,MACX,CAAC,UAAU,QAAQ,KAAK,KAAK;AAAA,MAC7B,CAAC,UAAU,QAAQ,MAAM,KAAK;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AAGA,UAAQ,KAAK,YAAY;AACzB,SAAO;AACT;;;ACjCO,IAAM,QAAQ,CAAC,OACpB,IAAI,QAAc,CAAC,YAAY;AAC7B,MAAI,QAAQ,IAAI,aAAa,OAAQ,SAAQ;AAAA,MACxC,YAAW,SAAS,EAAE;AAC7B,CAAC;;;ACOI,SAAS,aAAgB,SAAqB;AACnD,QAAM,OAAO,CAAC,UAAa,QAAQ,KAAK,KAAK;AAC7C,QAAM,aAA4B,QAAQ,aAAa;AAEvD,SAAO,CAAC,MAAM,UAAU;AAC1B;;;ACPO,IAAM,iBAAiB,CAAC,QAAyB,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;;;ACTvF,IAAM,aAAa,CAAC,IAAY,WACrC,IAAI,QAAe,CAAC,GAAG,WAAW,WAAW,MAAM,OAAO,IAAI,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;;;ACI5E,SAAS,eAAe,QAAiB,eAA4C;AAC1F,MAAI,OAAO,WAAW,YAAY,OAAO,kBAAkB,SAAU;AAErE,QAAM,OAAO;AACb,QAAM,WAAW;AACjB,QAAM,aAAa,QAAQ;AAE3B,SAAO,IAAI,2BAAU,MAAM,EAAE,aAAa,UAAU,EAAE,SAAS,EAAE;AACnE;;;ACHO,IAAM,oBAAoB,CAAC,QAA+B;AAC/D,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,MAAI,IAAI,WAAW,IAAI,GAAG;AACxB,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,uBAAuB;AACzC;","names":["map","startWith","shareReplay","args","args","shareReplay","map","startWith","shareReplay"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@talismn/util",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"author": "Talisman",
|
|
5
5
|
"homepage": "https://talisman.xyz",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -21,13 +21,14 @@
|
|
|
21
21
|
"node": ">=20"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"bignumber.js": "^
|
|
25
|
-
"lodash-es": "4.
|
|
26
|
-
"rxjs": "
|
|
24
|
+
"bignumber.js": "^11.1.3",
|
|
25
|
+
"lodash-es": "4.18.1",
|
|
26
|
+
"rxjs": "7.8.2"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/lodash-es": "4.17.12",
|
|
30
|
-
"
|
|
30
|
+
"@types/node": "^24.5.1",
|
|
31
|
+
"typescript": "^6.0.3",
|
|
31
32
|
"@talismn/tsconfig": "0.0.4"
|
|
32
33
|
},
|
|
33
34
|
"peerDependencies": {
|