@angular/fire 19.0.0-rc.0 → 19.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ import { DataConnect } from 'firebase/data-connect';
2
+ export { DataConnect };
3
+ export declare const DATA_CONNECT_PROVIDER_NAME = "data-connect";
4
+ export interface DataConnectInstances extends Array<DataConnect> {
5
+ }
6
+ export declare class DataConnectInstances {
7
+ constructor();
8
+ }
9
+ export declare const dataConnectInstance$: import("rxjs").Observable<DataConnect>;
@@ -0,0 +1,13 @@
1
+ import { EnvironmentProviders, Injector, NgZone } from '@angular/core';
2
+ import { FirebaseApp } from '@angular/fire/app';
3
+ import { DataConnect } from './data-connect';
4
+ import * as i0 from "@angular/core";
5
+ export declare function defaultDataConnectInstanceFactory(provided: DataConnect[] | undefined, defaultApp: FirebaseApp): DataConnect;
6
+ export declare function dataConnectInstanceFactory(fn: (injector: Injector) => DataConnect): (zone: NgZone, injector: Injector) => DataConnect;
7
+ export declare class DataConnectModule {
8
+ constructor();
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<DataConnectModule, never>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DataConnectModule, never, never, never>;
11
+ static ɵinj: i0.ɵɵInjectorDeclaration<DataConnectModule>;
12
+ }
13
+ export declare function provideDataConnect(fn: (injector: Injector) => DataConnect, ...deps: any[]): EnvironmentProviders;
@@ -0,0 +1,12 @@
1
+ export * from 'firebase/data-connect';
2
+ import { connectDataConnectEmulator as _connectDataConnectEmulator, executeMutation as _executeMutation, executeQuery as _executeQuery, getDataConnect as _getDataConnect, mutationRef as _mutationRef, queryRef as _queryRef, setLogLevel as _setLogLevel, subscribe as _subscribe, terminate as _terminate, toQueryRef as _toQueryRef } from 'firebase/data-connect';
3
+ export declare const connectDataConnectEmulator: typeof _connectDataConnectEmulator;
4
+ export declare const executeMutation: typeof _executeMutation;
5
+ export declare const executeQuery: typeof _executeQuery;
6
+ export declare const getDataConnect: typeof _getDataConnect;
7
+ export declare const mutationRef: typeof _mutationRef;
8
+ export declare const queryRef: typeof _queryRef;
9
+ export declare const setLogLevel: typeof _setLogLevel;
10
+ export declare const subscribe: typeof _subscribe;
11
+ export declare const terminate: typeof _terminate;
12
+ export declare const toQueryRef: typeof _toQueryRef;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@angular/fire/data-connect" />
5
+ export * from './public_api';
@@ -0,0 +1,3 @@
1
+ {
2
+ "module": "../fesm2022/angular-fire-data-connect.mjs"
3
+ }
@@ -0,0 +1,3 @@
1
+ export { DataConnectInstances, DataConnect, dataConnectInstance$ } from './data-connect';
2
+ export { provideDataConnect, DataConnectModule } from './data-connect.module';
3
+ export * from './firebase';
@@ -2,8 +2,9 @@ import 'firebase/compat/auth';
2
2
  import { isPlatformServer } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
5
+ import { pendingUntilEvent } from '@angular/core/rxjs-interop';
5
6
  import * as i1 from '@angular/fire';
6
- import { keepUnstableUntilFirst, VERSION } from '@angular/fire';
7
+ import { VERSION } from '@angular/fire';
7
8
  import * as i2 from '@angular/fire/app-check';
8
9
  import { ɵcacheInstance as _cacheInstance, ɵfirebaseAppFactory as _firebaseAppFactory, ɵlazySDKProxy as _lazySDKProxy, FIREBASE_OPTIONS, FIREBASE_APP_NAME, ɵapplyMixins as _applyMixins } from '@angular/fire/compat';
9
10
  import { Subject, of, Observable, from, merge } from 'rxjs';
@@ -117,7 +118,7 @@ class AngularFireAuth {
117
118
  // There could potentially be race conditions still... but this greatly decreases the odds while
118
119
  // we reevaluate the API.
119
120
  auth.pipe(first()).subscribe();
120
- const redirectResult = auth.pipe(switchMap(auth => auth.getRedirectResult().then(it => it, () => null)), keepUnstableUntilFirst, shareReplay({ bufferSize: 1, refCount: false }));
121
+ const redirectResult = auth.pipe(switchMap(auth => auth.getRedirectResult().then(it => it, () => null)), pendingUntilEvent(), shareReplay({ bufferSize: 1, refCount: false }));
121
122
  const authStateChanged = auth.pipe(switchMap(auth => new Observable(sub => ({ unsubscribe: zone.runOutsideAngular(() => auth.onAuthStateChanged(next => sub.next(next), err => sub.error(err), () => sub.complete())) }))));
122
123
  const idTokenChanged = auth.pipe(switchMap(auth => new Observable(sub => ({ unsubscribe: zone.runOutsideAngular(() => auth.onIdTokenChanged(next => sub.next(next), err => sub.error(err), () => sub.complete())) }))));
123
124
  this.authState = redirectResult.pipe(switchMapTo(authStateChanged), subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular));
