react-query-firebase 2.12.1 → 2.13.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/package.json CHANGED
@@ -21,25 +21,25 @@
21
21
  },
22
22
  "description": "This module offers react hooks to work with Firebase on react-native and web platforms",
23
23
  "devDependencies": {
24
- "@laverve/eslint-utils": "^5.3.1",
25
- "@react-native-firebase/analytics": "^23.0.1",
26
- "@react-native-firebase/app": "23.0.1",
27
- "@react-native-firebase/auth": "^23.0.1",
28
- "@react-native-firebase/crashlytics": "^23.0.1",
29
- "@react-native-firebase/firestore": "^23.0.1",
30
- "@react-native-firebase/installations": "^23.0.1",
31
- "@react-native-firebase/remote-config": "^23.0.1",
32
- "@tanstack/react-query": "^5.85.3",
33
- "@types/react": "^19.1.10",
34
- "firebase": "^12.1.0",
24
+ "@laverve/eslint-utils": "^5.3.7",
25
+ "@react-native-firebase/analytics": "^23.4.1",
26
+ "@react-native-firebase/app": "^23.4.1",
27
+ "@react-native-firebase/auth": "^23.4.1",
28
+ "@react-native-firebase/crashlytics": "^23.4.1",
29
+ "@react-native-firebase/firestore": "^23.4.1",
30
+ "@react-native-firebase/installations": "^23.4.1",
31
+ "@react-native-firebase/remote-config": "^23.4.1",
32
+ "@tanstack/react-query": "^5.90.5",
33
+ "@types/react": "^19.2.2",
34
+ "firebase": "^12.4.0",
35
35
  "husky": "^9.1.7",
36
- "lint-staged": "^16.1.5",
36
+ "lint-staged": "^16.2.6",
37
37
  "prettier": "^3.6.2",
38
- "react": "^19.1.1",
39
- "typedoc": "^0.28.10",
40
- "typedoc-plugin-markdown": "^4.8.1",
38
+ "react": "^19.2.0",
39
+ "typedoc": "^0.28.14",
40
+ "typedoc-plugin-markdown": "^4.9.0",
41
41
  "typedoc-vitepress-theme": "^1.1.2",
42
- "typescript": "^5.9.2",
42
+ "typescript": "^5.9.3",
43
43
  "vitepress": "^1.6.4"
44
44
  },
45
45
  "homepage": "https://github.com/vpishuk/react-query-firebase",
@@ -75,5 +75,5 @@
75
75
  "docs:build": "vitepress build docs",
76
76
  "docs:preview": "vitepress preview docs"
77
77
  },
78
- "version": "2.12.1"
78
+ "version": "2.13.1"
79
79
  }
@@ -117,6 +117,12 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
117
117
  * @defaultValue `true`
118
118
  */
119
119
  remoteConfigEnabled?: boolean;
120
+ /**
121
+ * Firebase persistence type
122
+ * Applicable only for web version. Unsupported in native.
123
+ * @defaultValue 'LOCAL'
124
+ */
125
+ authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
120
126
  };
121
127
  /**
122
128
  * FirebaseContextProvider component configures and provides Firebase services to its children.
@@ -128,6 +128,12 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
128
128
  * @defaultValue `true`
129
129
  */
130
130
  remoteConfigEnabled?: boolean;
131
+ /**
132
+ * Firebase persistence type
133
+ * Applicable only for web version. Unsupported in native.
134
+ * @defaultValue 'LOCAL'
135
+ */
136
+ authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
131
137
  };
132
138
 
