reactjrx 1.40.1 → 1.44.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +185 -122
- package/dist/index.d.ts +1 -1
- package/dist/index.js +186 -123
- package/dist/lib/queries/client/createClient.d.ts +12 -15
- package/dist/lib/queries/client/invalidation/invalidationClient.d.ts +0 -1
- package/dist/lib/queries/client/refetch/client.d.ts +5 -6
- package/dist/lib/queries/client/refetch/dispatchExternalRefetchToAllQueries.d.ts +3 -0
- package/dist/lib/queries/client/refetch/logger.d.ts +24 -0
- package/dist/lib/queries/client/refetch/markQueryAsStaleIfRefetch.d.ts +3 -0
- package/dist/lib/queries/client/store/createQueryStore.d.ts +1 -1
- package/dist/lib/queries/client/store/updateStoreWithNewQuery.d.ts +10 -0
- package/dist/lib/queries/client/triggers.d.ts +3 -12
- package/dist/lib/queries/client/types.d.ts +20 -3
- package/dist/lib/queries/react/Provider.d.ts +66 -2
- package/dist/lib/queries/react/triggers/activityTrigger.d.ts +2 -0
- package/dist/lib/queries/react/triggers/networkTrigger.d.ts +1 -0
- package/package.json +2 -2
- package/dist/lib/queries/client/store/updateStoreWithQuery.d.ts +0 -14
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useRef, useMemo, useCallback, useSyncExternalStore, useEffect, createContext, memo, useContext } from "react";
|
|
2
2
|
import { distinctUntilChanged, tap, finalize, catchError, EMPTY, Subject, identity, BehaviorSubject, of, zip, from, map, merge, throttleTime, switchMap, defer, iif, timer, throwError, scan, take, startWith, combineLatest, first, takeUntil, filter, concatMap as concatMap$1, mergeMap, fromEvent, skip, withLatestFrom, retry, shareReplay, endWith, delay, share, pairwise, NEVER, takeWhile } from "rxjs";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { retryWhen, concatMap, tap as tap$1 } from "rxjs/operators";
|
|
5
5
|
const useLiveRef = (value) => {
|
|
6
6
|
const ref = useRef(value);
|
|
@@ -470,7 +470,9 @@ const mergeResults = (stream$) => stream$.pipe(
|
|
|
470
470
|
status: "loading"
|
|
471
471
|
}
|
|
472
472
|
),
|
|
473
|
-
distinctUntilChanged(
|
|
473
|
+
distinctUntilChanged(
|
|
474
|
+
({ data: prevData, ...prev }, { data: currData, ...curr }) => shallowEqual(prev, curr) && shallowEqual(prevData, currData)
|
|
475
|
+
)
|
|
474
476
|
);
|
|
475
477
|
function useAsyncQuery(query, mapOperatorOrOptions, options = {}) {
|
|
476
478
|
const queryRef = useLiveRef(query);
|
|
@@ -595,27 +597,35 @@ function useAsyncQuery(query, mapOperatorOrOptions, options = {}) {
|
|
|
595
597
|
const Context = createContext({
|
|
596
598
|
client: null
|
|
597
599
|
});
|
|
600
|
+
const ClientEffect = ({
|
|
601
|
+
client
|
|
602
|
+
}) => {
|
|
603
|
+
useEffect(() => {
|
|
604
|
+
const destroy = client.start();
|
|
605
|
+
return () => {
|
|
606
|
+
destroy();
|
|
607
|
+
};
|
|
608
|
+
}, [client]);
|
|
609
|
+
return null;
|
|
610
|
+
};
|
|
598
611
|
const Provider = memo(
|
|
599
612
|
({
|
|
600
613
|
children,
|
|
601
614
|
client
|
|
602
615
|
}) => {
|
|
603
616
|
const value = useMemo(() => ({ client }), [client]);
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
[client]
|
|
609
|
-
);
|
|
610
|
-
return /* @__PURE__ */ jsx(Context.Provider, { value, children });
|
|
617
|
+
return /* @__PURE__ */ jsxs(Context.Provider, { value, children: [
|
|
618
|
+
/* @__PURE__ */ jsx(ClientEffect, { client: value.client }),
|
|
619
|
+
children
|
|
620
|
+
] });
|
|
611
621
|
}
|
|
612
622
|
);
|
|
613
|
-
const
|
|
623
|
+
const useQueryClient = () => {
|
|
614
624
|
const context = useContext(Context);
|
|
615
625
|
if (context === null) {
|
|
616
626
|
throw new Error("You forgot to register the provider");
|
|
617
627
|
}
|
|
618
|
-
return
|
|
628
|
+
return context.client;
|
|
619
629
|
};
|
|
620
630
|
const arrayEqual = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);
|
|
621
631
|
function isDefined(arg) {
|
|
@@ -628,10 +638,16 @@ const createActivityTrigger = (params$) => {
|
|
|
628
638
|
return shouldRunTrigger !== false ? merge(
|
|
629
639
|
fromEvent(document, "visibilitychange").pipe(
|
|
630
640
|
filter(() => !document.hidden),
|
|
631
|
-
map(() => ({
|
|
641
|
+
map(() => ({
|
|
642
|
+
type: "refetch",
|
|
643
|
+
ignoreStale: shouldRunTrigger === "always"
|
|
644
|
+
}))
|
|
632
645
|
),
|
|
633
646
|
fromEvent(window, "focus").pipe(
|
|
634
|
-
map(() => ({
|
|
647
|
+
map(() => ({
|
|
648
|
+
type: "refetch",
|
|
649
|
+
ignoreStale: shouldRunTrigger === "always"
|
|
650
|
+
}))
|
|
635
651
|
)
|
|
636
652
|
) : EMPTY;
|
|
637
653
|
})
|
|
@@ -642,7 +658,10 @@ const createNetworkTrigger = (params$) => {
|
|
|
642
658
|
switchMap(({ options: { refetchOnReconnect = true } }) => {
|
|
643
659
|
const shouldRunTrigger = typeof refetchOnReconnect === "function" ? refetchOnReconnect({}) : refetchOnReconnect;
|
|
644
660
|
return shouldRunTrigger !== false ? fromEvent(window, "online").pipe(
|
|
645
|
-
map(() => ({
|
|
661
|
+
map(() => ({
|
|
662
|
+
type: "refetch",
|
|
663
|
+
ignoreStale: shouldRunTrigger === "always"
|
|
664
|
+
}))
|
|
646
665
|
) : EMPTY;
|
|
647
666
|
})
|
|
648
667
|
);
|
|
@@ -675,7 +694,7 @@ function useQuery({
|
|
|
675
694
|
...options
|
|
676
695
|
}) {
|
|
677
696
|
const internalRefresh$ = useSubject();
|
|
678
|
-
const
|
|
697
|
+
const client = useQueryClient();
|
|
679
698
|
const params$ = useQueryParams({ queryFn, queryKey, ...options });
|
|
680
699
|
const result = useObserve(
|
|
681
700
|
() => {
|
|
@@ -704,18 +723,18 @@ function useQuery({
|
|
|
704
723
|
newKeyTrigger$,
|
|
705
724
|
newObservableObjectQuery$
|
|
706
725
|
);
|
|
707
|
-
const
|
|
708
|
-
internalRefresh$.current
|
|
726
|
+
const trigger$ = merge(
|
|
727
|
+
internalRefresh$.current,
|
|
709
728
|
merge(activityRefetch$, networkRefetch$).pipe(throttleTime(500))
|
|
710
729
|
);
|
|
711
730
|
return newQueryTrigger$.pipe(
|
|
712
731
|
withLatestFrom(key$),
|
|
713
732
|
switchMap(([, key]) => {
|
|
714
|
-
const { result$ } = client.query
|
|
733
|
+
const { result$ } = client.query({
|
|
715
734
|
key,
|
|
716
735
|
fn$,
|
|
717
736
|
options$,
|
|
718
|
-
|
|
737
|
+
trigger$
|
|
719
738
|
});
|
|
720
739
|
return result$.pipe(
|
|
721
740
|
scan(
|
|
@@ -752,7 +771,7 @@ function useQuery({
|
|
|
752
771
|
[client]
|
|
753
772
|
);
|
|
754
773
|
const refetch = useCallback(() => {
|
|
755
|
-
internalRefresh$.current.next();
|
|
774
|
+
internalRefresh$.current.next({ type: "refetch", ignoreStale: true });
|
|
756
775
|
}, [client]);
|
|
757
776
|
return { ...result, refetch };
|
|
758
777
|
}
|
|
@@ -853,7 +872,7 @@ function createLogger(env) {
|
|
|
853
872
|
};
|
|
854
873
|
return _logger;
|
|
855
874
|
}
|
|
856
|
-
const Logger = createLogger("
|
|
875
|
+
const Logger = createLogger("production");
|
|
857
876
|
const logger$3 = Logger.namespace("store");
|
|
858
877
|
const createDebugger = (store$) => {
|
|
859
878
|
return store$.pipe(
|
|
@@ -934,7 +953,12 @@ const createQueryStore = () => {
|
|
|
934
953
|
}));
|
|
935
954
|
};
|
|
936
955
|
};
|
|
937
|
-
const
|
|
956
|
+
const start = () => {
|
|
957
|
+
const debugger$ = createDebugger(store$);
|
|
958
|
+
return () => {
|
|
959
|
+
debugger$.unsubscribe();
|
|
960
|
+
};
|
|
961
|
+
};
|
|
938
962
|
return {
|
|
939
963
|
set: setValue,
|
|
940
964
|
get: getValue,
|
|
@@ -954,15 +978,10 @@ const createQueryStore = () => {
|
|
|
954
978
|
queryTriggerSubject.next(event);
|
|
955
979
|
},
|
|
956
980
|
size: () => store.size,
|
|
957
|
-
|
|
958
|
-
debugger$.unsubscribe();
|
|
959
|
-
queryEventSubject.complete();
|
|
960
|
-
queryTriggerSubject.complete();
|
|
961
|
-
}
|
|
981
|
+
start
|
|
962
982
|
};
|
|
963
983
|
};
|
|
964
984
|
const createQueryTrigger = ({
|
|
965
|
-
refetch$,
|
|
966
985
|
options$,
|
|
967
986
|
queryStore,
|
|
968
987
|
key
|
|
@@ -980,12 +999,6 @@ const createQueryTrigger = ({
|
|
|
980
999
|
filter((event) => key === event.key),
|
|
981
1000
|
map(({ trigger: trigger2 }) => trigger2)
|
|
982
1001
|
),
|
|
983
|
-
refetch$.pipe(
|
|
984
|
-
map((event) => ({
|
|
985
|
-
...event,
|
|
986
|
-
type: "refetch"
|
|
987
|
-
}))
|
|
988
|
-
),
|
|
989
1002
|
enabledTrigger$.pipe(
|
|
990
1003
|
map(() => ({
|
|
991
1004
|
type: "enabled",
|
|
@@ -1000,12 +1013,18 @@ const deduplicate = (key, queryStore) => (source) => {
|
|
|
1000
1013
|
return defer(() => {
|
|
1001
1014
|
var _a;
|
|
1002
1015
|
const sourceFromStore = (_a = queryStore.get(key)) == null ? void 0 : _a.deduplication_fn;
|
|
1016
|
+
if (sourceFromStore)
|
|
1017
|
+
return sourceFromStore;
|
|
1018
|
+
let sourceToDeduplicate;
|
|
1003
1019
|
const deleteFromStore = () => {
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1020
|
+
var _a2;
|
|
1021
|
+
if (((_a2 = queryStore.get(key)) == null ? void 0 : _a2.deduplication_fn) === sourceToDeduplicate) {
|
|
1022
|
+
queryStore.update(key, {
|
|
1023
|
+
deduplication_fn: void 0
|
|
1024
|
+
});
|
|
1025
|
+
}
|
|
1007
1026
|
};
|
|
1008
|
-
|
|
1027
|
+
sourceToDeduplicate = source.pipe(
|
|
1009
1028
|
/**
|
|
1010
1029
|
* Ideally we would want to remove the query from the store only on finalize,
|
|
1011
1030
|
* which means whenever the query complete or error. Unfortunately finalize is
|
|
@@ -1025,12 +1044,10 @@ const deduplicate = (key, queryStore) => (source) => {
|
|
|
1025
1044
|
bufferSize: 1
|
|
1026
1045
|
})
|
|
1027
1046
|
);
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
}
|
|
1033
|
-
return finalSource;
|
|
1047
|
+
queryStore.update(key, {
|
|
1048
|
+
deduplication_fn: sourceToDeduplicate
|
|
1049
|
+
});
|
|
1050
|
+
return sourceToDeduplicate;
|
|
1034
1051
|
});
|
|
1035
1052
|
};
|
|
1036
1053
|
const notifyQueryResult = (options$) => (stream$) => stream$.pipe(
|
|
@@ -1154,8 +1171,9 @@ const createQueryFetch = ({
|
|
|
1154
1171
|
const query = queryStore.get(serializedKey);
|
|
1155
1172
|
const cacheResult = query == null ? void 0 : query.cache_fnResult;
|
|
1156
1173
|
const hasCache = !!cacheResult;
|
|
1174
|
+
const ignoreStale = trigger2.type === "refetch" && trigger2.ignoreStale;
|
|
1157
1175
|
if (hasCache) {
|
|
1158
|
-
if (!(query == null ? void 0 : query.isStale) && !
|
|
1176
|
+
if (!(query == null ? void 0 : query.isStale) && !ignoreStale) {
|
|
1159
1177
|
return of({
|
|
1160
1178
|
fetchStatus: "idle",
|
|
1161
1179
|
status: "success",
|
|
@@ -1183,6 +1201,12 @@ const compareKeys = (keyA, keyB, { exact = false } = {}) => {
|
|
|
1183
1201
|
return keyA.reduce((acc, value, index) => {
|
|
1184
1202
|
if (!acc)
|
|
1185
1203
|
return false;
|
|
1204
|
+
if (value === void 0) {
|
|
1205
|
+
const hasNextItemInLineNotUndefined = keyA.slice(index, keyA.length - 1).some((item) => item !== void 0);
|
|
1206
|
+
if (!hasNextItemInLineNotUndefined) {
|
|
1207
|
+
return true;
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1186
1210
|
return serializeObject(value) === serializeObject(keyB[index]);
|
|
1187
1211
|
}, true);
|
|
1188
1212
|
};
|
|
@@ -1219,6 +1243,9 @@ const createInvalidationClient = ({
|
|
|
1219
1243
|
keysToRefetch = Array.from(queryStore.keys());
|
|
1220
1244
|
}
|
|
1221
1245
|
keysToRefetch.forEach((key) => {
|
|
1246
|
+
queryStore.update(key, {
|
|
1247
|
+
deduplication_fn: void 0
|
|
1248
|
+
});
|
|
1222
1249
|
queryStore.dispatchQueryTrigger({
|
|
1223
1250
|
key,
|
|
1224
1251
|
trigger: { ignoreStale: true, type: "refetch" }
|
|
@@ -1226,15 +1253,10 @@ const createInvalidationClient = ({
|
|
|
1226
1253
|
});
|
|
1227
1254
|
};
|
|
1228
1255
|
return {
|
|
1229
|
-
invalidateQueries
|
|
1230
|
-
destroy: () => {
|
|
1231
|
-
}
|
|
1256
|
+
invalidateQueries
|
|
1232
1257
|
};
|
|
1233
1258
|
};
|
|
1234
|
-
const
|
|
1235
|
-
const createRefetchClient = ({
|
|
1236
|
-
queryStore
|
|
1237
|
-
}) => {
|
|
1259
|
+
const createRefetchClient = (_) => {
|
|
1238
1260
|
const pipeQueryResult = ({
|
|
1239
1261
|
options$
|
|
1240
1262
|
}) => (stream) => {
|
|
@@ -1264,28 +1286,11 @@ const createRefetchClient = ({
|
|
|
1264
1286
|
)
|
|
1265
1287
|
);
|
|
1266
1288
|
};
|
|
1267
|
-
const
|
|
1268
|
-
key
|
|
1269
|
-
}) => (stream) => {
|
|
1270
|
-
return merge(
|
|
1271
|
-
stream.pipe(
|
|
1272
|
-
tap(({ ignoreStale }) => {
|
|
1273
|
-
const query = queryStore.get(key);
|
|
1274
|
-
if (query && ignoreStale && !query.isStale) {
|
|
1275
|
-
logger$1.log(key, "marked stale by trigger!");
|
|
1276
|
-
queryStore.update(key, {
|
|
1277
|
-
isStale: true
|
|
1278
|
-
});
|
|
1279
|
-
}
|
|
1280
|
-
})
|
|
1281
|
-
)
|
|
1282
|
-
);
|
|
1289
|
+
const refetchQueries = (_2) => {
|
|
1283
1290
|
};
|
|
1284
1291
|
return {
|
|
1285
1292
|
pipeQueryResult,
|
|
1286
|
-
|
|
1287
|
-
destroy: () => {
|
|
1288
|
-
}
|
|
1293
|
+
refetchQueries
|
|
1289
1294
|
};
|
|
1290
1295
|
};
|
|
1291
1296
|
const difference = (a, b) => a.filter((element) => !b.includes(element));
|
|
@@ -1451,30 +1456,33 @@ const getInitialQueryEntity = ({ key }) => ({
|
|
|
1451
1456
|
queryKey: key,
|
|
1452
1457
|
runners: []
|
|
1453
1458
|
});
|
|
1454
|
-
const
|
|
1459
|
+
const updateStoreWithNewQuery = ({
|
|
1455
1460
|
queryStore,
|
|
1456
1461
|
serializedKey,
|
|
1457
1462
|
runner$,
|
|
1463
|
+
options$,
|
|
1458
1464
|
key
|
|
1459
1465
|
}) => (stream) => stream.pipe(
|
|
1460
|
-
|
|
1466
|
+
withLatestFrom(options$),
|
|
1467
|
+
map(([trigger2, options]) => {
|
|
1461
1468
|
if (key.length === 0)
|
|
1462
|
-
return [
|
|
1463
|
-
|
|
1469
|
+
return [trigger2, void 0];
|
|
1470
|
+
if (trigger2.type !== "initial")
|
|
1471
|
+
return [trigger2, void 0];
|
|
1464
1472
|
if (!queryStore.get(serializedKey)) {
|
|
1465
1473
|
queryStore.set(serializedKey, getInitialQueryEntity({ key }));
|
|
1466
1474
|
} else {
|
|
1467
1475
|
queryStore.update(serializedKey, {
|
|
1468
1476
|
queryKey: key,
|
|
1469
|
-
...
|
|
1477
|
+
...options.markStale && {
|
|
1470
1478
|
isStale: true
|
|
1471
1479
|
}
|
|
1472
1480
|
});
|
|
1473
1481
|
}
|
|
1474
|
-
return [
|
|
1482
|
+
return [trigger2, queryStore.addRunner(serializedKey, runner$)];
|
|
1475
1483
|
})
|
|
1476
1484
|
);
|
|
1477
|
-
const logger = Logger.namespace("cache");
|
|
1485
|
+
const logger$1 = Logger.namespace("cache");
|
|
1478
1486
|
const createCacheClient = ({
|
|
1479
1487
|
queryStore
|
|
1480
1488
|
}) => {
|
|
@@ -1485,7 +1493,7 @@ const createCacheClient = ({
|
|
|
1485
1493
|
const serializedKey = serializeKey(queryKey);
|
|
1486
1494
|
if (queryKey.length === 0)
|
|
1487
1495
|
return;
|
|
1488
|
-
logger.log("set cache for query", serializeKey);
|
|
1496
|
+
logger$1.log("set cache for query", serializeKey);
|
|
1489
1497
|
if (!queryStore.get(serializedKey)) {
|
|
1490
1498
|
queryStore.set(serializedKey, getInitialQueryEntity({ key: queryKey }));
|
|
1491
1499
|
}
|
|
@@ -1518,47 +1526,107 @@ const createCacheClient = ({
|
|
|
1518
1526
|
setQueryData
|
|
1519
1527
|
};
|
|
1520
1528
|
};
|
|
1529
|
+
const logger = Logger.namespace("refetch");
|
|
1530
|
+
const markQueryAsStaleIfRefetch = ({
|
|
1531
|
+
key,
|
|
1532
|
+
serializedKey,
|
|
1533
|
+
queryStore
|
|
1534
|
+
}) => (stream) => {
|
|
1535
|
+
return stream.pipe(
|
|
1536
|
+
tap((trigger2) => {
|
|
1537
|
+
if (trigger2.type !== "refetch")
|
|
1538
|
+
return;
|
|
1539
|
+
const query = queryStore.get(serializedKey);
|
|
1540
|
+
if (query && trigger2.ignoreStale && !query.isStale) {
|
|
1541
|
+
logger.log(key, "marked stale by trigger!");
|
|
1542
|
+
queryStore.update(serializedKey, {
|
|
1543
|
+
isStale: true
|
|
1544
|
+
});
|
|
1545
|
+
}
|
|
1546
|
+
})
|
|
1547
|
+
);
|
|
1548
|
+
};
|
|
1549
|
+
const dispatchExternalRefetchToAllQueries = ({
|
|
1550
|
+
queryStore,
|
|
1551
|
+
serializedKey
|
|
1552
|
+
}) => (stream) => stream.pipe(
|
|
1553
|
+
tap((trigger2) => {
|
|
1554
|
+
if (trigger2.type === "refetch") {
|
|
1555
|
+
queryStore.update(serializedKey, {
|
|
1556
|
+
deduplication_fn: void 0
|
|
1557
|
+
});
|
|
1558
|
+
queryStore.dispatchQueryTrigger({
|
|
1559
|
+
key: serializedKey,
|
|
1560
|
+
trigger: trigger2
|
|
1561
|
+
});
|
|
1562
|
+
}
|
|
1563
|
+
}),
|
|
1564
|
+
filter((trigger2) => trigger2.type !== "refetch")
|
|
1565
|
+
);
|
|
1521
1566
|
const createClient = () => {
|
|
1522
1567
|
const queryStore = createQueryStore();
|
|
1523
1568
|
const invalidationClient = createInvalidationClient({ queryStore });
|
|
1524
1569
|
const cacheClient = createCacheClient({ queryStore });
|
|
1525
|
-
const refetchClient = createRefetchClient(
|
|
1526
|
-
|
|
1570
|
+
const refetchClient = createRefetchClient();
|
|
1571
|
+
let hasCalledStart = false;
|
|
1572
|
+
const query = ({
|
|
1527
1573
|
key,
|
|
1528
1574
|
fn$: maybeFn$,
|
|
1529
1575
|
fn: maybeFn,
|
|
1530
|
-
|
|
1576
|
+
trigger$: externalTrigger$ = new Subject(),
|
|
1531
1577
|
options$ = new BehaviorSubject({})
|
|
1532
1578
|
}) => {
|
|
1579
|
+
if (!hasCalledStart) {
|
|
1580
|
+
throw new Error("You forgot to start client");
|
|
1581
|
+
}
|
|
1533
1582
|
const serializedKey = serializeKey(key);
|
|
1534
|
-
const internalRefetch$ = new Subject();
|
|
1535
1583
|
const fn$ = maybeFn$ ?? (maybeFn ? of(maybeFn) : NEVER);
|
|
1536
|
-
Logger.log("query$
|
|
1584
|
+
Logger.log("query$)", serializedKey);
|
|
1537
1585
|
const runner$ = options$.pipe(map((options) => ({ options })));
|
|
1538
1586
|
let deleteRunner = () => {
|
|
1539
1587
|
};
|
|
1540
|
-
const
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1588
|
+
const trigger$ = merge(
|
|
1589
|
+
externalTrigger$.pipe(
|
|
1590
|
+
dispatchExternalRefetchToAllQueries({
|
|
1591
|
+
queryStore,
|
|
1592
|
+
serializedKey
|
|
1593
|
+
})
|
|
1594
|
+
),
|
|
1595
|
+
createQueryTrigger({
|
|
1596
|
+
options$,
|
|
1597
|
+
key: serializedKey,
|
|
1598
|
+
queryStore
|
|
1599
|
+
})
|
|
1600
|
+
).pipe(share());
|
|
1601
|
+
const result$ = merge(
|
|
1602
|
+
of({
|
|
1603
|
+
type: "initial"
|
|
1604
|
+
}),
|
|
1605
|
+
trigger$
|
|
1606
|
+
).pipe(
|
|
1607
|
+
updateStoreWithNewQuery({
|
|
1554
1608
|
key,
|
|
1555
1609
|
queryStore,
|
|
1556
1610
|
runner$,
|
|
1557
|
-
serializedKey
|
|
1611
|
+
serializedKey,
|
|
1612
|
+
options$
|
|
1558
1613
|
}),
|
|
1559
1614
|
map(([value, deleteRunnerFn]) => {
|
|
1560
|
-
|
|
1561
|
-
|
|
1615
|
+
if (deleteRunnerFn) {
|
|
1616
|
+
deleteRunner = deleteRunnerFn;
|
|
1617
|
+
}
|
|
1618
|
+
return value;
|
|
1619
|
+
}),
|
|
1620
|
+
markQueryAsStaleIfRefetch({
|
|
1621
|
+
key,
|
|
1622
|
+
options$,
|
|
1623
|
+
queryStore,
|
|
1624
|
+
serializedKey
|
|
1625
|
+
}),
|
|
1626
|
+
withLatestFrom(fn$, options$),
|
|
1627
|
+
map(([trigger2, fn, options]) => ({ trigger: trigger2, fn, options })),
|
|
1628
|
+
map((value) => {
|
|
1629
|
+
Logger.log(serializedKey, "query trigger", {
|
|
1562
1630
|
trigger: value.trigger,
|
|
1563
1631
|
options: value.options
|
|
1564
1632
|
});
|
|
@@ -1576,19 +1644,6 @@ const createClient = () => {
|
|
|
1576
1644
|
trigger$
|
|
1577
1645
|
})
|
|
1578
1646
|
),
|
|
1579
|
-
// hooks
|
|
1580
|
-
switchMap(
|
|
1581
|
-
(result) => merge(
|
|
1582
|
-
of(result).pipe(
|
|
1583
|
-
refetchClient.pipeQueryResult({
|
|
1584
|
-
key: serializedKey,
|
|
1585
|
-
queryStore,
|
|
1586
|
-
options$,
|
|
1587
|
-
refetch$: internalRefetch$
|
|
1588
|
-
})
|
|
1589
|
-
)
|
|
1590
|
-
)
|
|
1591
|
-
),
|
|
1592
1647
|
mergeResults,
|
|
1593
1648
|
withLatestFrom(options$),
|
|
1594
1649
|
takeWhile(([result, options]) => {
|
|
@@ -1604,7 +1659,7 @@ const createClient = () => {
|
|
|
1604
1659
|
result$
|
|
1605
1660
|
};
|
|
1606
1661
|
};
|
|
1607
|
-
const
|
|
1662
|
+
const queryListener$ = createQueryListener(
|
|
1608
1663
|
queryStore,
|
|
1609
1664
|
(stream) => stream.pipe(
|
|
1610
1665
|
switchMap((key) => {
|
|
@@ -1622,17 +1677,25 @@ const createClient = () => {
|
|
|
1622
1677
|
);
|
|
1623
1678
|
})
|
|
1624
1679
|
)
|
|
1625
|
-
)
|
|
1680
|
+
);
|
|
1681
|
+
const start = () => {
|
|
1682
|
+
hasCalledStart = true;
|
|
1683
|
+
const queryListenerSub = queryListener$.subscribe();
|
|
1684
|
+
const started = [queryStore.start()];
|
|
1685
|
+
return () => {
|
|
1686
|
+
started.forEach((destroy) => {
|
|
1687
|
+
destroy();
|
|
1688
|
+
});
|
|
1689
|
+
queryListenerSub.unsubscribe();
|
|
1690
|
+
};
|
|
1691
|
+
};
|
|
1626
1692
|
return {
|
|
1627
|
-
|
|
1693
|
+
start,
|
|
1694
|
+
query,
|
|
1628
1695
|
queryStore,
|
|
1629
1696
|
...invalidationClient,
|
|
1630
1697
|
...cacheClient,
|
|
1631
|
-
...refetchClient
|
|
1632
|
-
destroy: () => {
|
|
1633
|
-
queryStore.destroy();
|
|
1634
|
-
queryListenerSub.unsubscribe();
|
|
1635
|
-
}
|
|
1698
|
+
...refetchClient
|
|
1636
1699
|
};
|
|
1637
1700
|
};
|
|
1638
1701
|
export {
|
|
@@ -1653,7 +1716,7 @@ export {
|
|
|
1653
1716
|
useObserveCallback,
|
|
1654
1717
|
usePersistSignalsContext,
|
|
1655
1718
|
useQuery,
|
|
1656
|
-
|
|
1719
|
+
useQueryClient,
|
|
1657
1720
|
useScopeSignals,
|
|
1658
1721
|
useSetSignal,
|
|
1659
1722
|
useSignal,
|
|
@@ -2,7 +2,6 @@ import { type Observable, BehaviorSubject } from "rxjs";
|
|
|
2
2
|
import { type QueryOptions, type QueryFn, type QueryTrigger, type QueryResult } from "./types";
|
|
3
3
|
import { type QueryKey } from "./keys/types";
|
|
4
4
|
export declare const createClient: () => {
|
|
5
|
-
destroy: () => void;
|
|
6
5
|
pipeQueryResult: <R extends Partial<QueryResult<T>>, T>({ options$ }: {
|
|
7
6
|
key: string;
|
|
8
7
|
queryStore: {
|
|
@@ -22,15 +21,14 @@ export declare const createClient: () => {
|
|
|
22
21
|
queryTrigger$: Observable<import("./store/createQueryStore").QueryTriggerEvent>;
|
|
23
22
|
dispatchQueryTrigger: (event: import("./store/createQueryStore").QueryTriggerEvent) => void;
|
|
24
23
|
size: () => number;
|
|
25
|
-
|
|
24
|
+
start: () => () => void;
|
|
26
25
|
};
|
|
27
26
|
options$: Observable<QueryOptions<T>>;
|
|
28
27
|
refetch$: Observable<QueryTrigger>;
|
|
29
28
|
}) => import("rxjs").MonoTypeOperatorFunction<R>;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}) => import("rxjs").MonoTypeOperatorFunction<QueryTrigger>;
|
|
29
|
+
refetchQueries: (_: {
|
|
30
|
+
queryKey: QueryKey;
|
|
31
|
+
}) => void;
|
|
34
32
|
setQueryData: ({ queryKey, updater }: {
|
|
35
33
|
queryKey: QueryKey;
|
|
36
34
|
updater: unknown;
|
|
@@ -40,16 +38,15 @@ export declare const createClient: () => {
|
|
|
40
38
|
exact?: boolean | undefined;
|
|
41
39
|
predicate?: ((storeObject: import("./store/createQueryStore").StoreObject<unknown>) => boolean) | undefined;
|
|
42
40
|
}) => void;
|
|
43
|
-
|
|
41
|
+
start: () => () => void;
|
|
42
|
+
query: <T_4>({ key, fn$: maybeFn$, fn: maybeFn, trigger$: externalTrigger$, options$ }: {
|
|
44
43
|
key: QueryKey;
|
|
45
|
-
fn?: QueryFn<
|
|
46
|
-
fn$?: Observable<QueryFn<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}> | undefined;
|
|
50
|
-
options$?: Observable<QueryOptions<T_5>> | undefined;
|
|
44
|
+
fn?: QueryFn<T_4> | undefined;
|
|
45
|
+
fn$?: Observable<QueryFn<T_4>> | undefined;
|
|
46
|
+
trigger$?: Observable<QueryTrigger> | undefined;
|
|
47
|
+
options$?: Observable<QueryOptions<T_4>> | undefined;
|
|
51
48
|
}) => {
|
|
52
|
-
result$: Observable<QueryResult<
|
|
49
|
+
result$: Observable<QueryResult<T_4>>;
|
|
53
50
|
};
|
|
54
51
|
queryStore: {
|
|
55
52
|
set: (key: string, value: import("./store/createQueryStore").StoreObject<unknown>) => void;
|
|
@@ -68,6 +65,6 @@ export declare const createClient: () => {
|
|
|
68
65
|
queryTrigger$: Observable<import("./store/createQueryStore").QueryTriggerEvent>;
|
|
69
66
|
dispatchQueryTrigger: (event: import("./store/createQueryStore").QueryTriggerEvent) => void;
|
|
70
67
|
size: () => number;
|
|
71
|
-
|
|
68
|
+
start: () => () => void;
|
|
72
69
|
};
|
|
73
70
|
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type MonoTypeOperatorFunction, type Observable } from "rxjs";
|
|
2
2
|
import { type createQueryStore } from "../store/createQueryStore";
|
|
3
3
|
import { type QueryTrigger, type QueryOptions, type QueryResult } from "../types";
|
|
4
|
-
|
|
4
|
+
import { type QueryKey } from "../keys/types";
|
|
5
|
+
export declare const createRefetchClient: (_: {
|
|
5
6
|
queryStore: ReturnType<typeof createQueryStore>;
|
|
6
7
|
}) => {
|
|
7
8
|
pipeQueryResult: <R extends Partial<QueryResult<T>>, T>({ options$ }: {
|
|
@@ -10,9 +11,7 @@ export declare const createRefetchClient: ({ queryStore }: {
|
|
|
10
11
|
options$: Observable<QueryOptions<T>>;
|
|
11
12
|
refetch$: Observable<QueryTrigger>;
|
|
12
13
|
}) => MonoTypeOperatorFunction<R>;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}) => MonoTypeOperatorFunction<QueryTrigger>;
|
|
17
|
-
destroy: () => void;
|
|
14
|
+
refetchQueries: (_: {
|
|
15
|
+
queryKey: QueryKey;
|
|
16
|
+
}) => void;
|
|
18
17
|
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type MonoTypeOperatorFunction } from "rxjs";
|
|
2
|
+
import { type QueryPipelineParams, type QueryTrigger } from "../types";
|
|
3
|
+
export declare const dispatchExternalRefetchToAllQueries: <R>({ queryStore, serializedKey }: Pick<QueryPipelineParams<R>, "queryStore" | "serializedKey">) => MonoTypeOperatorFunction<QueryTrigger>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const logger: {
|
|
2
|
+
namespaces: {
|
|
3
|
+
name: string;
|
|
4
|
+
style: {
|
|
5
|
+
backgroundColor: string;
|
|
6
|
+
color: string;
|
|
7
|
+
};
|
|
8
|
+
}[];
|
|
9
|
+
namespace(name: string, style?: {
|
|
10
|
+
backgroundColor: string;
|
|
11
|
+
color: string;
|
|
12
|
+
} | undefined): any;
|
|
13
|
+
printNamespaces(): {
|
|
14
|
+
namespaces: string;
|
|
15
|
+
styles: string[];
|
|
16
|
+
};
|
|
17
|
+
print(method: "log" | "warn" | "error" | "group", ...message: any[]): any;
|
|
18
|
+
printWithoutNamespace(method: "log" | "warn" | "error" | "group", ...message: any[]): any;
|
|
19
|
+
log(...message: any): any;
|
|
20
|
+
warn(...message: any): any;
|
|
21
|
+
error(...message: any): any;
|
|
22
|
+
group(...message: any): any;
|
|
23
|
+
groupEnd(): any;
|
|
24
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type MonoTypeOperatorFunction } from "rxjs";
|
|
2
|
+
import { type QueryPipelineParams, type QueryTrigger } from "../types";
|
|
3
|
+
export declare const markQueryAsStaleIfRefetch: <T>({ key, serializedKey, queryStore }: QueryPipelineParams<T>) => MonoTypeOperatorFunction<QueryTrigger>;
|