reactjrx 1.40.0 → 1.41.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.cjs CHANGED
@@ -242,7 +242,6 @@ const PersistSignals = react.memo(
242
242
  ).pipe(rxjs.map(() => true));
243
243
  return stream.pipe(
244
244
  rxjs.tap(() => {
245
- console.log("hydration complete");
246
245
  if (onReadyRef.current != null)
247
246
  onReadyRef.current();
248
247
  }),
@@ -598,27 +597,35 @@ function useAsyncQuery(query, mapOperatorOrOptions, options = {}) {
598
597
  const Context = react.createContext({
599
598
  client: null
600
599
  });
600
+ const ClientEffect = ({
601
+ client
602
+ }) => {
603
+ react.useEffect(() => {
604
+ const destroy = client.start();
605
+ return () => {
606
+ destroy();
607
+ };
608
+ }, [client]);
609
+ return null;
610
+ };
601
611
  const Provider = react.memo(
602
612
  ({
603
613
  children,
604
614
  client
605
615
  }) => {
606
616
  const value = react.useMemo(() => ({ client }), [client]);
607
- react.useEffect(
608
- () => () => {
609
- client.destroy();
610
- },
611
- [client]
612
- );
613
- return /* @__PURE__ */ jsxRuntime.jsx(Context.Provider, { value, children });
617
+ return /* @__PURE__ */ jsxRuntime.jsxs(Context.Provider, { value, children: [
618
+ /* @__PURE__ */ jsxRuntime.jsx(ClientEffect, { client: value.client }),
619
+ children
620
+ ] });
614
621
  }
615
622
  );
616
- const useReactJrxProvider = () => {
623
+ const useQueryClient = () => {
617
624
  const context = react.useContext(Context);
618
625
  if (context === null) {
619
626
  throw new Error("You forgot to register the provider");
620
627
  }
621
- return { ...context };
628
+ return context.client;
622
629
  };
623
630
  const arrayEqual = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);
624
631
  function isDefined(arg) {
@@ -678,7 +685,7 @@ function useQuery({
678
685
  ...options
679
686
  }) {
680
687
  const internalRefresh$ = useSubject();
681
- const { client } = useReactJrxProvider();
688
+ const client = useQueryClient();
682
689
  const params$ = useQueryParams({ queryFn, queryKey, ...options });
683
690
  const result = useObserve(
684
691
  () => {
@@ -856,7 +863,7 @@ function createLogger(env) {
856
863
  };
857
864
  return _logger;
858
865
  }
859
- const Logger = createLogger("development");
866
+ const Logger = createLogger("production");
860
867
  const logger$3 = Logger.namespace("store");
861
868
  const createDebugger = (store$) => {
862
869
  return store$.pipe(
@@ -937,7 +944,12 @@ const createQueryStore = () => {
937
944
  }));
938
945
  };
939
946
  };
940
- const debugger$ = createDebugger(store$);
947
+ const start = () => {
948
+ const debugger$ = createDebugger(store$);
949
+ return () => {
950
+ debugger$.unsubscribe();
951
+ };
952
+ };
941
953
  return {
942
954
  set: setValue,
943
955
  get: getValue,
@@ -957,11 +969,7 @@ const createQueryStore = () => {
957
969
  queryTriggerSubject.next(event);
958
970
  },
959
971
  size: () => store.size,
960
- destroy: () => {
961
- debugger$.unsubscribe();
962
- queryEventSubject.complete();
963
- queryTriggerSubject.complete();
964
- }
972
+ start
965
973
  };
966
974
  };
967
975
  const createQueryTrigger = ({
@@ -1053,17 +1061,17 @@ const registerResultInCache = ({
1053
1061
  serializedKey,
1054
1062
  options
1055
1063
  }) => (stream) => stream.pipe(
1056
- rxjs.tap((result) => {
1057
- queryStore.update(serializedKey, {
1058
- ...options.cacheTime !== 0 && {
1059
- cache_fnResult: { result }
1060
- }
1061
- });
1064
+ rxjs.tap(({ data }) => {
1065
+ if (data == null ? void 0 : data.result) {
1066
+ const result = data == null ? void 0 : data.result;
1067
+ queryStore.update(serializedKey, {
1068
+ ...options.cacheTime !== 0 && {
1069
+ cache_fnResult: { result }
1070
+ }
1071
+ });
1072
+ }
1062
1073
  })
1063
1074
  );
1064
- const mapWithComplete = (mapFn) => (stream) => {
1065
- return stream.pipe(rxjs.map(mapFn({ isComplete: false })));
1066
- };
1067
1075
  const createQueryFetch = ({
1068
1076
  options$,
1069
1077
  options,
@@ -1097,12 +1105,8 @@ const createQueryFetch = ({
1097
1105
  lastFetchedAt: (/* @__PURE__ */ new Date()).getTime()
1098
1106
  });
1099
1107
  }),
1100
- registerResultInCache({ serializedKey, options, queryStore }),
1101
- mapWithComplete(({ isComplete }) => (result) => ({
1108
+ rxjs.map((result) => ({
1102
1109
  status: "success",
1103
- ...isComplete && {
1104
- fetchStatus: "idle"
1105
- },
1106
1110
  data: { result },
1107
1111
  error: void 0
1108
1112
  })),
@@ -1121,7 +1125,8 @@ const createQueryFetch = ({
1121
1125
  error
1122
1126
  });
1123
1127
  }),
1124
- notifyQueryResult(options$)
1128
+ notifyQueryResult(options$),
1129
+ registerResultInCache({ serializedKey, options, queryStore })
1125
1130
  );
1126
1131
  const newCache$ = queryStore.queryEvent$.pipe(
1127
1132
  rxjs.filter(
@@ -1189,6 +1194,12 @@ const compareKeys = (keyA, keyB, { exact = false } = {}) => {
1189
1194
  return keyA.reduce((acc, value, index) => {
1190
1195
  if (!acc)
1191
1196
  return false;
1197
+ if (value === void 0) {
1198
+ const hasNextItemInLineNotUndefined = keyA.slice(index, keyA.length - 1).some((item) => item !== void 0);
1199
+ if (!hasNextItemInLineNotUndefined) {
1200
+ return true;
1201
+ }
1202
+ }
1192
1203
  return serializeObject(value) === serializeObject(keyB[index]);
1193
1204
  }, true);
1194
1205
  };
@@ -1232,9 +1243,7 @@ const createInvalidationClient = ({
1232
1243
  });
1233
1244
  };
1234
1245
  return {
1235
- invalidateQueries,
1236
- destroy: () => {
1237
- }
1246
+ invalidateQueries
1238
1247
  };
1239
1248
  };
1240
1249
  const logger$1 = Logger.namespace("refetch");
@@ -1289,9 +1298,7 @@ const createRefetchClient = ({
1289
1298
  };
1290
1299
  return {
1291
1300
  pipeQueryResult,
1292
- pipeQueryTrigger,
1293
- destroy: () => {
1294
- }
1301
+ pipeQueryTrigger
1295
1302
  };
1296
1303
  };
1297
1304
  const difference = (a, b) => a.filter((element) => !b.includes(element));
@@ -1309,11 +1316,9 @@ const createQueryListener = (store, onQuery) => store.store$.pipe(
1309
1316
  );
1310
1317
  return rxjs.merge(rxjs.NEVER, rxjs.of(key)).pipe(
1311
1318
  rxjs.tap(() => {
1312
- console.log("QUERY", key, "in");
1313
1319
  }),
1314
1320
  onQuery,
1315
1321
  rxjs.finalize(() => {
1316
- console.log("QUERY", key, "complete");
1317
1322
  }),
1318
1323
  rxjs.takeUntil(deleted$)
1319
1324
  );
@@ -1459,13 +1464,15 @@ const getInitialQueryEntity = ({ key }) => ({
1459
1464
  queryKey: key,
1460
1465
  runners: []
1461
1466
  });
1462
- const updateStoreWithQuery = ({
1467
+ const updateStoreWithNewQuery = ({
1463
1468
  queryStore,
1464
1469
  serializedKey,
1465
1470
  runner$,
1471
+ options$,
1466
1472
  key
1467
1473
  }) => (stream) => stream.pipe(
1468
- rxjs.map((value) => {
1474
+ rxjs.withLatestFrom(options$),
1475
+ rxjs.map(([value, options]) => {
1469
1476
  if (key.length === 0)
1470
1477
  return [value, () => {
1471
1478
  }];
@@ -1474,7 +1481,7 @@ const updateStoreWithQuery = ({
1474
1481
  } else {
1475
1482
  queryStore.update(serializedKey, {
1476
1483
  queryKey: key,
1477
- ...value.options.markStale && {
1484
+ ...options.markStale && {
1478
1485
  isStale: true
1479
1486
  }
1480
1487
  });
@@ -1541,7 +1548,7 @@ const createClient = () => {
1541
1548
  const serializedKey = serializeKey(key);
1542
1549
  const internalRefetch$ = new rxjs.Subject();
1543
1550
  const fn$ = maybeFn$ ?? (maybeFn ? rxjs.of(maybeFn) : rxjs.NEVER);
1544
- console.log("query$()", serializedKey);
1551
+ Logger.log("query$()", serializedKey);
1545
1552
  const runner$ = options$.pipe(rxjs.map((options) => ({ options })));
1546
1553
  let deleteRunner = () => {
1547
1554
  };
@@ -1555,18 +1562,26 @@ const createClient = () => {
1555
1562
  key: serializedKey,
1556
1563
  queryStore
1557
1564
  }).pipe(refetchClient.pipeQueryTrigger({ options$, key: serializedKey }));
1558
- const result$ = rxjs.merge(initialTrigger$, trigger$).pipe(
1565
+ const result$ = rxjs.merge(
1566
+ initialTrigger$.pipe(
1567
+ updateStoreWithNewQuery({
1568
+ key,
1569
+ queryStore,
1570
+ runner$,
1571
+ serializedKey,
1572
+ options$
1573
+ }),
1574
+ rxjs.map(([value, deleteRunnerFn]) => {
1575
+ deleteRunner = deleteRunnerFn;
1576
+ return value;
1577
+ })
1578
+ ),
1579
+ trigger$
1580
+ ).pipe(
1559
1581
  rxjs.withLatestFrom(fn$, options$),
1560
1582
  rxjs.map(([trigger2, fn, options]) => ({ trigger: trigger2, fn, options })),
1561
- updateStoreWithQuery({
1562
- key,
1563
- queryStore,
1564
- runner$,
1565
- serializedKey
1566
- }),
1567
- rxjs.map(([value, deleteRunnerFn]) => {
1568
- deleteRunner = deleteRunnerFn;
1569
- console.log("reactjrx", serializedKey, "query trigger", {
1583
+ rxjs.map((value) => {
1584
+ Logger.log("reactjrx", serializedKey, "query trigger", {
1570
1585
  trigger: value.trigger,
1571
1586
  options: value.options
1572
1587
  });
@@ -1604,9 +1619,6 @@ const createClient = () => {
1604
1619
  return !shouldStop;
1605
1620
  }, true),
1606
1621
  rxjs.map(([result]) => result),
1607
- rxjs.tap((result) => {
1608
- console.log("result", result);
1609
- }),
1610
1622
  rxjs.finalize(() => {
1611
1623
  deleteRunner();
1612
1624
  })
@@ -1615,7 +1627,7 @@ const createClient = () => {
1615
1627
  result$
1616
1628
  };
1617
1629
  };
1618
- const queryListenerSub = createQueryListener(
1630
+ const queryListener$ = createQueryListener(
1619
1631
  queryStore,
1620
1632
  (stream) => stream.pipe(
1621
1633
  rxjs.switchMap((key) => {
@@ -1633,17 +1645,24 @@ const createClient = () => {
1633
1645
  );
1634
1646
  })
1635
1647
  )
1636
- ).subscribe();
1648
+ );
1649
+ const start = () => {
1650
+ const queryListenerSub = queryListener$.subscribe();
1651
+ const started = [queryStore.start()];
1652
+ return () => {
1653
+ started.forEach((destroy) => {
1654
+ destroy();
1655
+ });
1656
+ queryListenerSub.unsubscribe();
1657
+ };
1658
+ };
1637
1659
  return {
1660
+ start,
1638
1661
  query$,
1639
1662
  queryStore,
1640
1663
  ...invalidationClient,
1641
1664
  ...cacheClient,
1642
- ...refetchClient,
1643
- destroy: () => {
1644
- queryStore.destroy();
1645
- queryListenerSub.unsubscribe();
1646
- }
1665
+ ...refetchClient
1647
1666
  };
1648
1667
  };
1649
1668
  exports.PersistSignals = PersistSignals;
@@ -1663,7 +1682,7 @@ exports.useObserve = useObserve;
1663
1682
  exports.useObserveCallback = useObserveCallback;
1664
1683
  exports.usePersistSignalsContext = usePersistSignalsContext;
1665
1684
  exports.useQuery = useQuery;
1666
- exports.useReactJrxProvider = useReactJrxProvider;
1685
+ exports.useQueryClient = useQueryClient;
1667
1686
  exports.useScopeSignals = useScopeSignals;
1668
1687
  exports.useSetSignal = useSetSignal;
1669
1688
  exports.useSignal = useSignal;
package/dist/index.d.ts CHANGED
@@ -20,4 +20,4 @@ export * from "./lib/queries/react/useAsyncQuery";
20
20
  export * from "./lib/queries/react/useQuery";
21
21
  export * from "./lib/queries/react/useSubscribeEffect";
22
22
  export * from "./lib/queries/client/createClient";
23
- export { Provider as ReactjrxQueryProvider, useReactJrxProvider } from "./lib/queries/react/Provider";
23
+ export { Provider as ReactjrxQueryProvider, useQueryClient } from "./lib/queries/react/Provider";
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);
@@ -240,7 +240,6 @@ const PersistSignals = memo(
240
240
  ).pipe(map(() => true));
241
241
  return stream.pipe(
242
242
  tap(() => {
243
- console.log("hydration complete");
244
243
  if (onReadyRef.current != null)
245
244
  onReadyRef.current();
246
245
  }),
@@ -596,27 +595,35 @@ function useAsyncQuery(query, mapOperatorOrOptions, options = {}) {
596
595
  const Context = createContext({
597
596
  client: null
598
597
  });
598
+ const ClientEffect = ({
599
+ client
600
+ }) => {
601
+ useEffect(() => {
602
+ const destroy = client.start();
603
+ return () => {
604
+ destroy();
605
+ };
606
+ }, [client]);
607
+ return null;
608
+ };
599
609
  const Provider = memo(
600
610
  ({
601
611
  children,
602
612
  client
603
613
  }) => {
604
614
  const value = useMemo(() => ({ client }), [client]);
605
- useEffect(
606
- () => () => {
607
- client.destroy();
608
- },
609
- [client]
610
- );
611
- return /* @__PURE__ */ jsx(Context.Provider, { value, children });
615
+ return /* @__PURE__ */ jsxs(Context.Provider, { value, children: [
616
+ /* @__PURE__ */ jsx(ClientEffect, { client: value.client }),
617
+ children
618
+ ] });
612
619
  }
613
620
  );
614
- const useReactJrxProvider = () => {
621
+ const useQueryClient = () => {
615
622
  const context = useContext(Context);
616
623
  if (context === null) {
617
624
  throw new Error("You forgot to register the provider");
618
625
  }
619
- return { ...context };
626
+ return context.client;
620
627
  };
621
628
  const arrayEqual = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);
622
629
  function isDefined(arg) {
@@ -676,7 +683,7 @@ function useQuery({
676
683
  ...options
677
684
  }) {
678
685
  const internalRefresh$ = useSubject();
679
- const { client } = useReactJrxProvider();
686
+ const client = useQueryClient();
680
687
  const params$ = useQueryParams({ queryFn, queryKey, ...options });
681
688
  const result = useObserve(
682
689
  () => {
@@ -854,7 +861,7 @@ function createLogger(env) {
854
861
  };
855
862
  return _logger;
856
863
  }
857
- const Logger = createLogger("development");
864
+ const Logger = createLogger("production");
858
865
  const logger$3 = Logger.namespace("store");
859
866
  const createDebugger = (store$) => {
860
867
  return store$.pipe(
@@ -935,7 +942,12 @@ const createQueryStore = () => {
935
942
  }));
936
943
  };
937
944
  };
938
- const debugger$ = createDebugger(store$);
945
+ const start = () => {
946
+ const debugger$ = createDebugger(store$);
947
+ return () => {
948
+ debugger$.unsubscribe();
949
+ };
950
+ };
939
951
  return {
940
952
  set: setValue,
941
953
  get: getValue,
@@ -955,11 +967,7 @@ const createQueryStore = () => {
955
967
  queryTriggerSubject.next(event);
956
968
  },
957
969
  size: () => store.size,
958
- destroy: () => {
959
- debugger$.unsubscribe();
960
- queryEventSubject.complete();
961
- queryTriggerSubject.complete();
962
- }
970
+ start
963
971
  };
964
972
  };
965
973
  const createQueryTrigger = ({
@@ -1051,17 +1059,17 @@ const registerResultInCache = ({
1051
1059
  serializedKey,
1052
1060
  options
1053
1061
  }) => (stream) => stream.pipe(
1054
- tap((result) => {
1055
- queryStore.update(serializedKey, {
1056
- ...options.cacheTime !== 0 && {
1057
- cache_fnResult: { result }
1058
- }
1059
- });
1062
+ tap(({ data }) => {
1063
+ if (data == null ? void 0 : data.result) {
1064
+ const result = data == null ? void 0 : data.result;
1065
+ queryStore.update(serializedKey, {
1066
+ ...options.cacheTime !== 0 && {
1067
+ cache_fnResult: { result }
1068
+ }
1069
+ });
1070
+ }
1060
1071
  })
1061
1072
  );
1062
- const mapWithComplete = (mapFn) => (stream) => {
1063
- return stream.pipe(map(mapFn({ isComplete: false })));
1064
- };
1065
1073
  const createQueryFetch = ({
1066
1074
  options$,
1067
1075
  options,
@@ -1095,12 +1103,8 @@ const createQueryFetch = ({
1095
1103
  lastFetchedAt: (/* @__PURE__ */ new Date()).getTime()
1096
1104
  });
1097
1105
  }),
1098
- registerResultInCache({ serializedKey, options, queryStore }),
1099
- mapWithComplete(({ isComplete }) => (result) => ({
1106
+ map((result) => ({
1100
1107
  status: "success",
1101
- ...isComplete && {
1102
- fetchStatus: "idle"
1103
- },
1104
1108
  data: { result },
1105
1109
  error: void 0
1106
1110
  })),
@@ -1119,7 +1123,8 @@ const createQueryFetch = ({
1119
1123
  error
1120
1124
  });
1121
1125
  }),
1122
- notifyQueryResult(options$)
1126
+ notifyQueryResult(options$),
1127
+ registerResultInCache({ serializedKey, options, queryStore })
1123
1128
  );
1124
1129
  const newCache$ = queryStore.queryEvent$.pipe(
1125
1130
  filter(
@@ -1187,6 +1192,12 @@ const compareKeys = (keyA, keyB, { exact = false } = {}) => {
1187
1192
  return keyA.reduce((acc, value, index) => {
1188
1193
  if (!acc)
1189
1194
  return false;
1195
+ if (value === void 0) {
1196
+ const hasNextItemInLineNotUndefined = keyA.slice(index, keyA.length - 1).some((item) => item !== void 0);
1197
+ if (!hasNextItemInLineNotUndefined) {
1198
+ return true;
1199
+ }
1200
+ }
1190
1201
  return serializeObject(value) === serializeObject(keyB[index]);
1191
1202
  }, true);
1192
1203
  };
@@ -1230,9 +1241,7 @@ const createInvalidationClient = ({
1230
1241
  });
1231
1242
  };
1232
1243
  return {
1233
- invalidateQueries,
1234
- destroy: () => {
1235
- }
1244
+ invalidateQueries
1236
1245
  };
1237
1246
  };
1238
1247
  const logger$1 = Logger.namespace("refetch");
@@ -1287,9 +1296,7 @@ const createRefetchClient = ({
1287
1296
  };
1288
1297
  return {
1289
1298
  pipeQueryResult,
1290
- pipeQueryTrigger,
1291
- destroy: () => {
1292
- }
1299
+ pipeQueryTrigger
1293
1300
  };
1294
1301
  };
1295
1302
  const difference = (a, b) => a.filter((element) => !b.includes(element));
@@ -1307,11 +1314,9 @@ const createQueryListener = (store, onQuery) => store.store$.pipe(
1307
1314
  );
1308
1315
  return merge(NEVER, of(key)).pipe(
1309
1316
  tap(() => {
1310
- console.log("QUERY", key, "in");
1311
1317
  }),
1312
1318
  onQuery,
1313
1319
  finalize(() => {
1314
- console.log("QUERY", key, "complete");
1315
1320
  }),
1316
1321
  takeUntil(deleted$)
1317
1322
  );
@@ -1457,13 +1462,15 @@ const getInitialQueryEntity = ({ key }) => ({
1457
1462
  queryKey: key,
1458
1463
  runners: []
1459
1464
  });
1460
- const updateStoreWithQuery = ({
1465
+ const updateStoreWithNewQuery = ({
1461
1466
  queryStore,
1462
1467
  serializedKey,
1463
1468
  runner$,
1469
+ options$,
1464
1470
  key
1465
1471
  }) => (stream) => stream.pipe(
1466
- map((value) => {
1472
+ withLatestFrom(options$),
1473
+ map(([value, options]) => {
1467
1474
  if (key.length === 0)
1468
1475
  return [value, () => {
1469
1476
  }];
@@ -1472,7 +1479,7 @@ const updateStoreWithQuery = ({
1472
1479
  } else {
1473
1480
  queryStore.update(serializedKey, {
1474
1481
  queryKey: key,
1475
- ...value.options.markStale && {
1482
+ ...options.markStale && {
1476
1483
  isStale: true
1477
1484
  }
1478
1485
  });
@@ -1539,7 +1546,7 @@ const createClient = () => {
1539
1546
  const serializedKey = serializeKey(key);
1540
1547
  const internalRefetch$ = new Subject();
1541
1548
  const fn$ = maybeFn$ ?? (maybeFn ? of(maybeFn) : NEVER);
1542
- console.log("query$()", serializedKey);
1549
+ Logger.log("query$()", serializedKey);
1543
1550
  const runner$ = options$.pipe(map((options) => ({ options })));
1544
1551
  let deleteRunner = () => {
1545
1552
  };
@@ -1553,18 +1560,26 @@ const createClient = () => {
1553
1560
  key: serializedKey,
1554
1561
  queryStore
1555
1562
  }).pipe(refetchClient.pipeQueryTrigger({ options$, key: serializedKey }));
1556
- const result$ = merge(initialTrigger$, trigger$).pipe(
1563
+ const result$ = merge(
1564
+ initialTrigger$.pipe(
1565
+ updateStoreWithNewQuery({
1566
+ key,
1567
+ queryStore,
1568
+ runner$,
1569
+ serializedKey,
1570
+ options$
1571
+ }),
1572
+ map(([value, deleteRunnerFn]) => {
1573
+ deleteRunner = deleteRunnerFn;
1574
+ return value;
1575
+ })
1576
+ ),
1577
+ trigger$
1578
+ ).pipe(
1557
1579
  withLatestFrom(fn$, options$),
1558
1580
  map(([trigger2, fn, options]) => ({ trigger: trigger2, fn, options })),
1559
- updateStoreWithQuery({
1560
- key,
1561
- queryStore,
1562
- runner$,
1563
- serializedKey
1564
- }),
1565
- map(([value, deleteRunnerFn]) => {
1566
- deleteRunner = deleteRunnerFn;
1567
- console.log("reactjrx", serializedKey, "query trigger", {
1581
+ map((value) => {
1582
+ Logger.log("reactjrx", serializedKey, "query trigger", {
1568
1583
  trigger: value.trigger,
1569
1584
  options: value.options
1570
1585
  });
@@ -1602,9 +1617,6 @@ const createClient = () => {
1602
1617
  return !shouldStop;
1603
1618
  }, true),
1604
1619
  map(([result]) => result),
1605
- tap((result) => {
1606
- console.log("result", result);
1607
- }),
1608
1620
  finalize(() => {
1609
1621
  deleteRunner();
1610
1622
  })
@@ -1613,7 +1625,7 @@ const createClient = () => {
1613
1625
  result$
1614
1626
  };
1615
1627
  };
1616
- const queryListenerSub = createQueryListener(
1628
+ const queryListener$ = createQueryListener(
1617
1629
  queryStore,
1618
1630
  (stream) => stream.pipe(
1619
1631
  switchMap((key) => {
@@ -1631,17 +1643,24 @@ const createClient = () => {
1631
1643
  );
1632
1644
  })
1633
1645
  )
1634
- ).subscribe();
1646
+ );
1647
+ const start = () => {
1648
+ const queryListenerSub = queryListener$.subscribe();
1649
+ const started = [queryStore.start()];
1650
+ return () => {
1651
+ started.forEach((destroy) => {
1652
+ destroy();
1653
+ });
1654
+ queryListenerSub.unsubscribe();
1655
+ };
1656
+ };
1635
1657
  return {
1658
+ start,
1636
1659
  query$,
1637
1660
  queryStore,
1638
1661
  ...invalidationClient,
1639
1662
  ...cacheClient,
1640
- ...refetchClient,
1641
- destroy: () => {
1642
- queryStore.destroy();
1643
- queryListenerSub.unsubscribe();
1644
- }
1663
+ ...refetchClient
1645
1664
  };
1646
1665
  };
1647
1666
  export {
@@ -1662,7 +1681,7 @@ export {
1662
1681
  useObserveCallback,
1663
1682
  usePersistSignalsContext,
1664
1683
  useQuery,
1665
- useReactJrxProvider,
1684
+ useQueryClient,
1666
1685
  useScopeSignals,
1667
1686
  useSetSignal,
1668
1687
  useSignal,
@@ -1,8 +1,8 @@
1
1
  import { type MonoTypeOperatorFunction } from "rxjs";
2
2
  import { type QueryStore } from "../store/createQueryStore";
3
- import { type QueryOptions } from "../types";
3
+ import { type QueryResult, type QueryOptions } from "../types";
4
4
  export declare const registerResultInCache: <T>({ queryStore, serializedKey, options }: {
5
5
  queryStore: QueryStore;
6
6
  serializedKey: string;
7
7
  options: QueryOptions<T>;
8
- }) => MonoTypeOperatorFunction<T>;
8
+ }) => MonoTypeOperatorFunction<Partial<QueryResult<T>>>;
@@ -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,7 +21,7 @@ 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
- destroy: () => void;
24
+ start: () => () => void;
26
25
  };
27
26
  options$: Observable<QueryOptions<T>>;
28
27
  refetch$: Observable<QueryTrigger>;
@@ -40,6 +39,7 @@ export declare const createClient: () => {
40
39
  exact?: boolean | undefined;
41
40
  predicate?: ((storeObject: import("./store/createQueryStore").StoreObject<unknown>) => boolean) | undefined;
42
41
  }) => void;
42
+ start: () => () => void;
43
43
  query$: <T_5>({ key, fn$: maybeFn$, fn: maybeFn, refetch$, options$ }: {
44
44
  key: QueryKey;
45
45
  fn?: QueryFn<T_5> | undefined;
@@ -68,6 +68,6 @@ export declare const createClient: () => {
68
68
  queryTrigger$: Observable<import("./store/createQueryStore").QueryTriggerEvent>;
69
69
  dispatchQueryTrigger: (event: import("./store/createQueryStore").QueryTriggerEvent) => void;
70
70
  size: () => number;
71
- destroy: () => void;
71
+ start: () => () => void;
72
72
  };
73
73
  };
@@ -8,5 +8,4 @@ export declare const createInvalidationClient: ({ queryStore }: {
8
8
  exact?: boolean | undefined;
9
9
  predicate?: ((storeObject: import("../store/createQueryStore").StoreObject<unknown>) => boolean) | undefined;
10
10
  }) => void;
11
- destroy: () => void;
12
11
  };
@@ -14,5 +14,4 @@ export declare const createRefetchClient: ({ queryStore }: {
14
14
  key: string;
15
15
  options$: Observable<QueryOptions<T_1>>;
16
16
  }) => MonoTypeOperatorFunction<QueryTrigger>;
17
- destroy: () => void;
18
17
  };
@@ -51,5 +51,5 @@ export declare const createQueryStore: () => {
51
51
  queryTrigger$: Observable<QueryTriggerEvent>;
52
52
  dispatchQueryTrigger: (event: QueryTriggerEvent) => void;
53
53
  size: () => number;
54
- destroy: () => void;
54
+ start: () => () => void;
55
55
  };
@@ -0,0 +1,7 @@
1
+ import { type OperatorFunction, type Observable } from "rxjs";
2
+ import { type QueryPipelineParams, type QueryOptions } from "../types";
3
+ export declare const updateStoreWithNewQuery: <T, R>({ queryStore, serializedKey, runner$, options$, key }: QueryPipelineParams<R> & {
4
+ runner$: Observable<{
5
+ options: QueryOptions<R>;
6
+ }>;
7
+ }) => OperatorFunction<T, [T, () => void]>;
@@ -1,5 +1,6 @@
1
1
  import { type Observable } from "rxjs";
2
2
  import { type QueryKey } from "./keys/types";
3
+ import { type QueryStore } from "./store/createQueryStore";
3
4
  export interface QueryResult<T> {
4
5
  data: {
5
6
  result: T;
@@ -19,6 +20,12 @@ export interface QueryCommand<T> {
19
20
  options$?: Observable<QueryOptions<T>>;
20
21
  }
21
22
  export type QueryFn<T> = (() => Promise<T>) | (() => Observable<T>) | Observable<T>;
23
+ export interface QueryPipelineParams<R> {
24
+ queryStore: QueryStore;
25
+ serializedKey: string;
26
+ key: QueryKey;
27
+ options$: Observable<QueryOptions<R>>;
28
+ }
22
29
  export interface QueryTrigger {
23
30
  type: string;
24
31
  ignoreStale: boolean;
@@ -7,6 +7,73 @@ export declare const Provider: import("react").MemoExoticComponent<({ children,
7
7
  children: ReactNode;
8
8
  client: ReturnType<typeof createClient>;
9
9
  }) => import("react/jsx-runtime").JSX.Element>;
10
- export declare const useReactJrxProvider: () => {
11
- client: ReturnType<typeof createClient>;
10
+ export declare const useQueryClient: () => {
11
+ pipeQueryResult: <R extends Partial<import("../client/types").QueryResult<T>>, T>({ options$ }: {
12
+ key: string;
13
+ queryStore: {
14
+ set: (key: string, value: import("../client/store/createQueryStore").StoreObject<unknown>) => void;
15
+ get: <T_1>(serializedKey: string) => import("../client/store/createQueryStore").StoreObject<T_1> | undefined;
16
+ get$: (key: string) => import("rxjs").Observable<import("../client/store/createQueryStore").StoreObject<unknown>>;
17
+ delete: (key: string) => void;
18
+ update: <T_2>(key: string, value: Partial<import("../client/store/createQueryStore").StoreObject<T_2>> | ((value: import("../client/store/createQueryStore").StoreObject<T_2>) => import("../client/store/createQueryStore").StoreObject<T_2>)) => void;
19
+ keys: () => IterableIterator<string>;
20
+ updateMany: (value: Partial<import("../client/store/createQueryStore").StoreObject<unknown>>, predicate?: (storeObject: import("../client/store/createQueryStore").StoreObject<unknown>) => boolean) => void;
21
+ addRunner: <T_3>(key: string, stream: import("rxjs").Observable<{
22
+ options: import("../client/types").QueryOptions<T_3>;
23
+ }>) => () => void;
24
+ store$: import("rxjs").BehaviorSubject<Map<string, import("rxjs").BehaviorSubject<import("../client/store/createQueryStore").StoreObject<unknown>>>>;
25
+ queryEvent$: import("rxjs").Observable<import("../client/store/createQueryStore").QueryEvent>;
26
+ dispatchQueryEvent: (event: import("../client/store/createQueryStore").QueryEvent) => void;
27
+ queryTrigger$: import("rxjs").Observable<import("../client/store/createQueryStore").QueryTriggerEvent>;
28
+ dispatchQueryTrigger: (event: import("../client/store/createQueryStore").QueryTriggerEvent) => void;
29
+ size: () => number;
30
+ start: () => () => void;
31
+ };
32
+ options$: import("rxjs").Observable<import("../client/types").QueryOptions<T>>;
33
+ refetch$: import("rxjs").Observable<import("../client/types").QueryTrigger>;
34
+ }) => import("rxjs").MonoTypeOperatorFunction<R>;
35
+ pipeQueryTrigger: <T_4>({ key }: {
36
+ key: string;
37
+ options$: import("rxjs").Observable<import("../client/types").QueryOptions<T_4>>;
38
+ }) => import("rxjs").MonoTypeOperatorFunction<import("../client/types").QueryTrigger>;
39
+ setQueryData: ({ queryKey, updater }: {
40
+ queryKey: import("../client/keys/types").QueryKey;
41
+ updater: unknown;
42
+ }) => void;
43
+ invalidateQueries: ({ queryKey, exact, predicate }?: {
44
+ queryKey?: import("../client/keys/types").QueryKey | undefined;
45
+ exact?: boolean | undefined;
46
+ predicate?: ((storeObject: import("../client/store/createQueryStore").StoreObject<unknown>) => boolean) | undefined;
47
+ }) => void;
48
+ start: () => () => void;
49
+ query$: <T_5>({ key, fn$: maybeFn$, fn: maybeFn, refetch$, options$ }: {
50
+ key: import("../client/keys/types").QueryKey;
51
+ fn?: import("../client/types").QueryFn<T_5> | undefined;
52
+ fn$?: import("rxjs").Observable<import("../client/types").QueryFn<T_5>> | undefined;
53
+ refetch$?: import("rxjs").Observable<{
54
+ ignoreStale: boolean;
55
+ }> | undefined;
56
+ options$?: import("rxjs").Observable<import("../client/types").QueryOptions<T_5>> | undefined;
57
+ }) => {
58
+ result$: import("rxjs").Observable<import("../client/types").QueryResult<T_5>>;
59
+ };
60
+ queryStore: {
61
+ set: (key: string, value: import("../client/store/createQueryStore").StoreObject<unknown>) => void;
62
+ get: <T_1>(serializedKey: string) => import("../client/store/createQueryStore").StoreObject<T_1> | undefined;
63
+ get$: (key: string) => import("rxjs").Observable<import("../client/store/createQueryStore").StoreObject<unknown>>;
64
+ delete: (key: string) => void;
65
+ update: <T_2>(key: string, value: Partial<import("../client/store/createQueryStore").StoreObject<T_2>> | ((value: import("../client/store/createQueryStore").StoreObject<T_2>) => import("../client/store/createQueryStore").StoreObject<T_2>)) => void;
66
+ keys: () => IterableIterator<string>;
67
+ updateMany: (value: Partial<import("../client/store/createQueryStore").StoreObject<unknown>>, predicate?: (storeObject: import("../client/store/createQueryStore").StoreObject<unknown>) => boolean) => void;
68
+ addRunner: <T_3>(key: string, stream: import("rxjs").Observable<{
69
+ options: import("../client/types").QueryOptions<T_3>;
70
+ }>) => () => void;
71
+ store$: import("rxjs").BehaviorSubject<Map<string, import("rxjs").BehaviorSubject<import("../client/store/createQueryStore").StoreObject<unknown>>>>;
72
+ queryEvent$: import("rxjs").Observable<import("../client/store/createQueryStore").QueryEvent>;
73
+ dispatchQueryEvent: (event: import("../client/store/createQueryStore").QueryEvent) => void;
74
+ queryTrigger$: import("rxjs").Observable<import("../client/store/createQueryStore").QueryTriggerEvent>;
75
+ dispatchQueryTrigger: (event: import("../client/store/createQueryStore").QueryTriggerEvent) => void;
76
+ size: () => number;
77
+ start: () => () => void;
78
+ };
12
79
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "reactjrx",
3
3
  "private": false,
4
- "version": "1.40.0",
4
+ "version": "1.41.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist"
@@ -41,7 +41,7 @@
41
41
  "@types/react-dom": "^18.0.11",
42
42
  "@typescript-eslint/eslint-plugin": "^5.59.0",
43
43
  "@vitejs/plugin-react": "^4.0.0",
44
- "eslint": "^8.38.0",
44
+ "eslint": "^8.47.0",
45
45
  "eslint-config-prettier": "^8.8.0",
46
46
  "eslint-config-standard-with-typescript": "^34.0.1",
47
47
  "eslint-plugin-import": "^2.27.5",
@@ -1,4 +0,0 @@
1
- import { type OperatorFunction } from "rxjs";
2
- export declare const mapWithComplete: <T, R>(mapFn: ({ isComplete }: {
3
- isComplete: boolean;
4
- }) => (data: T) => R) => OperatorFunction<T, R>;
@@ -1,14 +0,0 @@
1
- import { type OperatorFunction, type Observable } from "rxjs";
2
- import { type QueryStore } from "./createQueryStore";
3
- import { type QueryOptions } from "../types";
4
- import { type QueryKey } from "../keys/types";
5
- export declare const updateStoreWithQuery: <T extends {
6
- options: QueryOptions<R>;
7
- }, R>({ queryStore, serializedKey, runner$, key }: {
8
- queryStore: QueryStore;
9
- serializedKey: string;
10
- key: QueryKey;
11
- runner$: Observable<{
12
- options: QueryOptions<R>;
13
- }>;
14
- }) => OperatorFunction<T, [T, () => void]>;