133
139
  /**
@@ -28,9 +28,9 @@ export const buildQueryConstraint = (constraint) => {
28
28
  case "startAfter":
29
29
  return startAfter(...constraint.arguments);
30
30
  case "endAt":
31
- return endAt(constraint.value, constraint.key);
31
+ return endAt(...constraint.arguments);
32
32
  case "endBefore":
33
- return endBefore(constraint.value, constraint.key);
33
+ return endBefore(...constraint.arguments);
34
34
  case "limit":
35
35
  return limit(constraint.limit);
36
36
  case "limitToLast":
@@ -41,9 +41,9 @@ export const buildQueryConstraint = <AppModelType extends AppModel = AppModel>(
41
41
  case "startAfter":
42
42
  return startAfter(...constraint.arguments);
43
43
  case "endAt":
44
- return endAt(constraint.value, constraint.key);
44
+ return endAt(...constraint.arguments);
45
45
  case "endBefore":
46
- return endBefore(constraint.value, constraint.key);
46
+ return endBefore(...constraint.arguments);
47
47
  case "limit":
48
48
  return limit(constraint.limit);
49
49
  case "limitToLast":
@@ -31,8 +31,7 @@ export type StartConstraint = {
31
31
  */
32
32
  export type EndConstraint = {
33
33
  type: "endAt" | "endBefore";
34
- value: number | string | boolean | null;
35
- key?: string;
34
+ arguments: unknown[];
36
35
  };
37
36
  /**
38
37
  * Limit constraint
@@ -34,8 +34,7 @@ export type StartConstraint = {
34
34
  */
35
35
  export type EndConstraint = {
36
36
  type: "endAt" | "endBefore";
37
- value: number | string | boolean | null;
38
- key?: string;
37
+ arguments: unknown[];
39
38
  };
40
39
 
41
40
  /**
@@ -100,6 +100,11 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
100
100
  * @defaultValue `true`
101
101
  */
102
102
  remoteConfigEnabled?: boolean;
103
+ /**
104
+ * Firebase persistence type
105
+ * @defaultValue 'LOCAL'
106
+ */
107
+ authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
103
108
  };
104
109
  /**
105
110
  * FirebaseContextProvider component configures and provides Firebase services to its children.
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect, useMemo } from "react";
2
2
  import { FirebaseContext } from "./FirebaseContext";
3
- import { connectAuthEmulator, getAuth } from "firebase/auth";
3
+ import { browserLocalPersistence, browserSessionPersistence, connectAuthEmulator, getAuth, setPersistence } from "firebase/auth";
4
4
  import { getAnalytics, setAnalyticsCollectionEnabled, setConsent } from "firebase/analytics";
5
5
  import { getRemoteConfig } from "firebase/remote-config";
6
6
  import { connectFirestoreEmulator, initializeFirestore } from "firebase/firestore";
@@ -28,7 +28,7 @@ import { initializeApp } from "firebase/app";
28
28
  * };
29
29
  * ```
30
30
  */
