@talismn/util 0.5.1 → 0.5.4
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.
@@ -0,0 +1,25 @@
|
|
1
|
+
import { Observable } from "rxjs";
|
2
|
+
export type QueryStatus = "loading" | "loaded" | "error";
|
3
|
+
export type QueryResult<T, S extends QueryStatus = "loading" | "loaded" | "error"> = S extends "loading" ? {
|
4
|
+
status: "loading";
|
5
|
+
data: T | undefined;
|
6
|
+
error: undefined;
|
7
|
+
} : S extends "loaded" ? {
|
8
|
+
status: "loaded";
|
9
|
+
data: T;
|
10
|
+
error: undefined;
|
11
|
+
} : {
|
12
|
+
status: "error";
|
13
|
+
data: undefined;
|
14
|
+
error: unknown;
|
15
|
+
};
|
16
|
+
type QueryOptions<Output, Args> = {
|
17
|
+
namespace: string;
|
18
|
+
args: Args;
|
19
|
+
queryFn: (args: Args, signal: AbortSignal) => Promise<Output>;
|
20
|
+
defaultValue?: Output;
|
21
|
+
refreshInterval?: number;
|
22
|
+
serializer?: (args: Args) => string;
|
23
|
+
};
|
24
|
+
export declare const getQuery$: <Output, Args>({ namespace, args, queryFn, defaultValue, refreshInterval, serializer, }: QueryOptions<Output, Args>) => Observable<QueryResult<Output>>;
|
25
|
+
export {};
|
@@ -3,6 +3,7 @@
|
|
3
3
|
var tailwindMerge = require('tailwind-merge');
|
4
4
|
var rxjs = require('rxjs');
|
5
5
|
var BigNumber = require('bignumber.js');
|
6
|
+
var lodashEs = require('lodash-es');
|
6
7
|
|
7
8
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
8
9
|
|
@@ -387,6 +388,62 @@ const getGenericErrorMessage = error => {
|
|
387
388
|
return String(error) || "Unknown error";
|
388
389
|
};
|
389
390
|
|
391
|
+
const getQuery$ = ({
|
392
|
+
namespace,
|
393
|
+
args,
|
394
|
+
queryFn,
|
395
|
+
defaultValue,
|
396
|
+
refreshInterval,
|
397
|
+
serializer = args => JSON.stringify(args)
|
398
|
+
}) => {
|
399
|
+
return getSharedObservable(namespace, args, () => new rxjs.Observable(subscriber => {
|
400
|
+
const controller = new AbortController();
|
401
|
+
const result = new rxjs.BehaviorSubject({
|
402
|
+
status: "loading",
|
403
|
+
data: defaultValue,
|
404
|
+
error: undefined
|
405
|
+
});
|
406
|
+
|
407
|
+
// result subscription
|
408
|
+
const sub = result.pipe(rxjs.distinctUntilChanged(lodashEs.isEqual)).subscribe(subscriber);
|
409
|
+
|
410
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
411
|
+
let timeout = null;
|
412
|
+
|
413
|
+
// fetch result subscription
|
414
|
+
const run = () => {
|
415
|
+
if (controller.signal.aborted) return;
|
416
|
+
queryFn(args, controller.signal).then(data => {
|
417
|
+
if (controller.signal.aborted) return;
|
418
|
+
result.next({
|
419
|
+
status: "loaded",
|
420
|
+
data,
|
421
|
+
error: undefined
|
422
|
+
});
|
423
|
+
}).catch(error => {
|
424
|
+
if (controller.signal.aborted) return;
|
425
|
+
result.next({
|
426
|
+
status: "error",
|
427
|
+
data: undefined,
|
428
|
+
error
|
429
|
+
});
|
430
|
+
}).finally(() => {
|
431
|
+
if (controller.signal.aborted) return;
|
432
|
+
if (refreshInterval) timeout = setTimeout(run, refreshInterval);
|
433
|
+
});
|
434
|
+
};
|
435
|
+
run();
|
436
|
+
return () => {
|
437
|
+
sub.unsubscribe();
|
438
|
+
if (timeout) clearTimeout(timeout);
|
439
|
+
controller.abort(new Error("getQuery$ unsubscribed"));
|
440
|
+
};
|
441
|
+
}).pipe(rxjs.shareReplay({
|
442
|
+
refCount: true,
|
443
|
+
bufferSize: 1
|
444
|
+
})), serializer);
|
445
|
+
};
|
446
|
+
|
390
447
|
exports.BigMath = BigMath;
|
391
448
|
exports.Deferred = Deferred;
|
392
449
|
exports.MAX_DECIMALS_FORMAT = MAX_DECIMALS_FORMAT;
|
@@ -398,6 +455,7 @@ exports.firstThenDebounce = firstThenDebounce;
|
|
398
455
|
exports.formatDecimals = formatDecimals;
|
399
456
|
exports.formatPrice = formatPrice;
|
400
457
|
exports.getLoadable$ = getLoadable$;
|
458
|
+
exports.getQuery$ = getQuery$;
|
401
459
|
exports.getSharedObservable = getSharedObservable;
|
402
460
|
exports.hasOwnProperty = hasOwnProperty;
|
403
461
|
exports.isAbortError = isAbortError;
|
@@ -3,6 +3,7 @@
|
|
3
3
|
var tailwindMerge = require('tailwind-merge');
|
4
4
|
var rxjs = require('rxjs');
|
5
5
|
var BigNumber = require('bignumber.js');
|
6
|
+
var lodashEs = require('lodash-es');
|
6
7
|
|
7
8
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
8
9
|
|
@@ -387,6 +388,62 @@ const getGenericErrorMessage = error => {
|
|
387
388
|
return String(error) || "Unknown error";
|
388
389
|
};
|
389
390
|
|
391
|
+
const getQuery$ = ({
|
392
|
+
namespace,
|
393
|
+
args,
|
394
|
+
queryFn,
|
395
|
+
defaultValue,
|
396
|
+
refreshInterval,
|
397
|
+
serializer = args => JSON.stringify(args)
|
398
|
+
}) => {
|
399
|
+
return getSharedObservable(namespace, args, () => new rxjs.Observable(subscriber => {
|
400
|
+
const controller = new AbortController();
|
401
|
+
const result = new rxjs.BehaviorSubject({
|
402
|
+
status: "loading",
|
403
|
+
data: defaultValue,
|
404
|
+
error: undefined
|
405
|
+
});
|
406
|
+
|
407
|
+
// result subscription
|
408
|
+
const sub = result.pipe(rxjs.distinctUntilChanged(lodashEs.isEqual)).subscribe(subscriber);
|
409
|
+
|
410
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
411
|
+
let timeout = null;
|
412
|
+
|
413
|
+
// fetch result subscription
|
414
|
+
const run = () => {
|
415
|
+
if (controller.signal.aborted) return;
|
416
|
+
queryFn(args, controller.signal).then(data => {
|
417
|
+
if (controller.signal.aborted) return;
|
418
|
+
result.next({
|
419
|
+
status: "loaded",
|
420
|
+
data,
|
421
|
+
error: undefined
|
422
|
+
});
|
423
|
+
}).catch(error => {
|
424
|
+
if (controller.signal.aborted) return;
|
425
|
+
result.next({
|
426
|
+
status: "error",
|
427
|
+
data: undefined,
|
428
|
+
error
|
429
|
+
});
|
430
|
+
}).finally(() => {
|
431
|
+
if (controller.signal.aborted) return;
|
432
|
+
if (refreshInterval) timeout = setTimeout(run, refreshInterval);
|
433
|
+
});
|
434
|
+
};
|
435
|
+
run();
|
436
|
+
return () => {
|
437
|
+
sub.unsubscribe();
|
438
|
+
if (timeout) clearTimeout(timeout);
|
439
|
+
controller.abort(new Error("getQuery$ unsubscribed"));
|
440
|
+
};
|
441
|
+
}).pipe(rxjs.shareReplay({
|
442
|
+
refCount: true,
|
443
|
+
bufferSize: 1
|
444
|
+
})), serializer);
|
445
|
+
};
|
446
|
+
|
390
447
|
exports.BigMath = BigMath;
|
391
448
|
exports.Deferred = Deferred;
|
392
449
|
exports.MAX_DECIMALS_FORMAT = MAX_DECIMALS_FORMAT;
|
@@ -398,6 +455,7 @@ exports.firstThenDebounce = firstThenDebounce;
|
|
398
455
|
exports.formatDecimals = formatDecimals;
|
399
456
|
exports.formatPrice = formatPrice;
|
400
457
|
exports.getLoadable$ = getLoadable$;
|
458
|
+
exports.getQuery$ = getQuery$;
|
401
459
|
exports.getSharedObservable = getSharedObservable;
|
402
460
|
exports.hasOwnProperty = hasOwnProperty;
|
403
461
|
exports.isAbortError = isAbortError;
|
package/dist/talismn-util.esm.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import { twMerge } from 'tailwind-merge';
|
2
|
-
import { concat, take, skip, debounceTime, shareReplay, Subject, tap, ReplaySubject, timer, switchMap, from, startWith, map, catchError, of } from 'rxjs';
|
2
|
+
import { concat, take, skip, debounceTime, shareReplay, Subject, tap, ReplaySubject, timer, switchMap, from, startWith, map, catchError, of, Observable, BehaviorSubject, distinctUntilChanged } from 'rxjs';
|
3
3
|
import BigNumber from 'bignumber.js';
|
4
|
+
import { isEqual } from 'lodash-es';
|
4
5
|
|
5
6
|
const addTrailingSlash = url => {
|
6
7
|
if (url.endsWith("/")) {
|
@@ -381,4 +382,60 @@ const getGenericErrorMessage = error => {
|
|
381
382
|
return String(error) || "Unknown error";
|
382
383
|
};
|
383
384
|
|
384
|
-
|
385
|
+
const getQuery$ = ({
|
386
|
+
namespace,
|
387
|
+
args,
|
388
|
+
queryFn,
|
389
|
+
defaultValue,
|
390
|
+
refreshInterval,
|
391
|
+
serializer = args => JSON.stringify(args)
|
392
|
+
}) => {
|
393
|
+
return getSharedObservable(namespace, args, () => new Observable(subscriber => {
|
394
|
+
const controller = new AbortController();
|
395
|
+
const result = new BehaviorSubject({
|
396
|
+
status: "loading",
|
397
|
+
data: defaultValue,
|
398
|
+
error: undefined
|
399
|
+
});
|
400
|
+
|
401
|
+
// result subscription
|
402
|
+
const sub = result.pipe(distinctUntilChanged(isEqual)).subscribe(subscriber);
|
403
|
+
|
404
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
405
|
+
let timeout = null;
|
406
|
+
|
407
|
+
// fetch result subscription
|
408
|
+
const run = () => {
|
409
|
+
if (controller.signal.aborted) return;
|
410
|
+
queryFn(args, controller.signal).then(data => {
|
411
|
+
if (controller.signal.aborted) return;
|
412
|
+
result.next({
|
413
|
+
status: "loaded",
|
414
|
+
data,
|
415
|
+
error: undefined
|
416
|
+
});
|
417
|
+
}).catch(error => {
|
418
|
+
if (controller.signal.aborted) return;
|
419
|
+
result.next({
|
420
|
+
status: "error",
|
421
|
+
data: undefined,
|
422
|
+
error
|
423
|
+
});
|
424
|
+
}).finally(() => {
|
425
|
+
if (controller.signal.aborted) return;
|
426
|
+
if (refreshInterval) timeout = setTimeout(run, refreshInterval);
|
427
|
+
});
|
428
|
+
};
|
429
|
+
run();
|
430
|
+
return () => {
|
431
|
+
sub.unsubscribe();
|
432
|
+
if (timeout) clearTimeout(timeout);
|
433
|
+
controller.abort(new Error("getQuery$ unsubscribed"));
|
434
|
+
};
|
435
|
+
}).pipe(shareReplay({
|
436
|
+
refCount: true,
|
437
|
+
bufferSize: 1
|
438
|
+
})), serializer);
|
439
|
+
};
|
440
|
+
|
441
|
+
export { BigMath, Deferred, MAX_DECIMALS_FORMAT, REGEX_HEX_STRING, addTrailingSlash, classNames, cn, firstThenDebounce, formatDecimals, formatPrice, getLoadable$, getQuery$, getSharedObservable, hasOwnProperty, isAbortError, isArrayOf, isAscii, isBigInt, isBooleanTrue, isHexString, isNotNil, isPromise, isSubject, isTruthy, keepAlive, planckToTokens, replaySubjectFrom, sleep, splitSubject, throwAfter, tokensToPlanck, validateHexString };
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@talismn/util",
|
3
|
-
"version": "0.5.
|
3
|
+
"version": "0.5.4",
|
4
4
|
"author": "Talisman",
|
5
5
|
"homepage": "https://talisman.xyz",
|
6
6
|
"license": "GPL-3.0-or-later",
|
@@ -18,21 +18,23 @@
|
|
18
18
|
"/dist"
|
19
19
|
],
|
20
20
|
"engines": {
|
21
|
-
"node": ">=
|
21
|
+
"node": ">=20"
|
22
22
|
},
|
23
23
|
"dependencies": {
|
24
24
|
"bignumber.js": "^9.1.2",
|
25
25
|
"rxjs": "^7.8.1",
|
26
|
-
"tailwind-merge": "^2.5.4"
|
26
|
+
"tailwind-merge": "^2.5.4",
|
27
|
+
"lodash-es": "4.17.21"
|
27
28
|
},
|
28
29
|
"devDependencies": {
|
29
30
|
"@types/jest": "^29.5.14",
|
31
|
+
"@types/lodash-es": "4.17.12",
|
30
32
|
"eslint": "^8.57.1",
|
31
33
|
"jest": "^29.7.0",
|
32
34
|
"ts-jest": "^29.2.5",
|
33
35
|
"typescript": "^5.6.3",
|
34
|
-
"@talismn/
|
35
|
-
"@talismn/
|
36
|
+
"@talismn/eslint-config": "0.0.3",
|
37
|
+
"@talismn/tsconfig": "0.0.3"
|
36
38
|
},
|
37
39
|
"peerDependencies": {
|
38
40
|
"rxjs": ">= 7.8.1"
|