reactfire 4.0.1 → 4.2.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/SuspenseSubject.d.ts +1 -1
- package/dist/functions.d.ts +12 -0
- package/dist/index.d.ts +1 -0
- package/dist/reactfire.cjs.development.js +106 -69
- package/dist/reactfire.cjs.development.js.map +1 -1
- package/dist/reactfire.cjs.production.min.js +1 -1
- package/dist/reactfire.cjs.production.min.js.map +1 -1
- package/dist/reactfire.esm.js +94 -73
- package/dist/reactfire.esm.js.map +1 -1
- package/dist/sdk.d.ts +22 -1
- package/package.json +7 -5
- package/src/SuspenseSubject.ts +4 -2
- package/src/functions.tsx +26 -0
- package/src/index.ts +1 -0
- package/src/sdk.tsx +18 -8
- package/src/storage.tsx +2 -24
- package/src/useObservable.ts +48 -28
package/dist/reactfire.esm.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { useMemo, createElement, useContext, createContext, version as version$1, Fragment,
|
|
1
|
+
import { useMemo, createElement, useContext, createContext, version as version$1, Fragment, useReducer, useEffect, Suspense, useLayoutEffect } from 'react';
|
|
2
2
|
import { user } from 'rxfire/auth';
|
|
3
|
-
import { from, of, empty, Subject
|
|
3
|
+
import { from, of, empty, Subject } from 'rxjs';
|
|
4
4
|
import { switchMap, map, tap, catchError, shareReplay, first } from 'rxjs/operators';
|
|
5
5
|
import { getApps, registerVersion, initializeApp } from 'firebase/app';
|
|
6
6
|
import { object, objectVal, list, listVal } from 'rxfire/database';
|
|
7
7
|
import { doc, docData, fromRef, collectionData } from 'rxfire/firestore';
|
|
8
8
|
import { queryEqual } from 'firebase/firestore';
|
|
9
|
+
import { httpsCallable } from 'rxfire/functions';
|
|
9
10
|
import { getValue, getString, getNumber, getBoolean, getAll } from 'rxfire/remote-config';
|
|
10
|
-
import { getDownloadURL } from 'rxfire/storage';
|
|
11
|
+
import { fromTask, getDownloadURL } from 'rxfire/storage';
|
|
11
12
|
import { ref } from 'firebase/storage';
|
|
12
13
|
|
|
13
14
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
@@ -958,7 +959,7 @@ var DEFAULT_APP_NAME = '[DEFAULT]';
|
|
|
958
959
|
var FirebaseAppContext = /*#__PURE__*/createContext(undefined);
|
|
959
960
|
var SuspenseEnabledContext = /*#__PURE__*/createContext(false); // @ts-expect-error: "__REACTFIRE_VERSION__" is replaced with actual ReactFire version (see babel.config.js)
|
|
960
961
|
|
|
961
|
-
var version = "4.
|
|
962
|
+
var version = "4.2.1";
|
|
962
963
|
|
|
963
964
|
var shallowEq = function shallowEq(a, b) {
|
|
964
965
|
return a === b || [].concat(Object.keys(a), Object.keys(b)).every(function (key) {
|
|
@@ -1438,6 +1439,8 @@ var SuspenseSubject = /*#__PURE__*/function (_Subject) {
|
|
|
1438
1439
|
// As it is now, this will burn the cache entry until the timeout fires.
|
|
1439
1440
|
if (this._error) {
|
|
1440
1441
|
throw this._error;
|
|
1442
|
+
} else if (!this.hasValue) {
|
|
1443
|
+
throw Error('Can only get value if SuspenseSubject has a value');
|
|
1441
1444
|
}
|
|
1442
1445
|
|
|
1443
1446
|
return this._value;
|
|
@@ -1477,6 +1480,39 @@ function preloadObservable(source, id) {
|
|
|
1477
1480
|
return observable;
|
|
1478
1481
|
}
|
|
1479
1482
|
}
|
|
1483
|
+
|
|
1484
|
+
function reducerFactory(observable) {
|
|
1485
|
+
return function reducer(state, action) {
|
|
1486
|
+
// always make sure these values are in sync with the observable
|
|
1487
|
+
var newState = _extends({}, state, {
|
|
1488
|
+
hasEmitted: state.hasEmitted || observable.hasValue,
|
|
1489
|
+
error: observable.ourError,
|
|
1490
|
+
firstValuePromise: observable.firstEmission
|
|
1491
|
+
});
|
|
1492
|
+
|
|
1493
|
+
if (observable.hasValue) {
|
|
1494
|
+
newState.data = observable.value;
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
switch (action) {
|
|
1498
|
+
case 'value':
|
|
1499
|
+
newState.status = 'success';
|
|
1500
|
+
return newState;
|
|
1501
|
+
|
|
1502
|
+
case 'error':
|
|
1503
|
+
newState.status = 'error';
|
|
1504
|
+
return newState;
|
|
1505
|
+
|
|
1506
|
+
case 'complete':
|
|
1507
|
+
newState.isComplete = true;
|
|
1508
|
+
return newState;
|
|
1509
|
+
|
|
1510
|
+
default:
|
|
1511
|
+
throw new Error("invalid action \"" + action + "\"");
|
|
1512
|
+
}
|
|
1513
|
+
};
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1480
1516
|
function useObservable(observableId, source, config) {
|
|
1481
1517
|
var _config$initialData, _config, _config2;
|
|
1482
1518
|
|
|
@@ -1484,71 +1520,52 @@ function useObservable(observableId, source, config) {
|
|
|
1484
1520
|
config = {};
|
|
1485
1521
|
}
|
|
1486
1522
|
|
|
1523
|
+
// Register the observable with the cache
|
|
1487
1524
|
if (!observableId) {
|
|
1488
1525
|
throw new Error('cannot call useObservable without an observableId');
|
|
1489
1526
|
}
|
|
1490
1527
|
|
|
1491
|
-
var observable = preloadObservable(source, observableId);
|
|
1528
|
+
var observable = preloadObservable(source, observableId); // Suspend if suspense is enabled and no initial data exists
|
|
1529
|
+
|
|
1492
1530
|
var hasInitialData = config.hasOwnProperty('initialData') || config.hasOwnProperty('startWithValue');
|
|
1531
|
+
var hasData = observable.hasValue || hasInitialData;
|
|
1493
1532
|
var suspenseEnabled = useSuspenseEnabledFromConfigAndContext(config.suspense);
|
|
1494
1533
|
|
|
1495
|
-
if (suspenseEnabled === true && !
|
|
1534
|
+
if (suspenseEnabled === true && !hasData) {
|
|
1496
1535
|
throw observable.firstEmission;
|
|
1497
1536
|
}
|
|
1498
1537
|
|
|
1499
|
-
var
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
var _React$useState2 = useState(false),
|
|
1508
|
-
isComplete = _React$useState2[0],
|
|
1509
|
-
setIsComplete = _React$useState2[1];
|
|
1538
|
+
var initialState = {
|
|
1539
|
+
status: hasData ? 'success' : 'loading',
|
|
1540
|
+
hasEmitted: hasData,
|
|
1541
|
+
isComplete: false,
|
|
1542
|
+
data: observable.hasValue ? observable.value : (_config$initialData = (_config = config) == null ? void 0 : _config.initialData) != null ? _config$initialData : (_config2 = config) == null ? void 0 : _config2.startWithValue,
|
|
1543
|
+
error: observable.ourError,
|
|
1544
|
+
firstValuePromise: observable.firstEmission
|
|
1545
|
+
};
|
|
1510
1546
|
|
|
1511
|
-
var _React$
|
|
1512
|
-
|
|
1513
|
-
|
|
1547
|
+
var _React$useReducer = useReducer(reducerFactory(observable), initialState),
|
|
1548
|
+
status = _React$useReducer[0],
|
|
1549
|
+
dispatch = _React$useReducer[1];
|
|
1514
1550
|
|
|
1515
1551
|
useEffect(function () {
|
|
1516
1552
|
var subscription = observable.subscribe({
|
|
1517
|
-
next: function next(
|
|
1518
|
-
|
|
1519
|
-
return v;
|
|
1520
|
-
});
|
|
1553
|
+
next: function next() {
|
|
1554
|
+
dispatch('value');
|
|
1521
1555
|
},
|
|
1522
1556
|
error: function error(e) {
|
|
1523
|
-
|
|
1557
|
+
dispatch('error');
|
|
1524
1558
|
throw e;
|
|
1525
1559
|
},
|
|
1526
1560
|
complete: function complete() {
|
|
1527
|
-
|
|
1561
|
+
dispatch('complete');
|
|
1528
1562
|
}
|
|
1529
1563
|
});
|
|
1530
1564
|
return function () {
|
|
1531
1565
|
return subscription.unsubscribe();
|
|
1532
1566
|
};
|
|
1533
1567
|
}, [observable]);
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
if (hasError) {
|
|
1537
|
-
status = 'error';
|
|
1538
|
-
} else if (observable.hasValue || hasInitialData) {
|
|
1539
|
-
status = 'success';
|
|
1540
|
-
} else {
|
|
1541
|
-
status = 'loading';
|
|
1542
|
-
}
|
|
1543
|
-
|
|
1544
|
-
return {
|
|
1545
|
-
status: status,
|
|
1546
|
-
hasEmitted: observable.hasValue || hasInitialData,
|
|
1547
|
-
isComplete: isComplete,
|
|
1548
|
-
data: latest,
|
|
1549
|
-
error: observable.ourError,
|
|
1550
|
-
firstValuePromise: observable.firstEmission
|
|
1551
|
-
};
|
|
1568
|
+
return status;
|
|
1552
1569
|
}
|
|
1553
1570
|
|
|
1554
1571
|
var cachedQueries$1 = globalThis._reactFireFirestoreQueryCache || [];
|
|
@@ -1673,6 +1690,21 @@ function useFirestoreCollectionData(query, options) {
|
|
|
1673
1690
|
return useObservable(observableId, observable$, options);
|
|
1674
1691
|
}
|
|
1675
1692
|
|
|
1693
|
+
/**
|
|
1694
|
+
* Calls a callable function.
|
|
1695
|
+
*
|
|
1696
|
+
* @param functionName - The name of the function to call
|
|
1697
|
+
* @param options
|
|
1698
|
+
*/
|
|
1699
|
+
|
|
1700
|
+
function useCallableFunctionResponse(functionName, options) {
|
|
1701
|
+
var functions = useFunctions();
|
|
1702
|
+
var observableId = "functions:callableResponse:" + functionName + ":" + JSON.stringify(options == null ? void 0 : options.data) + ":" + JSON.stringify(options == null ? void 0 : options.httpsCallableOptions);
|
|
1703
|
+
var obsFactory = httpsCallable(functions, functionName, options == null ? void 0 : options.httpsCallableOptions);
|
|
1704
|
+
var observable$ = obsFactory(options == null ? void 0 : options.data);
|
|
1705
|
+
return useObservable(observableId, observable$, options);
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1676
1708
|
function SuspenseWithPerf(_ref) {
|
|
1677
1709
|
var _performance;
|
|
1678
1710
|
|
|
@@ -1765,30 +1797,6 @@ function useRemoteConfigAll(key) {
|
|
|
1765
1797
|
}
|
|
1766
1798
|
|
|
1767
1799
|
var _excluded = ["storage", "storagePath", "suspense", "placeHolder"];
|
|
1768
|
-
/**
|
|
1769
|
-
* modified version of rxFire's _fromTask
|
|
1770
|
-
*
|
|
1771
|
-
* @param task
|
|
1772
|
-
*/
|
|
1773
|
-
|
|
1774
|
-
function _fromTask(task) {
|
|
1775
|
-
return new Observable(function (subscriber) {
|
|
1776
|
-
var progress = function progress(snap) {
|
|
1777
|
-
return subscriber.next(snap);
|
|
1778
|
-
};
|
|
1779
|
-
|
|
1780
|
-
var error = function error(e) {
|
|
1781
|
-
return subscriber.error(e);
|
|
1782
|
-
};
|
|
1783
|
-
|
|
1784
|
-
var complete = function complete() {
|
|
1785
|
-
return subscriber.complete();
|
|
1786
|
-
};
|
|
1787
|
-
|
|
1788
|
-
task.on('state_changed', progress, error, complete); // I REMOVED THE UNSUBSCRIBE RETURN BECAUSE IT CANCELS THE UPLOAD
|
|
1789
|
-
// https://github.com/firebase/firebase-js-sdk/issues/1659
|
|
1790
|
-
});
|
|
1791
|
-
}
|
|
1792
1800
|
/**
|
|
1793
1801
|
* Subscribe to the progress of a storage task
|
|
1794
1802
|
*
|
|
@@ -1797,12 +1805,9 @@ function _fromTask(task) {
|
|
|
1797
1805
|
* @param options
|
|
1798
1806
|
*/
|
|
1799
1807
|
|
|
1800
|
-
|
|
1801
1808
|
function useStorageTask(task, ref, options) {
|
|
1802
1809
|
var observableId = "storage:task:" + ref.toString();
|
|
1803
|
-
|
|
1804
|
-
var observable$ = _fromTask(task);
|
|
1805
|
-
|
|
1810
|
+
var observable$ = fromTask(task);
|
|
1806
1811
|
return useObservable(observableId, observable$, options);
|
|
1807
1812
|
}
|
|
1808
1813
|
/**
|
|
@@ -1869,10 +1874,12 @@ function StorageImage(props) {
|
|
|
1869
1874
|
}
|
|
1870
1875
|
}
|
|
1871
1876
|
|
|
1877
|
+
var AppCheckSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1872
1878
|
var AuthSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1873
1879
|
var AnalyticsSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1874
1880
|
var DatabaseSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1875
1881
|
var FirestoreSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1882
|
+
var FunctionsSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1876
1883
|
var StorageSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1877
1884
|
var PerformanceSdkContext = /*#__PURE__*/createContext(undefined);
|
|
1878
1885
|
var RemoteConfigSdkContext = /*#__PURE__*/createContext(undefined);
|
|
@@ -1916,13 +1923,18 @@ function useInitSdk(sdkName, SdkContext, sdkInitializer, options) {
|
|
|
1916
1923
|
return useObservable("firebase-sdk:" + sdkName + ":" + firebaseApp.name, from(initializeSdk), options);
|
|
1917
1924
|
}
|
|
1918
1925
|
|
|
1926
|
+
var AppCheckProvider = /*#__PURE__*/getSdkProvider(AppCheckSdkContext);
|
|
1919
1927
|
var AuthProvider = /*#__PURE__*/getSdkProvider(AuthSdkContext);
|
|
1920
1928
|
var AnalyticsProvider = /*#__PURE__*/getSdkProvider(AnalyticsSdkContext);
|
|
1921
1929
|
var DatabaseProvider = /*#__PURE__*/getSdkProvider(DatabaseSdkContext);
|
|
1922
1930
|
var FirestoreProvider = /*#__PURE__*/getSdkProvider(FirestoreSdkContext);
|
|
1931
|
+
var FunctionsProvider = /*#__PURE__*/getSdkProvider(FunctionsSdkContext);
|
|
1923
1932
|
var PerformanceProvider = /*#__PURE__*/getSdkProvider(PerformanceSdkContext);
|
|
1924
1933
|
var StorageProvider = /*#__PURE__*/getSdkProvider(StorageSdkContext);
|
|
1925
1934
|
var RemoteConfigProvider = /*#__PURE__*/getSdkProvider(RemoteConfigSdkContext);
|
|
1935
|
+
var useAppCheck = function useAppCheck() {
|
|
1936
|
+
return useSdk(AppCheckSdkContext);
|
|
1937
|
+
};
|
|
1926
1938
|
var useAuth = function useAuth() {
|
|
1927
1939
|
return useSdk(AuthSdkContext);
|
|
1928
1940
|
};
|
|
@@ -1935,6 +1947,9 @@ var useDatabase = function useDatabase() {
|
|
|
1935
1947
|
var useFirestore = function useFirestore() {
|
|
1936
1948
|
return useSdk(FirestoreSdkContext);
|
|
1937
1949
|
};
|
|
1950
|
+
var useFunctions = function useFunctions() {
|
|
1951
|
+
return useSdk(FunctionsSdkContext);
|
|
1952
|
+
};
|
|
1938
1953
|
var usePerformance = function usePerformance() {
|
|
1939
1954
|
return useSdk(PerformanceSdkContext);
|
|
1940
1955
|
};
|
|
@@ -1944,6 +1959,9 @@ var useStorage = function useStorage() {
|
|
|
1944
1959
|
var useRemoteConfig = function useRemoteConfig() {
|
|
1945
1960
|
return useSdk(RemoteConfigSdkContext);
|
|
1946
1961
|
};
|
|
1962
|
+
var useInitAppCheck = function useInitAppCheck(initializer, options) {
|
|
1963
|
+
return useInitSdk('appcheck', AppCheckSdkContext, initializer, options);
|
|
1964
|
+
};
|
|
1947
1965
|
var useInitAuth = function useInitAuth(initializer, options) {
|
|
1948
1966
|
return useInitSdk('auth', AuthSdkContext, initializer, options);
|
|
1949
1967
|
};
|
|
@@ -1956,6 +1974,9 @@ var useInitDatabase = function useInitDatabase(initializer, options) {
|
|
|
1956
1974
|
var useInitFirestore = function useInitFirestore(initializer, options) {
|
|
1957
1975
|
return useInitSdk('firestore', FirestoreSdkContext, initializer, options);
|
|
1958
1976
|
};
|
|
1977
|
+
var useInitFunctions = function useInitFunctions(initializer, options) {
|
|
1978
|
+
return useInitSdk('functions', FunctionsSdkContext, initializer, options);
|
|
1979
|
+
};
|
|
1959
1980
|
var useInitPerformance = function useInitPerformance(initializer, options) {
|
|
1960
1981
|
return useInitSdk('performance', PerformanceSdkContext, initializer, options);
|
|
1961
1982
|
};
|
|
@@ -2001,5 +2022,5 @@ function checkIdField(options) {
|
|
|
2001
2022
|
return checkOptions(options, 'idField');
|
|
2002
2023
|
}
|
|
2003
2024
|
|
|
2004
|
-
export { AnalyticsProvider, AuthCheck, AuthProvider, ClaimsCheck, DatabaseProvider, FirebaseAppProvider, FirestoreProvider, PerformanceProvider, ReactFireError, RemoteConfigProvider, StorageImage, StorageProvider, SuspenseWithPerf, checkIdField, checkOptions, checkinitialData, preloadFirestoreDoc, preloadObservable, preloadUser, useAnalytics, useAuth, useDatabase, useDatabaseList, useDatabaseListData, useDatabaseObject, useDatabaseObjectData, useFirebaseApp, useFirestore, useFirestoreCollection, useFirestoreCollectionData, useFirestoreDoc, useFirestoreDocData, useFirestoreDocDataOnce, useFirestoreDocOnce, useIdTokenResult, useInitAnalytics, useInitAuth, useInitDatabase, useInitFirestore, useInitPerformance, useInitRemoteConfig, useInitStorage, useIsSuspenseEnabled, useObservable, usePerformance, useRemoteConfig, useRemoteConfigAll, useRemoteConfigBoolean, useRemoteConfigNumber, useRemoteConfigString, useRemoteConfigValue, useSigninCheck, useStorage, useStorageDownloadURL, useStorageTask, useSuspenseEnabledFromConfigAndContext, useUser, version };
|
|
2025
|
+
export { AnalyticsProvider, AnalyticsSdkContext, AppCheckProvider, AppCheckSdkContext, AuthCheck, AuthProvider, AuthSdkContext, ClaimsCheck, DatabaseProvider, DatabaseSdkContext, FirebaseAppProvider, FirestoreProvider, FirestoreSdkContext, FunctionsProvider, FunctionsSdkContext, PerformanceProvider, PerformanceSdkContext, ReactFireError, RemoteConfigProvider, RemoteConfigSdkContext, StorageImage, StorageProvider, StorageSdkContext, SuspenseWithPerf, checkIdField, checkOptions, checkinitialData, preloadFirestoreDoc, preloadObservable, preloadUser, useAnalytics, useAppCheck, useAuth, useCallableFunctionResponse, useDatabase, useDatabaseList, useDatabaseListData, useDatabaseObject, useDatabaseObjectData, useFirebaseApp, useFirestore, useFirestoreCollection, useFirestoreCollectionData, useFirestoreDoc, useFirestoreDocData, useFirestoreDocDataOnce, useFirestoreDocOnce, useFunctions, useIdTokenResult, useInitAnalytics, useInitAppCheck, useInitAuth, useInitDatabase, useInitFirestore, useInitFunctions, useInitPerformance, useInitRemoteConfig, useInitStorage, useIsSuspenseEnabled, useObservable, usePerformance, useRemoteConfig, useRemoteConfigAll, useRemoteConfigBoolean, useRemoteConfigNumber, useRemoteConfigString, useRemoteConfigValue, useSigninCheck, useStorage, useStorageDownloadURL, useStorageTask, useSuspenseEnabledFromConfigAndContext, useUser, version };
|
|
2005
2026
|
//# sourceMappingURL=reactfire.esm.js.map
|