@@ -1 +1 @@
1
- {"version":3,"file":"angular-fire-compat-auth.mjs","sources":["../../../src/compat/auth/base.ts","../../../src/compat/auth/auth.ts","../../../src/compat/auth/auth.module.ts","../../../src/compat/auth/angular-fire-compat-auth.ts"],"sourcesContent":["// DO NOT MODIFY, this file is autogenerated by tools/build.ts\n// Export a null object with the same keys as firebase/compat/auth, so Proxy can work with proxy-polyfill in Internet Explorer\nexport const proxyPolyfillCompat = {\n name: null,\n config: null,\n emulatorConfig: null,\n app: null,\n applyActionCode: null,\n checkActionCode: null,\n confirmPasswordReset: null,\n createUserWithEmailAndPassword: null,\n currentUser: null,\n fetchSignInMethodsForEmail: null,\n isSignInWithEmailLink: null,\n getRedirectResult: null,\n languageCode: null,\n settings: null,\n onAuthStateChanged: null,\n onIdTokenChanged: null,\n sendSignInLinkToEmail: null,\n sendPasswordResetEmail: null,\n setPersistence: null,\n signInAndRetrieveDataWithCredential: null,\n signInAnonymously: null,\n signInWithCredential: null,\n signInWithCustomToken: null,\n signInWithEmailAndPassword: null,\n signInWithPhoneNumber: null,\n signInWithEmailLink: null,\n signInWithPopup: null,\n signInWithRedirect: null,\n signOut: null,\n tenantId: null,\n updateCurrentUser: null,\n useDeviceLanguage: null,\n useEmulator: null,\n verifyPasswordResetCode: null,\n};\n","import { isPlatformServer } from '@angular/common';\nimport { Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID } from '@angular/core';\nimport { keepUnstableUntilFirst, ɵAngularFireSchedulers } from '@angular/fire';\nimport { AppCheckInstances } from '@angular/fire/app-check';\nimport { ɵPromiseProxy, ɵapplyMixins, ɵlazySDKProxy } from '@angular/fire/compat';\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, FirebaseApp, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';\nimport { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { Observable, Subject, from, merge, of } from 'rxjs';\nimport { filter, first, map, observeOn, shareReplay, subscribeOn, switchMap, switchMapTo } from 'rxjs/operators';\nimport { proxyPolyfillCompat } from './base';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface AngularFireAuth extends ɵPromiseProxy<firebase.auth.Auth> {}\n\ntype UseEmulatorArguments = Parameters<firebase.auth.Auth['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.auth.use-emulator');\n\nexport const SETTINGS = new InjectionToken<firebase.auth.AuthSettings>('angularfire2.auth.settings');\nexport const TENANT_ID = new InjectionToken<string>('angularfire2.auth.tenant-id');\nexport const LANGUAGE_CODE = new InjectionToken<string>('angularfire2.auth.langugage-code');\nexport const USE_DEVICE_LANGUAGE = new InjectionToken<boolean>('angularfire2.auth.use-device-language');\nexport const PERSISTENCE = new InjectionToken<string>('angularfire.auth.persistence');\n\nexport const ɵauthFactory = (\n app: FirebaseApp, zone: NgZone, useEmulator: UseEmulatorArguments|null,\n tenantId: string, languageCode: string|null, useDeviceLanguage: boolean|null,\n settings: firebase.auth.AuthSettings|null, persistence: string|null,\n) => ɵcacheInstance(`${app.name}.auth`, 'AngularFireAuth', app.name, () => {\n const auth = zone.runOutsideAngular(() => app.auth());\n if (useEmulator) {\n auth.useEmulator(...useEmulator);\n }\n if (tenantId) {\n auth.tenantId = tenantId;\n }\n auth.languageCode = languageCode;\n if (useDeviceLanguage) {\n auth.useDeviceLanguage();\n }\n if (settings) {\n for (const [k, v] of Object.entries(settings)) {\n auth.settings[k] = v;\n }\n }\n if (persistence) {\n auth.setPersistence(persistence);\n }\n return auth;\n}, [useEmulator, tenantId, languageCode, useDeviceLanguage, settings, persistence]);\n\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireAuth {\n\n /**\n * Observable of authentication state; as of Firebase 4.0 this is only triggered via sign-in/out\n */\n public readonly authState: Observable<firebase.User|null>;\n\n /**\n * Observable of the currently signed-in user's JWT token used to identify the user to a Firebase service (or null).\n */\n public readonly idToken: Observable<string|null>;\n\n /**\n * Observable of the currently signed-in user (or null).\n */\n public readonly user: Observable<firebase.User|null>;\n\n /**\n * Observable of the currently signed-in user's IdTokenResult object which contains the ID token JWT string and other\n * helper properties for getting different data associated with the token as well as all the decoded payload claims\n * (or null).\n */\n public readonly idTokenResult: Observable<firebase.auth.IdTokenResult|null>;\n\n /**\n * Observable of the currently signed-in user's credential, or null\n */\n public readonly credential: Observable<Required<firebase.auth.UserCredential>|null>;\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string|null|undefined,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n zone: NgZone,\n schedulers: ɵAngularFireSchedulers,\n @Optional() @Inject(USE_EMULATOR) useEmulator: any, // can't use the tuple here\n @Optional() @Inject(SETTINGS) settings: any, // can't use firebase.auth.AuthSettings here\n @Optional() @Inject(TENANT_ID) tenantId: string | null,\n @Optional() @Inject(LANGUAGE_CODE) languageCode: string | null,\n @Optional() @Inject(USE_DEVICE_LANGUAGE) useDeviceLanguage: boolean | null,\n @Optional() @Inject(PERSISTENCE) persistence: string | null,\n @Optional() _appCheckInstances: AppCheckInstances,\n ) {\n const logins = new Subject<Required<firebase.auth.UserCredential>>();\n\n const auth = of(undefined).pipe(\n observeOn(schedulers.outsideAngular),\n switchMap(() => zone.runOutsideAngular(() => import('firebase/compat/auth'))),\n map(() => ɵfirebaseAppFactory(options, zone, name)),\n map(app => ɵauthFactory(app, zone, useEmulator, tenantId, languageCode, useDeviceLanguage, settings, persistence)),\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n\n if (isPlatformServer(platformId)) {\n\n this.authState = this.user = this.idToken = this.idTokenResult = this.credential = of(null);\n\n } else {\n\n // HACK, as we're exporting auth.Auth, rather than auth, developers importing firebase.auth\n // (e.g, `import { auth } from 'firebase/compat/app'`) are getting an undefined auth object unexpectedly\n // as we're completely lazy. Let's eagerly load the Auth SDK here.\n // There could potentially be race conditions still... but this greatly decreases the odds while\n // we reevaluate the API.\n auth.pipe(first()).subscribe();\n\n const redirectResult = auth.pipe(\n switchMap(auth => auth.getRedirectResult().then(it => it, () => null)),\n keepUnstableUntilFirst,\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n\n const authStateChanged = auth.pipe(\n switchMap(auth => new Observable<firebase.User|null>(sub =>\n ({ unsubscribe: zone.runOutsideAngular(() => auth.onAuthStateChanged(\n next => sub.next(next),\n err => sub.error(err),\n () => sub.complete()\n ))})\n )),\n );\n\n const idTokenChanged = auth.pipe(\n switchMap(auth => new Observable<firebase.User|null>(sub =>\n ({ unsubscribe: zone.runOutsideAngular(() => auth.onIdTokenChanged(\n next => sub.next(next),\n err => sub.error(err),\n () => sub.complete()\n ))})\n ))\n );\n\n this.authState = redirectResult.pipe(\n switchMapTo(authStateChanged),\n subscribeOn(schedulers.outsideAngular),\n observeOn(schedulers.insideAngular),\n );\n\n this.user = redirectResult.pipe(\n switchMapTo(idTokenChanged),\n subscribeOn(schedulers.outsideAngular),\n observeOn(schedulers.insideAngular),\n );\n\n this.idToken = this.user.pipe(\n switchMap(user => user ? from(user.getIdToken()) : of(null))\n );\n\n this.idTokenResult = this.user.pipe(\n switchMap(user => user ? from(user.getIdTokenResult()) : of(null))\n );\n\n this.credential = merge(\n redirectResult,\n logins,\n // pipe in null authState to make credential zipable, just a weird devexp if\n // authState and user go null to still have a credential\n this.authState.pipe(filter(it => !it))\n ).pipe(\n // handle the { user: { } } when a user is already logged in, rather have null\n // TODO handle the type corcersion better\n map(credential => credential?.user ? credential as Required<firebase.auth.UserCredential> : null),\n subscribeOn(schedulers.outsideAngular),\n observeOn(schedulers.insideAngular),\n );\n\n }\n\n return ɵlazySDKProxy(this, auth, zone, { spy: {\n apply: (name, _, val) => {\n // If they call a signIn or createUser function listen into the promise\n // this will give us the user credential, push onto the logins Subject\n // to be consumed in .credential\n if (name.startsWith('signIn') || name.startsWith('createUser')) {\n // TODO fix the types, the trouble is UserCredential has everything optional\n val.then((user: firebase.auth.UserCredential) => logins.next(user as any));\n }\n }\n }});\n\n }\n\n}\n\nɵapplyMixins(AngularFireAuth, [proxyPolyfillCompat]);\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireAuth } from './auth';\n\n@NgModule({\n providers: [ AngularFireAuth ]\n})\nexport class AngularFireAuthModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'auth-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵcacheInstance","ɵfirebaseAppFactory","ɵlazySDKProxy","ɵapplyMixins"],"mappings":"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"}
1
+ {"version":3,"file":"angular-fire-compat-auth.mjs","sources":["../../../src/compat/auth/base.ts","../../../src/compat/auth/auth.ts","../../../src/compat/auth/auth.module.ts","../../../src/compat/auth/angular-fire-compat-auth.ts"],"sourcesContent":["// DO NOT MODIFY, this file is autogenerated by tools/build.ts\n// Export a null object with the same keys as firebase/compat/auth, so Proxy can work with proxy-polyfill in Internet Explorer\nexport const proxyPolyfillCompat = {\n name: null,\n config: null,\n emulatorConfig: null,\n app: null,\n applyActionCode: null,\n checkActionCode: null,\n confirmPasswordReset: null,\n createUserWithEmailAndPassword: null,\n currentUser: null,\n fetchSignInMethodsForEmail: null,\n isSignInWithEmailLink: null,\n getRedirectResult: null,\n languageCode: null,\n settings: null,\n onAuthStateChanged: null,\n onIdTokenChanged: null,\n sendSignInLinkToEmail: null,\n sendPasswordResetEmail: null,\n setPersistence: null,\n signInAndRetrieveDataWithCredential: null,\n signInAnonymously: null,\n signInWithCredential: null,\n signInWithCustomToken: null,\n signInWithEmailAndPassword: null,\n signInWithPhoneNumber: null,\n signInWithEmailLink: null,\n signInWithPopup: null,\n signInWithRedirect: null,\n signOut: null,\n tenantId: null,\n updateCurrentUser: null,\n useDeviceLanguage: null,\n useEmulator: null,\n verifyPasswordResetCode: null,\n};\n","import { isPlatformServer } from '@angular/common';\nimport { Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { AppCheckInstances } from '@angular/fire/app-check';\nimport { ɵPromiseProxy, ɵapplyMixins, ɵlazySDKProxy } from '@angular/fire/compat';\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, FirebaseApp, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';\nimport { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { Observable, Subject, from, merge, of } from 'rxjs';\nimport { filter, first, map, observeOn, shareReplay, subscribeOn, switchMap, switchMapTo } from 'rxjs/operators';\nimport { proxyPolyfillCompat } from './base';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface AngularFireAuth extends ɵPromiseProxy<firebase.auth.Auth> {}\n\ntype UseEmulatorArguments = Parameters<firebase.auth.Auth['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.auth.use-emulator');\n\nexport const SETTINGS = new InjectionToken<firebase.auth.AuthSettings>('angularfire2.auth.settings');\nexport const TENANT_ID = new InjectionToken<string>('angularfire2.auth.tenant-id');\nexport const LANGUAGE_CODE = new InjectionToken<string>('angularfire2.auth.langugage-code');\nexport const USE_DEVICE_LANGUAGE = new InjectionToken<boolean>('angularfire2.auth.use-device-language');\nexport const PERSISTENCE = new InjectionToken<string>('angularfire.auth.persistence');\n\nexport const ɵauthFactory = (\n app: FirebaseApp, zone: NgZone, useEmulator: UseEmulatorArguments|null,\n tenantId: string, languageCode: string|null, useDeviceLanguage: boolean|null,\n settings: firebase.auth.AuthSettings|null, persistence: string|null,\n) => ɵcacheInstance(`${app.name}.auth`, 'AngularFireAuth', app.name, () => {\n const auth = zone.runOutsideAngular(() => app.auth());\n if (useEmulator) {\n auth.useEmulator(...useEmulator);\n }\n if (tenantId) {\n auth.tenantId = tenantId;\n }\n auth.languageCode = languageCode;\n if (useDeviceLanguage) {\n auth.useDeviceLanguage();\n }\n if (settings) {\n for (const [k, v] of Object.entries(settings)) {\n auth.settings[k] = v;\n }\n }\n if (persistence) {\n auth.setPersistence(persistence);\n }\n return auth;\n}, [useEmulator, tenantId, languageCode, useDeviceLanguage, settings, persistence]);\n\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireAuth {\n\n /**\n * Observable of authentication state; as of Firebase 4.0 this is only triggered via sign-in/out\n */\n public readonly authState: Observable<firebase.User|null>;\n\n /**\n * Observable of the currently signed-in user's JWT token used to identify the user to a Firebase service (or null).\n */\n public readonly idToken: Observable<string|null>;\n\n /**\n * Observable of the currently signed-in user (or null).\n */\n public readonly user: Observable<firebase.User|null>;\n\n /**\n * Observable of the currently signed-in user's IdTokenResult object which contains the ID token JWT string and other\n * helper properties for getting different data associated with the token as well as all the decoded payload claims\n * (or null).\n */\n public readonly idTokenResult: Observable<firebase.auth.IdTokenResult|null>;\n\n /**\n * Observable of the currently signed-in user's credential, or null\n */\n public readonly credential: Observable<Required<firebase.auth.UserCredential>|null>;\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string|null|undefined,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n zone: NgZone,\n schedulers: ɵAngularFireSchedulers,\n @Optional() @Inject(USE_EMULATOR) useEmulator: any, // can't use the tuple here\n @Optional() @Inject(SETTINGS) settings: any, // can't use firebase.auth.AuthSettings here\n @Optional() @Inject(TENANT_ID) tenantId: string | null,\n @Optional() @Inject(LANGUAGE_CODE) languageCode: string | null,\n @Optional() @Inject(USE_DEVICE_LANGUAGE) useDeviceLanguage: boolean | null,\n @Optional() @Inject(PERSISTENCE) persistence: string | null,\n @Optional() _appCheckInstances: AppCheckInstances,\n ) {\n const logins = new Subject<Required<firebase.auth.UserCredential>>();\n\n const auth = of(undefined).pipe(\n observeOn(schedulers.outsideAngular),\n switchMap(() => zone.runOutsideAngular(() => import('firebase/compat/auth'))),\n map(() => ɵfirebaseAppFactory(options, zone, name)),\n map(app => ɵauthFactory(app, zone, useEmulator, tenantId, languageCode, useDeviceLanguage, settings, persistence)),\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n\n if (isPlatformServer(platformId)) {\n\n this.authState = this.user = this.idToken = this.idTokenResult = this.credential = of(null);\n\n } else {\n\n // HACK, as we're exporting auth.Auth, rather than auth, developers importing firebase.auth\n // (e.g, `import { auth } from 'firebase/compat/app'`) are getting an undefined auth object unexpectedly\n // as we're completely lazy. Let's eagerly load the Auth SDK here.\n // There could potentially be race conditions still... but this greatly decreases the odds while\n // we reevaluate the API.\n auth.pipe(first()).subscribe();\n\n const redirectResult = auth.pipe(\n switchMap(auth => auth.getRedirectResult().then(it => it, () => null)),\n pendingUntilEvent(),\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n\n const authStateChanged = auth.pipe(\n switchMap(auth => new Observable<firebase.User|null>(sub =>\n ({ unsubscribe: zone.runOutsideAngular(() => auth.onAuthStateChanged(\n next => sub.next(next),\n err => sub.error(err),\n () => sub.complete()\n ))})\n )),\n );\n\n const idTokenChanged = auth.pipe(\n switchMap(auth => new Observable<firebase.User|null>(sub =>\n ({ unsubscribe: zone.runOutsideAngular(() => auth.onIdTokenChanged(\n next => sub.next(next),\n err => sub.error(err),\n () => sub.complete()\n ))})\n ))\n );\n\n this.authState = redirectResult.pipe(\n switchMapTo(authStateChanged),\n subscribeOn(schedulers.outsideAngular),\n observeOn(schedulers.insideAngular),\n );\n\n this.user = redirectResult.pipe(\n switchMapTo(idTokenChanged),\n subscribeOn(schedulers.outsideAngular),\n observeOn(schedulers.insideAngular),\n );\n\n this.idToken = this.user.pipe(\n switchMap(user => user ? from(user.getIdToken()) : of(null))\n );\n\n this.idTokenResult = this.user.pipe(\n switchMap(user => user ? from(user.getIdTokenResult()) : of(null))\n );\n\n this.credential = merge(\n redirectResult,\n logins,\n // pipe in null authState to make credential zipable, just a weird devexp if\n // authState and user go null to still have a credential\n this.authState.pipe(filter(it => !it))\n ).pipe(\n // handle the { user: { } } when a user is already logged in, rather have null\n // TODO handle the type corcersion better\n map(credential => credential?.user ? credential as Required<firebase.auth.UserCredential> : null),\n subscribeOn(schedulers.outsideAngular),\n observeOn(schedulers.insideAngular),\n );\n\n }\n\n return ɵlazySDKProxy(this, auth, zone, { spy: {\n apply: (name, _, val) => {\n // If they call a signIn or createUser function listen into the promise\n // this will give us the user credential, push onto the logins Subject\n // to be consumed in .credential\n if (name.startsWith('signIn') || name.startsWith('createUser')) {\n // TODO fix the types, the trouble is UserCredential has everything optional\n val.then((user: firebase.auth.UserCredential) => logins.next(user as any));\n }\n }\n }});\n\n }\n\n}\n\nɵapplyMixins(AngularFireAuth, [proxyPolyfillCompat]);\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireAuth } from './auth';\n\n@NgModule({\n providers: [ AngularFireAuth ]\n})\nexport class AngularFireAuthModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'auth-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵcacheInstance","ɵfirebaseAppFactory","ɵlazySDKProxy","ɵapplyMixins"],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
2
+ import { inject, NgZone, InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/fire';
4
- import { keepUnstableUntilFirst, VERSION } from '@angular/fire';
4
+ import { VERSION } from '@angular/fire';
5
5
  import * as i3 from '@angular/fire/app-check';
6
6
  import { ɵfirebaseAppFactory as _firebaseAppFactory, ɵcacheInstance as _cacheInstance, FIREBASE_OPTIONS, FIREBASE_APP_NAME } from '@angular/fire/compat';
7
7
  import * as i2 from '@angular/fire/compat/auth';
8
8
  import { ɵauthFactory as _authFactory, USE_EMULATOR as USE_EMULATOR$1, SETTINGS, TENANT_ID, LANGUAGE_CODE, USE_DEVICE_LANGUAGE, PERSISTENCE } from '@angular/fire/compat/auth';
9
+ import { pendingUntilEvent } from '@angular/core/rxjs-interop';
9
10
  import { map, share, scan, withLatestFrom, skipWhile, switchMap, distinctUntilChanged } from 'rxjs/operators';
10
11
  import { Observable, asyncScheduler, merge, of } from 'rxjs';
11
12
  import 'firebase/compat/auth';
@@ -264,7 +265,7 @@ function snapshotChanges(query, events, scheduler) {
264
265
 
265
266
  function createListReference(query, afDatabase) {
266
267
  const outsideAngularScheduler = afDatabase.schedulers.outsideAngular;
267
- const refInZone = afDatabase.schedulers.ngZone.run(() => query.ref);
268
+ const refInZone = inject(NgZone).run(() => query.ref);
268
269
  return {
269
270
  query,
270
271
  update: createDataOperationMethod(refInZone, 'update'),
@@ -272,13 +273,13 @@ function createListReference(query, afDatabase) {
272
273
  push: (data) => refInZone.push(data),
273
274
  remove: createRemoveMethod(refInZone),
274
275
  snapshotChanges(events) {
275
- return snapshotChanges(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);
276
+ return snapshotChanges(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());
276
277
  },
277
278
  stateChanges(events) {
278
- return stateChanges(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);
279
+ return stateChanges(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());
279
280
  },
280
281
  auditTrail(events) {
281
- return auditTrail(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);
282
+ return auditTrail(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());
282
283
  },
283
284
  valueChanges(events, options) {
284
285
  const snapshotChanges$ = snapshotChanges(query, events, outsideAngularScheduler);
@@ -294,7 +295,7 @@ function createListReference(query, afDatabase) {
294
295
  else {
295
296
  return a.payload.val();
296
297
  }
297
- })), keepUnstableUntilFirst);
298
+ })), pendingUntilEvent());
298
299
  }
