reactjrx 1.129.0 → 1.131.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.
Files changed (32) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.ts +3 -3
  4. package/dist/index.js +1 -828
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/binding/useObserve/index.d.ts +1 -0
  7. package/dist/lib/binding/useObserve/store.d.ts +21 -0
  8. package/dist/lib/binding/useObserve/types.d.ts +5 -0
  9. package/dist/lib/binding/useObserve/useObserve.d.ts +15 -0
  10. package/dist/lib/binding/useObserve/useStore.d.ts +17 -0
  11. package/dist/lib/queries/useConcatMutation$.d.ts +1 -1
  12. package/dist/lib/queries/useMutation$.d.ts +18 -18
  13. package/dist/lib/queries/useQuery$.d.ts +1 -1
  14. package/dist/lib/queries/useSwitchMutation$.d.ts +9 -9
  15. package/dist/lib/state/Signal.d.ts +10 -2
  16. package/dist/lib/state/index.d.ts +1 -1
  17. package/dist/lib/state/persistence/constants.d.ts +1 -0
  18. package/dist/lib/state/{persistance → persistence}/helpers.d.ts +2 -2
  19. package/dist/lib/state/{persistance → persistence}/types.d.ts +3 -3
  20. package/dist/lib/state/react/usePersistSignals.d.ts +4 -4
  21. package/package.json +9 -6
  22. package/dist/lib/binding/useObserve.d.ts +0 -21
  23. package/dist/lib/state/persistance/constants.d.ts +0 -1
  24. /package/dist/lib/binding/{useObserve.compare.test.d.ts → useObserve/useObserve.compare.test.d.ts} +0 -0
  25. /package/dist/lib/binding/{useObserve.selector.test.d.ts → useObserve/useObserve.selector.test.d.ts} +0 -0
  26. /package/dist/lib/binding/{useObserve.test.d.ts → useObserve/useObserve.test.d.ts} +0 -0
  27. /package/dist/lib/state/{persistance → persistence}/adapters/Adapter.d.ts +0 -0
  28. /package/dist/lib/state/{persistance → persistence}/adapters/MockAdapter.d.ts +0 -0
  29. /package/dist/lib/state/{persistance → persistence}/adapters/createLocalStorageAdapter.d.ts +0 -0
  30. /package/dist/lib/state/{persistance → persistence}/adapters/createLocalforageAdapter.d.ts +0 -0
  31. /package/dist/lib/state/{persistance → persistence}/persistSignals.d.ts +0 -0
  32. /package/dist/lib/state/{persistance → persistence}/persistSignals.test.d.ts +0 -0
