@nardole/firebase-react 0.1.4 → 0.1.5

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/README.md CHANGED
@@ -1,113 +1,113 @@
1
- # @nardole/firebase-react
2
-
3
- Elegant React bindings for @nardole/firebase-core. Provide the Firebase App via Context and access it anywhere with hooks. Works great in Micro‑Frontends thanks to the shared singleton under the hood.
4
-
5
- [![npm version](https://img.shields.io/npm/v/%40nardole%2Ffirebase-react.svg?logo=npm)](https://www.npmjs.com/package/@nardole/firebase-react)
6
- ![types](https://img.shields.io/badge/types-TypeScript-blue?logo=typescript)
7
- [![license: MIT](https://img.shields.io/badge/license-MIT-green.svg)](#license)
8
- [![react](https://img.shields.io/badge/react-%3E%3D17-61dafb?logo=react&logoColor=white)](https://react.dev/)
9
-
10
- - Why
11
- - Features
12
- - Installation
13
- - Quick Start
14
- - Usage
15
- - Provider
16
- - Hook
17
- - Micro‑Frontend (MFE)
18
- - API
19
- - Compatibility
20
- - Troubleshooting
21
- - License
22
-
23
- ## Why
24
- Managing Firebase initialization across multiple React apps or MFEs is error‑prone. This package provides a tiny Provider and Hook built on a shared singleton, ensuring exactly one Firebase instance.
25
-
26
- ## Features
27
- - FirebaseAppProvider to initialize and provide the app via React Context
28
- - useFirebaseApp hook to access the current FirebaseApp instance
29
- - Designed for MFEs — initialize once (even outside React) and reuse everywhere
30
-
31
- ## Installation
32
- - pnpm add @nardole/firebase-react @nardole/firebase-core firebase react react-dom
33
- - npm install @nardole/firebase-react @nardole/firebase-core firebase react react-dom
34
- - yarn add @nardole/firebase-react @nardole/firebase-core firebase react react-dom
35
-
36
- ## Quick Start
37
- 1. Wrap your application with the Provider using your Firebase options.
38
- 2. Use the Hook in child components to access the shared instance.
39
-
40
- ## Usage — Provider
41
- ```tsx
42
- import { FirebaseAppProvider } from '@nardole/firebase-react';
43
-
44
- export function AppRoot() {
45
- return (
46
- <FirebaseAppProvider
47
- options={{
48
- apiKey: 'YOUR_API_KEY',
49
- authDomain: 'YOUR_AUTH_DOMAIN',
50
- projectId: 'YOUR_PROJECT_ID',
51
- appId: 'YOUR_APP_ID',
52
- }}
53
- >
54
- <YourApp />
55
- </FirebaseAppProvider>
56
- );
57
- }
58
- ```
59
-
60
- ## Usage — Hook
61
- ```tsx
62
- import { useFirebaseApp } from '@nardole/firebase-react';
63
-
64
- export function AnyComponent() {
65
- const app = useFirebaseApp();
66
- // Use app with other firebase packages (auth, firestore, etc.)
67
- return null;
68
- }
69
- ```
70
-
71
- ## Micro‑Frontend (MFE)
72
- Initialize the core service in the shell or any federated module, and React MFEs will reuse it.
73
- ```ts
74
- // shell or any non-React mfe
75
- import { firebaseService } from '@nardole/firebase-core';
76
- firebaseService.init({ /* options */ });
77
- ```
78
- ```tsx
79
- // inside a React MFE
80
- import { FirebaseAppProvider, useFirebaseApp } from '@nardole/firebase-react';
81
-
82
- // Option A — wrap with the provider (reuses existing instance)
83
- <FirebaseAppProvider options={{ /* same options */ }}>
84
- <YourApp />
85
- </FirebaseAppProvider>
86
-
87
- // Option B — if the provider isn’t available, you can still use the hook
88
- const app = useFirebaseApp();
89
- ```
90
-
91
- ## API
92
-
93
- | Item | Props/Signature | Description | Notes/Errors |
94
- | --- | --- | --- | --- |
95
- | FirebaseAppProvider | <FirebaseAppProvider options: FirebaseOptions, name?: string, enableAnalytics?: boolean, enablePerformance?: boolean, enableRemoteConfig?: boolean, enableStorage?: boolean, enableAuth?: boolean, enableDatabase?: boolean, enableFirestore?: boolean> | React Provider that initializes and provides Firebase App via Context. It can also pre-instantiate and expose optional Firebase services via Context. | Internally calls firebaseService.init(options, name, true) when options/name change. Optional services are only available in Context if their respective enable flags are true. |
96
- | useFirebaseApp | useFirebaseApp(): FirebaseApp | Hook to get the current FirebaseApp from Context. | Throws if used outside a FirebaseAppProvider: "Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>" |
97
- | useAnalytics | useAnalytics(): Analytics | Hook to access Analytics from Context. | Throws if Provider not present or enableAnalytics not set. |
98
- | usePerformance | usePerformance(): FirebasePerformance | Hook to access Performance from Context. | Throws if Provider not present or enablePerformance not set. |
99
- | useRemoteConfig | useRemoteConfig(): RemoteConfig | Hook to access Remote Config from Context. | Throws if Provider not present or enableRemoteConfig not set. |
100
- | useStorage | useStorage(): FirebaseStorage | Hook to access Storage from Context. | Throws if Provider not present or enableStorage not set. |
101
- | useAuth | useAuth(): Auth | Hook to access Auth from Context. | Throws if Provider not present or enableAuth not set. |
102
- | useDatabase | useDatabase(): Database | Hook to access Realtime Database from Context. | Throws if Provider not present or enableDatabase not set. |
103
- | useFirestore | useFirestore(): Firestore | Hook to access Firestore from Context. | Throws if Provider not present or enableFirestore not set. |
104
-
105
- ## Compatibility
106
- - Peer: react >=17, react-dom >=17, firebase ^12, @nardole/firebase-core ^1
107
-
108
- ## Troubleshooting
109
- - Seeing "Firebase app already initialized" warnings/errors?
110
- - Ensure your MFEs share the same options and app name, or rely on the @nardole/firebase-core singleton. The Provider uses `override` to safely update when props change.
111
-
112
- ## License
113
- MIT
1
+ # @nardole/firebase-react
2
+
3
+ Elegant React bindings for @nardole/firebase-core. Provide the Firebase App via Context and access it anywhere with hooks. Works great in Micro‑Frontends thanks to the shared singleton under the hood.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/%40nardole%2Ffirebase-react.svg?logo=npm)](https://www.npmjs.com/package/@nardole/firebase-react)
6
+ ![types](https://img.shields.io/badge/types-TypeScript-blue?logo=typescript)
7
+ [![license: MIT](https://img.shields.io/badge/license-MIT-green.svg)](#license)
8
+ [![react](https://img.shields.io/badge/react-%3E%3D17-61dafb?logo=react&logoColor=white)](https://react.dev/)
9
+
10
+ - Why
11
+ - Features
12
+ - Installation
13
+ - Quick Start
14
+ - Usage
15
+ - Provider
16
+ - Hook
17
+ - Micro‑Frontend (MFE)
18
+ - API
19
+ - Compatibility
20
+ - Troubleshooting
21
+ - License
22
+
23
+ ## Why
24
+ Managing Firebase initialization across multiple React apps or MFEs is error‑prone. This package provides a tiny Provider and Hook built on a shared singleton, ensuring exactly one Firebase instance.
25
+
26
+ ## Features
27
+ - FirebaseAppProvider to initialize and provide the app via React Context
28
+ - useFirebaseApp hook to access the current FirebaseApp instance
29
+ - Designed for MFEs — initialize once (even outside React) and reuse everywhere
30
+
31
+ ## Installation
32
+ - pnpm add @nardole/firebase-react @nardole/firebase-core firebase react react-dom
33
+ - npm install @nardole/firebase-react @nardole/firebase-core firebase react react-dom
34
+ - yarn add @nardole/firebase-react @nardole/firebase-core firebase react react-dom
35
+
36
+ ## Quick Start
37
+ 1. Wrap your application with the Provider using your Firebase options.
38
+ 2. Use the Hook in child components to access the shared instance.
39
+
40
+ ## Usage — Provider
41
+ ```tsx
42
+ import { FirebaseAppProvider } from '@nardole/firebase-react';
43
+
44
+ export function AppRoot() {
45
+ return (
46
+ <FirebaseAppProvider
47
+ options={{
48
+ apiKey: 'YOUR_API_KEY',
49
+ authDomain: 'YOUR_AUTH_DOMAIN',
50
+ projectId: 'YOUR_PROJECT_ID',
51
+ appId: 'YOUR_APP_ID',
52
+ }}
53
+ >
54
+ <YourApp />
55
+ </FirebaseAppProvider>
56
+ );
57
+ }
58
+ ```
59
+
60
+ ## Usage — Hook
61
+ ```tsx
62
+ import { useFirebaseApp } from '@nardole/firebase-react';
63
+
64
+ export function AnyComponent() {
65
+ const app = useFirebaseApp();
66
+ // Use app with other firebase packages (auth, firestore, etc.)
67
+ return null;
68
+ }
69
+ ```
70
+
71
+ ## Micro‑Frontend (MFE)
72
+ Initialize the core service in the shell or any federated module, and React MFEs will reuse it.
73
+ ```ts
74
+ // shell or any non-React mfe
75
+ import { firebaseService } from '@nardole/firebase-core';
76
+ firebaseService.init({ /* options */ });
77
+ ```
78
+ ```tsx
79
+ // inside a React MFE
80
+ import { FirebaseAppProvider, useFirebaseApp } from '@nardole/firebase-react';
81
+
82
+ // Option A — wrap with the provider (reuses existing instance)
83
+ <FirebaseAppProvider options={{ /* same options */ }}>
84
+ <YourApp />
85
+ </FirebaseAppProvider>
86
+
87
+ // Option B — if the provider isn’t available, you can still use the hook
88
+ const app = useFirebaseApp();
89
+ ```
90
+
91
+ ## API
92
+
93
+ | Item | Props/Signature | Description | Notes/Errors |
94
+ | --- | --- | --- | --- |
95
+ | FirebaseAppProvider | <FirebaseAppProvider options: FirebaseOptions, name?: string, enableAnalytics?: boolean, enablePerformance?: boolean, enableRemoteConfig?: boolean, enableStorage?: boolean, enableAuth?: boolean, enableDatabase?: boolean, enableFirestore?: boolean> | React Provider that initializes and provides Firebase App via Context. It can also pre-instantiate and expose optional Firebase services via Context. | Internally calls firebaseService.init(options, name, true) when options/name change. Optional services are only available in Context if their respective enable flags are true. |
96
+ | useFirebaseApp | useFirebaseApp(): FirebaseApp | Hook to get the current FirebaseApp from Context. | Throws if used outside a FirebaseAppProvider: "Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>" |
97
+ | useAnalytics | useAnalytics(): Analytics | Hook to access Analytics from Context. | Throws if Provider not present or enableAnalytics not set. |
98
+ | usePerformance | usePerformance(): FirebasePerformance | Hook to access Performance from Context. | Throws if Provider not present or enablePerformance not set. |
99
+ | useRemoteConfig | useRemoteConfig(): RemoteConfig | Hook to access Remote Config from Context. | Throws if Provider not present or enableRemoteConfig not set. |
100
+ | useStorage | useStorage(): FirebaseStorage | Hook to access Storage from Context. | Throws if Provider not present or enableStorage not set. |
101
+ | useAuth | useAuth(): Auth | Hook to access Auth from Context. | Throws if Provider not present or enableAuth not set. |
102
+ | useDatabase | useDatabase(): Database | Hook to access Realtime Database from Context. | Throws if Provider not present or enableDatabase not set. |
103
+ | useFirestore | useFirestore(): Firestore | Hook to access Firestore from Context. | Throws if Provider not present or enableFirestore not set. |
104
+
105
+ ## Compatibility
106
+ - Peer: react >=17, react-dom >=17, firebase ^12, @nardole/firebase-core ^1
107
+
108
+ ## Troubleshooting
109
+ - Seeing "Firebase app already initialized" warnings/errors?
110
+ - Ensure your MFEs share the same options and app name, or rely on the @nardole/firebase-core singleton. The Provider uses `override` to safely update when props change.
111
+
112
+ ## License
113
+ MIT
@@ -0,0 +1,23 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ exports.__toESM = __toESM;
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useAnalytics.ts
6
+ function useAnalytics() {
7
+ const app = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!app || !app.analytics) throw new Error("Analytics is not enabled for this Firebase app");
9
+ return app.analytics;
10
+ }
11
+ //#endregion
12
+ exports.useAnalytics = useAnalytics;
@@ -0,0 +1,2 @@
1
+ import { Analytics } from '@firebase/analytics';
2
+ export declare function useAnalytics(): Analytics;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/useAnalytics.ts
4
+ function useAnalytics() {
5
+ const app = useContext(FirebaseAppContext);
6
+ if (!app || !app.analytics) throw new Error("Analytics is not enabled for this Firebase app");
7
+ return app.analytics;
8
+ }
9
+ //#endregion
10
+ export { useAnalytics };
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useAuth.ts
6
+ function useAuth() {
7
+ const value = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!value || value.auth === void 0) throw new Error("Firebase auth isn't found, did you forget to enable it in <FirebaseAppProvider>");
9
+ return value.auth;
10
+ }
11
+ //#endregion
12
+ exports.useAuth = useAuth;
@@ -0,0 +1,2 @@
1
+ import { Auth } from '@firebase/auth';
2
+ export declare function useAuth(): Auth;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/useAuth.ts
4
+ function useAuth() {
5
+ const value = useContext(FirebaseAppContext);
6
+ if (!value || value.auth === void 0) throw new Error("Firebase auth isn't found, did you forget to enable it in <FirebaseAppProvider>");
7
+ return value.auth;
8
+ }
9
+ //#endregion
10
+ export { useAuth };
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useDatabase.ts
6
+ function useDatabase() {
7
+ const value = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!value || value.database === void 0) throw new Error("Firebase database isn't found, did you forget to enable it in <FirebaseAppProvider>");
9
+ return value.database;
10
+ }
11
+ //#endregion
12
+ exports.useDatabase = useDatabase;
@@ -0,0 +1,2 @@
1
+ import { Database } from '@firebase/database';
2
+ export declare function useDatabase(): Database;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/useDatabase.ts
4
+ function useDatabase() {
5
+ const value = useContext(FirebaseAppContext);
6
+ if (!value || value.database === void 0) throw new Error("Firebase database isn't found, did you forget to enable it in <FirebaseAppProvider>");
7
+ return value.database;
8
+ }
9
+ //#endregion
10
+ export { useDatabase };
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useFirebaseApp.ts
6
+ function useFirebaseApp() {
7
+ const value = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!value || value.app === void 0) throw new Error("Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>");
9
+ return value.app;
10
+ }
11
+ //#endregion
12
+ exports.useFirebaseApp = useFirebaseApp;
@@ -0,0 +1,2 @@
1
+ import { FirebaseApp } from '@firebase/app';
2
+ export declare function useFirebaseApp(): FirebaseApp;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/useFirebaseApp.ts
4
+ function useFirebaseApp() {
5
+ const value = useContext(FirebaseAppContext);
6
+ if (!value || value.app === void 0) throw new Error("Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>");
7
+ return value.app;
8
+ }
9
+ //#endregion
10
+ export { useFirebaseApp };
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useFirestore.ts
6
+ function useFirestore() {
7
+ const value = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!value || value.firestore === void 0) throw new Error("Firebase firestore isn't found, did you forget to enable it in <FirebaseAppProvider>");
9
+ return value.firestore;
10
+ }
11
+ //#endregion
12
+ exports.useFirestore = useFirestore;
@@ -0,0 +1,2 @@
1
+ import { Firestore } from '@firebase/firestore';
2
+ export declare function useFirestore(): Firestore;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/useFirestore.ts
4
+ function useFirestore() {
5
+ const value = useContext(FirebaseAppContext);
6
+ if (!value || value.firestore === void 0) throw new Error("Firebase firestore isn't found, did you forget to enable it in <FirebaseAppProvider>");
7
+ return value.firestore;
8
+ }
9
+ //#endregion
10
+ export { useFirestore };
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/usePerformance.ts
6
+ function usePerformance() {
7
+ const value = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!value || value.performance === void 0) throw new Error("Firebase performance isn't found, did you forget to enable it in <FirebaseAppProvider>");
9
+ return value.performance;
10
+ }
11
+ //#endregion
12
+ exports.usePerformance = usePerformance;
@@ -0,0 +1,2 @@
1
+ import { FirebasePerformance } from '@firebase/performance';
2
+ export declare function usePerformance(): FirebasePerformance;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/usePerformance.ts
4
+ function usePerformance() {
5
+ const value = useContext(FirebaseAppContext);
6
+ if (!value || value.performance === void 0) throw new Error("Firebase performance isn't found, did you forget to enable it in <FirebaseAppProvider>");
7
+ return value.performance;
8
+ }
9
+ //#endregion
10
+ export { usePerformance };
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useRemoteConfig.ts
6
+ function useRemoteConfig() {
7
+ const value = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!value || value.remoteConfig === void 0) throw new Error("Firebase remote config isn't found, did you forget to enable it in <FirebaseAppProvider>");
9
+ return value.remoteConfig;
10
+ }
11
+ //#endregion
12
+ exports.useRemoteConfig = useRemoteConfig;
@@ -0,0 +1,2 @@
1
+ import { RemoteConfig } from '@firebase/remote-config';
2
+ export declare function useRemoteConfig(): RemoteConfig;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/useRemoteConfig.ts
4
+ function useRemoteConfig() {
5
+ const value = useContext(FirebaseAppContext);
6
+ if (!value || value.remoteConfig === void 0) throw new Error("Firebase remote config isn't found, did you forget to enable it in <FirebaseAppProvider>");
7
+ return value.remoteConfig;
8
+ }
9
+ //#endregion
10
+ export { useRemoteConfig };
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_providers_FirebaseAppProvider = require("../providers/FirebaseAppProvider.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useStorage.ts
6
+ function useStorage() {
7
+ const value = (0, react.useContext)(require_providers_FirebaseAppProvider.FirebaseAppContext);
8
+ if (!value || value.storage === void 0) throw new Error("Firebase storage isn't found, did you forget to enable it in <FirebaseAppProvider>");
9
+ return value.storage;
10
+ }
11
+ //#endregion
12
+ exports.useStorage = useStorage;
@@ -0,0 +1,2 @@
1
+ import { FirebaseStorage } from '@firebase/storage';
2
+ export declare function useStorage(): FirebaseStorage;
@@ -0,0 +1,10 @@
1
+ import { FirebaseAppContext } from "../providers/FirebaseAppProvider.js";
2
+ import { useContext } from "react";
3
+ //#region src/hooks/useStorage.ts
4
+ function useStorage() {
5
+ const value = useContext(FirebaseAppContext);
6
+ if (!value || value.storage === void 0) throw new Error("Firebase storage isn't found, did you forget to enable it in <FirebaseAppProvider>");
7
+ return value.storage;
8
+ }
9
+ //#endregion
10
+ export { useStorage };
package/dist/main.cjs ADDED
@@ -0,0 +1,20 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_providers_FirebaseAppProvider = require("./providers/FirebaseAppProvider.cjs");
3
+ const require_hooks_useAnalytics = require("./hooks/useAnalytics.cjs");
4
+ const require_hooks_useAuth = require("./hooks/useAuth.cjs");
5
+ const require_hooks_useDatabase = require("./hooks/useDatabase.cjs");
6
+ const require_hooks_useFirebaseApp = require("./hooks/useFirebaseApp.cjs");
7
+ const require_hooks_useFirestore = require("./hooks/useFirestore.cjs");
8
+ const require_hooks_usePerformance = require("./hooks/usePerformance.cjs");
9
+ const require_hooks_useRemoteConfig = require("./hooks/useRemoteConfig.cjs");
10
+ const require_hooks_useStorage = require("./hooks/useStorage.cjs");
11
+ exports.FirebaseAppContext = require_providers_FirebaseAppProvider.FirebaseAppContext;
12
+ exports.FirebaseAppProvider = require_providers_FirebaseAppProvider.FirebaseAppProvider;
13
+ exports.useAnalytics = require_hooks_useAnalytics.useAnalytics;
14
+ exports.useAuth = require_hooks_useAuth.useAuth;
15
+ exports.useDatabase = require_hooks_useDatabase.useDatabase;
16
+ exports.useFirebaseApp = require_hooks_useFirebaseApp.useFirebaseApp;
17
+ exports.useFirestore = require_hooks_useFirestore.useFirestore;
18
+ exports.usePerformance = require_hooks_usePerformance.usePerformance;
19
+ exports.useRemoteConfig = require_hooks_useRemoteConfig.useRemoteConfig;
20
+ exports.useStorage = require_hooks_useStorage.useStorage;
package/dist/main.d.ts CHANGED
@@ -1,64 +1,9 @@
1
- import { Analytics } from '@firebase/analytics';
2
- import { Analytics as Analytics_2 } from 'firebase/analytics';
3
- import { Auth } from '@firebase/auth';
4
- import { Auth as Auth_2 } from 'firebase/auth';
5
- import { Database } from '@firebase/database';
6
- import { Database as Database_2 } from 'firebase/database';
7
- import { default as default_2 } from 'react';
8
- import { FirebaseApp } from '@firebase/app';
9
- import { FirebaseApp as FirebaseApp_2 } from 'firebase/app';
10
- import { FirebaseOptions } from 'firebase/app';
11
- import { FirebasePerformance } from '@firebase/performance';
12
- import { FirebasePerformance as FirebasePerformance_2 } from 'firebase/performance';
13
- import { FirebaseStorage } from '@firebase/storage';
14
- import { FirebaseStorage as FirebaseStorage_2 } from 'firebase/storage';
15
- import { Firestore } from '@firebase/firestore';
16
- import { Firestore as Firestore_2 } from 'firebase/firestore';
17
- import { JSX } from 'react/jsx-runtime';
18
- import { RemoteConfig } from '@firebase/remote-config';
19
- import { RemoteConfig as RemoteConfig_2 } from 'firebase/remote-config';
20
-
21
- export declare const FirebaseAppContext: default_2.Context<FirebaseAppContextValue | undefined>;
22
-
23
- declare type FirebaseAppContextValue = {
24
- app: FirebaseApp_2;
25
- analytics?: Analytics_2;
26
- performance?: FirebasePerformance_2;
27
- remoteConfig?: RemoteConfig_2;
28
- storage?: FirebaseStorage_2;
29
- auth?: Auth_2;
30
- database?: Database_2;
31
- firestore?: Firestore_2;
32
- };
33
-
34
- export declare function FirebaseAppProvider({ options, name, enableAnalytics, enablePerformance, enableRemoteConfig, enableStorage, enableAuth, enableDatabase, enableFirestore, children, }: FirebaseAppProviderProps): JSX.Element;
35
-
36
- declare type FirebaseAppProviderProps = default_2.PropsWithChildren<{
37
- options: FirebaseOptions;
38
- name?: string;
39
- enableAnalytics?: boolean;
40
- enablePerformance?: boolean;
41
- enableRemoteConfig?: boolean;
42
- enableStorage?: boolean;
43
- enableAuth?: boolean;
44
- enableDatabase?: boolean;
45
- enableFirestore?: boolean;
46
- }>;
47
-
48
- export declare function useAnalytics(): Analytics;
49
-
50
- export declare function useAuth(): Auth;
51
-
52
- export declare function useDatabase(): Database;
53
-
54
- export declare function useFirebaseApp(): FirebaseApp;
55
-
56
- export declare function useFirestore(): Firestore;
57
-
58
- export declare function usePerformance(): FirebasePerformance;
59
-
60
- export declare function useRemoteConfig(): RemoteConfig;
61
-
62
- export declare function useStorage(): FirebaseStorage;
63
-
64
- export { }
1
+ export * from './hooks/useAnalytics.ts';
2
+ export * from './hooks/useAuth.ts';
3
+ export * from './hooks/useDatabase.ts';
4
+ export * from './hooks/useFirebaseApp.ts';
5
+ export * from './hooks/useFirestore.ts';
6
+ export * from './hooks/usePerformance.ts';
7
+ export * from './hooks/useRemoteConfig.ts';
8
+ export * from './hooks/useStorage.ts';
9
+ export * from './providers/FirebaseAppProvider.tsx';
package/dist/main.js CHANGED
@@ -1,87 +1,10 @@
1
- import React, { useContext, useMemo, useRef } from "react";
2
- import { firebaseService } from "@nardole/firebase-core";
3
- import { jsx } from "react/jsx-runtime";
4
- //#region src/providers/FirebaseAppProvider.tsx
5
- var FirebaseAppContext = React.createContext(void 0);
6
- function FirebaseAppProvider({ options, name, enableAnalytics, enablePerformance, enableRemoteConfig, enableStorage, enableAuth, enableDatabase, enableFirestore, children }) {
7
- const firebase = useContext(FirebaseAppContext);
8
- const optionsRef = useRef(void 0);
9
- const nameRef = useRef(void 0);
10
- const value = useMemo(() => {
11
- if (!firebase && (optionsRef.current !== options || nameRef.current !== name)) firebaseService.init(options, name, true);
12
- optionsRef.current = options;
13
- nameRef.current = name;
14
- return {
15
- app: firebaseService.app,
16
- analytics: enableAnalytics ? firebaseService.analytics : void 0,
17
- performance: enablePerformance ? firebaseService.performance : void 0,
18
- remoteConfig: enableRemoteConfig ? firebaseService.remoteConfig : void 0,
19
- storage: enableStorage ? firebaseService.storage : void 0,
20
- auth: enableAuth ? firebaseService.auth : void 0,
21
- database: enableDatabase ? firebaseService.database : void 0,
22
- firestore: enableFirestore ? firebaseService.firestore : void 0
23
- };
24
- }, [options, name]);
25
- return /* @__PURE__ */ jsx(FirebaseAppContext.Provider, {
26
- value,
27
- children
28
- });
29
- }
30
- //#endregion
31
- //#region src/hooks/useAnalytics.ts
32
- function useAnalytics() {
33
- const app = useContext(FirebaseAppContext);
34
- if (!app || !app.analytics) throw new Error("Analytics is not enabled for this Firebase app");
35
- return app.analytics;
36
- }
37
- //#endregion
38
- //#region src/hooks/useAuth.ts
39
- function useAuth() {
40
- const value = useContext(FirebaseAppContext);
41
- if (!value || value.auth === void 0) throw new Error("Firebase auth isn't found, did you forget to enable it in <FirebaseAppProvider>");
42
- return value.auth;
43
- }
44
- //#endregion
45
- //#region src/hooks/useDatabase.ts
46
- function useDatabase() {
47
- const value = useContext(FirebaseAppContext);
48
- if (!value || value.database === void 0) throw new Error("Firebase database isn't found, did you forget to enable it in <FirebaseAppProvider>");
49
- return value.database;
50
- }
51
- //#endregion
52
- //#region src/hooks/useFirebaseApp.ts
53
- function useFirebaseApp() {
54
- const value = useContext(FirebaseAppContext);
55
- if (!value || value.app === void 0) throw new Error("Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>");
56
- return value.app;
57
- }
58
- //#endregion
59
- //#region src/hooks/useFirestore.ts
60
- function useFirestore() {
61
- const value = useContext(FirebaseAppContext);
62
- if (!value || value.firestore === void 0) throw new Error("Firebase firestore isn't found, did you forget to enable it in <FirebaseAppProvider>");
63
- return value.firestore;
64
- }
65
- //#endregion
66
- //#region src/hooks/usePerformance.ts
67
- function usePerformance() {
68
- const value = useContext(FirebaseAppContext);
69
- if (!value || value.performance === void 0) throw new Error("Firebase performance isn't found, did you forget to enable it in <FirebaseAppProvider>");
70
- return value.performance;
71
- }
72
- //#endregion
73
- //#region src/hooks/useRemoteConfig.ts
74
- function useRemoteConfig() {
75
- const value = useContext(FirebaseAppContext);
76
- if (!value || value.remoteConfig === void 0) throw new Error("Firebase remote config isn't found, did you forget to enable it in <FirebaseAppProvider>");
77
- return value.remoteConfig;
78
- }
79
- //#endregion
80
- //#region src/hooks/useStorage.ts
81
- function useStorage() {
82
- const value = useContext(FirebaseAppContext);
83
- if (!value || value.storage === void 0) throw new Error("Firebase storage isn't found, did you forget to enable it in <FirebaseAppProvider>");
84
- return value.storage;
85
- }
86
- //#endregion
1
+ import { FirebaseAppContext, FirebaseAppProvider } from "./providers/FirebaseAppProvider.js";
2
+ import { useAnalytics } from "./hooks/useAnalytics.js";
3
+ import { useAuth } from "./hooks/useAuth.js";
4
+ import { useDatabase } from "./hooks/useDatabase.js";
5
+ import { useFirebaseApp } from "./hooks/useFirebaseApp.js";
6
+ import { useFirestore } from "./hooks/useFirestore.js";
7
+ import { usePerformance } from "./hooks/usePerformance.js";
8
+ import { useRemoteConfig } from "./hooks/useRemoteConfig.js";
9
+ import { useStorage } from "./hooks/useStorage.js";
87
10
  export { FirebaseAppContext, FirebaseAppProvider, useAnalytics, useAuth, useDatabase, useFirebaseApp, useFirestore, usePerformance, useRemoteConfig, useStorage };
@@ -0,0 +1,35 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ let react = require("react");
4
+ react = require_runtime.__toESM(react);
5
+ let _nardole_firebase_core = require("@nardole/firebase-core");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ //#region src/providers/FirebaseAppProvider.tsx
8
+ var FirebaseAppContext = react.default.createContext(void 0);
9
+ function FirebaseAppProvider({ options, name, enableAnalytics, enablePerformance, enableRemoteConfig, enableStorage, enableAuth, enableDatabase, enableFirestore, children }) {
10
+ const firebase = (0, react.useContext)(FirebaseAppContext);
11
+ const optionsRef = (0, react.useRef)(void 0);
12
+ const nameRef = (0, react.useRef)(void 0);
13
+ const value = (0, react.useMemo)(() => {
14
+ if (!firebase && (optionsRef.current !== options || nameRef.current !== name)) _nardole_firebase_core.firebaseService.init(options, name, true);
15
+ optionsRef.current = options;
16
+ nameRef.current = name;
17
+ return {
18
+ app: _nardole_firebase_core.firebaseService.app,
19
+ analytics: enableAnalytics ? _nardole_firebase_core.firebaseService.analytics : void 0,
20
+ performance: enablePerformance ? _nardole_firebase_core.firebaseService.performance : void 0,
21
+ remoteConfig: enableRemoteConfig ? _nardole_firebase_core.firebaseService.remoteConfig : void 0,
22
+ storage: enableStorage ? _nardole_firebase_core.firebaseService.storage : void 0,
23
+ auth: enableAuth ? _nardole_firebase_core.firebaseService.auth : void 0,
24
+ database: enableDatabase ? _nardole_firebase_core.firebaseService.database : void 0,
25
+ firestore: enableFirestore ? _nardole_firebase_core.firebaseService.firestore : void 0
26
+ };
27
+ }, [options, name]);
28
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FirebaseAppContext.Provider, {
29
+ value,
30
+ children
31
+ });
32
+ }
33
+ //#endregion
34
+ exports.FirebaseAppContext = FirebaseAppContext;
35
+ exports.FirebaseAppProvider = FirebaseAppProvider;
@@ -0,0 +1,33 @@
1
+ import { default as React } from 'react';
2
+ import { FirebaseApp, FirebaseOptions } from 'firebase/app';
3
+ import { Analytics } from 'firebase/analytics';
4
+ import { FirebasePerformance } from 'firebase/performance';
5
+ import { RemoteConfig } from 'firebase/remote-config';
6
+ import { FirebaseStorage } from 'firebase/storage';
7
+ import { Auth } from 'firebase/auth';
8
+ import { Database } from 'firebase/database';
9
+ import { Firestore } from 'firebase/firestore';
10
+ type FirebaseAppContextValue = {
11
+ app: FirebaseApp;
12
+ analytics?: Analytics;
13
+ performance?: FirebasePerformance;
14
+ remoteConfig?: RemoteConfig;
15
+ storage?: FirebaseStorage;
16
+ auth?: Auth;
17
+ database?: Database;
18
+ firestore?: Firestore;
19
+ };
20
+ export declare const FirebaseAppContext: React.Context<FirebaseAppContextValue | undefined>;
21
+ type FirebaseAppProviderProps = React.PropsWithChildren<{
22
+ options: FirebaseOptions;
23
+ name?: string;
24
+ enableAnalytics?: boolean;
25
+ enablePerformance?: boolean;
26
+ enableRemoteConfig?: boolean;
27
+ enableStorage?: boolean;
28
+ enableAuth?: boolean;
29
+ enableDatabase?: boolean;
30
+ enableFirestore?: boolean;
31
+ }>;
32
+ export declare function FirebaseAppProvider({ options, name, enableAnalytics, enablePerformance, enableRemoteConfig, enableStorage, enableAuth, enableDatabase, enableFirestore, children, }: FirebaseAppProviderProps): import("react/jsx-runtime").JSX.Element;
33
+ export {};
@@ -0,0 +1,31 @@
1
+ import React, { useContext, useMemo, useRef } from "react";
2
+ import { firebaseService } from "@nardole/firebase-core";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/providers/FirebaseAppProvider.tsx
5
+ var FirebaseAppContext = React.createContext(void 0);
6
+ function FirebaseAppProvider({ options, name, enableAnalytics, enablePerformance, enableRemoteConfig, enableStorage, enableAuth, enableDatabase, enableFirestore, children }) {
7
+ const firebase = useContext(FirebaseAppContext);
8
+ const optionsRef = useRef(void 0);
9
+ const nameRef = useRef(void 0);
10
+ const value = useMemo(() => {
11
+ if (!firebase && (optionsRef.current !== options || nameRef.current !== name)) firebaseService.init(options, name, true);
12
+ optionsRef.current = options;
13
+ nameRef.current = name;
14
+ return {
15
+ app: firebaseService.app,
16
+ analytics: enableAnalytics ? firebaseService.analytics : void 0,
17
+ performance: enablePerformance ? firebaseService.performance : void 0,
18
+ remoteConfig: enableRemoteConfig ? firebaseService.remoteConfig : void 0,
19
+ storage: enableStorage ? firebaseService.storage : void 0,
20
+ auth: enableAuth ? firebaseService.auth : void 0,
21
+ database: enableDatabase ? firebaseService.database : void 0,
22
+ firestore: enableFirestore ? firebaseService.firestore : void 0
23
+ };
24
+ }, [options, name]);
25
+ return /* @__PURE__ */ jsx(FirebaseAppContext.Provider, {
26
+ value,
27
+ children
28
+ });
29
+ }
30
+ //#endregion
31
+ export { FirebaseAppContext, FirebaseAppProvider };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nardole/firebase-react",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "keywords": [
5
5
  "firebase",
6
6
  "react",
@@ -34,14 +34,28 @@
34
34
  "types": "dist/main.d.ts",
35
35
  "module": "dist/main.js",
36
36
  "exports": {
37
+ "./package.json": "./package.json",
37
38
  ".": {
38
- "types": "./dist/main.d.ts",
39
- "import": "./dist/main.js"
39
+ "require": {
40
+ "types": "./dist/main.d.ts",
41
+ "import": "./dist/main.cjs"
42
+ },
43
+ "import": {
44
+ "types": "./dist/main.d.ts",
45
+ "import": "./dist/main.js"
46
+ }
40
47
  },
41
48
  "./*": {
42
- "types": "./dist/*.d.ts",
43
- "import": "./dist/*.js"
44
- }
49
+ "require": {
50
+ "types": "./dist/*.d.ts",
51
+ "import": "./dist/*.cjs"
52
+ },
53
+ "import": {
54
+ "types": "./dist/*.d.ts",
55
+ "import": "./dist/*.js"
56
+ }
57
+ },
58
+ "./esm": null
45
59
  },
46
60
  "files": [
47
61
  "dist"
@@ -61,11 +75,12 @@
61
75
  "react-dom": "*"
62
76
  },
63
77
  "devDependencies": {
64
- "@nardole/firebase-core": "^0.0.15",
78
+ "@nardole/firebase-core": "^0.0.16",
65
79
  "@types/react": "^19.2.14",
66
80
  "@types/react-dom": "^19.2.3",
67
81
  "@vitejs/plugin-react": "^5.1.4",
68
82
  "firebase": "^12.9.0",
83
+ "glob": "^13.0.6",
69
84
  "typescript": "^5.9.3",
70
85
  "vite": "^8.0.0",
71
86
  "vite-plugin-dts": "^4.5.4"