31
- export const FirebaseContextProvider = ({ emulators, options, children, authEnabled = true, firestoreEnabled = true, analyticsEnabled = true, consentSettings = {}, remoteConfigEnabled = true, remoteConfigSettings, remoteConfigDefaults = {}, firestoreSettings }) => {
31
+ export const FirebaseContextProvider = ({ emulators, options, children, authEnabled = true, firestoreEnabled = true, analyticsEnabled = true, consentSettings = {}, remoteConfigEnabled = true, remoteConfigSettings, remoteConfigDefaults = {}, firestoreSettings, authPersistenceType }) => {
32
32
  const firebase = useMemo(() => {
33
33
  return initializeApp(options);
34
34
  }, [options]);
@@ -54,6 +54,18 @@ export const FirebaseContextProvider = ({ emulators, options, children, authEnab
54
54
  }
55
55
  return null;
56
56
  }, [firestoreSettings, emulators?.firestore, firestoreEnabled, firebase]);
57
+ const authPersistence = useMemo(() => {
58
+ switch (authPersistenceType) {
59
+ case "NONE":
60
+ case "COOKIE":
61
+ return { type: "NONE" };
62
+ case "SESSION":
63
+ return browserSessionPersistence;
64
+ default:
65
+ case "LOCAL":
66
+ return browserLocalPersistence;
67
+ }
68
+ }, [authPersistenceType]);
57
69
  const auth = useMemo(() => {
58
70
  if (authEnabled) {
59
71
  const localAuth = getAuth(firebase);
@@ -66,6 +78,11 @@ export const FirebaseContextProvider = ({ emulators, options, children, authEnab
66
78
  }
67
79
  return null;
68
80
  }, [emulators?.auth, authEnabled, firebase]);
81
+ useEffect(() => {
82
+ if (authPersistence && auth) {
83
+ setPersistence(auth, authPersistence);
84
+ }
85
+ }, [auth, authPersistence]);
69
86
  const analytics = useMemo(() => {
70
87
  if (analyticsEnabled && options.measurementId && typeof window !== "undefined") {
71
88
  return getAnalytics(firebase);
@@ -1,6 +1,13 @@
1
1
  import React, { PropsWithChildren, useEffect, useMemo } from "react";
2
2
  import { FirebaseContext } from "./FirebaseContext";
3
- import { connectAuthEmulator, getAuth } from "firebase/auth";
3
+ import {
4
+ browserLocalPersistence,
5
+ browserSessionPersistence,
6
+ connectAuthEmulator,
7
+ getAuth,
8
+ Persistence,
9
+ setPersistence
10
+ } from "firebase/auth";
4
11
  import { ConsentSettings, getAnalytics, setAnalyticsCollectionEnabled, setConsent } from "firebase/analytics";
5
12
  import { getRemoteConfig, RemoteConfigSettings } from "firebase/remote-config";
6
13
  import { connectFirestoreEmulator, FirestoreSettings, initializeFirestore } from "firebase/firestore";
@@ -104,6 +111,11 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
104
111
  * @defaultValue `true`
105
112
  */
106
113
  remoteConfigEnabled?: boolean;
114
+ /**
115
+ * Firebase persistence type
116
+ * @defaultValue 'LOCAL'
117
+ */
118
+ authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
107
119
  };
108
120
 
109
121
  /**
@@ -140,7 +152,8 @@ export const FirebaseContextProvider: React.FC<FirebaseContextProviderProps> = (
140
152
  remoteConfigEnabled = true,
141
153
  remoteConfigSettings,
142
154
  remoteConfigDefaults = {},
143
- firestoreSettings
155
+ firestoreSettings,
156
+ authPersistenceType
144
157
  }) => {
145
158
  const firebase = useMemo(() => {
146
159
  return initializeApp(options);
@@ -173,6 +186,19 @@ export const FirebaseContextProvider: React.FC<FirebaseContextProviderProps> = (
173
186
  return null;
174
187
  }, [firestoreSettings, emulators?.firestore, firestoreEnabled, firebase]);
175
188
 
189
+ const authPersistence = useMemo(() => {
190
+ switch (authPersistenceType) {
191
+ case "NONE":
192
+ case "COOKIE":
193
+ return { type: "NONE" } as Persistence;
194
+ case "SESSION":
195
+ return browserSessionPersistence;
196
+ default:
197
+ case "LOCAL":
198
+ return browserLocalPersistence;
199
+ }
200
+ }, [authPersistenceType]);
201
+
176
202
  const auth = useMemo(() => {
177
203
  if (authEnabled) {
178
204
  const localAuth = getAuth(firebase);
@@ -186,6 +212,12 @@ export const FirebaseContextProvider: React.FC<FirebaseContextProviderProps> = (
186
212
  return null;
187
213
  }, [emulators?.auth, authEnabled, firebase]);
188
214
 
215
+ useEffect(() => {
216
+ if (authPersistence && auth) {
217
+ setPersistence(auth, authPersistence);
218
+ }
219
+ }, [auth, authPersistence]);
220
+
189
221
  const analytics = useMemo(() => {
190
222
  if (analyticsEnabled && options.measurementId && typeof window !== "undefined") {
191
223
  return getAnalytics(firebase);
@@ -34,4 +34,4 @@ export type UseCompositeFilter<AppModelType extends AppModel = AppModel> = {
34
34
  * };
35
35
  * ```
36
36
  */
37
- export declare const useCompositeFilter: <AppModelType extends AppModel = AppModel>({ query }: UseCompositeFilter<AppModelType>) => import("@firebase/firestore").QueryCompositeFilterConstraint | undefined;
37
+ export declare const useCompositeFilter: <AppModelType extends AppModel = AppModel>({ query }: UseCompositeFilter<AppModelType>) => import("firebase/firestore").QueryCompositeFilterConstraint | undefined;
@@ -25,4 +25,4 @@ export type UseDocReferencesOptions<AppModelType extends AppModel = AppModel> =
25
25
  * };
26
26
  * ```
27
27
  */
28
- export declare const useDocReferences: <AppModelType extends AppModel = AppModel>({ references }: UseDocReferencesOptions<AppModelType>) => (import("@firebase/firestore").DocumentReference<AppModelType, AppModelType> | null)[];
28
+ export declare const useDocReferences: <AppModelType extends AppModel = AppModel>({ references }: UseDocReferencesOptions<AppModelType>) => (import("firebase/firestore").DocumentReference<AppModelType, AppModelType> | null)[];
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns {Firestore}
7
7
  */
8
- export declare const useFirestore: () => import("@firebase/firestore").Firestore;
8
+ export declare const useFirestore: () => import("firebase/firestore").Firestore;
@@ -28,9 +28,9 @@ export const buildQueryConstraint = (constraint) => {
28
28
  case "startAfter":
29
29
  return startAfter(...constraint.arguments);
30
30
  case "endAt":
31
- return endAt(constraint.value, constraint.key);
31
+ return endAt(...constraint.arguments);
32
32
  case "endBefore":
33
- return endBefore(constraint.value, constraint.key);
33
+ return endBefore(...constraint.arguments);
34
34
  case "limit":
35
35
  return limit(constraint.limit);
36
36
  case "limitToLast":
@@ -42,9 +42,9 @@ export const buildQueryConstraint = <AppModelType extends AppModel = AppModel>(
42
42
  case "startAfter":
43
43
  return startAfter(...constraint.arguments);
44
44
  case "endAt":
45
- return endAt(constraint.value, constraint.key);
45
+ return endAt(...constraint.arguments);
46
46
  case "endBefore":
47
- return endBefore(constraint.value, constraint.key);
47
+ return endBefore(...constraint.arguments);
48
48
  case "limit":
49
49
  return limit(constraint.limit);
50
50
  case "limitToLast":
@@ -15,4 +15,4 @@ export type GetDocSnapOptions<AppModelType extends AppModel = AppModel> = GetDoc
15
15
  *
16
16
  * @returns {Promise<DocumentSnapshot<AppModelType, AppModelType> | null>} Returns a document reference
17
17
  */
18
- export declare const getDocSnap: <AppModelType extends AppModel = AppModel>({ db, reference, path, pathSegments }: GetDocSnapOptions<AppModelType>) => Promise<import("@firebase/firestore").DocumentSnapshot<AppModelType, AppModelType> | null>;
18
+ export declare const getDocSnap: <AppModelType extends AppModel = AppModel>({ db, reference, path, pathSegments }: GetDocSnapOptions<AppModelType>) => Promise<import("firebase/firestore").DocumentSnapshot<AppModelType, AppModelType> | null>;
@@ -4,4 +4,4 @@
4
4
  * @param {string} key - The key for which the corresponding value is to be fetched from the remote configuration.
5
5
  * @returns {any | null} The value associated with the specified key if available, otherwise null.
6
6
  */
7
- export declare const useGetValue: (key: string) => import("@firebase/remote-config").Value | null;
7
+ export declare const useGetValue: (key: string) => import("firebase/remote-config").Value | null;
@@ -2,4 +2,4 @@
2
2
  * Hook to access the Firebase Remote Config instance from the context.
3
3
  * @returns {RemoteConfig} The remoteConfig object from the Firebase context.
4
4
  */
5
- export declare const useRemoteConfig: () => import("@firebase/remote-config").RemoteConfig;
5
+ export declare const useRemoteConfig: () => import("firebase/remote-config").RemoteConfig;