299
300
  };
300
301
  }
@@ -309,14 +310,14 @@ function createObjectReference(query, afDatabase) {
309
310
  return {
310
311
  query,
311
312
  snapshotChanges() {
312
- return createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)().pipe(keepUnstableUntilFirst);
313
+ return createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)().pipe(pendingUntilEvent());
313
314
  },
314
315
  update(data) { return query.ref.update(data); },
315
316
  set(data) { return query.ref.set(data); },
316
317
  remove() { return query.ref.remove(); },
317
318
  valueChanges() {
318
319
  const snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)();
319
- return snapshotChanges$.pipe(keepUnstableUntilFirst, map(action => action.payload.exists() ? action.payload.val() : null));
320
+ return snapshotChanges$.pipe(pendingUntilEvent(), map(action => action.payload.exists() ? action.payload.val() : null));
320
321
  },
321
322
  };
322
323
  }
@@ -346,7 +347,7 @@ class AngularFireDatabase {
346
347
  }, [useEmulator]);
347
348
  }
348
349
  list(pathOrRef, queryFn) {
349
- const ref = this.schedulers.ngZone.runOutsideAngular(() => getRef(this.database, pathOrRef));
350
+ const ref = inject(NgZone).runOutsideAngular(() => getRef(this.database, pathOrRef));
350
351
  let query = ref;
351
352
  if (queryFn) {
352
353
  query = queryFn(ref);
@@ -354,11 +355,11 @@ class AngularFireDatabase {
354
355
  return createListReference(query, this);
355
356
  }
356
357
  object(pathOrRef) {
357
- const ref = this.schedulers.ngZone.runOutsideAngular(() => getRef(this.database, pathOrRef));
358
+ const ref = inject(NgZone).runOutsideAngular(() => getRef(this.database, pathOrRef));
358
359
  return createObjectReference(ref, this);
359
360
  }
360
361
  createPushId() {
361
- const ref = this.schedulers.ngZone.runOutsideAngular(() => this.database.ref());
362
+ const ref = inject(NgZone).runOutsideAngular(() => this.database.ref());
362
363
  return ref.push().key;
363
364
  }
364
365
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: AngularFireDatabase, deps: [{ token: FIREBASE_OPTIONS }, { token: FIREBASE_APP_NAME, optional: true }, { token: URL, optional: true }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i1.ɵAngularFireSchedulers }, { token: USE_EMULATOR, optional: true }, { token: i2.AngularFireAuth, optional: true }, { token: USE_EMULATOR$1, optional: true }, { token: SETTINGS, optional: true }, { token: TENANT_ID, optional: true }, { token: LANGUAGE_CODE, optional: true }, { token: USE_DEVICE_LANGUAGE, optional: true }, { token: PERSISTENCE, optional: true }, { token: i3.AppCheckInstances, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -1 +1 @@
1
- {"version":3,"file":"angular-fire-compat-database.mjs","sources":["../../../src/compat/database/observable/fromRef.ts","../../../src/compat/database/utils.ts","../../../src/compat/database/list/utils.ts","../../../src/compat/database/list/state-changes.ts","../../../src/compat/database/list/audit-trail.ts","../../../src/compat/database/list/data-operation.ts","../../../src/compat/database/list/remove.ts","../../../src/compat/database/list/changes.ts","../../../src/compat/database/list/snapshot-changes.ts","../../../src/compat/database/list/create-reference.ts","../../../src/compat/database/object/snapshot-changes.ts","../../../src/compat/database/object/create-reference.ts","../../../src/compat/database/database.ts","../../../src/compat/database/database.module.ts","../../../src/compat/database/angular-fire-compat-database.ts"],"sourcesContent":["import { Observable, SchedulerLike, asyncScheduler } from 'rxjs';\nimport { map, share } from 'rxjs/operators';\nimport { AngularFireAction, DatabaseQuery, DatabaseSnapshot, ListenEvent } from '../interfaces';\n\ninterface SnapshotPrevKey<T> {\n snapshot: DatabaseSnapshot<T>;\n prevKey: string | null | undefined;\n}\n\n/**\n * Create an observable from a Database Reference or Database Query.\n * @param ref Database Reference\n * @param event Listen event type ('value', 'added', 'changed', 'removed', 'moved')\n * @param listenType 'on' or 'once'\n * @param scheduler - Rxjs scheduler\n */\nexport function fromRef<T>(ref: DatabaseQuery,\n event: ListenEvent,\n listenType = 'on',\n scheduler: SchedulerLike = asyncScheduler\n): Observable<AngularFireAction<DatabaseSnapshot<T>>> {\n return new Observable<SnapshotPrevKey<T>>(subscriber => {\n let fn: any = null;\n fn = ref[listenType](event, (snapshot, prevKey) => {\n scheduler.schedule(() => {\n subscriber.next({ snapshot, prevKey });\n });\n if (listenType === 'once') {\n scheduler.schedule(() => subscriber.complete());\n }\n }, err => {\n scheduler.schedule(() => subscriber.error(err));\n });\n\n if (listenType === 'on') {\n return {\n unsubscribe() {\n if (fn != null) {\n ref.off(event, fn);\n }\n }\n };\n } else {\n return {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n unsubscribe() {\n }\n };\n }\n }).pipe(\n map(payload => {\n const { snapshot, prevKey } = payload;\n let key: string | null = null;\n if (snapshot.exists()) {\n key = snapshot.key;\n }\n return { type: event, payload: snapshot, prevKey, key };\n }),\n share()\n );\n}\n","import firebase from 'firebase/compat/app';\nimport { DatabaseReference, FirebaseOperation, FirebaseOperationCases, PathReference } from './interfaces';\n\nexport function isString(value: any): boolean {\n return typeof value === 'string';\n}\n\nexport function isFirebaseDataSnapshot(value: any): boolean {\n return typeof value.exportVal === 'function';\n}\n\nexport function isNil(obj: any): boolean {\n return obj === undefined || obj === null;\n}\n\nexport function isFirebaseRef(value: any): boolean {\n return typeof value.set === 'function';\n}\n\n/**\n * Returns a database reference given a Firebase App and an\n * absolute or relative path.\n * @param database - Firebase Database\n * @param pathRef - Database path, relative or absolute\n */\nexport function getRef(database: firebase.database.Database, pathRef: PathReference): DatabaseReference {\n // if a db ref was passed in, just return it\n return isFirebaseRef(pathRef) ? pathRef as DatabaseReference\n : database.ref(pathRef as string);\n}\n\nexport function checkOperationCases(item: FirebaseOperation, cases: FirebaseOperationCases): Promise<void> {\n if (isString(item)) {\n return cases.stringCase();\n } else if (isFirebaseRef(item)) {\n return cases.firebaseCase();\n } else if (isFirebaseDataSnapshot(item)) {\n return cases.snapshotCase();\n }\n throw new Error(`Expects a string, snapshot, or reference. Got: ${typeof item}`);\n}\n","import { isNil } from '../utils';\n\nexport function validateEventsArray(events?: any[]) {\n if (isNil(events) || events.length === 0) {\n events = ['child_added', 'child_removed', 'child_changed', 'child_moved'];\n }\n return events;\n}\n","import { SchedulerLike, merge } from 'rxjs';\nimport { ChildEvent, DatabaseQuery } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\nimport { validateEventsArray } from './utils';\n\nexport function stateChanges<T>(query: DatabaseQuery, events?: ChildEvent[], scheduler?: SchedulerLike) {\n events = validateEventsArray(events);\n const childEvent$ = events.map(event => fromRef<T>(query, event, 'on', scheduler));\n return merge(...childEvent$);\n}\n","import { Observable, SchedulerLike } from 'rxjs';\nimport { map, scan, skipWhile, withLatestFrom } from 'rxjs/operators';\nimport { AngularFireAction, ChildEvent, DataSnapshot, DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\nimport { stateChanges } from './state-changes';\n\n\nexport function auditTrail<T>(query: DatabaseQuery, events?: ChildEvent[], scheduler?: SchedulerLike): Observable<SnapshotAction<T>[]> {\n const auditTrail$ = stateChanges<T>(query, events)\n .pipe(\n scan((current, action) => [...current, action], [])\n );\n return waitForLoaded<T>(query, auditTrail$, scheduler);\n}\n\ninterface LoadedMetadata {\n data: AngularFireAction<DataSnapshot>;\n lastKeyToLoad: any;\n}\n\nfunction loadedData<T>(query: DatabaseQuery, scheduler?: SchedulerLike): Observable<LoadedMetadata> {\n // Create an observable of loaded values to retrieve the\n // known dataset. This will allow us to know what key to\n // emit the \"whole\" array at when listening for child events.\n return fromRef<T>(query, 'value', 'on', scheduler)\n .pipe(\n map(data => {\n // Store the last key in the data set\n let lastKeyToLoad;\n // Loop through loaded dataset to find the last key\n data.payload.forEach(child => {\n lastKeyToLoad = child.key; return false;\n });\n // return data set and the current last key loaded\n return { data, lastKeyToLoad };\n })\n );\n}\n\nfunction waitForLoaded<T>(query: DatabaseQuery, action$: Observable<SnapshotAction<T>[]>, scheduler?: SchedulerLike) {\n const loaded$ = loadedData<T>(query, scheduler);\n return loaded$\n .pipe(\n withLatestFrom(action$),\n // Get the latest values from the \"loaded\" and \"child\" datasets\n // We can use both datasets to form an array of the latest values.\n map(([loaded, actions]) => {\n // Store the last key in the data set\n const lastKeyToLoad = loaded.lastKeyToLoad;\n // Store all child keys loaded at this point\n const loadedKeys = actions.map(snap => snap.key);\n return { actions, lastKeyToLoad, loadedKeys };\n }),\n // This is the magical part, only emit when the last load key\n // in the dataset has been loaded by a child event. At this point\n // we can assume the dataset is \"whole\".\n skipWhile(meta => meta.loadedKeys.indexOf(meta.lastKeyToLoad) === -1),\n // Pluck off the meta data because the user only cares\n // to iterate through the snapshots\n map(meta => meta.actions)\n );\n}\n","import { DatabaseReference, DatabaseSnapshot, FirebaseOperation } from '../interfaces';\nimport { checkOperationCases } from '../utils';\n\nexport function createDataOperationMethod(ref: DatabaseReference, operation: string) {\n return function dataOperation<T>(item: FirebaseOperation, value: T) {\n return checkOperationCases(item, {\n stringCase: () => ref.child(item as string)[operation](value),\n firebaseCase: () => (item as DatabaseReference)[operation](value),\n snapshotCase: () => (item as DatabaseSnapshot<T>).ref[operation](value)\n });\n };\n}\n","import { DatabaseReference, DatabaseSnapshot, FirebaseOperation } from '../interfaces';\nimport { checkOperationCases } from '../utils';\n\n// TODO(davideast): Find out why TS thinks this returns firebase.Primise\n// instead of Promise.\nexport function createRemoveMethod<T>(ref: DatabaseReference) {\n return function remove(item?: FirebaseOperation): any {\n if (!item) { return ref.remove(); }\n return checkOperationCases(item, {\n stringCase: () => ref.child(item as string).remove(),\n firebaseCase: () => (item as DatabaseReference).remove(),\n snapshotCase: () => (item as DatabaseSnapshot<T>).ref.remove()\n });\n };\n}\n","import { Observable, SchedulerLike, merge, of } from 'rxjs';\nimport { distinctUntilChanged, scan, switchMap } from 'rxjs/operators';\nimport { ChildEvent, DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\nimport { isNil } from '../utils';\n\n\nexport function listChanges<T = any>(ref: DatabaseQuery, events: ChildEvent[], scheduler?: SchedulerLike): Observable<SnapshotAction<T>[]> {\n return fromRef(ref, 'value', 'once', scheduler).pipe(\n switchMap(snapshotAction => {\n const childEvent$ = [of(snapshotAction)];\n events.forEach(event => childEvent$.push(fromRef(ref, event, 'on', scheduler)));\n return merge(...childEvent$).pipe(scan(buildView, []));\n }),\n distinctUntilChanged()\n );\n}\n\nfunction positionFor<T>(changes: SnapshotAction<T>[], key) {\n const len = changes.length;\n for (let i = 0; i < len; i++) {\n if (changes[i].payload.key === key) {\n return i;\n }\n }\n return -1;\n}\n\nfunction positionAfter<T>(changes: SnapshotAction<T>[], prevKey?: string) {\n if (isNil(prevKey)) {\n return 0;\n } else {\n const i = positionFor(changes, prevKey);\n if (i === -1) {\n return changes.length;\n } else {\n return i + 1;\n }\n }\n}\n\nfunction buildView(current, action) {\n const { payload, prevKey, key } = action;\n const currentKeyPosition = positionFor(current, key);\n const afterPreviousKeyPosition = positionAfter(current, prevKey);\n switch (action.type) {\n case 'value':\n if (action.payload?.exists()) {\n let prevKey = null;\n action.payload.forEach(payload => {\n const action = { payload, type: 'value', prevKey, key: payload.key };\n prevKey = payload.key;\n current = [...current, action];\n return false;\n });\n }\n return current;\n case 'child_added':\n if (currentKeyPosition > -1) {\n // check that the previouskey is what we expect, else reorder\n const previous = current[currentKeyPosition - 1];\n if ((previous?.key || null) !== prevKey) {\n current = current.filter(x => x.payload.key !== payload.key);\n current.splice(afterPreviousKeyPosition, 0, action);\n }\n } else if (prevKey == null) {\n return [action, ...current];\n } else {\n current = current.slice();\n current.splice(afterPreviousKeyPosition, 0, action);\n }\n return current;\n case 'child_removed':\n return current.filter(x => x.payload.key !== payload.key);\n case 'child_changed':\n return current.map(x => x.payload.key === key ? action : x);\n case 'child_moved':\n if (currentKeyPosition > -1) {\n const data = current.splice(currentKeyPosition, 1)[0];\n current = current.slice();\n current.splice(afterPreviousKeyPosition, 0, data);\n return current;\n }\n return current;\n // default will also remove null results\n default:\n return current;\n }\n}\n","import { Observable, SchedulerLike } from 'rxjs';\nimport { ChildEvent, DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { listChanges } from './changes';\nimport { validateEventsArray } from './utils';\n\nexport function snapshotChanges<T>(\n query: DatabaseQuery,\n events?: ChildEvent[],\n scheduler?: SchedulerLike\n): Observable<SnapshotAction<T>[]> {\n events = validateEventsArray(events);\n return listChanges<T>(query, events, scheduler);\n}\n","import { keepUnstableUntilFirst } from '@angular/fire';\nimport type { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AngularFireDatabase } from '../database';\nimport { AngularFireList, ChildEvent, DatabaseQuery } from '../interfaces';\nimport { auditTrail } from './audit-trail';\nimport { createDataOperationMethod } from './data-operation';\nimport { createRemoveMethod } from './remove';\nimport { snapshotChanges } from './snapshot-changes';\nimport { stateChanges } from './state-changes';\n\nexport function createListReference<T= any>(query: DatabaseQuery, afDatabase: AngularFireDatabase): AngularFireList<T> {\n const outsideAngularScheduler = afDatabase.schedulers.outsideAngular;\n const refInZone = afDatabase.schedulers.ngZone.run(() => query.ref);\n return {\n query,\n update: createDataOperationMethod(refInZone, 'update'),\n set: createDataOperationMethod(refInZone, 'set'),\n push: (data: T) => refInZone.push(data),\n remove: createRemoveMethod(refInZone),\n snapshotChanges(events?: ChildEvent[]) {\n return snapshotChanges<T>(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);\n },\n stateChanges(events?: ChildEvent[]) {\n return stateChanges<T>(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);\n },\n auditTrail(events?: ChildEvent[]) {\n return auditTrail<T>(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);\n },\n valueChanges<K extends string>(events?: ChildEvent[], options?: {idField?: K}): Observable<(T & Record<string, string>)[]> {\n const snapshotChanges$ = snapshotChanges<T>(query, events, outsideAngularScheduler);\n return snapshotChanges$.pipe(\n map(actions => actions.map(a => {\n if (options && options.idField) {\n return {\n ...a.payload.val() as T,\n ...{\n [options.idField]: a.key\n }\n };\n } else {\n return a.payload.val() as T & Record<string, string>\n }\n })),\n keepUnstableUntilFirst\n );\n }\n };\n}\n","import { Observable, SchedulerLike } from 'rxjs';\nimport { DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\n\nexport function createObjectSnapshotChanges<T>(query: DatabaseQuery, scheduler?: SchedulerLike) {\n return function snapshotChanges(): Observable<SnapshotAction<T>> {\n return fromRef(query, 'value', 'on', scheduler);\n };\n}\n","import { keepUnstableUntilFirst } from '@angular/fire';\nimport { map } from 'rxjs/operators';\nimport { AngularFireDatabase } from '../database';\nimport { AngularFireObject, DatabaseQuery } from '../interfaces';\nimport { createObjectSnapshotChanges } from './snapshot-changes';\n\nexport function createObjectReference<T= any>(query: DatabaseQuery, afDatabase: AngularFireDatabase): AngularFireObject<T> {\n return {\n query,\n snapshotChanges<T>() {\n return createObjectSnapshotChanges<T>(query, afDatabase.schedulers.outsideAngular)().pipe(\n keepUnstableUntilFirst\n );\n },\n update(data: Partial<T>) { return query.ref.update(data as any) as Promise<void>; },\n set(data: T) { return query.ref.set(data) as Promise<void>; },\n remove() { return query.ref.remove() as Promise<void>; },\n valueChanges<T>() {\n const snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)();\n return snapshotChanges$.pipe(\n keepUnstableUntilFirst,\n map(action => action.payload.exists() ? action.payload.val() as T : null)\n );\n },\n };\n}\n","import { Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID } from '@angular/core';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { AppCheckInstances } from '@angular/fire/app-check';\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';\nimport {\n SETTINGS as AUTH_SETTINGS,\n AngularFireAuth,\n LANGUAGE_CODE,\n PERSISTENCE,\n TENANT_ID,\n USE_EMULATOR as USE_AUTH_EMULATOR,\n USE_DEVICE_LANGUAGE,\n ɵauthFactory,\n} from '@angular/fire/compat/auth';\nimport { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireList, AngularFireObject, DatabaseQuery, PathReference, QueryFn } from './interfaces';\nimport { createListReference } from './list/create-reference';\nimport { createObjectReference } from './object/create-reference';\nimport { getRef } from './utils';\nimport 'firebase/compat/auth';\nimport 'firebase/compat/database';\n\nexport const URL = new InjectionToken<string>('angularfire2.realtimeDatabaseURL');\n\ntype UseEmulatorArguments = Parameters<firebase.database.Database['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.database.use-emulator');\n\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireDatabase {\n public readonly database: firebase.database.Database;\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(URL) databaseURL: string | null,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n zone: NgZone,\n public schedulers: ɵAngularFireSchedulers,\n @Optional() @Inject(USE_EMULATOR) _useEmulator: any, // tuple isn't working here\n @Optional() auth: AngularFireAuth,\n @Optional() @Inject(USE_AUTH_EMULATOR) useAuthEmulator: any,\n @Optional() @Inject(AUTH_SETTINGS) authSettings: any, // can't use firebase.auth.AuthSettings here\n @Optional() @Inject(TENANT_ID) tenantId: string | null,\n @Optional() @Inject(LANGUAGE_CODE) languageCode: string | null,\n @Optional() @Inject(USE_DEVICE_LANGUAGE) useDeviceLanguage: boolean | null,\n @Optional() @Inject(PERSISTENCE) persistence: string | null,\n @Optional() _appCheckInstances: AppCheckInstances,\n ) {\n\n const useEmulator: UseEmulatorArguments | null = _useEmulator;\n const app = ɵfirebaseAppFactory(options, zone, name);\n\n if (auth) {\n ɵauthFactory(app, zone, useAuthEmulator, tenantId, languageCode, useDeviceLanguage, authSettings, persistence);\n }\n\n this.database = ɵcacheInstance(`${app.name}.database.${databaseURL}`, 'AngularFireDatabase', app.name, () => {\n const database = zone.runOutsideAngular(() => app.database(databaseURL || undefined));\n if (useEmulator) {\n database.useEmulator(...useEmulator);\n }\n return database;\n }, [useEmulator]);\n }\n\n list<T>(pathOrRef: PathReference, queryFn?: QueryFn): AngularFireList<T> {\n const ref = this.schedulers.ngZone.runOutsideAngular(() => getRef(this.database, pathOrRef));\n let query: DatabaseQuery = ref;\n if (queryFn) {\n query = queryFn(ref);\n }\n return createListReference<T>(query, this);\n }\n\n object<T>(pathOrRef: PathReference): AngularFireObject<T> {\n const ref = this.schedulers.ngZone.runOutsideAngular(() => getRef(this.database, pathOrRef));\n return createObjectReference<T>(ref, this);\n }\n\n createPushId() {\n const ref = this.schedulers.ngZone.runOutsideAngular(() => this.database.ref());\n return ref.push().key;\n }\n\n}\n\nexport {\n PathReference,\n DatabaseSnapshot,\n ChildEvent,\n ListenEvent,\n QueryFn,\n AngularFireList,\n AngularFireObject,\n AngularFireAction,\n Action,\n SnapshotAction\n} from './interfaces';\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireDatabase } from './database';\n\n@NgModule({\n providers: [ AngularFireDatabase ]\n})\nexport class AngularFireDatabaseModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'rtdb-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵfirebaseAppFactory","ɵauthFactory","ɵcacheInstance","USE_AUTH_EMULATOR","AUTH_SETTINGS"],"mappings":"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"}
1
+ {"version":3,"file":"angular-fire-compat-database.mjs","sources":["../../../src/compat/database/observable/fromRef.ts","../../../src/compat/database/utils.ts","../../../src/compat/database/list/utils.ts","../../../src/compat/database/list/state-changes.ts","../../../src/compat/database/list/audit-trail.ts","../../../src/compat/database/list/data-operation.ts","../../../src/compat/database/list/remove.ts","../../../src/compat/database/list/changes.ts","../../../src/compat/database/list/snapshot-changes.ts","../../../src/compat/database/list/create-reference.ts","../../../src/compat/database/object/snapshot-changes.ts","../../../src/compat/database/object/create-reference.ts","../../../src/compat/database/database.ts","../../../src/compat/database/database.module.ts","../../../src/compat/database/angular-fire-compat-database.ts"],"sourcesContent":["import { Observable, SchedulerLike, asyncScheduler } from 'rxjs';\nimport { map, share } from 'rxjs/operators';\nimport { AngularFireAction, DatabaseQuery, DatabaseSnapshot, ListenEvent } from '../interfaces';\n\ninterface SnapshotPrevKey<T> {\n snapshot: DatabaseSnapshot<T>;\n prevKey: string | null | undefined;\n}\n\n/**\n * Create an observable from a Database Reference or Database Query.\n * @param ref Database Reference\n * @param event Listen event type ('value', 'added', 'changed', 'removed', 'moved')\n * @param listenType 'on' or 'once'\n * @param scheduler - Rxjs scheduler\n */\nexport function fromRef<T>(ref: DatabaseQuery,\n event: ListenEvent,\n listenType = 'on',\n scheduler: SchedulerLike = asyncScheduler\n): Observable<AngularFireAction<DatabaseSnapshot<T>>> {\n return new Observable<SnapshotPrevKey<T>>(subscriber => {\n let fn: any = null;\n fn = ref[listenType](event, (snapshot, prevKey) => {\n scheduler.schedule(() => {\n subscriber.next({ snapshot, prevKey });\n });\n if (listenType === 'once') {\n scheduler.schedule(() => subscriber.complete());\n }\n }, err => {\n scheduler.schedule(() => subscriber.error(err));\n });\n\n if (listenType === 'on') {\n return {\n unsubscribe() {\n if (fn != null) {\n ref.off(event, fn);\n }\n }\n };\n } else {\n return {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n unsubscribe() {\n }\n };\n }\n }).pipe(\n map(payload => {\n const { snapshot, prevKey } = payload;\n let key: string | null = null;\n if (snapshot.exists()) {\n key = snapshot.key;\n }\n return { type: event, payload: snapshot, prevKey, key };\n }),\n share()\n );\n}\n","import firebase from 'firebase/compat/app';\nimport { DatabaseReference, FirebaseOperation, FirebaseOperationCases, PathReference } from './interfaces';\n\nexport function isString(value: any): boolean {\n return typeof value === 'string';\n}\n\nexport function isFirebaseDataSnapshot(value: any): boolean {\n return typeof value.exportVal === 'function';\n}\n\nexport function isNil(obj: any): boolean {\n return obj === undefined || obj === null;\n}\n\nexport function isFirebaseRef(value: any): boolean {\n return typeof value.set === 'function';\n}\n\n/**\n * Returns a database reference given a Firebase App and an\n * absolute or relative path.\n * @param database - Firebase Database\n * @param pathRef - Database path, relative or absolute\n */\nexport function getRef(database: firebase.database.Database, pathRef: PathReference): DatabaseReference {\n // if a db ref was passed in, just return it\n return isFirebaseRef(pathRef) ? pathRef as DatabaseReference\n : database.ref(pathRef as string);\n}\n\nexport function checkOperationCases(item: FirebaseOperation, cases: FirebaseOperationCases): Promise<void> {\n if (isString(item)) {\n return cases.stringCase();\n } else if (isFirebaseRef(item)) {\n return cases.firebaseCase();\n } else if (isFirebaseDataSnapshot(item)) {\n return cases.snapshotCase();\n }\n throw new Error(`Expects a string, snapshot, or reference. Got: ${typeof item}`);\n}\n","import { isNil } from '../utils';\n\nexport function validateEventsArray(events?: any[]) {\n if (isNil(events) || events.length === 0) {\n events = ['child_added', 'child_removed', 'child_changed', 'child_moved'];\n }\n return events;\n}\n","import { SchedulerLike, merge } from 'rxjs';\nimport { ChildEvent, DatabaseQuery } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\nimport { validateEventsArray } from './utils';\n\nexport function stateChanges<T>(query: DatabaseQuery, events?: ChildEvent[], scheduler?: SchedulerLike) {\n events = validateEventsArray(events);\n const childEvent$ = events.map(event => fromRef<T>(query, event, 'on', scheduler));\n return merge(...childEvent$);\n}\n","import { Observable, SchedulerLike } from 'rxjs';\nimport { map, scan, skipWhile, withLatestFrom } from 'rxjs/operators';\nimport { AngularFireAction, ChildEvent, DataSnapshot, DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\nimport { stateChanges } from './state-changes';\n\n\nexport function auditTrail<T>(query: DatabaseQuery, events?: ChildEvent[], scheduler?: SchedulerLike): Observable<SnapshotAction<T>[]> {\n const auditTrail$ = stateChanges<T>(query, events)\n .pipe(\n scan((current, action) => [...current, action], [])\n );\n return waitForLoaded<T>(query, auditTrail$, scheduler);\n}\n\ninterface LoadedMetadata {\n data: AngularFireAction<DataSnapshot>;\n lastKeyToLoad: any;\n}\n\nfunction loadedData<T>(query: DatabaseQuery, scheduler?: SchedulerLike): Observable<LoadedMetadata> {\n // Create an observable of loaded values to retrieve the\n // known dataset. This will allow us to know what key to\n // emit the \"whole\" array at when listening for child events.\n return fromRef<T>(query, 'value', 'on', scheduler)\n .pipe(\n map(data => {\n // Store the last key in the data set\n let lastKeyToLoad;\n // Loop through loaded dataset to find the last key\n data.payload.forEach(child => {\n lastKeyToLoad = child.key; return false;\n });\n // return data set and the current last key loaded\n return { data, lastKeyToLoad };\n })\n );\n}\n\nfunction waitForLoaded<T>(query: DatabaseQuery, action$: Observable<SnapshotAction<T>[]>, scheduler?: SchedulerLike) {\n const loaded$ = loadedData<T>(query, scheduler);\n return loaded$\n .pipe(\n withLatestFrom(action$),\n // Get the latest values from the \"loaded\" and \"child\" datasets\n // We can use both datasets to form an array of the latest values.\n map(([loaded, actions]) => {\n // Store the last key in the data set\n const lastKeyToLoad = loaded.lastKeyToLoad;\n // Store all child keys loaded at this point\n const loadedKeys = actions.map(snap => snap.key);\n return { actions, lastKeyToLoad, loadedKeys };\n }),\n // This is the magical part, only emit when the last load key\n // in the dataset has been loaded by a child event. At this point\n // we can assume the dataset is \"whole\".\n skipWhile(meta => meta.loadedKeys.indexOf(meta.lastKeyToLoad) === -1),\n // Pluck off the meta data because the user only cares\n // to iterate through the snapshots\n map(meta => meta.actions)\n );\n}\n","import { DatabaseReference, DatabaseSnapshot, FirebaseOperation } from '../interfaces';\nimport { checkOperationCases } from '../utils';\n\nexport function createDataOperationMethod(ref: DatabaseReference, operation: string) {\n return function dataOperation<T>(item: FirebaseOperation, value: T) {\n return checkOperationCases(item, {\n stringCase: () => ref.child(item as string)[operation](value),\n firebaseCase: () => (item as DatabaseReference)[operation](value),\n snapshotCase: () => (item as DatabaseSnapshot<T>).ref[operation](value)\n });\n };\n}\n","import { DatabaseReference, DatabaseSnapshot, FirebaseOperation } from '../interfaces';\nimport { checkOperationCases } from '../utils';\n\n// TODO(davideast): Find out why TS thinks this returns firebase.Primise\n// instead of Promise.\nexport function createRemoveMethod<T>(ref: DatabaseReference) {\n return function remove(item?: FirebaseOperation): any {\n if (!item) { return ref.remove(); }\n return checkOperationCases(item, {\n stringCase: () => ref.child(item as string).remove(),\n firebaseCase: () => (item as DatabaseReference).remove(),\n snapshotCase: () => (item as DatabaseSnapshot<T>).ref.remove()\n });\n };\n}\n","import { Observable, SchedulerLike, merge, of } from 'rxjs';\nimport { distinctUntilChanged, scan, switchMap } from 'rxjs/operators';\nimport { ChildEvent, DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\nimport { isNil } from '../utils';\n\n\nexport function listChanges<T = any>(ref: DatabaseQuery, events: ChildEvent[], scheduler?: SchedulerLike): Observable<SnapshotAction<T>[]> {\n return fromRef(ref, 'value', 'once', scheduler).pipe(\n switchMap(snapshotAction => {\n const childEvent$ = [of(snapshotAction)];\n events.forEach(event => childEvent$.push(fromRef(ref, event, 'on', scheduler)));\n return merge(...childEvent$).pipe(scan(buildView, []));\n }),\n distinctUntilChanged()\n );\n}\n\nfunction positionFor<T>(changes: SnapshotAction<T>[], key) {\n const len = changes.length;\n for (let i = 0; i < len; i++) {\n if (changes[i].payload.key === key) {\n return i;\n }\n }\n return -1;\n}\n\nfunction positionAfter<T>(changes: SnapshotAction<T>[], prevKey?: string) {\n if (isNil(prevKey)) {\n return 0;\n } else {\n const i = positionFor(changes, prevKey);\n if (i === -1) {\n return changes.length;\n } else {\n return i + 1;\n }\n }\n}\n\nfunction buildView(current, action) {\n const { payload, prevKey, key } = action;\n const currentKeyPosition = positionFor(current, key);\n const afterPreviousKeyPosition = positionAfter(current, prevKey);\n switch (action.type) {\n case 'value':\n if (action.payload?.exists()) {\n let prevKey = null;\n action.payload.forEach(payload => {\n const action = { payload, type: 'value', prevKey, key: payload.key };\n prevKey = payload.key;\n current = [...current, action];\n return false;\n });\n }\n return current;\n case 'child_added':\n if (currentKeyPosition > -1) {\n // check that the previouskey is what we expect, else reorder\n const previous = current[currentKeyPosition - 1];\n if ((previous?.key || null) !== prevKey) {\n current = current.filter(x => x.payload.key !== payload.key);\n current.splice(afterPreviousKeyPosition, 0, action);\n }\n } else if (prevKey == null) {\n return [action, ...current];\n } else {\n current = current.slice();\n current.splice(afterPreviousKeyPosition, 0, action);\n }\n return current;\n case 'child_removed':\n return current.filter(x => x.payload.key !== payload.key);\n case 'child_changed':\n return current.map(x => x.payload.key === key ? action : x);\n case 'child_moved':\n if (currentKeyPosition > -1) {\n const data = current.splice(currentKeyPosition, 1)[0];\n current = current.slice();\n current.splice(afterPreviousKeyPosition, 0, data);\n return current;\n }\n return current;\n // default will also remove null results\n default:\n return current;\n }\n}\n","import { Observable, SchedulerLike } from 'rxjs';\nimport { ChildEvent, DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { listChanges } from './changes';\nimport { validateEventsArray } from './utils';\n\nexport function snapshotChanges<T>(\n query: DatabaseQuery,\n events?: ChildEvent[],\n scheduler?: SchedulerLike\n): Observable<SnapshotAction<T>[]> {\n events = validateEventsArray(events);\n return listChanges<T>(query, events, scheduler);\n}\n","import { NgZone, inject } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport type { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AngularFireDatabase } from '../database';\nimport { AngularFireList, ChildEvent, DatabaseQuery } from '../interfaces';\nimport { auditTrail } from './audit-trail';\nimport { createDataOperationMethod } from './data-operation';\nimport { createRemoveMethod } from './remove';\nimport { snapshotChanges } from './snapshot-changes';\nimport { stateChanges } from './state-changes';\n\nexport function createListReference<T= any>(query: DatabaseQuery, afDatabase: AngularFireDatabase): AngularFireList<T> {\n const outsideAngularScheduler = afDatabase.schedulers.outsideAngular;\n const refInZone = inject(NgZone).run(() => query.ref);\n return {\n query,\n update: createDataOperationMethod(refInZone, 'update'),\n set: createDataOperationMethod(refInZone, 'set'),\n push: (data: T) => refInZone.push(data),\n remove: createRemoveMethod(refInZone),\n snapshotChanges(events?: ChildEvent[]) {\n return snapshotChanges<T>(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());\n },\n stateChanges(events?: ChildEvent[]) {\n return stateChanges<T>(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());\n },\n auditTrail(events?: ChildEvent[]) {\n return auditTrail<T>(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());\n },\n valueChanges<K extends string>(events?: ChildEvent[], options?: {idField?: K}): Observable<(T & Record<string, string>)[]> {\n const snapshotChanges$ = snapshotChanges<T>(query, events, outsideAngularScheduler);\n return snapshotChanges$.pipe(\n map(actions => actions.map(a => {\n if (options && options.idField) {\n return {\n ...a.payload.val() as T,\n ...{\n [options.idField]: a.key\n }\n };\n } else {\n return a.payload.val() as T & Record<string, string>\n }\n })),\n pendingUntilEvent()\n );\n }\n };\n}\n","import { Observable, SchedulerLike } from 'rxjs';\nimport { DatabaseQuery, SnapshotAction } from '../interfaces';\nimport { fromRef } from '../observable/fromRef';\n\nexport function createObjectSnapshotChanges<T>(query: DatabaseQuery, scheduler?: SchedulerLike) {\n return function snapshotChanges(): Observable<SnapshotAction<T>> {\n return fromRef(query, 'value', 'on', scheduler);\n };\n}\n","import { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs/operators';\nimport { AngularFireDatabase } from '../database';\nimport { AngularFireObject, DatabaseQuery } from '../interfaces';\nimport { createObjectSnapshotChanges } from './snapshot-changes';\n\nexport function createObjectReference<T= any>(query: DatabaseQuery, afDatabase: AngularFireDatabase): AngularFireObject<T> {\n return {\n query,\n snapshotChanges<T>() {\n return createObjectSnapshotChanges<T>(query, afDatabase.schedulers.outsideAngular)().pipe(\n pendingUntilEvent()\n );\n },\n update(data: Partial<T>) { return query.ref.update(data as any) as Promise<void>; },\n set(data: T) { return query.ref.set(data) as Promise<void>; },\n remove() { return query.ref.remove() as Promise<void>; },\n valueChanges<T>() {\n const snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)();\n return snapshotChanges$.pipe(\n pendingUntilEvent(),\n map(action => action.payload.exists() ? action.payload.val() as T : null)\n );\n },\n };\n}\n","import { Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID, inject } from '@angular/core';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { AppCheckInstances } from '@angular/fire/app-check';\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';\nimport {\n SETTINGS as AUTH_SETTINGS,\n AngularFireAuth,\n LANGUAGE_CODE,\n PERSISTENCE,\n TENANT_ID,\n USE_EMULATOR as USE_AUTH_EMULATOR,\n USE_DEVICE_LANGUAGE,\n ɵauthFactory,\n} from '@angular/fire/compat/auth';\nimport { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireList, AngularFireObject, DatabaseQuery, PathReference, QueryFn } from './interfaces';\nimport { createListReference } from './list/create-reference';\nimport { createObjectReference } from './object/create-reference';\nimport { getRef } from './utils';\nimport 'firebase/compat/auth';\nimport 'firebase/compat/database';\n\nexport const URL = new InjectionToken<string>('angularfire2.realtimeDatabaseURL');\n\ntype UseEmulatorArguments = Parameters<firebase.database.Database['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.database.use-emulator');\n\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireDatabase {\n public readonly database: firebase.database.Database;\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(URL) databaseURL: string | null,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n zone: NgZone,\n public schedulers: ɵAngularFireSchedulers,\n @Optional() @Inject(USE_EMULATOR) _useEmulator: any, // tuple isn't working here\n @Optional() auth: AngularFireAuth,\n @Optional() @Inject(USE_AUTH_EMULATOR) useAuthEmulator: any,\n @Optional() @Inject(AUTH_SETTINGS) authSettings: any, // can't use firebase.auth.AuthSettings here\n @Optional() @Inject(TENANT_ID) tenantId: string | null,\n @Optional() @Inject(LANGUAGE_CODE) languageCode: string | null,\n @Optional() @Inject(USE_DEVICE_LANGUAGE) useDeviceLanguage: boolean | null,\n @Optional() @Inject(PERSISTENCE) persistence: string | null,\n @Optional() _appCheckInstances: AppCheckInstances,\n ) {\n\n const useEmulator: UseEmulatorArguments | null = _useEmulator;\n const app = ɵfirebaseAppFactory(options, zone, name);\n\n if (auth) {\n ɵauthFactory(app, zone, useAuthEmulator, tenantId, languageCode, useDeviceLanguage, authSettings, persistence);\n }\n\n this.database = ɵcacheInstance(`${app.name}.database.${databaseURL}`, 'AngularFireDatabase', app.name, () => {\n const database = zone.runOutsideAngular(() => app.database(databaseURL || undefined));\n if (useEmulator) {\n database.useEmulator(...useEmulator);\n }\n return database;\n }, [useEmulator]);\n }\n\n list<T>(pathOrRef: PathReference, queryFn?: QueryFn): AngularFireList<T> {\n const ref = inject(NgZone).runOutsideAngular(() => getRef(this.database, pathOrRef));\n let query: DatabaseQuery = ref;\n if (queryFn) {\n query = queryFn(ref);\n }\n return createListReference<T>(query, this);\n }\n\n object<T>(pathOrRef: PathReference): AngularFireObject<T> {\n const ref = inject(NgZone).runOutsideAngular(() => getRef(this.database, pathOrRef));\n return createObjectReference<T>(ref, this);\n }\n\n createPushId() {\n const ref = inject(NgZone).runOutsideAngular(() => this.database.ref());\n return ref.push().key;\n }\n\n}\n\nexport {\n PathReference,\n DatabaseSnapshot,\n ChildEvent,\n ListenEvent,\n QueryFn,\n AngularFireList,\n AngularFireObject,\n AngularFireAction,\n Action,\n SnapshotAction\n} from './interfaces';\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireDatabase } from './database';\n\n@NgModule({\n providers: [ AngularFireDatabase ]\n})\nexport class AngularFireDatabaseModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'rtdb-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵfirebaseAppFactory","ɵauthFactory","ɵcacheInstance","USE_AUTH_EMULATOR","AUTH_SETTINGS"],"mappings":"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"}
@@ -1,13 +1,14 @@
1
1
  import { isPlatformServer } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
3
+ import { InjectionToken, inject, NgZone, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
4
4
  import * as i1 from '@angular/fire';
5
- import { keepUnstableUntilFirst, VERSION } from '@angular/fire';
5
+ import { VERSION } from '@angular/fire';
6
6
  import * as i3 from '@angular/fire/app-check';
7
7
  import { ɵfirebaseAppFactory as _firebaseAppFactory, ɵcacheInstance as _cacheInstance, FIREBASE_OPTIONS, FIREBASE_APP_NAME } from '@angular/fire/compat';
8
8
  import * as i2 from '@angular/fire/compat/auth';
9
9
  import { ɵauthFactory as _authFactory, USE_EMULATOR as USE_EMULATOR$1, SETTINGS as SETTINGS$1, TENANT_ID, LANGUAGE_CODE, USE_DEVICE_LANGUAGE, PERSISTENCE } from '@angular/fire/compat/auth';
10
10
  import { Observable, asyncScheduler, from, of } from 'rxjs';
11
+ import { pendingUntilEvent } from '@angular/core/rxjs-interop';
11
12
  import { startWith, pairwise, map, scan, distinctUntilChanged, filter } from 'rxjs/operators';
12
13
  import 'firebase/compat/auth';
13
14
  import 'firebase/compat/firestore';
@@ -116,7 +117,7 @@ class AngularFirestoreDocument {
116
117
  */
117
118
  snapshotChanges() {
118
119
  const scheduledFromDocRef$ = fromDocRef(this.ref, this.afs.schedulers.outsideAngular);
119
- return scheduledFromDocRef$.pipe(keepUnstableUntilFirst);
120
+ return scheduledFromDocRef$.pipe(pendingUntilEvent());
120
121
  }
121
122
  valueChanges(options = {}) {
122
123
  return this.snapshotChanges().pipe(map(({ payload }) => options.idField ? {
@@ -128,7 +129,7 @@ class AngularFirestoreDocument {
128
129
  * Retrieve the document once.
129
130
  */
130
131
  get(options) {
131
- return from(this.ref.get(options)).pipe(keepUnstableUntilFirst);
132
+ return from(this.ref.get(options)).pipe(pendingUntilEvent());
132
133
  }
133
134
  }
134
135
 
@@ -298,7 +299,7 @@ class AngularFirestoreCollection {
298
299
  return source.pipe(
299
300
  // We want to filter out empty arrays, but always emit at first, so the developer knows
300
301
  // that the collection has been resolve; even if it's empty
301
- startWith(undefined), pairwise(), filter(([prior, current]) => current.length > 0 || !prior), map(([, current]) => current), keepUnstableUntilFirst);
302
+ startWith(undefined), pairwise(), filter(([prior, current]) => current.length > 0 || !prior), map(([, current]) => current), pendingUntilEvent());
302
303
  }
303
304
  /**
304
305
  * Create a stream of changes as they occur it time. This method is similar to stateChanges()
@@ -314,7 +315,7 @@ class AngularFirestoreCollection {
314
315
  snapshotChanges(events) {
315
316
  const validatedEvents = validateEventsArray(events);
316
317
  const scheduledSortedChanges$ = sortedChanges(this.query, validatedEvents, this.afs.schedulers.outsideAngular);
317
- return scheduledSortedChanges$.pipe(keepUnstableUntilFirst);
318
+ return scheduledSortedChanges$.pipe(pendingUntilEvent());
318
319
  }
319
320
  valueChanges(options = {}) {
320
321
  return fromCollectionRef(this.query, this.afs.schedulers.outsideAngular)
@@ -328,13 +329,13 @@ class AngularFirestoreCollection {
328
329
  else {
329
330
  return a.data();
330
331
  }
331
- })), keepUnstableUntilFirst);
332
+ })), pendingUntilEvent());
332
333
  }
333
334
  /**
334
335
  * Retrieve the results of the query once.
335
336
  */
336
337
  get(options) {
337
- return from(this.query.get(options)).pipe(keepUnstableUntilFirst);
338
+ return from(this.query.get(options)).pipe(pendingUntilEvent());
338
339
  }
339
340
  /**
340
341
  * Add data to a collection reference.
@@ -391,10 +392,10 @@ class AngularFirestoreCollectionGroup {
391
392
  */
392
393
  stateChanges(events) {
393
394
  if (!events || events.length === 0) {
394
- return docChanges(this.query, this.afs.schedulers.outsideAngular).pipe(keepUnstableUntilFirst);
395
+ return docChanges(this.query, this.afs.schedulers.outsideAngular).pipe(pendingUntilEvent());
395
396
  }
396
397
  return docChanges(this.query, this.afs.schedulers.outsideAngular)
397
- .pipe(map(actions => actions.filter(change => events.indexOf(change.type) > -1)), filter(changes => changes.length > 0), keepUnstableUntilFirst);
398
+ .pipe(map(actions => actions.filter(change => events.indexOf(change.type) > -1)), filter(changes => changes.length > 0), pendingUntilEvent());
398
399
  }
399
400
  /**
400
401
  * Create a stream of changes as they occur it time. This method is similar to stateChanges()
@@ -410,7 +411,7 @@ class AngularFirestoreCollectionGroup {
410
411
  snapshotChanges(events) {
411
412
  const validatedEvents = validateEventsArray(events);
412
413
  const scheduledSortedChanges$ = sortedChanges(this.query, validatedEvents, this.afs.schedulers.outsideAngular);
413
- return scheduledSortedChanges$.pipe(keepUnstableUntilFirst);
414
+ return scheduledSortedChanges$.pipe(pendingUntilEvent());
414
415
  }
415
416
  valueChanges(options = {}) {
416
417
  const fromCollectionRefScheduled$ = fromCollectionRef(this.query, this.afs.schedulers.outsideAngular);
@@ -425,13 +426,13 @@ class AngularFirestoreCollectionGroup {
425
426
  else {
426
427
  return a.data();
427
428
  }
428
- })), keepUnstableUntilFirst);
429
+ })), pendingUntilEvent());
429
430
  }
430
431
  /**
431
432
  * Retrieve the results of the query once.
432
433
  */
433
434
  get(options) {
434
- return from(this.query.get(options)).pipe(keepUnstableUntilFirst);
435
+ return from(this.query.get(options)).pipe(pendingUntilEvent());
435
436
  }
436
437
  }
437
438
 
@@ -571,7 +572,7 @@ class AngularFirestore {
571
572
  collectionRef = pathOrRef;
572
573
  }
573
574
  const { ref, query } = associateQuery(collectionRef, queryFn);
574
- const refInZone = this.schedulers.ngZone.run(() => ref);
575
+ const refInZone = inject(NgZone).run(() => ref);
575
576
  return new AngularFirestoreCollection(refInZone, query, this);
576
577
  }
577
578
  /**
@@ -592,7 +593,7 @@ class AngularFirestore {
592
593
  else {
593
594
  ref = pathOrRef;
594
595
  }
595
- const refInZone = this.schedulers.ngZone.run(() => ref);
596
+ const refInZone = inject(NgZone).run(() => ref);
596
597
  return new AngularFirestoreDocument(refInZone, this);
597
598
  }
598
599
  /**