diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8bdad480..2e5be225 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,26 @@
+## [5.0.3](https://github.com/Nativescript/firebase/compare/5.0.2...5.0.3) (2025-06-26)
+
+
+### Features
+
+* **apps/demo-angular:** add standalone components for Firebase Messaging, Performance, and Remote Config ([58e47d5](https://github.com/Nativescript/firebase/commit/58e47d5d844eb03567c1b89a1b9b25d5256c155d))
+
+* **firebase-auth:** create Angular provider for Firebase Auth service
+
+* **firebase-core:** create Angular provider for Firebase Core initialization
+
+* **firebase-database:** create Angular provider for Firebase Database service
+
+* **firebase-firestore:** create Angular provider for Firestore service
+
+* **firebase-storage:** create Angular provider for Firebase Storage service
+
+* **chore:** remove unused Firebase Analytics components and modules
+
+* **chore:** update TypeScript configuration for Angular compatibility
+
+
+
# [5.0.0](https://github.com/NativeScript/firebase/compare/3.3.2...5.0.0) (2025-05-13)
@@ -455,6 +478,3 @@
### Features
* nx migrate @nativescript/plugin-tools ([d081a2d](https://github.com/NativeScript/firebase/commit/d081a2dd1c645e696bf6ae8d8888319dc751e869))
-
-
-
diff --git a/apps/demo-angular/.eslintrc.json b/apps/demo-angular/.eslintrc.json
index be41074b..5c555982 100644
--- a/apps/demo-angular/.eslintrc.json
+++ b/apps/demo-angular/.eslintrc.json
@@ -1,6 +1,6 @@
{
"extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
+ "ignorePatterns": ["!**/*", "node_modules/**/*", "platforms/**/*", "hooks/**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
diff --git a/apps/demo-angular/package.json b/apps/demo-angular/package.json
index 4d885186..bc9935f6 100644
--- a/apps/demo-angular/package.json
+++ b/apps/demo-angular/package.json
@@ -19,7 +19,8 @@
"@nativescript/firebase-functions": "file:../../dist/packages/firebase-functions",
"@nativescript/firebase-app-check-debug": "file:../../dist/packages/firebase-app-check-debug",
"@nativescript/firebase-messaging-core": "file:../../dist/packages/firebase-messaging-core",
- "@nativescript/firebase-ui": "file:../../dist/packages/firebase-ui"
+ "@nativescript/firebase-ui": "file:../../dist/packages/firebase-ui",
+ "@nativescript/google-signin": "~2.1.0"
},
"devDependencies": {
"@nativescript/android": "~8.8.0",
diff --git a/apps/demo-angular/src/app.component.ts b/apps/demo-angular/src/app.component.ts
index 2813bee6..a1c518a4 100644
--- a/apps/demo-angular/src/app.component.ts
+++ b/apps/demo-angular/src/app.component.ts
@@ -5,7 +5,8 @@ import { AppService } from './app.service';
template: `
`,
+ standalone: false,
})
export class AppComponent {
- constructor(appService: AppService){}
+ constructor(appService: AppService) {}
}
diff --git a/apps/demo-angular/src/app.module.ts b/apps/demo-angular/src/app.module.ts
index 6efd6983..cee2f6ab 100644
--- a/apps/demo-angular/src/app.module.ts
+++ b/apps/demo-angular/src/app.module.ts
@@ -1,5 +1,6 @@
import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { NativeScriptModule } from '@nativescript/angular';
+import { provideFirebaseCoreInitializer } from '@nativescript/firebase-core/angular';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
@@ -8,9 +9,9 @@ import { AppService } from './app.service';
@NgModule({
schemas: [NO_ERRORS_SCHEMA],
- declarations: [AppComponent, HomeComponent],
+ declarations: [AppComponent],
bootstrap: [AppComponent],
- imports: [NativeScriptModule, AppRoutingModule],
- providers: [AppService]
+ imports: [NativeScriptModule, AppRoutingModule, HomeComponent],
+ providers: [AppService, provideFirebaseCoreInitializer()],
})
export class AppModule {}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-analytics.component.ts b/apps/demo-angular/src/plugin-demos/firebase-analytics.component.ts
index 382e5ede..918818b7 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-analytics.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-analytics.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseAnalytics } from '@demo/shared';
-import { } from '@nativescript/firebase-analytics';
+import {} from '@nativescript/firebase-analytics';
@Component({
selector: 'demo-firebase-analytics',
templateUrl: 'firebase-analytics.component.html',
+ standalone: false,
})
export class FirebaseAnalyticsComponent {
-
- demoShared: DemoSharedFirebaseAnalytics;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseAnalytics;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseAnalytics();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseAnalytics();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-app-check-debug.component.ts b/apps/demo-angular/src/plugin-demos/firebase-app-check-debug.component.ts
index a648e6de..4aeff91f 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-app-check-debug.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-app-check-debug.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseAppCheckDebug } from '@demo/shared';
-import { } from '@nativescript/firebase-app-check-debug';
+import {} from '@nativescript/firebase-app-check-debug';
@Component({
selector: 'demo-firebase-app-check-debug',
templateUrl: 'firebase-app-check-debug.component.html',
+ standalone: false,
})
export class FirebaseAppCheckDebugComponent {
-
- demoShared: DemoSharedFirebaseAppCheckDebug;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseAppCheckDebug;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseAppCheckDebug();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseAppCheckDebug();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-app-check.component.ts b/apps/demo-angular/src/plugin-demos/firebase-app-check.component.ts
index 7658da37..72971d3c 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-app-check.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-app-check.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseAppCheck } from '@demo/shared';
-import { } from '@nativescript/firebase-app-check';
+import {} from '@nativescript/firebase-app-check';
@Component({
selector: 'demo-firebase-app-check',
templateUrl: 'firebase-app-check.component.html',
+ standalone: false,
})
export class FirebaseAppCheckComponent {
-
- demoShared: DemoSharedFirebaseAppCheck;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseAppCheck;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseAppCheck();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseAppCheck();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-auth.component.html b/apps/demo-angular/src/plugin-demos/firebase-auth.component.html
index 050af23e..e44cbbee 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-auth.component.html
+++ b/apps/demo-angular/src/plugin-demos/firebase-auth.component.html
@@ -2,7 +2,27 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-angular/src/plugin-demos/firebase-auth.component.ts b/apps/demo-angular/src/plugin-demos/firebase-auth.component.ts
index 033ed1fb..55d227ec 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-auth.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-auth.component.ts
@@ -1,19 +1,186 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseAuth } from '@demo/shared';
-import { } from '@nativescript/firebase-auth';
+import { Auth, GoogleAuthProvider, OAuthProvider, PhoneAuthProvider, User } from '@nativescript/firebase-auth';
+import { GoogleSignin } from '@nativescript/google-signin';
+let didInit = false;
@Component({
selector: 'demo-firebase-auth',
templateUrl: 'firebase-auth.component.html',
+ standalone: false,
})
export class FirebaseAuthComponent {
-
- demoShared: DemoSharedFirebaseAuth;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseAuth;
+ uid: string;
+ displayName: string;
+ displayEmail: string;
+ photoURL: string;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseAuth();
- }
+ email: string;
+ password: string;
+ user: User;
+ phoneNumber: string;
+ code: string;
+ verificationId: string;
-}
\ No newline at end of file
+ constructor(private auth: Auth) {}
+
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseAuth();
+
+ this.auth.addAuthStateChangeListener((user) => {
+ this._setCurrentUser(user);
+ });
+ }
+
+ async linkGithub() {
+ if (!this.user) {
+ return;
+ }
+ const provider = new OAuthProvider('github.com');
+ provider.addCustomParameter('allow_signup', 'false');
+ provider.setScopes(['user:email']);
+
+ this.auth
+ .getProviderCredential(provider)
+ .then((cred) => {
+ this.auth.currentUser.linkWithCredential(cred);
+ console.log('cred', cred);
+ })
+ .catch((e) => {
+ console.log('Failed to link Github', e);
+ });
+ }
+
+ async linkYahoo() {
+ if (!this.user) {
+ return;
+ }
+ const provider = new OAuthProvider('yahoo.com');
+ provider.addCustomParameter('prompt', 'login');
+ provider.addCustomParameter('language', 'en');
+
+ this.auth
+ .getProviderCredential(provider)
+ .then((cred) => {
+ this.auth.currentUser.linkWithCredential(cred);
+ })
+ .catch((e) => {
+ console.log('Failed to link Yahoo', e);
+ });
+ }
+
+ async linkGoogle() {
+ try {
+ if (!this.user) {
+ return;
+ }
+ if (!didInit) {
+ await GoogleSignin.configure();
+ didInit = true;
+ }
+ const isAvailable = await GoogleSignin.playServicesAvailable();
+ if (!isAvailable) {
+ return;
+ }
+ const user = await GoogleSignin.signIn();
+ const cred = GoogleAuthProvider.credential(user.idToken, user.accessToken);
+ const linked = await this.user.linkWithCredential(cred);
+ console.log(linked);
+ } catch (e) {
+ console.log('linkGoogle', e.native);
+ }
+ }
+
+ async linkPhone() {
+ if (!this.auth.currentUser) {
+ console.info('Login to link phone');
+ return;
+ }
+ try {
+ const cred = PhoneAuthProvider.provider().credential(this.verificationId, this.code);
+ const linkedCred = await this.auth.currentUser.linkWithCredential(cred);
+ console.log('verificationId', linkedCred);
+ } catch (e) {
+ console.log('linkPhone error:', e);
+ }
+ }
+
+ async getVerificationCode() {
+ try {
+ this.verificationId = await PhoneAuthProvider.provider().verifyPhoneNumber(this.phoneNumber);
+ } catch (e) {
+ console.log('getVerificationCode error:', e);
+ }
+ }
+
+ async loginWithPhone() {
+ try {
+ const cred = PhoneAuthProvider.provider().credential(this.verificationId, this.code);
+ const value = await this.auth.signInWithCredential(cred);
+ console.log('verificationId', this.verificationId);
+ console.log('loginUser', value);
+ this._setCurrentUser(value.user);
+ } catch (e) {
+ console.log('linkPhone error:', e);
+ }
+ }
+
+ createUser() {
+ this.auth
+ .createUserWithEmailAndPassword(this.email, this.password)
+ .then((user) => {
+ this.user = user.user;
+ user.user.sendEmailVerification();
+ })
+ .catch((e) => {
+ console.error('createUser', e);
+ });
+ }
+
+ loginUser() {
+ this.auth
+ .signInWithEmailAndPassword(this.email, this.password)
+ .then((value) => {
+ console.log('loginUser', value);
+ this._setCurrentUser(value.user);
+ })
+ .catch((e) => {
+ console.error('loginUser', e);
+ });
+ }
+
+ _setCurrentUser(user: User) {
+ this.user = user;
+ this.uid = user?.uid;
+ this.displayName = user?.displayName;
+ this.displayEmail = user?.email;
+ this.photoURL = user?.photoURL;
+ }
+
+ getCurrentUser() {
+ const auth = this.auth;
+ this._setCurrentUser(auth?.currentUser);
+ }
+
+ logOutUser() {
+ this.auth.signOut();
+ this._setCurrentUser(undefined);
+ }
+
+ loginMs() {
+ // https://firebase.google.com/docs/auth/android/microsoft-oauth#handle_the_sign-in_flow_with_the_firebase_sdk
+
+ const provider = new OAuthProvider('microsoft.com');
+ provider.addCustomParameter('prompt', 'consent');
+ provider.addCustomParameter('login_hint', 'user@firstadd.onmicrosoft.com');
+ provider.addCustomParameter('tenant', 'TENANT_ID');
+
+ provider.setScopes(['mail.read', 'calendars.read']);
+
+ this.auth
+ .signInWithProvider(provider)
+ .then((credentials) => {})
+ .catch((err) => {});
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-auth.module.ts b/apps/demo-angular/src/plugin-demos/firebase-auth.module.ts
index 8f7a4d80..c18928fd 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-auth.module.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-auth.module.ts
@@ -1,10 +1,12 @@
import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
import { FirebaseAuthComponent } from './firebase-auth.component';
+import { provideAuth } from '@nativescript/firebase-auth/angular';
@NgModule({
imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: FirebaseAuthComponent }])],
- declarations: [FirebaseAuthComponent],
- schemas: [ NO_ERRORS_SCHEMA]
+ declarations: [FirebaseAuthComponent],
+ providers: [provideAuth()],
+ schemas: [NO_ERRORS_SCHEMA],
})
export class FirebaseAuthModule {}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-core.component.ts b/apps/demo-angular/src/plugin-demos/firebase-core.component.ts
index 5d6494cf..c396f069 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-core.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-core.component.ts
@@ -1,19 +1,17 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseCore } from '@demo/shared';
-import { } from '@nativescript/firebase-core';
@Component({
selector: 'demo-firebase-core',
templateUrl: 'firebase-core.component.html',
+ standalone: false,
})
export class FirebaseCoreComponent {
-
- demoShared: DemoSharedFirebaseCore;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseCore;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseCore();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseCore();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-crashlytics.component.ts b/apps/demo-angular/src/plugin-demos/firebase-crashlytics.component.ts
index e5b9db33..bd8365ca 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-crashlytics.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-crashlytics.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseCrashlytics } from '@demo/shared';
-import { } from '@nativescript/firebase-crashlytics';
+import {} from '@nativescript/firebase-crashlytics';
@Component({
selector: 'demo-firebase-crashlytics',
templateUrl: 'firebase-crashlytics.component.html',
+ standalone: false,
})
export class FirebaseCrashlyticsComponent {
-
- demoShared: DemoSharedFirebaseCrashlytics;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseCrashlytics;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseCrashlytics();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseCrashlytics();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-database.component.html b/apps/demo-angular/src/plugin-demos/firebase-database.component.html
index d7a7dc26..3a8617e2 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-database.component.html
+++ b/apps/demo-angular/src/plugin-demos/firebase-database.component.html
@@ -2,7 +2,7 @@
-
+
diff --git a/apps/demo-angular/src/plugin-demos/firebase-database.component.ts b/apps/demo-angular/src/plugin-demos/firebase-database.component.ts
index 3e333177..49b5e917 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-database.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-database.component.ts
@@ -1,19 +1,140 @@
-import { Component, NgZone } from '@angular/core';
+import { Component, inject, NgZone } from '@angular/core';
import { DemoSharedFirebaseDatabase } from '@demo/shared';
-import { } from '@nativescript/firebase-database';
+import { Auth } from '@nativescript/firebase-auth';
+import { Database } from '@nativescript/firebase-database';
@Component({
selector: 'demo-firebase-database',
templateUrl: 'firebase-database.component.html',
+ standalone: false,
})
export class FirebaseDatabaseComponent {
-
- demoShared: DemoSharedFirebaseDatabase;
-
- constructor(private _ngZone: NgZone) {}
+ database = inject(Database);
+ auth = inject(Auth);
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseDatabase();
- }
+ testIt(): void {
+ this.transaction();
+ this.randomData();
+ this.children();
+ this.setData();
+ this.issue113();
+ this.issue141();
+ }
-}
\ No newline at end of file
+ issue105() {
+ var obj = {
+ list: [
+ { propertyA: 'valueA', propertyB: null },
+ { propertyA: 'aaa', propertyB: null },
+ ],
+ };
+ this.database
+ .ref('/issues/105')
+ .set(obj)
+ .then((v) => {
+ console.log('done');
+ })
+ .catch((e) => {
+ console.log('error', e);
+ });
+ }
+
+ issue113() {
+ this.database
+ .ref('/issues/113')
+ .set(2.1)
+ .then((v) => {
+ console.log('done');
+ })
+ .catch((e) => {
+ console.log('error', e);
+ });
+ }
+
+ issue141() {
+ let on = true;
+ const ref = this.database.ref('/issues/141');
+ const cb = (data, key) => {
+ if (!on) {
+ throw new Error('issue 141 Listener: failed to unsubscribe');
+ }
+ console.log('issue141', data.val(), 'previous', key);
+ ref.off('value', cb);
+ on = false;
+
+ ref.set({ name: 'Osei Fortune' });
+ };
+ ref.on('value', cb);
+ ref.set({ name: 'Osei' });
+ }
+
+ setData() {
+ this.database
+ .ref('/person/me')
+ .set({ name: 'set', boolean: true, updated: new Date() })
+ .then((value) => {
+ console.log('set some data', value);
+ })
+ .catch((e) => {
+ console.log('failed to set data', e);
+ });
+ }
+
+ randomData() {
+ this.database
+ .ref('/random')
+ .push({ name: 'random', float: 1.1 })
+ .then((value) => {
+ console.log('push randomData', value);
+ });
+ }
+
+ children() {
+ this.database
+ .ref('/posts')
+ .once('value')
+ .then((res) => {
+ let count = 0;
+ res.forEach((snapshot) => {
+ const val = snapshot.val();
+ console.log('val', 'index', count, val);
+ if (val.likes === 3) {
+ return true;
+ }
+ count++;
+ });
+ });
+ }
+
+ transaction() {
+ this.database
+ .ref('/posts/1')
+ .orderByValue()
+ .once('value')
+ .then((value) => {
+ console.log('transaction', value.exportVal());
+ console.dir(value.exportVal());
+ console.log('transaction', value.val());
+ });
+
+ // this.database
+ // .ref('/posts')
+ // .child('1')
+ // .transaction((data: any) => {
+ // if (data) {
+ // data.likes += 1;
+ // return data;
+ // } else {
+ // return {
+ // likes: 1,
+ // };
+ // }
+ // })
+ // .then((result) => {
+ // console.log('transaction', 'result', result);
+ // })
+ // .catch((e) => {
+ // console.log('transaction', 'error', e);
+ // });
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-database.module.ts b/apps/demo-angular/src/plugin-demos/firebase-database.module.ts
index bd945376..9281f0d6 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-database.module.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-database.module.ts
@@ -1,10 +1,13 @@
import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
import { FirebaseDatabaseComponent } from './firebase-database.component';
+import { provideAuth } from '@nativescript/firebase-auth/angular';
+import { provideFirebaseDatabase } from '@nativescript/firebase-database/angular';
@NgModule({
imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: FirebaseDatabaseComponent }])],
- declarations: [FirebaseDatabaseComponent],
- schemas: [ NO_ERRORS_SCHEMA]
+ declarations: [FirebaseDatabaseComponent],
+ providers: [provideAuth(), provideFirebaseDatabase()],
+ schemas: [NO_ERRORS_SCHEMA],
})
export class FirebaseDatabaseModule {}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-dynamic-links.component.ts b/apps/demo-angular/src/plugin-demos/firebase-dynamic-links.component.ts
index b77759ae..9511f5b1 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-dynamic-links.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-dynamic-links.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseDynamicLinks } from '@demo/shared';
-import { } from '@nativescript/firebase-dynamic-links';
+import {} from '@nativescript/firebase-dynamic-links';
@Component({
selector: 'demo-firebase-dynamic-links',
templateUrl: 'firebase-dynamic-links.component.html',
+ standalone: false,
})
export class FirebaseDynamicLinksComponent {
-
- demoShared: DemoSharedFirebaseDynamicLinks;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseDynamicLinks;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseDynamicLinks();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseDynamicLinks();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-firestore.component.html b/apps/demo-angular/src/plugin-demos/firebase-firestore.component.html
index b5e83106..f6696aee 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-firestore.component.html
+++ b/apps/demo-angular/src/plugin-demos/firebase-firestore.component.html
@@ -2,7 +2,7 @@
-
+
diff --git a/apps/demo-angular/src/plugin-demos/firebase-firestore.component.ts b/apps/demo-angular/src/plugin-demos/firebase-firestore.component.ts
index d4fa9585..690eb15e 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-firestore.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-firestore.component.ts
@@ -1,19 +1,167 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedFirebaseFirestore } from '@demo/shared';
-import { } from '@nativescript/firebase-firestore';
+import { Component, inject } from '@angular/core';
+import { FieldPath, FieldValue, Firestore, GeoPoint, Timestamp } from '@nativescript/firebase-firestore';
@Component({
selector: 'demo-firebase-firestore',
templateUrl: 'firebase-firestore.component.html',
+ standalone: false,
})
export class FirebaseFirestoreComponent {
-
- demoShared: DemoSharedFirebaseFirestore;
-
- constructor(private _ngZone: NgZone) {}
+ private firestore = inject(Firestore);
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseFirestore();
- }
+ testIt(): void {
+ this.issue_139();
+ this.issue_51();
+ //Promise.all([this.init(), this.invalid_field_path(), this.issue_139(), this.field_path()]);
+ }
-}
\ No newline at end of file
+ issue_51() {
+ const doc = this.firestore.collection('users').doc('0Myq8dlF1dQtC7tX4WlA');
+
+ const users = this.firestore.collection('users');
+
+ doc.onSnapshot({
+ next(snapshot) {
+ console.log('onSnapshot', 'object');
+ },
+ });
+
+ doc.onSnapshot(
+ { includeMetadataChanges: true },
+ {
+ next(snapshot) {
+ console.log('onSnapshot', 'options', '&', 'object');
+ },
+ }
+ );
+
+ doc.onSnapshot((doc) => {
+ console.log('onSnapshot', '&', 'function');
+ });
+
+ doc.onSnapshot({ includeMetadataChanges: true }, (doc) => {
+ console.log('onSnapshot', 'options', '&', 'function');
+ });
+
+ users.onSnapshot({
+ next(snapshot) {
+ console.log('users', 'onSnapshot', 'object');
+ },
+ });
+
+ users.onSnapshot(
+ { includeMetadataChanges: true },
+ {
+ next(snapshot) {
+ console.log('users', 'onSnapshot', 'options', '&', 'object');
+ },
+ }
+ );
+
+ users.onSnapshot((doc) => {
+ console.log('users', 'onSnapshot', '&', 'function');
+ });
+
+ users.onSnapshot({ includeMetadataChanges: true }, (doc) => {
+ console.log('users', 'onSnapshot', 'options', '&', 'function');
+ });
+ }
+
+ async init() {
+ this.firestore
+ .collection('users')
+ .add({
+ first: 'Ada',
+ last: 'Lovelace',
+ born: 1815,
+ })
+ .then((docRef) => {
+ console.log('Document written with ID: ', docRef.id);
+ })
+ .catch((error) => {
+ console.error('Error adding document: ', error);
+ });
+
+ const geo = new GeoPoint(10, -10);
+ this.firestore
+ .collection('geo')
+ .add({
+ thing: 'it',
+ geo,
+ })
+ .then((docRef) => {
+ console.log('Geo Document written with ID: ', docRef.id);
+ })
+ .catch((error) => {
+ console.error('Error adding geo document: ', error);
+ });
+
+ this.firestore
+ .collection('items')
+ .get()
+ .then((items) => {
+ console.log(items.docs[0].data());
+ });
+
+ const exampleDoc = this.firestore.collection('things').doc('exampleDoc');
+ const exampleDoc2 = this.firestore.collection('things').doc('exampleDoc2');
+
+ this.firestore
+ .batch()
+ .set(exampleDoc, {
+ message: 'Hello doc',
+ })
+ .set(exampleDoc2, {
+ date: new Date(),
+ })
+ .commit()
+ .then(() => {})
+ .catch((error) => {
+ console.error(error);
+ });
+ }
+
+ async invalid_field_path() {
+ try {
+ await this.firestore
+ .collection('products')
+ .doc('Oq4eU5p4Lj7Eh6dfjbBX')
+ .set({
+ name: 'Product 1',
+ ts: Timestamp.fromDate(new Date()),
+ });
+ await this.firestore
+ .collection('products')
+ .doc('Oq4eU5p4Lj7Eh6dfjbBX')
+ .update({
+ name: 'Product 2',
+ ts: Timestamp.fromDate(new Date()),
+ });
+ } catch (error) {
+ console.log('error', error);
+ }
+ }
+
+ async issue_139() {
+ const data = {
+ a: {
+ b: FieldValue.serverTimestamp(),
+ },
+ };
+
+ data[new FieldPath(['test', '123']) as any] = 'thing';
+ this.firestore
+ .doc('test/1234')
+ .update(data)
+ .then((done) => {
+ console.log('done', 'issue 139');
+ })
+ .catch((e) => {
+ console.error('done', 'issue 139', e);
+ });
+ }
+
+ async field_path() {
+ const fp = new FieldPath(['test', '123']);
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-firestore.module.ts b/apps/demo-angular/src/plugin-demos/firebase-firestore.module.ts
index 8881ad13..9efade4a 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-firestore.module.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-firestore.module.ts
@@ -1,10 +1,12 @@
import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
import { FirebaseFirestoreComponent } from './firebase-firestore.component';
+import { provideFirestore } from '@nativescript/firebase-firestore/angular';
@NgModule({
imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: FirebaseFirestoreComponent }])],
- declarations: [FirebaseFirestoreComponent],
- schemas: [ NO_ERRORS_SCHEMA]
+ declarations: [FirebaseFirestoreComponent],
+ providers: [provideFirestore()],
+ schemas: [NO_ERRORS_SCHEMA],
})
export class FirebaseFirestoreModule {}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-functions.component.ts b/apps/demo-angular/src/plugin-demos/firebase-functions.component.ts
index aa6cedd0..140cdd87 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-functions.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-functions.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseFunctions } from '@demo/shared';
-import { } from '@nativescript/firebase-functions';
+import {} from '@nativescript/firebase-functions';
@Component({
selector: 'demo-firebase-functions',
templateUrl: 'firebase-functions.component.html',
+ standalone: false,
})
export class FirebaseFunctionsComponent {
-
- demoShared: DemoSharedFirebaseFunctions;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseFunctions;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseFunctions();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseFunctions();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-in-app-messaging.component.ts b/apps/demo-angular/src/plugin-demos/firebase-in-app-messaging.component.ts
index 98e150af..6feb395f 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-in-app-messaging.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-in-app-messaging.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseInAppMessaging } from '@demo/shared';
-import { } from '@nativescript/firebase-in-app-messaging';
+import {} from '@nativescript/firebase-in-app-messaging';
@Component({
selector: 'demo-firebase-in-app-messaging',
templateUrl: 'firebase-in-app-messaging.component.html',
+ standalone: false,
})
export class FirebaseInAppMessagingComponent {
-
- demoShared: DemoSharedFirebaseInAppMessaging;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseInAppMessaging;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseInAppMessaging();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseInAppMessaging();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-installations.component.ts b/apps/demo-angular/src/plugin-demos/firebase-installations.component.ts
index 7742e815..509c345b 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-installations.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-installations.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseInstallations } from '@demo/shared';
-import { } from '@nativescript/firebase-installations';
+import {} from '@nativescript/firebase-installations';
@Component({
selector: 'demo-firebase-installations',
templateUrl: 'firebase-installations.component.html',
+ standalone: false,
})
export class FirebaseInstallationsComponent {
-
- demoShared: DemoSharedFirebaseInstallations;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseInstallations;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseInstallations();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseInstallations();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-messaging-core.component.ts b/apps/demo-angular/src/plugin-demos/firebase-messaging-core.component.ts
index 5522340b..6b9d7c01 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-messaging-core.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-messaging-core.component.ts
@@ -1,10 +1,11 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseMessagingCore } from '@demo/shared';
-import {} from '@nativescript/firebase-messaging-core';
+import {} from '@nativescript/firebase-messaging';
@Component({
selector: 'demo-firebase-messaging-core',
templateUrl: 'firebase-messaging-core.component.html',
+ standalone: false,
})
export class FirebaseMessagingCoreComponent {
demoShared: DemoSharedFirebaseMessagingCore;
diff --git a/apps/demo-angular/src/plugin-demos/firebase-messaging.component.ts b/apps/demo-angular/src/plugin-demos/firebase-messaging.component.ts
index 414e8fe5..f5aa34c7 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-messaging.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-messaging.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseMessaging } from '@demo/shared';
-import { } from '@nativescript/firebase-messaging';
+import {} from '@nativescript/firebase-messaging';
@Component({
selector: 'demo-firebase-messaging',
templateUrl: 'firebase-messaging.component.html',
+ standalone: false,
})
export class FirebaseMessagingComponent {
-
- demoShared: DemoSharedFirebaseMessaging;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseMessaging;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseMessaging();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseMessaging();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-performance.component.ts b/apps/demo-angular/src/plugin-demos/firebase-performance.component.ts
index 534ced9e..3f1a968b 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-performance.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-performance.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebasePerformance } from '@demo/shared';
-import { } from '@nativescript/firebase-performance';
+import {} from '@nativescript/firebase-performance';
@Component({
selector: 'demo-firebase-performance',
templateUrl: 'firebase-performance.component.html',
+ standalone: false,
})
export class FirebasePerformanceComponent {
-
- demoShared: DemoSharedFirebasePerformance;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebasePerformance;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebasePerformance();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebasePerformance();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-remote-config.component.ts b/apps/demo-angular/src/plugin-demos/firebase-remote-config.component.ts
index 3819b363..e9f9f23b 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-remote-config.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-remote-config.component.ts
@@ -1,19 +1,18 @@
import { Component, NgZone } from '@angular/core';
import { DemoSharedFirebaseRemoteConfig } from '@demo/shared';
-import { } from '@nativescript/firebase-remote-config';
+import {} from '@nativescript/firebase-remote-config';
@Component({
selector: 'demo-firebase-remote-config',
templateUrl: 'firebase-remote-config.component.html',
+ standalone: false,
})
export class FirebaseRemoteConfigComponent {
-
- demoShared: DemoSharedFirebaseRemoteConfig;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseRemoteConfig;
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseRemoteConfig();
- }
+ constructor(private _ngZone: NgZone) {}
-}
\ No newline at end of file
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseRemoteConfig();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-storage.component.html b/apps/demo-angular/src/plugin-demos/firebase-storage.component.html
index 40da47d8..084e11dc 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-storage.component.html
+++ b/apps/demo-angular/src/plugin-demos/firebase-storage.component.html
@@ -2,6 +2,10 @@
+
+
+
+
diff --git a/apps/demo-angular/src/plugin-demos/firebase-storage.component.ts b/apps/demo-angular/src/plugin-demos/firebase-storage.component.ts
index 6f2e3070..c0d7556c 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-storage.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-storage.component.ts
@@ -1,19 +1,79 @@
-import { Component, NgZone } from '@angular/core';
+import { Component, inject } from '@angular/core';
import { DemoSharedFirebaseStorage } from '@demo/shared';
-import { } from '@nativescript/firebase-storage';
+import { path, knownFolders, File } from '@nativescript/core';
+import { Auth } from '@nativescript/firebase-auth';
+import { Storage } from '@nativescript/firebase-storage';
+import { Metadata, TaskEvent } from '@nativescript/firebase-storage';
@Component({
selector: 'demo-firebase-storage',
templateUrl: 'firebase-storage.component.html',
+ standalone: false,
})
export class FirebaseStorageComponent {
-
- demoShared: DemoSharedFirebaseStorage;
-
- constructor(private _ngZone: NgZone) {}
+ demoShared: DemoSharedFirebaseStorage;
+ storage = inject(Storage);
+ auth = inject(Auth);
+ textToUpload = '';
+ textToUploadFileName = '';
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseStorage();
- }
+ ngOnInit() {
+ this.demoShared = new DemoSharedFirebaseStorage();
+ }
-}
\ No newline at end of file
+ uploadText() {
+ if (!this.textToUpload?.trim?.().length) {
+ return;
+ }
+ const metadata = new Metadata();
+ metadata.contentType = 'text/plain';
+ this.storage
+ .ref()
+ .child(`text_files/${this.textToUploadFileName ? this.textToUploadFileName : Date.now()}.txt`)
+ .putString(this.textToUpload, null, metadata)
+ .on(TaskEvent.STATE_CHANGED, {
+ complete() {
+ console.info('uploadText', 'completed');
+ },
+ error(err) {
+ console.error('uploadText', 'error', err);
+ },
+ next(snapshot) {
+ console.info('uploadText', 'next', 'state', snapshot.state, snapshot.error);
+ if (snapshot.totalBytes) {
+ console.log('uploadFile', 'next', 'progress %', (snapshot.bytesTransferred / snapshot.totalBytes) * 100);
+ }
+ if (snapshot.error) {
+ console.error('uploadText', 'next', snapshot.error);
+ }
+ },
+ });
+ }
+
+ uploadFile() {
+ const file = File.fromPath(path.join(knownFolders.currentApp().path, 'images', 'deadpool.jpeg'));
+ const metadata = new Metadata();
+ metadata.contentType = 'image/jpg';
+ this.storage
+ .ref()
+ .child('images/deadpool.jpeg')
+ .putFile(file.path, metadata)
+ .on(TaskEvent.STATE_CHANGED, {
+ complete() {
+ console.info('uploadFile', 'completed');
+ },
+ error(err) {
+ console.error('uploadFile', 'error', err);
+ },
+ next(snapshot) {
+ console.info('uploadFile', 'next', 'state', snapshot.state);
+ if (snapshot.totalBytes) {
+ console.log('uploadFile', 'next', 'progress %', (snapshot.bytesTransferred / snapshot.totalBytes) * 100);
+ }
+ if (snapshot.error) {
+ console.error('uploadFile', 'next', snapshot.error);
+ }
+ },
+ });
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-storage.module.ts b/apps/demo-angular/src/plugin-demos/firebase-storage.module.ts
index 4993c8eb..acaa9a93 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-storage.module.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-storage.module.ts
@@ -1,10 +1,12 @@
import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
import { FirebaseStorageComponent } from './firebase-storage.component';
+import { provideFirebaseStorage } from '@nativescript/firebase-storage/angular';
@NgModule({
imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: FirebaseStorageComponent }])],
- declarations: [FirebaseStorageComponent],
- schemas: [ NO_ERRORS_SCHEMA]
+ declarations: [FirebaseStorageComponent],
+ providers: [provideFirebaseStorage()],
+ schemas: [NO_ERRORS_SCHEMA],
})
export class FirebaseStorageModule {}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-ui.component.html b/apps/demo-angular/src/plugin-demos/firebase-ui.component.html
index fea92084..d1d76f54 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-ui.component.html
+++ b/apps/demo-angular/src/plugin-demos/firebase-ui.component.html
@@ -2,7 +2,8 @@
-
+
+
diff --git a/apps/demo-angular/src/plugin-demos/firebase-ui.component.ts b/apps/demo-angular/src/plugin-demos/firebase-ui.component.ts
index ac4b8d54..15d4c9bc 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-ui.component.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-ui.component.ts
@@ -1,17 +1,38 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedFirebaseUi } from '@demo/shared';
-import {} from '@nativescript/firebase-ui';
+import { Component, inject } from '@angular/core';
+import { UI } from '@nativescript/firebase-ui';
+import { AppleProvider, EmailProvider, GithubProvider, GoogleProvider, MicrosoftProvider, TwitterProvider, YahooProvider } from '@nativescript/firebase-ui';
@Component({
selector: 'demo-firebase-ui',
templateUrl: 'firebase-ui.component.html',
+ standalone: false,
})
export class FirebaseUiComponent {
- demoShared: DemoSharedFirebaseUi;
+ private firebaseUI = inject(UI);
- constructor(private _ngZone: NgZone) {}
+ show() {
+ this.firebaseUI
+ .show({
+ providers: [new AppleProvider(), new GoogleProvider(), new TwitterProvider(), new GithubProvider(), new EmailProvider(), new MicrosoftProvider(), new YahooProvider()],
+ })
+ .then((result) => {
+ console.log(result.user);
+ console.log(result.hasCredentialForLinking);
+ console.log(result.providerType);
+ })
+ .catch((error) => {
+ console.error('show error:', error);
+ });
+ }
- ngOnInit() {
- this.demoShared = new DemoSharedFirebaseUi();
+ signOut() {
+ this.firebaseUI
+ .signOut()
+ .then(() => {
+ console.log('signOut complete');
+ })
+ .catch((e) => {
+ console.error('signOut error:', e);
+ });
}
}
diff --git a/apps/demo-angular/src/plugin-demos/firebase-ui.module.ts b/apps/demo-angular/src/plugin-demos/firebase-ui.module.ts
index e816820d..dd090884 100644
--- a/apps/demo-angular/src/plugin-demos/firebase-ui.module.ts
+++ b/apps/demo-angular/src/plugin-demos/firebase-ui.module.ts
@@ -1,10 +1,12 @@
import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
import { FirebaseUiComponent } from './firebase-ui.component';
+import { provideFirebaseUI } from '@nativescript/firebase-ui/angular';
@NgModule({
imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: FirebaseUiComponent }])],
declarations: [FirebaseUiComponent],
+ providers: [provideFirebaseUI()],
schemas: [NO_ERRORS_SCHEMA],
})
export class FirebaseUiModule {}
diff --git a/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.component.html b/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.component.html
deleted file mode 100644
index 56889eea..00000000
--- a/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.component.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.component.ts b/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.component.ts
deleted file mode 100644
index a8fc1508..00000000
--- a/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.component.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Component, NgZone } from '@angular/core';
-import { DemoSharedNativescriptFirebaseAnalytics } from '@demo/shared';
-import { } from '@nativescript/firebase-analytics';
-
-@Component({
- selector: 'demo-firebase-analytics',
- templateUrl: 'firebase-analytics.component.html',
-})
-export class NativescriptFirebaseAnalyticsComponent {
-
- demoShared: DemoSharedNativescriptFirebaseAnalytics;
-
- constructor(private _ngZone: NgZone) {}
-
- ngOnInit() {
- this.demoShared = new DemoSharedNativescriptFirebaseAnalytics();
- }
-
-}
\ No newline at end of file
diff --git a/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.module.ts b/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.module.ts
deleted file mode 100644
index 81af1d75..00000000
--- a/apps/demo-angular/src/plugin-demos/nativescript-firebase-analytics.module.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
-import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
-import { NativescriptFirebaseAnalyticsComponent } from './firebase-analytics.component';
-
-@NgModule({
- imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: NativescriptFirebaseAnalyticsComponent }])],
- declarations: [NativescriptFirebaseAnalyticsComponent],
- schemas: [ NO_ERRORS_SCHEMA]
-})
-export class NativescriptFirebaseAnalyticsModule {}
diff --git a/apps/demo-angular/tsconfig.json b/apps/demo-angular/tsconfig.json
index 6bcd3a50..45fb4f45 100644
--- a/apps/demo-angular/tsconfig.json
+++ b/apps/demo-angular/tsconfig.json
@@ -20,6 +20,7 @@
"@nativescript/firebase-messaging": ["packages/firebase-messaging/index.d.ts"],
"@nativescript/firebase-functions": ["packages/firebase-functions/index.d.ts"],
"@nativescript/firebase-app-check-debug": ["packages/firebase-app-check-debug/index.d.ts"],
+ "@nativescript/firebase-ui": ["packages/firebase-ui/index.d.ts"],
"@nativescript/*": ["../../dist/packages/*"]
}
},
diff --git a/package.json b/package.json
index e1a82d19..154f854b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "plugins",
- "version": "5.0.0",
+ "version": "5.0.3",
"license": "MIT",
"scripts": {
"postinstall": "husky && npx ts-patch install",
diff --git a/packages/firebase-auth/angular/.eslintrc.json b/packages/firebase-auth/angular/.eslintrc.json
new file mode 100644
index 00000000..a129a9f3
--- /dev/null
+++ b/packages/firebase-auth/angular/.eslintrc.json
@@ -0,0 +1,24 @@
+{
+ "extends": ["../.eslintrc.json"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "allowCircularSelfDependency": true
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/firebase-auth/angular/index.ts b/packages/firebase-auth/angular/index.ts
new file mode 100644
index 00000000..859ca152
--- /dev/null
+++ b/packages/firebase-auth/angular/index.ts
@@ -0,0 +1,48 @@
+import { Provider } from '@angular/core';
+import { firebase, FirebaseApp } from '@nativescript/firebase-core';
+import { Auth } from '@nativescript/firebase-auth';
+
+type EmulatorConfig = {
+ host: string;
+ port: number;
+};
+
+type AuthProviderConfig = {
+ app?: FirebaseApp;
+ emulator?: EmulatorConfig;
+};
+
+/**
+ * Provides the Firebase Authentication service.
+ * This function creates a provider for the Auth service, allowing you to use Firebase Authentication in your Angular application.
+ *
+ * @param config - Configuration options for the Auth provider.
+ * - app: The Firebase app instance to use. If not provided, the default app will be used.
+ * - emulator: Configuration for the Firebase Authentication emulator.
+ * - host: The host of the emulator server
+ * - port: The port number of the emulator server
+ *
+ * @returns An array of providers for the Auth service.
+ */
+export function provideAuth(config: AuthProviderConfig = {}): Provider[] {
+ return [
+ {
+ provide: Auth,
+ useFactory: () => {
+ const auth = firebase().auth(config.app);
+
+ if (config.emulator) {
+ if (!config.emulator.host) {
+ throw new Error('Firebase Auth emulator host must be provided');
+ }
+ if (!config.emulator.port || config.emulator.port < 0) {
+ throw new Error('Firebase Auth emulator port must be a valid positive number');
+ }
+ auth.useEmulator(config.emulator.host, config.emulator.port);
+ }
+
+ return auth;
+ },
+ },
+ ];
+}
diff --git a/packages/firebase-auth/angular/ng-package.json b/packages/firebase-auth/angular/ng-package.json
new file mode 100644
index 00000000..470f0ea7
--- /dev/null
+++ b/packages/firebase-auth/angular/ng-package.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "index.ts"
+ },
+ "allowedNonPeerDependencies": ["."],
+ "dest": "../../../dist/packages/firebase-auth/angular"
+}
diff --git a/packages/firebase-auth/angular/package.json b/packages/firebase-auth/angular/package.json
new file mode 100644
index 00000000..8917c809
--- /dev/null
+++ b/packages/firebase-auth/angular/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "@nativescript/firebase-auth-angular"
+}
diff --git a/packages/firebase-auth/angular/tsconfig.angular.json b/packages/firebase-auth/angular/tsconfig.angular.json
new file mode 100644
index 00000000..83a3318d
--- /dev/null
+++ b/packages/firebase-auth/angular/tsconfig.angular.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
+ "compilerOptions": {
+ "types": ["node"],
+ "baseUrl": ".",
+ "paths": {
+ "@nativescript/firebase-auth": ["../../../dist/packages/firebase-auth"],
+ "@nativescript/firebase-core": ["../../../dist/packages/firebase-core"]
+ },
+ "outDir": "../../../dist/out-tsc",
+ "declarationDir": "../../../dist/out-tsc"
+ },
+ "files": ["index.ts"]
+}
diff --git a/packages/firebase-auth/angular/tsconfig.json b/packages/firebase-auth/angular/tsconfig.json
new file mode 100644
index 00000000..882b6018
--- /dev/null
+++ b/packages/firebase-auth/angular/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "rootDirs": [".", "../.."]
+ }
+}
diff --git a/packages/firebase-auth/package.json b/packages/firebase-auth/package.json
index d4601904..8fdbf6fc 100644
--- a/packages/firebase-auth/package.json
+++ b/packages/firebase-auth/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/firebase-auth",
- "version": "5.0.2",
+ "version": "5.0.3",
"description": "NativeScript Firebase - Auth",
"main": "index",
"typings": "index.d.ts",
diff --git a/packages/firebase-core/angular/.eslintrc.json b/packages/firebase-core/angular/.eslintrc.json
new file mode 100644
index 00000000..a129a9f3
--- /dev/null
+++ b/packages/firebase-core/angular/.eslintrc.json
@@ -0,0 +1,24 @@
+{
+ "extends": ["../.eslintrc.json"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "allowCircularSelfDependency": true
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/firebase-core/angular/index.ts b/packages/firebase-core/angular/index.ts
new file mode 100644
index 00000000..24d029d2
--- /dev/null
+++ b/packages/firebase-core/angular/index.ts
@@ -0,0 +1,27 @@
+import { firebase, Firebase, FirebaseApp } from '@nativescript/firebase-core';
+import { EnvironmentProviders, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
+
+// Type for the parameters of Firebase.initializeApp
+// This is used to ensure that the parameters passed to the initializer match the expected type.
+export type FirebaseInitializerParameters = Parameters;
+
+/**
+ * Provides the Firebase Core initializer.
+ * This function creates a provider for the Firebase Core initialization, allowing you to use Firebase services in your Angular application.
+ *
+ * @param options - The arguments to pass to the Firebase.initializeApp method.
+ * @param configOrName - The API key for your Firebase project.
+ * @returns An array of providers for the Firebase Core initialization.
+ */
+export function provideFirebaseCoreInitializer(...args: FirebaseInitializerParameters): EnvironmentProviders[] {
+ let firebaseApp: FirebaseApp;
+ return [
+ provideAppInitializer(async () => (firebaseApp = await firebase().initializeApp(...args))),
+ makeEnvironmentProviders([
+ {
+ provide: FirebaseApp,
+ useValue: firebaseApp,
+ },
+ ]),
+ ];
+}
diff --git a/packages/firebase-core/angular/ng-package.json b/packages/firebase-core/angular/ng-package.json
new file mode 100644
index 00000000..0fe2b101
--- /dev/null
+++ b/packages/firebase-core/angular/ng-package.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "index.ts"
+ },
+ "allowedNonPeerDependencies": ["."],
+ "dest": "../../../dist/packages/firebase-core/angular"
+}
diff --git a/packages/firebase-core/angular/package.json b/packages/firebase-core/angular/package.json
new file mode 100644
index 00000000..d017d1c8
--- /dev/null
+++ b/packages/firebase-core/angular/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "@nativescript/firebase-core-angular"
+}
diff --git a/packages/firebase-core/angular/tsconfig.angular.json b/packages/firebase-core/angular/tsconfig.angular.json
new file mode 100644
index 00000000..06852cd0
--- /dev/null
+++ b/packages/firebase-core/angular/tsconfig.angular.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../../../node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
+ "compilerOptions": {
+ "types": ["node"],
+ "baseUrl": ".",
+ "paths": {
+ "@nativescript/firebase-core": ["../../../dist/packages/firebase-core"]
+ },
+ "outDir": "../../../dist/out-tsc",
+ "declarationDir": "../../../dist/out-tsc"
+ },
+ "files": ["index.ts"]
+}
diff --git a/packages/firebase-core/angular/tsconfig.json b/packages/firebase-core/angular/tsconfig.json
new file mode 100644
index 00000000..c0b256a9
--- /dev/null
+++ b/packages/firebase-core/angular/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "rootDir": "."
+ }
+}
diff --git a/packages/firebase-core/package.json b/packages/firebase-core/package.json
index a441832d..71201201 100644
--- a/packages/firebase-core/package.json
+++ b/packages/firebase-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/firebase-core",
- "version": "5.0.2",
+ "version": "5.0.3",
"description": "NativeScript Firebase - Core",
"main": "index",
"typings": "index.d.ts",
diff --git a/packages/firebase-database/angular/.eslintrc.json b/packages/firebase-database/angular/.eslintrc.json
new file mode 100644
index 00000000..a129a9f3
--- /dev/null
+++ b/packages/firebase-database/angular/.eslintrc.json
@@ -0,0 +1,24 @@
+{
+ "extends": ["../.eslintrc.json"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "allowCircularSelfDependency": true
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/firebase-database/angular/index.ts b/packages/firebase-database/angular/index.ts
new file mode 100644
index 00000000..31c9337a
--- /dev/null
+++ b/packages/firebase-database/angular/index.ts
@@ -0,0 +1,12 @@
+import { Provider } from '@angular/core';
+import { Database } from '@nativescript/firebase-database';
+import { firebase } from '@nativescript/firebase-core';
+
+export function provideFirebaseDatabase(): Provider {
+ return {
+ provide: Database,
+ useFactory: () => {
+ return firebase().database();
+ },
+ };
+}
diff --git a/packages/firebase-database/angular/ng-package.json b/packages/firebase-database/angular/ng-package.json
new file mode 100644
index 00000000..eaddc6a9
--- /dev/null
+++ b/packages/firebase-database/angular/ng-package.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "index.ts"
+ },
+ "allowedNonPeerDependencies": ["."],
+ "dest": "../../../dist/packages/firebase-database/angular"
+}
diff --git a/packages/firebase-database/angular/package.json b/packages/firebase-database/angular/package.json
new file mode 100644
index 00000000..ffcc1749
--- /dev/null
+++ b/packages/firebase-database/angular/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "@nativescript/firebase-database-angular"
+}
diff --git a/packages/firebase-database/angular/tsconfig.angular.json b/packages/firebase-database/angular/tsconfig.angular.json
new file mode 100644
index 00000000..14bc1c92
--- /dev/null
+++ b/packages/firebase-database/angular/tsconfig.angular.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
+ "compilerOptions": {
+ "types": ["node"],
+ "baseUrl": ".",
+ "paths": {
+ "@nativescript/firebase-database": ["../../../dist/packages/firebase-database"],
+ "@nativescript/firebase-core": ["../../../dist/packages/firebase-core"]
+ },
+ "outDir": "../../../dist/out-tsc",
+ "declarationDir": "../../../dist/out-tsc"
+ },
+ "files": ["index.ts"]
+}
diff --git a/packages/firebase-database/angular/tsconfig.json b/packages/firebase-database/angular/tsconfig.json
new file mode 100644
index 00000000..882b6018
--- /dev/null
+++ b/packages/firebase-database/angular/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "rootDirs": [".", "../.."]
+ }
+}
diff --git a/packages/firebase-database/package.json b/packages/firebase-database/package.json
index 385091e2..616bcfb9 100644
--- a/packages/firebase-database/package.json
+++ b/packages/firebase-database/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/firebase-database",
- "version": "5.0.2",
+ "version": "5.0.3",
"description": "NativeScript Firebase - Database",
"main": "index",
"typings": "index.d.ts",
diff --git a/packages/firebase-firestore/angular/.eslintrc.json b/packages/firebase-firestore/angular/.eslintrc.json
new file mode 100644
index 00000000..a129a9f3
--- /dev/null
+++ b/packages/firebase-firestore/angular/.eslintrc.json
@@ -0,0 +1,24 @@
+{
+ "extends": ["../.eslintrc.json"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "allowCircularSelfDependency": true
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/firebase-firestore/angular/index.ts b/packages/firebase-firestore/angular/index.ts
new file mode 100644
index 00000000..3a6680c7
--- /dev/null
+++ b/packages/firebase-firestore/angular/index.ts
@@ -0,0 +1,44 @@
+import { Provider } from '@angular/core';
+import { firebase, FirebaseApp } from '@nativescript/firebase-core';
+import { Firestore } from '@nativescript/firebase-firestore';
+
+export type FirestoreProviderConfig = {
+ app?: FirebaseApp;
+ emulator?: {
+ emulatorHost?: string;
+ emulatorPort?: number;
+ };
+};
+
+/**
+ * Provides the Firebase Firestore service.
+ * This function creates a provider for the Firestore service, allowing you to use Firebase Firestore in your Angular application.
+ *
+ * @param config - Configuration options for the Firestore provider.
+ * - app: The Firebase app instance to use. If not provided, the default app will be used.
+ * - emulator: Configuration for the Firestore emulator.
+ * - emulatorHost: The host of the emulator server
+ * - emulatorPort: The port number of the emulator server
+ *
+ * @returns An array of providers for the Firestore service.
+ */
+export function provideFirestore(config: FirestoreProviderConfig = {}): Provider[] {
+ return [
+ {
+ provide: Firestore,
+ useFactory: () => {
+ const firestore = firebase().firestore(config.app);
+ if (config.emulator && config.emulator.emulatorHost && config.emulator.emulatorPort) {
+ if (!config.emulator.emulatorHost) {
+ throw new Error('Firestore emulator host must be provided');
+ }
+ if (!config.emulator.emulatorPort || config.emulator.emulatorPort < 0) {
+ throw new Error('Firestore emulator port must be a valid positive number');
+ }
+ firestore.useEmulator(config.emulator.emulatorHost, config.emulator.emulatorPort);
+ }
+ return firestore;
+ },
+ },
+ ];
+}
diff --git a/packages/firebase-firestore/angular/ng-package.json b/packages/firebase-firestore/angular/ng-package.json
new file mode 100644
index 00000000..fbc51eea
--- /dev/null
+++ b/packages/firebase-firestore/angular/ng-package.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "index.ts"
+ },
+ "allowedNonPeerDependencies": ["."],
+ "dest": "../../../dist/packages/firebase-firestore/angular"
+}
diff --git a/packages/firebase-firestore/angular/package.json b/packages/firebase-firestore/angular/package.json
new file mode 100644
index 00000000..b52e9f08
--- /dev/null
+++ b/packages/firebase-firestore/angular/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "@nativescript/firebase-firestore-angular"
+}
diff --git a/packages/firebase-firestore/angular/tsconfig.angular.json b/packages/firebase-firestore/angular/tsconfig.angular.json
new file mode 100644
index 00000000..c55ccbc0
--- /dev/null
+++ b/packages/firebase-firestore/angular/tsconfig.angular.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
+ "compilerOptions": {
+ "types": ["node"],
+ "baseUrl": ".",
+ "paths": {
+ "@nativescript/firebase-core": ["../../../dist/packages/firebase-core"],
+ "@nativescript/firebase-firestore": ["../../../dist/packages/firebase-firestore"]
+ },
+ "outDir": "../../../dist/out-tsc",
+ "declarationDir": "../../../dist/out-tsc"
+ },
+ "files": ["index.ts"]
+}
diff --git a/packages/firebase-firestore/angular/tsconfig.json b/packages/firebase-firestore/angular/tsconfig.json
new file mode 100644
index 00000000..882b6018
--- /dev/null
+++ b/packages/firebase-firestore/angular/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "rootDirs": [".", "../.."]
+ }
+}
diff --git a/packages/firebase-firestore/package.json b/packages/firebase-firestore/package.json
index 4d45385c..5a8c9807 100644
--- a/packages/firebase-firestore/package.json
+++ b/packages/firebase-firestore/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/firebase-firestore",
- "version": "5.0.2",
+ "version": "5.0.3",
"description": "NativeScript Firebase - Firestore",
"main": "index",
"typings": "index.d.ts",
diff --git a/packages/firebase-storage/angular/.eslintrc.json b/packages/firebase-storage/angular/.eslintrc.json
new file mode 100644
index 00000000..a129a9f3
--- /dev/null
+++ b/packages/firebase-storage/angular/.eslintrc.json
@@ -0,0 +1,24 @@
+{
+ "extends": ["../.eslintrc.json"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "allowCircularSelfDependency": true
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/firebase-storage/angular/index.ts b/packages/firebase-storage/angular/index.ts
new file mode 100644
index 00000000..b2238305
--- /dev/null
+++ b/packages/firebase-storage/angular/index.ts
@@ -0,0 +1,14 @@
+import { Provider } from '@angular/core';
+import { Storage } from '@nativescript/firebase-storage';
+import { firebase } from '@nativescript/firebase-core';
+
+export function provideFirebaseStorage(): Provider {
+ return {
+ provide: Storage,
+ useFactory: () => {
+ return firebase().storage();
+ },
+ };
+ // This function is a placeholder for any future logic needed to provide Firebase Storage functionality.
+ // Currently, it does not perform any operations.
+}
diff --git a/packages/firebase-storage/angular/ng-package.json b/packages/firebase-storage/angular/ng-package.json
new file mode 100644
index 00000000..f8cbdeb9
--- /dev/null
+++ b/packages/firebase-storage/angular/ng-package.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "index.ts"
+ },
+ "allowedNonPeerDependencies": ["."],
+ "dest": "../../../dist/packages/firebase-storage/angular"
+}
diff --git a/packages/firebase-storage/angular/package.json b/packages/firebase-storage/angular/package.json
new file mode 100644
index 00000000..b0b10580
--- /dev/null
+++ b/packages/firebase-storage/angular/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "@nativescript/firebase-storage-angular"
+}
diff --git a/packages/firebase-storage/angular/tsconfig.angular.json b/packages/firebase-storage/angular/tsconfig.angular.json
new file mode 100644
index 00000000..17fff88e
--- /dev/null
+++ b/packages/firebase-storage/angular/tsconfig.angular.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
+ "compilerOptions": {
+ "types": ["node"],
+ "baseUrl": ".",
+ "paths": {
+ "@nativescript/firebase-storage": ["../../../dist/packages/firebase-storage"],
+ "@nativescript/firebase-core": ["../../../dist/packages/firebase-core"]
+ },
+ "outDir": "../../../dist/out-tsc",
+ "declarationDir": "../../../dist/out-tsc"
+ },
+ "files": ["index.ts"]
+}
diff --git a/packages/firebase-storage/angular/tsconfig.json b/packages/firebase-storage/angular/tsconfig.json
new file mode 100644
index 00000000..882b6018
--- /dev/null
+++ b/packages/firebase-storage/angular/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "rootDirs": [".", "../.."]
+ }
+}
diff --git a/packages/firebase-storage/package.json b/packages/firebase-storage/package.json
index 91a45627..bf56a727 100644
--- a/packages/firebase-storage/package.json
+++ b/packages/firebase-storage/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/firebase-storage",
- "version": "5.0.2",
+ "version": "5.0.3",
"description": "NativeScript Firebase - Storage",
"main": "index",
"typings": "index.d.ts",
diff --git a/packages/firebase-ui/angular/.eslintrc.json b/packages/firebase-ui/angular/.eslintrc.json
new file mode 100644
index 00000000..a129a9f3
--- /dev/null
+++ b/packages/firebase-ui/angular/.eslintrc.json
@@ -0,0 +1,24 @@
+{
+ "extends": ["../.eslintrc.json"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "allowCircularSelfDependency": true
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/firebase-ui/angular/index.ts b/packages/firebase-ui/angular/index.ts
new file mode 100644
index 00000000..e22fb6c4
--- /dev/null
+++ b/packages/firebase-ui/angular/index.ts
@@ -0,0 +1,20 @@
+import { Provider } from '@angular/core';
+import { UI } from '@nativescript/firebase-ui';
+import { firebase } from '@nativescript/firebase-core';
+
+export { UI };
+
+/**
+ * Provides the FirebaseUI service.
+ * This service is used to initialize and manage FirebaseUI instances.
+ *
+ * @returns {Provider} A provider for the FirebaseUI service.
+ */
+export function provideFirebaseUI(): Provider {
+ return {
+ provide: UI,
+ useFactory: () => {
+ return firebase().ui();
+ },
+ };
+}
diff --git a/packages/firebase-ui/angular/ng-package.json b/packages/firebase-ui/angular/ng-package.json
new file mode 100644
index 00000000..7267873c
--- /dev/null
+++ b/packages/firebase-ui/angular/ng-package.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "index.ts"
+ },
+ "allowedNonPeerDependencies": ["."],
+ "dest": "../../../dist/packages/firebase-ui/angular"
+}
diff --git a/packages/firebase-ui/angular/package.json b/packages/firebase-ui/angular/package.json
new file mode 100644
index 00000000..987bbea9
--- /dev/null
+++ b/packages/firebase-ui/angular/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "@nativescript/firebase-ui-angular"
+}
diff --git a/packages/firebase-ui/angular/tsconfig.angular.json b/packages/firebase-ui/angular/tsconfig.angular.json
new file mode 100644
index 00000000..a343528a
--- /dev/null
+++ b/packages/firebase-ui/angular/tsconfig.angular.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
+ "compilerOptions": {
+ "types": ["node"],
+ "baseUrl": ".",
+ "paths": {
+ "@nativescript/firebase-ui": ["../../../dist/packages/firebase-ui"],
+ "@nativescript/firebase-core": ["../../../dist/packages/firebase-core"]
+ },
+ "outDir": "../../../dist/out-tsc",
+ "declarationDir": "../../../dist/out-tsc"
+ },
+ "files": ["index.ts"]
+}
diff --git a/packages/firebase-ui/angular/tsconfig.json b/packages/firebase-ui/angular/tsconfig.json
new file mode 100644
index 00000000..882b6018
--- /dev/null
+++ b/packages/firebase-ui/angular/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "rootDirs": [".", "../.."]
+ }
+}
diff --git a/packages/firebase-ui/package.json b/packages/firebase-ui/package.json
index f6e1b54c..6c92a6ce 100644
--- a/packages/firebase-ui/package.json
+++ b/packages/firebase-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/firebase-ui",
- "version": "5.0.2",
+ "version": "5.0.3",
"description": "NativeScript Firebase - UI",
"main": "index",
"typings": "index.d.ts",
diff --git a/tsconfig.base.json b/tsconfig.base.json
index ce91584c..ee84db24 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -40,7 +40,12 @@
"@nativescript/firebase-performance": ["packages/firebase-performance/index.d.ts"],
"@nativescript/firebase-remote-config": ["packages/firebase-remote-config/index.d.ts"],
"@nativescript/firebase-storage": ["packages/firebase-storage/index.d.ts"],
- "@nativescript/firebase-ui": ["packages/firebase-ui/index.d.ts"]
+ "@nativescript/firebase-ui": ["packages/firebase-ui/index.d.ts"],
+ "@nativescript/firebase-auth/angular": ["packages/firebase-auth/angular/index.ts"],
+ "@nativescript/firebase-firestore/angular": ["packages/firebase-firestore/angular/index.ts"],
+ "@nativescript/firebase-ui/angular": ["packages/firebase-ui/angular/index.ts"],
+ "@nativescript/firebase-storage/angular": ["packages/firebase-storage/angular/index.ts"],
+ "@nativescript/firebase-database/angular": ["packages/firebase-database/angular/index.ts"]
}
},
"exclude": ["node_modules", "tmp"]