@nardole/firebase-react 0.1.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/README.md ADDED
@@ -0,0 +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
@@ -0,0 +1,53 @@
1
+ import * as _firebase_firestore from '@firebase/firestore';
2
+ import * as _firebase_database from '@firebase/database';
3
+ import * as _firebase_auth from '@firebase/auth';
4
+ import * as _firebase_storage from '@firebase/storage';
5
+ import * as _firebase_remote_config from '@firebase/remote-config';
6
+ import * as _firebase_performance from '@firebase/performance';
7
+ import * as _firebase_analytics from '@firebase/analytics';
8
+ import * as _firebase_app from '@firebase/app';
9
+ import React from 'react';
10
+ import { FirebaseOptions, FirebaseApp } from 'firebase/app';
11
+ import { Analytics } from 'firebase/analytics';
12
+ import { FirebasePerformance } from 'firebase/performance';
13
+ import { RemoteConfig } from 'firebase/remote-config';
14
+ import { FirebaseStorage } from 'firebase/storage';
15
+ import { Auth } from 'firebase/auth';
16
+ import { Database } from 'firebase/database';
17
+ import { Firestore } from 'firebase/firestore';
18
+
19
+ declare function useFirebaseApp(): _firebase_app.FirebaseApp;
20
+ declare function useAnalytics(): _firebase_analytics.Analytics;
21
+ declare function usePerformance(): _firebase_performance.FirebasePerformance;
22
+ declare function useRemoteConfig(): _firebase_remote_config.RemoteConfig;
23
+ declare function useStorage(): _firebase_storage.FirebaseStorage;
24
+ declare function useAuth(): _firebase_auth.Auth;
25
+ declare function useDatabase(): _firebase_database.Database;
26
+ declare function useFirestore(): _firebase_firestore.Firestore;
27
+
28
+ type FirebaseAppProviderProps = React.PropsWithChildren<{
29
+ options: FirebaseOptions;
30
+ name?: string;
31
+ enableAnalytics?: boolean;
32
+ enablePerformance?: boolean;
33
+ enableRemoteConfig?: boolean;
34
+ enableStorage?: boolean;
35
+ enableAuth?: boolean;
36
+ enableDatabase?: boolean;
37
+ enableFirestore?: boolean;
38
+ }>;
39
+ declare function FirebaseAppProvider({ options, name, enableAnalytics, enablePerformance, enableRemoteConfig, enableStorage, enableAuth, enableDatabase, enableFirestore, children, }: FirebaseAppProviderProps): React.JSX.Element;
40
+
41
+ type FirebaseAppContextValue = {
42
+ app: FirebaseApp;
43
+ analytics?: Analytics;
44
+ performance?: FirebasePerformance;
45
+ remoteConfig?: RemoteConfig;
46
+ storage?: FirebaseStorage;
47
+ auth?: Auth;
48
+ database?: Database;
49
+ firestore?: Firestore;
50
+ };
51
+ declare const FirebaseAppContext: React.Context<FirebaseAppContextValue | undefined>;
52
+
53
+ export { FirebaseAppContext, type FirebaseAppContextValue, FirebaseAppProvider, type FirebaseAppProviderProps, useAnalytics, useAuth, useDatabase, useFirebaseApp, useFirestore, usePerformance, useRemoteConfig, useStorage };
@@ -0,0 +1,53 @@
1
+ import * as _firebase_firestore from '@firebase/firestore';
2
+ import * as _firebase_database from '@firebase/database';
3
+ import * as _firebase_auth from '@firebase/auth';
4
+ import * as _firebase_storage from '@firebase/storage';
5
+ import * as _firebase_remote_config from '@firebase/remote-config';
6
+ import * as _firebase_performance from '@firebase/performance';
7
+ import * as _firebase_analytics from '@firebase/analytics';
8
+ import * as _firebase_app from '@firebase/app';
9
+ import React from 'react';
10
+ import { FirebaseOptions, FirebaseApp } from 'firebase/app';
11
+ import { Analytics } from 'firebase/analytics';
12
+ import { FirebasePerformance } from 'firebase/performance';
13
+ import { RemoteConfig } from 'firebase/remote-config';
14
+ import { FirebaseStorage } from 'firebase/storage';
15
+ import { Auth } from 'firebase/auth';
16
+ import { Database } from 'firebase/database';
17
+ import { Firestore } from 'firebase/firestore';
18
+
19
+ declare function useFirebaseApp(): _firebase_app.FirebaseApp;
20
+ declare function useAnalytics(): _firebase_analytics.Analytics;
21
+ declare function usePerformance(): _firebase_performance.FirebasePerformance;
22
+ declare function useRemoteConfig(): _firebase_remote_config.RemoteConfig;
23
+ declare function useStorage(): _firebase_storage.FirebaseStorage;
24
+ declare function useAuth(): _firebase_auth.Auth;
25
+ declare function useDatabase(): _firebase_database.Database;
26
+ declare function useFirestore(): _firebase_firestore.Firestore;
27
+
28
+ type FirebaseAppProviderProps = React.PropsWithChildren<{
29
+ options: FirebaseOptions;
30
+ name?: string;
31
+ enableAnalytics?: boolean;
32
+ enablePerformance?: boolean;
33
+ enableRemoteConfig?: boolean;
34
+ enableStorage?: boolean;
35
+ enableAuth?: boolean;
36
+ enableDatabase?: boolean;
37
+ enableFirestore?: boolean;
38
+ }>;
39
+ declare function FirebaseAppProvider({ options, name, enableAnalytics, enablePerformance, enableRemoteConfig, enableStorage, enableAuth, enableDatabase, enableFirestore, children, }: FirebaseAppProviderProps): React.JSX.Element;
40
+
41
+ type FirebaseAppContextValue = {
42
+ app: FirebaseApp;
43
+ analytics?: Analytics;
44
+ performance?: FirebasePerformance;
45
+ remoteConfig?: RemoteConfig;
46
+ storage?: FirebaseStorage;
47
+ auth?: Auth;
48
+ database?: Database;
49
+ firestore?: Firestore;
50
+ };
51
+ declare const FirebaseAppContext: React.Context<FirebaseAppContextValue | undefined>;
52
+
53
+ export { FirebaseAppContext, type FirebaseAppContextValue, FirebaseAppProvider, type FirebaseAppProviderProps, useAnalytics, useAuth, useDatabase, useFirebaseApp, useFirestore, usePerformance, useRemoteConfig, useStorage };
package/dist/index.js ADDED
@@ -0,0 +1,131 @@
1
+ 'use strict';
2
+
3
+ var React2 = require('react');
4
+ var firebaseCore = require('@nardole/firebase-core');
5
+
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var React2__default = /*#__PURE__*/_interopDefault(React2);
9
+
10
+ // src/hooks/index.ts
11
+ var FirebaseAppContext = React2__default.default.createContext(void 0);
12
+
13
+ // src/hooks/index.ts
14
+ function useFirebaseApp() {
15
+ const value = React2.useContext(FirebaseAppContext);
16
+ if (!value || value.app === void 0) {
17
+ throw new Error(
18
+ "Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>"
19
+ );
20
+ }
21
+ return value.app;
22
+ }
23
+ function useAnalytics() {
24
+ const value = React2.useContext(FirebaseAppContext);
25
+ if (!value || value.analytics === void 0) {
26
+ throw new Error(
27
+ "Firebase analytics isn't found, did you forget to enable it in <FirebaseAppProvider>"
28
+ );
29
+ }
30
+ return value.analytics;
31
+ }
32
+ function usePerformance() {
33
+ const value = React2.useContext(FirebaseAppContext);
34
+ if (!value || value.performance === void 0) {
35
+ throw new Error(
36
+ "Firebase performance isn't found, did you forget to enable it in <FirebaseAppProvider>"
37
+ );
38
+ }
39
+ return value.performance;
40
+ }
41
+ function useRemoteConfig() {
42
+ const value = React2.useContext(FirebaseAppContext);
43
+ if (!value || value.remoteConfig === void 0) {
44
+ throw new Error(
45
+ "Firebase remote config isn't found, did you forget to enable it in <FirebaseAppProvider>"
46
+ );
47
+ }
48
+ return value.remoteConfig;
49
+ }
50
+ function useStorage() {
51
+ const value = React2.useContext(FirebaseAppContext);
52
+ if (!value || value.storage === void 0) {
53
+ throw new Error(
54
+ "Firebase storage isn't found, did you forget to enable it in <FirebaseAppProvider>"
55
+ );
56
+ }
57
+ return value.storage;
58
+ }
59
+ function useAuth() {
60
+ const value = React2.useContext(FirebaseAppContext);
61
+ if (!value || value.auth === void 0) {
62
+ throw new Error(
63
+ "Firebase auth isn't found, did you forget to enable it in <FirebaseAppProvider>"
64
+ );
65
+ }
66
+ return value.auth;
67
+ }
68
+ function useDatabase() {
69
+ const value = React2.useContext(FirebaseAppContext);
70
+ if (!value || value.database === void 0) {
71
+ throw new Error(
72
+ "Firebase database isn't found, did you forget to enable it in <FirebaseAppProvider>"
73
+ );
74
+ }
75
+ return value.database;
76
+ }
77
+ function useFirestore() {
78
+ const value = React2.useContext(FirebaseAppContext);
79
+ if (!value || value.firestore === void 0) {
80
+ throw new Error(
81
+ "Firebase firestore isn't found, did you forget to enable it in <FirebaseAppProvider>"
82
+ );
83
+ }
84
+ return value.firestore;
85
+ }
86
+ function FirebaseAppProvider({
87
+ options,
88
+ name,
89
+ enableAnalytics,
90
+ enablePerformance,
91
+ enableRemoteConfig,
92
+ enableStorage,
93
+ enableAuth,
94
+ enableDatabase,
95
+ enableFirestore,
96
+ children
97
+ }) {
98
+ const optionsRef = React2__default.default.useRef(void 0);
99
+ const nameRef = React2__default.default.useRef(void 0);
100
+ const value = React2__default.default.useMemo(() => {
101
+ if (optionsRef.current !== options || nameRef.current !== name) {
102
+ firebaseCore.firebaseService.init(options, name, true);
103
+ }
104
+ optionsRef.current = options;
105
+ nameRef.current = name;
106
+ return {
107
+ app: firebaseCore.firebaseService.app,
108
+ analytics: enableAnalytics ? firebaseCore.firebaseService.analytics : void 0,
109
+ performance: enablePerformance ? firebaseCore.firebaseService.performance : void 0,
110
+ remoteConfig: enableRemoteConfig ? firebaseCore.firebaseService.remoteConfig : void 0,
111
+ storage: enableStorage ? firebaseCore.firebaseService.storage : void 0,
112
+ auth: enableAuth ? firebaseCore.firebaseService.auth : void 0,
113
+ database: enableDatabase ? firebaseCore.firebaseService.database : void 0,
114
+ firestore: enableFirestore ? firebaseCore.firebaseService.firestore : void 0
115
+ };
116
+ }, [options, name]);
117
+ return /* @__PURE__ */ React2__default.default.createElement(FirebaseAppContext.Provider, { value }, children);
118
+ }
119
+
120
+ exports.FirebaseAppContext = FirebaseAppContext;
121
+ exports.FirebaseAppProvider = FirebaseAppProvider;
122
+ exports.useAnalytics = useAnalytics;
123
+ exports.useAuth = useAuth;
124
+ exports.useDatabase = useDatabase;
125
+ exports.useFirebaseApp = useFirebaseApp;
126
+ exports.useFirestore = useFirestore;
127
+ exports.usePerformance = usePerformance;
128
+ exports.useRemoteConfig = useRemoteConfig;
129
+ exports.useStorage = useStorage;
130
+ //# sourceMappingURL=index.js.map
131
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/index.ts","../src/hooks/index.ts","../src/provider/index.tsx"],"names":["React","useContext","firebaseService"],"mappings":"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","file":"index.js","sourcesContent":["import React from \"react\";\nimport { FirebaseApp } from \"firebase/app\";\nimport { Analytics } from \"firebase/analytics\";\nimport { FirebasePerformance } from \"firebase/performance\";\nimport { RemoteConfig } from \"firebase/remote-config\";\nimport { FirebaseStorage } from \"firebase/storage\";\nimport { Auth } from \"firebase/auth\";\nimport { Database } from \"firebase/database\";\nimport { Firestore } from \"firebase/firestore\";\n\nexport type FirebaseAppContextValue = {\n app: FirebaseApp;\n analytics?: Analytics;\n performance?: FirebasePerformance;\n remoteConfig?: RemoteConfig;\n storage?: FirebaseStorage;\n auth?: Auth;\n database?: Database;\n firestore?: Firestore;\n};\n\nexport const FirebaseAppContext = React.createContext<\n FirebaseAppContextValue | undefined\n>(undefined);\n","import { useContext } from \"react\";\nimport { FirebaseAppContext } from \"@nardole/firebase-react/context\";\n\nexport function useFirebaseApp() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.app === undefined) {\n throw new Error(\n \"Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>\",\n );\n }\n\n return value.app;\n}\n\nexport function useAnalytics() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.analytics === undefined) {\n throw new Error(\n \"Firebase analytics isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.analytics;\n}\n\nexport function usePerformance() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.performance === undefined) {\n throw new Error(\n \"Firebase performance isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.performance;\n}\n\nexport function useRemoteConfig() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.remoteConfig === undefined) {\n throw new Error(\n \"Firebase remote config isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.remoteConfig;\n}\n\nexport function useStorage() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.storage === undefined) {\n throw new Error(\n \"Firebase storage isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.storage;\n}\n\nexport function useAuth() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.auth === undefined) {\n throw new Error(\n \"Firebase auth isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.auth;\n}\n\nexport function useDatabase() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.database === undefined) {\n throw new Error(\n \"Firebase database isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.database;\n}\n\nexport function useFirestore() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.firestore === undefined) {\n throw new Error(\n \"Firebase firestore isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.firestore;\n}\n","import React from \"react\";\nimport { FirebaseOptions } from \"firebase/app\";\nimport {\n FirebaseAppContext,\n FirebaseAppContextValue,\n} from \"@nardole/firebase-react/context\";\nimport { firebaseService } from \"@nardole/firebase-core\";\n\nexport type FirebaseAppProviderProps = React.PropsWithChildren<{\n options: FirebaseOptions;\n name?: string;\n\n enableAnalytics?: boolean;\n enablePerformance?: boolean;\n enableRemoteConfig?: boolean;\n enableStorage?: boolean;\n enableAuth?: boolean;\n enableDatabase?: boolean;\n enableFirestore?: boolean;\n}>;\n\nexport function FirebaseAppProvider({\n options,\n name,\n enableAnalytics,\n enablePerformance,\n enableRemoteConfig,\n enableStorage,\n enableAuth,\n enableDatabase,\n enableFirestore,\n children,\n}: FirebaseAppProviderProps) {\n const optionsRef = React.useRef<FirebaseOptions | undefined>(undefined);\n const nameRef = React.useRef<string | undefined>(undefined);\n\n const value: FirebaseAppContextValue = React.useMemo(() => {\n if (optionsRef.current !== options || nameRef.current !== name) {\n firebaseService.init(options, name, true);\n }\n\n optionsRef.current = options;\n nameRef.current = name;\n\n return {\n app: firebaseService.app,\n analytics: enableAnalytics ? firebaseService.analytics : undefined,\n performance: enablePerformance ? firebaseService.performance : undefined,\n remoteConfig: enableRemoteConfig\n ? firebaseService.remoteConfig\n : undefined,\n storage: enableStorage ? firebaseService.storage : undefined,\n auth: enableAuth ? firebaseService.auth : undefined,\n database: enableDatabase ? firebaseService.database : undefined,\n firestore: enableFirestore ? firebaseService.firestore : undefined,\n };\n }, [options, name]);\n\n return (\n <FirebaseAppContext.Provider value={value}>\n {children}\n </FirebaseAppContext.Provider>\n );\n}\n"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,116 @@
1
+ import React2, { useContext } from 'react';
2
+ import { firebaseService } from '@nardole/firebase-core';
3
+
4
+ // src/hooks/index.ts
5
+ var FirebaseAppContext = React2.createContext(void 0);
6
+
7
+ // src/hooks/index.ts
8
+ function useFirebaseApp() {
9
+ const value = useContext(FirebaseAppContext);
10
+ if (!value || value.app === void 0) {
11
+ throw new Error(
12
+ "Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>"
13
+ );
14
+ }
15
+ return value.app;
16
+ }
17
+ function useAnalytics() {
18
+ const value = useContext(FirebaseAppContext);
19
+ if (!value || value.analytics === void 0) {
20
+ throw new Error(
21
+ "Firebase analytics isn't found, did you forget to enable it in <FirebaseAppProvider>"
22
+ );
23
+ }
24
+ return value.analytics;
25
+ }
26
+ function usePerformance() {
27
+ const value = useContext(FirebaseAppContext);
28
+ if (!value || value.performance === void 0) {
29
+ throw new Error(
30
+ "Firebase performance isn't found, did you forget to enable it in <FirebaseAppProvider>"
31
+ );
32
+ }
33
+ return value.performance;
34
+ }
35
+ function useRemoteConfig() {
36
+ const value = useContext(FirebaseAppContext);
37
+ if (!value || value.remoteConfig === void 0) {
38
+ throw new Error(
39
+ "Firebase remote config isn't found, did you forget to enable it in <FirebaseAppProvider>"
40
+ );
41
+ }
42
+ return value.remoteConfig;
43
+ }
44
+ function useStorage() {
45
+ const value = useContext(FirebaseAppContext);
46
+ if (!value || value.storage === void 0) {
47
+ throw new Error(
48
+ "Firebase storage isn't found, did you forget to enable it in <FirebaseAppProvider>"
49
+ );
50
+ }
51
+ return value.storage;
52
+ }
53
+ function useAuth() {
54
+ const value = useContext(FirebaseAppContext);
55
+ if (!value || value.auth === void 0) {
56
+ throw new Error(
57
+ "Firebase auth isn't found, did you forget to enable it in <FirebaseAppProvider>"
58
+ );
59
+ }
60
+ return value.auth;
61
+ }
62
+ function useDatabase() {
63
+ const value = useContext(FirebaseAppContext);
64
+ if (!value || value.database === void 0) {
65
+ throw new Error(
66
+ "Firebase database isn't found, did you forget to enable it in <FirebaseAppProvider>"
67
+ );
68
+ }
69
+ return value.database;
70
+ }
71
+ function useFirestore() {
72
+ const value = useContext(FirebaseAppContext);
73
+ if (!value || value.firestore === void 0) {
74
+ throw new Error(
75
+ "Firebase firestore isn't found, did you forget to enable it in <FirebaseAppProvider>"
76
+ );
77
+ }
78
+ return value.firestore;
79
+ }
80
+ function FirebaseAppProvider({
81
+ options,
82
+ name,
83
+ enableAnalytics,
84
+ enablePerformance,
85
+ enableRemoteConfig,
86
+ enableStorage,
87
+ enableAuth,
88
+ enableDatabase,
89
+ enableFirestore,
90
+ children
91
+ }) {
92
+ const optionsRef = React2.useRef(void 0);
93
+ const nameRef = React2.useRef(void 0);
94
+ const value = React2.useMemo(() => {
95
+ if (optionsRef.current !== options || nameRef.current !== name) {
96
+ firebaseService.init(options, name, true);
97
+ }
98
+ optionsRef.current = options;
99
+ nameRef.current = name;
100
+ return {
101
+ app: firebaseService.app,
102
+ analytics: enableAnalytics ? firebaseService.analytics : void 0,
103
+ performance: enablePerformance ? firebaseService.performance : void 0,
104
+ remoteConfig: enableRemoteConfig ? firebaseService.remoteConfig : void 0,
105
+ storage: enableStorage ? firebaseService.storage : void 0,
106
+ auth: enableAuth ? firebaseService.auth : void 0,
107
+ database: enableDatabase ? firebaseService.database : void 0,
108
+ firestore: enableFirestore ? firebaseService.firestore : void 0
109
+ };
110
+ }, [options, name]);
111
+ return /* @__PURE__ */ React2.createElement(FirebaseAppContext.Provider, { value }, children);
112
+ }
113
+
114
+ export { FirebaseAppContext, FirebaseAppProvider, useAnalytics, useAuth, useDatabase, useFirebaseApp, useFirestore, usePerformance, useRemoteConfig, useStorage };
115
+ //# sourceMappingURL=index.mjs.map
116
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/index.ts","../src/hooks/index.ts","../src/provider/index.tsx"],"names":["React"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from \"react\";\nimport { FirebaseApp } from \"firebase/app\";\nimport { Analytics } from \"firebase/analytics\";\nimport { FirebasePerformance } from \"firebase/performance\";\nimport { RemoteConfig } from \"firebase/remote-config\";\nimport { FirebaseStorage } from \"firebase/storage\";\nimport { Auth } from \"firebase/auth\";\nimport { Database } from \"firebase/database\";\nimport { Firestore } from \"firebase/firestore\";\n\nexport type FirebaseAppContextValue = {\n app: FirebaseApp;\n analytics?: Analytics;\n performance?: FirebasePerformance;\n remoteConfig?: RemoteConfig;\n storage?: FirebaseStorage;\n auth?: Auth;\n database?: Database;\n firestore?: Firestore;\n};\n\nexport const FirebaseAppContext = React.createContext<\n FirebaseAppContextValue | undefined\n>(undefined);\n","import { useContext } from \"react\";\nimport { FirebaseAppContext } from \"@nardole/firebase-react/context\";\n\nexport function useFirebaseApp() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.app === undefined) {\n throw new Error(\n \"Firebase app isn't found, did you forget to wrap your app in <FirebaseAppProvider>\",\n );\n }\n\n return value.app;\n}\n\nexport function useAnalytics() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.analytics === undefined) {\n throw new Error(\n \"Firebase analytics isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.analytics;\n}\n\nexport function usePerformance() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.performance === undefined) {\n throw new Error(\n \"Firebase performance isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.performance;\n}\n\nexport function useRemoteConfig() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.remoteConfig === undefined) {\n throw new Error(\n \"Firebase remote config isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.remoteConfig;\n}\n\nexport function useStorage() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.storage === undefined) {\n throw new Error(\n \"Firebase storage isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.storage;\n}\n\nexport function useAuth() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.auth === undefined) {\n throw new Error(\n \"Firebase auth isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.auth;\n}\n\nexport function useDatabase() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.database === undefined) {\n throw new Error(\n \"Firebase database isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.database;\n}\n\nexport function useFirestore() {\n const value = useContext(FirebaseAppContext);\n\n if (!value || value.firestore === undefined) {\n throw new Error(\n \"Firebase firestore isn't found, did you forget to enable it in <FirebaseAppProvider>\",\n );\n }\n\n return value.firestore;\n}\n","import React from \"react\";\nimport { FirebaseOptions } from \"firebase/app\";\nimport {\n FirebaseAppContext,\n FirebaseAppContextValue,\n} from \"@nardole/firebase-react/context\";\nimport { firebaseService } from \"@nardole/firebase-core\";\n\nexport type FirebaseAppProviderProps = React.PropsWithChildren<{\n options: FirebaseOptions;\n name?: string;\n\n enableAnalytics?: boolean;\n enablePerformance?: boolean;\n enableRemoteConfig?: boolean;\n enableStorage?: boolean;\n enableAuth?: boolean;\n enableDatabase?: boolean;\n enableFirestore?: boolean;\n}>;\n\nexport function FirebaseAppProvider({\n options,\n name,\n enableAnalytics,\n enablePerformance,\n enableRemoteConfig,\n enableStorage,\n enableAuth,\n enableDatabase,\n enableFirestore,\n children,\n}: FirebaseAppProviderProps) {\n const optionsRef = React.useRef<FirebaseOptions | undefined>(undefined);\n const nameRef = React.useRef<string | undefined>(undefined);\n\n const value: FirebaseAppContextValue = React.useMemo(() => {\n if (optionsRef.current !== options || nameRef.current !== name) {\n firebaseService.init(options, name, true);\n }\n\n optionsRef.current = options;\n nameRef.current = name;\n\n return {\n app: firebaseService.app,\n analytics: enableAnalytics ? firebaseService.analytics : undefined,\n performance: enablePerformance ? firebaseService.performance : undefined,\n remoteConfig: enableRemoteConfig\n ? firebaseService.remoteConfig\n : undefined,\n storage: enableStorage ? firebaseService.storage : undefined,\n auth: enableAuth ? firebaseService.auth : undefined,\n database: enableDatabase ? firebaseService.database : undefined,\n firestore: enableFirestore ? firebaseService.firestore : undefined,\n };\n }, [options, name]);\n\n return (\n <FirebaseAppContext.Provider value={value}>\n {children}\n </FirebaseAppContext.Provider>\n );\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@nardole/firebase-react",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "author": {
8
+ "name": "Luiz Braga",
9
+ "email": "me@nardole.dev"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/btmluiz/nardole-firebase",
14
+ "directory": "packages/react"
15
+ },
16
+ "devDependencies": {
17
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
18
+ "@types/react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
19
+ "firebase": "^12.2.1",
20
+ "tsup": "^8.5.0",
21
+ "typescript": "^5.9.2",
22
+ "@nardole/firebase-core": "0.1.0"
23
+ },
24
+ "peerDependencies": {
25
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
26
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
27
+ "@nardole/firebase-core": "0.1.0"
28
+ },
29
+ "scripts": {
30
+ "build": "tsup",
31
+ "typecheck": "tsc"
32
+ },
33
+ "keywords": [
34
+ "firebase",
35
+ "react",
36
+ "context",
37
+ "hooks",
38
+ "provider",
39
+ "analytics",
40
+ "performance",
41
+ "remote-config",
42
+ "storage",
43
+ "auth",
44
+ "database",
45
+ "firestore",
46
+ "micro-frontend",
47
+ "mfe",
48
+ "typescript"
49
+ ],
50
+ "files": [
51
+ "dist",
52
+ "README.md",
53
+ "LICENSE*"
54
+ ]
55
+ }