@@ -1,10 +1,10 @@
1
1
  import { DefaultError, QueryClient, UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
2
2
  import { BehaviorSubject, Observable } from 'rxjs';
3
- export type UseMutation$Options<TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown> = Omit<UseMutationOptions<TData, TError, TVariables, TContext>, "mutationFn"> & {
3
+ export type UseMutation$Options<TData = unknown, TError = DefaultError, TVariables = void, TOnMutateResult = unknown> = Omit<UseMutationOptions<TData, TError, TVariables, TOnMutateResult>, "mutationFn"> & {
4
4
  mutationFn: ((variables: TVariables) => Observable<TData>) | Observable<TData>;
5
5
  };
6
- export declare function useMutation$<TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown>(options: UseMutation$Options<TData, TError, TVariables, TContext>, queryClient?: QueryClient): {
7
- state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
6
+ export declare function useMutation$<TData = unknown, TError = DefaultError, TVariables = void, TOnMutateResult = unknown>(options: UseMutation$Options<TData, TError, TVariables, TOnMutateResult>, queryClient?: QueryClient): {
7
+ state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
8
8
  data: undefined;
9
9
  variables: undefined;
10
10
  error: null;
@@ -13,16 +13,16 @@ export declare function useMutation$<TData = unknown, TError = DefaultError, TVa
13
13
  isPending: false;
14
14
  isSuccess: false;
15
15
  status: "idle";
16
- mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
16
+ mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TOnMutateResult>;
17
17
  reset: () => void;
18
- context: TContext | undefined;
18
+ context: TOnMutateResult | undefined;
19
19
  failureCount: number;
20
20
  failureReason: TError | null;
21
21
  isPaused: boolean;
22
22
  submittedAt: number;
23
- mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
23
+ mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TOnMutateResult>;
24
24
  } | {
25
- state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
25
+ state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
26
26
  data: undefined;
27
27
  variables: TVariables;
28
28
  error: null;
@@ -31,16 +31,16 @@ export declare function useMutation$<TData = unknown, TError = DefaultError, TVa
31
31
  isPending: true;
32
32
  isSuccess: false;
33
33
  status: "pending";
34
- mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
34
+ mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TOnMutateResult>;
35
35
  reset: () => void;
36
- context: TContext | undefined;
36
+ context: TOnMutateResult | undefined;
37
37
  failureCount: number;
38
38
  failureReason: TError | null;
39
39
  isPaused: boolean;
40
40
  submittedAt: number;
41
- mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
41
+ mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TOnMutateResult>;
42
42
  } | {
43
- state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
43
+ state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
44
44
  data: undefined;
45
45
  error: TError;
46
46
  variables: TVariables;
@@ -49,16 +49,16 @@ export declare function useMutation$<TData = unknown, TError = DefaultError, TVa
49
49
  isPending: false;
50
50
  isSuccess: false;
51
51
  status: "error";
52
- mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
52
+ mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TOnMutateResult>;
53
53
  reset: () => void;
54
- context: TContext | undefined;
54
+ context: TOnMutateResult | undefined;
55
55
  failureCount: number;
56
56
  failureReason: TError | null;
57
57
  isPaused: boolean;
58
58
  submittedAt: number;
59
- mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
59
+ mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TOnMutateResult>;
60
60
  } | {
61
- state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
61
+ state$: BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
62
62
  data: TData;
63
63
  error: null;
64
64
  variables: TVariables;
@@ -67,12 +67,12 @@ export declare function useMutation$<TData = unknown, TError = DefaultError, TVa
67
67
  isPending: false;
68
68
  isSuccess: true;
69
69
  status: "success";
70
- mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
70
+ mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TOnMutateResult>;
71
71
  reset: () => void;
72
- context: TContext | undefined;
72
+ context: TOnMutateResult | undefined;
73
73
  failureCount: number;
74
74
  failureReason: TError | null;
75
75
  isPaused: boolean;
76
76
  submittedAt: number;
77
- mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
77
+ mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TOnMutateResult>;
78
78
  };
@@ -1,5 +1,5 @@
1
1
  import { DefaultError, QueryClient, QueryFunctionContext, QueryKey, UseQueryOptions } from '@tanstack/react-query';
2
2
  import { Observable } from 'rxjs';
3
- export declare function useQuery$<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryFn"> & {
3
+ export declare function useQuery$<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>({ queryFn, ...options }: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryFn"> & {
4
4
  queryFn: ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>) | Observable<TQueryFnData>;
5
5
  }, queryClient?: QueryClient): import('@tanstack/react-query').UseQueryResult<import('@tanstack/query-core').NoInfer<TData>, TError>;
@@ -3,13 +3,13 @@ import { UseMutation$Options } from './useMutation$';
3
3
  export declare class SwitchMutationCancelError extends Error {
4
4
  constructor(message?: string);
5
5
  }
6
- export declare function useSwitchMutation$<TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown>(options: UseMutation$Options<TData | null, TError, TVariables, TContext>, queryClient?: QueryClient): {
6
+ export declare function useSwitchMutation$<TData = unknown, TError = DefaultError, TVariables = void, TOnMutateResult = unknown>({ mutationFn, onMutate, onError, onSettled, ...options }: UseMutation$Options<TData | null, TError, TVariables, TOnMutateResult>, queryClient?: QueryClient): {
7
7
  mutate: (variables: TVariables) => void;
8
8
  mutateAsync: (variables: TVariables) => Promise<TData | null>;
9
9
  state$: import('rxjs').BehaviorSubject<Pick<import('@tanstack/react-query').UseMutationResult<TData | null, TError, {
10
10
  variables: TVariables;
11
11
  abort: AbortSignal;
12
- }, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
12
+ }, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
13
13
  data: undefined;
14
14
  variables: undefined;
15
15
  error: null;
@@ -19,7 +19,7 @@ export declare function useSwitchMutation$<TData = unknown, TError = DefaultErro
19
19
  isSuccess: false;
20
20
  status: "idle";
21
21
  reset: () => void;
22
- context: TContext | undefined;
22
+ context: TOnMutateResult | undefined;
23
23
  failureCount: number;
24
24
  failureReason: TError | null;
25
25
  isPaused: boolean;
@@ -30,7 +30,7 @@ export declare function useSwitchMutation$<TData = unknown, TError = DefaultErro
30
30
  state$: import('rxjs').BehaviorSubject<Pick<import('@tanstack/react-query').UseMutationResult<TData | null, TError, {
31
31
  variables: TVariables;
32
32
  abort: AbortSignal;
33
- }, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
33
+ }, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
34
34
  data: undefined;
35
35
  variables: {
36
36
  variables: TVariables;
@@ -43,7 +43,7 @@ export declare function useSwitchMutation$<TData = unknown, TError = DefaultErro
43
43
  isSuccess: false;
44
44
  status: "pending";
45
45
  reset: () => void;
46
- context: TContext | undefined;
46
+ context: TOnMutateResult | undefined;
47
47
  failureCount: number;
48
48
  failureReason: TError | null;
49
49
  isPaused: boolean;
@@ -54,7 +54,7 @@ export declare function useSwitchMutation$<TData = unknown, TError = DefaultErro
54
54
  state$: import('rxjs').BehaviorSubject<Pick<import('@tanstack/react-query').UseMutationResult<TData | null, TError, {
55
55
  variables: TVariables;
56
56
  abort: AbortSignal;
57
- }, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
57
+ }, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
58
58
  data: undefined;
59
59
  error: TError;
60
60
  variables: {
@@ -67,7 +67,7 @@ export declare function useSwitchMutation$<TData = unknown, TError = DefaultErro
67
67
  isSuccess: false;
68
68
  status: "error";
69
69
  reset: () => void;
70
- context: TContext | undefined;
70
+ context: TOnMutateResult | undefined;
71
71
  failureCount: number;
72
72
  failureReason: TError | null;
73
73
  isPaused: boolean;
@@ -78,7 +78,7 @@ export declare function useSwitchMutation$<TData = unknown, TError = DefaultErro
78
78
  state$: import('rxjs').BehaviorSubject<Pick<import('@tanstack/react-query').UseMutationResult<TData | null, TError, {
79
79
  variables: TVariables;
80
80
  abort: AbortSignal;
81
- }, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
81
+ }, TOnMutateResult>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
82
82
  data: TData | null;
83
83
  error: null;
84
84
  variables: {
@@ -91,7 +91,7 @@ export declare function useSwitchMutation$<TData = unknown, TError = DefaultErro
91
91
  isSuccess: true;
92
92
  status: "success";
93
93
  reset: () => void;
94
- context: TContext | undefined;
94
+ context: TOnMutateResult | undefined;
95
95
  failureCount: number;
96
96
  failureReason: TError | null;
97
97
  isPaused: boolean;
@@ -1,5 +1,12 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { SIGNAL_RESET } from './constants';
3
+ /**
4
+ * Distributive helper to validate the shape of the updater function
5
+ * and prevent covariance
6
+ */
7
+ type ValidateShape<T, U> = T extends any ? U extends T ? U extends object ? {
8
+ [K in keyof U]: K extends keyof T ? T[K] : never;
9
+ } : U : never : never;
3
10
  export type SignalValue<T extends Signal<any, any>> = T["value"];
4
11
  export type SignalWithKey<T> = Signal<T> & {
5
12
  key: string;
@@ -13,11 +20,11 @@ export declare class Signal<T, K extends string | undefined = undefined> extends
13
20
  default: T;
14
21
  key: K;
15
22
  });
16
- update: (valueOrUpdater: ((prev: T) => T) | (T extends Function ? never : T) | typeof SIGNAL_RESET) => void;
23
+ update: <U>(valueOrUpdater: ((prev: T) => U & ValidateShape<T, U>) | (T extends Function ? never : T) | typeof SIGNAL_RESET) => void;
17
24
  /**
18
25
  * @deprecated Use `next` instead
19
26
  */
20
- setValue: (valueOrUpdater: ((prev: T) => T) | (T extends Function ? never : T) | typeof SIGNAL_RESET) => void;
27
+ setValue: <U>(valueOrUpdater: ((prev: T) => U & ValidateShape<T, U>) | (T extends Function ? never : T) | typeof SIGNAL_RESET) => void;
21
28
  /**
22
29
  * @deprecated Use `this` instead
23
30
  */
@@ -55,3 +62,4 @@ export declare function virtualSignal<T>(config: {
55
62
  default: T;
56
63
  key?: string;
57
64
  }): VirtualSignal<T>;
65
+ export {};
@@ -1 +1 @@
1
- export type { Adapter } from './persistance/adapters/Adapter';
1
+ export type { Adapter } from './persistence/adapters/Adapter';
@@ -0,0 +1 @@
1
+ export declare const IDENTIFIER_PERSISTENCE_KEY = "__reactjrx";
@@ -1,6 +1,6 @@
1
1
  import { Adapter } from './adapters/Adapter';
2
- import { PersistanceEntry, SignalPersistenceConfig } from './types';
3
- export declare const getNormalizedPersistanceValue: (unknownValue: unknown) => PersistanceEntry | undefined;
2
+ import { PersistenceEntry, SignalPersistenceConfig } from './types';
3
+ export declare const getNormalizedPersistanceValue: (unknownValue: unknown) => PersistenceEntry | undefined;
4
4
  export declare const persistValue: ({ adapter, config, }: {
5
5
  adapter: Adapter;
6
6
  config: SignalPersistenceConfig<any>;
@@ -1,9 +1,9 @@
1
1
  import { Signal, SignalValue } from '../Signal';
2
- import { IDENTIFIER_PERSISTANCE_KEY } from './constants';
3
- export interface PersistanceEntry {
2
+ import { IDENTIFIER_PERSISTENCE_KEY } from './constants';
3
+ export interface PersistenceEntry {
4
4
  value: unknown;
5
5
  migrationVersion?: number;
6
- [IDENTIFIER_PERSISTANCE_KEY]: typeof IDENTIFIER_PERSISTANCE_KEY;
6
+ [IDENTIFIER_PERSISTENCE_KEY]: typeof IDENTIFIER_PERSISTENCE_KEY;
7
7
  }
8
8
  export interface SignalPersistenceConfig<S extends Signal<any, string>> {
9
9
  version: number;
@@ -1,5 +1,5 @@
1
- import { Adapter } from '../persistance/adapters/Adapter';
2
- import { SignalPersistenceConfig } from '../persistance/types';
1
+ import { Adapter } from '../persistence/adapters/Adapter';
2
+ import { SignalPersistenceConfig } from '../persistence/types';
3
3
  /**
4
4
  * Make sure to pass stable reference of entries and adapter if you don't
5
5
  * intentionally want to start over the process.
@@ -11,7 +11,7 @@ export declare function usePersistSignals({ entries, onHydrated, adapter, }: {
11
11
  /**
12
12
  * Passing a new list of entries will start over the process
13
13
  * once the current one is finished. Use a stable reference to avoid
14
- * inifite loop.
14
+ * infinite loop.
15
15
  */
16
16
  entries?: Array<SignalPersistenceConfig<any>>;
17
17
  /**
@@ -21,7 +21,7 @@ export declare function usePersistSignals({ entries, onHydrated, adapter, }: {
21
21
  /**
22
22
  * Passing a new adapter reference will start over the process
23
23
  * once the current one is finished. Use a stable reference to avoid
24
- * inifite loop.
24
+ * infinite loop.
25
25
  */
26
26
  adapter?: Adapter;
27
27
  }): {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "reactjrx",
3
3
  "private": false,
4
- "version": "1.129.0",
4
+ "version": "1.131.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist"
@@ -34,30 +34,33 @@
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@tanstack/react-query": "5.x",
37
- "react": "^18 || ^19",
38
- "react-dom": "^18 || ^19",
37
+ "react": "19.x",
38
+ "react-dom": "19.x",
39
39
  "rxjs": "*"
40
40
  },
41
41
  "devDependencies": {
42
- "@biomejs/biome": "2.2.4",
42
+ "@biomejs/biome": "2.3.11",
43
43
  "@testing-library/jest-dom": "^6.2.0",
44
44
  "@testing-library/react": "^16.1.0",
45
45
  "@types/node": "^24.3.1",
46
46
  "@types/react": "^19.0.2",
47
47
  "@types/react-dom": "^19.0.2",
48
48
  "@vitejs/plugin-react": "^5.0.2",
49
+ "babel-plugin-react-compiler": "^1.0.0",
49
50
  "husky": "^9.1.7",
50
- "jsdom": "^27.0.0",
51
+ "jsdom": "^27.4.0",
51
52
  "lint-staged": "^16.1.2",
52
53
  "react": "^19.0.0",
53
54
  "react-dom": "^19.0.0",
54
55
  "rollup-plugin-node-externals": "^8.0.0",
55
56
  "rxjs": "^7.8.0",
56
57
  "semantic-release": "^24.2.2",
58
+ "terser": "^5.46.0",
57
59
  "typescript": "^5.6.2",
58
60
  "vite": "^7.1.4",
61
+ "vite-plugin-babel": "^1.4.1",
59
62
  "vite-plugin-dts": "^4.2.1",
60
- "vitest": "^3.0.5"
63
+ "vitest": "^4.0.17"
61
64
  },
62
65
  "repository": {
63
66
  "type": "git",
@@ -1,21 +0,0 @@
1
- import { DependencyList } from 'react';
2
- import { BehaviorSubject, Observable } from 'rxjs';
3
- interface Option<R = undefined> {
4
- defaultValue: R;
5
- unsubscribeOnUnmount?: boolean;
6
- compareFn?: (a: R, b: R) => boolean;
7
- }
8
- export declare function useObserve<T>(source: BehaviorSubject<T>): T;
9
- export declare function useObserve<T extends object, SelectorKeys extends keyof T>(source: BehaviorSubject<T>, selector: SelectorKeys[]): {
10
- [K in SelectorKeys]: T[K];
11
- };
12
- export declare function useObserve<T>(source: BehaviorSubject<T>, options: Omit<Option<T>, "defaultValue">): T;
13
- export declare function useObserve<T>(source: Observable<T>): T | undefined;
14
- export declare function useObserve<T extends object, SelectorKeys extends keyof T>(source: Observable<T>, selector: SelectorKeys[]): {
15
- [K in SelectorKeys]: T[K];
16
- } | undefined;
17
- export declare function useObserve<T>(source: () => Observable<T>, deps: DependencyList): T | undefined;
18
- export declare function useObserve<T>(source: () => Observable<T> | undefined, deps: DependencyList): T | undefined;
19
- export declare function useObserve<T>(source: Observable<T>, options: Option<T>): T;
20
- export declare function useObserve<T>(source: () => Observable<T>, options: Option<T>, deps: DependencyList): T;
21
- export {};
@@ -1 +0,0 @@
1
- export declare const IDENTIFIER_PERSISTANCE_KEY = "__reactjrx";