@angular/fire 19.0.0-canary.bc926a8 → 19.0.0-canary.e567618
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compat/auth/auth.d.ts +1 -0
- package/compat/database/database.d.ts +1 -0
- package/compat/database/list/create-reference.d.ts +2 -1
- package/compat/database/object/create-reference.d.ts +2 -1
- package/compat/firestore/collection/collection.d.ts +1 -0
- package/compat/firestore/collection-group/collection-group.d.ts +1 -0
- package/compat/firestore/document/document.d.ts +1 -0
- package/compat/firestore/firestore.d.ts +1 -0
- package/compat/remote-config/remote-config.d.ts +1 -0
- package/compat/storage/ref.d.ts +2 -1
- package/compat/storage/storage.d.ts +1 -0
- package/fesm2022/angular-fire-compat-auth.mjs +3 -2
- package/fesm2022/angular-fire-compat-auth.mjs.map +1 -1
- package/fesm2022/angular-fire-compat-database.mjs +12 -11
- package/fesm2022/angular-fire-compat-database.mjs.map +1 -1
- package/fesm2022/angular-fire-compat-firestore.mjs +18 -14
- package/fesm2022/angular-fire-compat-firestore.mjs.map +1 -1
- package/fesm2022/angular-fire-compat-remote-config.mjs +3 -2
- package/fesm2022/angular-fire-compat-remote-config.mjs.map +1 -1
- package/fesm2022/angular-fire-compat-storage.mjs +9 -8
- package/fesm2022/angular-fire-compat-storage.mjs.map +1 -1
- package/package.json +5 -5
package/compat/auth/auth.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare const USE_DEVICE_LANGUAGE: InjectionToken<boolean>;
|
|
|
18
18
|
export declare const PERSISTENCE: InjectionToken<string>;
|
|
19
19
|
export declare const ɵauthFactory: (app: FirebaseApp, zone: NgZone, useEmulator: UseEmulatorArguments | null, tenantId: string, languageCode: string | null, useDeviceLanguage: boolean | null, settings: firebase.auth.AuthSettings | null, persistence: string | null) => firebase.auth.Auth;
|
|
20
20
|
export declare class AngularFireAuth {
|
|
21
|
+
private readonly injector;
|
|
21
22
|
/**
|
|
22
23
|
* Observable of authentication state; as of Firebase 4.0 this is only triggered via sign-in/out
|
|
23
24
|
*/
|
|
@@ -15,6 +15,7 @@ export declare const USE_EMULATOR: InjectionToken<[host: string, port: number, o
|
|
|
15
15
|
export declare class AngularFireDatabase {
|
|
16
16
|
schedulers: ɵAngularFireSchedulers;
|
|
17
17
|
readonly database: firebase.database.Database;
|
|
18
|
+
private readonly injector;
|
|
18
19
|
constructor(options: FirebaseOptions, name: string | null | undefined, databaseURL: string | null, platformId: Object, zone: NgZone, schedulers: ɵAngularFireSchedulers, _useEmulator: any, // tuple isn't working here
|
|
19
20
|
auth: AngularFireAuth, useAuthEmulator: any, authSettings: any, // can't use firebase.auth.AuthSettings here
|
|
20
21
|
tenantId: string | null, languageCode: string | null, useDeviceLanguage: boolean | null, persistence: string | null, _appCheckInstances: AppCheckInstances);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Injector } from '@angular/core';
|
|
1
2
|
import { AngularFireDatabase } from '../database';
|
|
2
3
|
import { AngularFireList, DatabaseQuery } from '../interfaces';
|
|
3
|
-
export declare function createListReference<T = any>(query: DatabaseQuery, afDatabase: AngularFireDatabase): AngularFireList<T>;
|
|
4
|
+
export declare function createListReference<T = any>(query: DatabaseQuery, afDatabase: AngularFireDatabase, injector?: Injector): AngularFireList<T>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Injector } from '@angular/core';
|
|
1
2
|
import { AngularFireDatabase } from '../database';
|
|
2
3
|
import { AngularFireObject, DatabaseQuery } from '../interfaces';
|
|
3
|
-
export declare function createObjectReference<T = any>(query: DatabaseQuery, afDatabase: AngularFireDatabase): AngularFireObject<T>;
|
|
4
|
+
export declare function createObjectReference<T = any>(query: DatabaseQuery, afDatabase: AngularFireDatabase, injector?: Injector): AngularFireObject<T>;
|
|
@@ -31,6 +31,7 @@ export declare class AngularFirestoreCollection<T = DocumentData> {
|
|
|
31
31
|
readonly ref: CollectionReference<T>;
|
|
32
32
|
private readonly query;
|
|
33
33
|
private readonly afs;
|
|
34
|
+
private readonly injector;
|
|
34
35
|
/**
|
|
35
36
|
* The constructor takes in a CollectionReference and Query to provide wrapper methods
|
|
36
37
|
* for data operations and data streaming.
|
|
@@ -23,6 +23,7 @@ import { DocumentChangeAction, DocumentChangeType, DocumentData, Query } from '.
|
|
|
23
23
|
export declare class AngularFirestoreCollectionGroup<T = DocumentData> {
|
|
24
24
|
private readonly query;
|
|
25
25
|
private readonly afs;
|
|
26
|
+
private readonly injector;
|
|
26
27
|
/**
|
|
27
28
|
* The constructor takes in a CollectionGroupQuery to provide wrapper methods
|
|
28
29
|
* for data operations and data streaming.
|
|
@@ -28,6 +28,7 @@ import { Action, DocumentData, DocumentReference, DocumentSnapshot, QueryFn, Set
|
|
|
28
28
|
export declare class AngularFirestoreDocument<T = DocumentData> {
|
|
29
29
|
ref: DocumentReference<T>;
|
|
30
30
|
private afs;
|
|
31
|
+
private readonly injector;
|
|
31
32
|
/**
|
|
32
33
|
* The constructor takes in a DocumentReference to provide wrapper methods
|
|
33
34
|
* for data operations, data streaming, and Symbol.observable.
|
|
@@ -93,6 +93,7 @@ export declare class AngularFirestore {
|
|
|
93
93
|
schedulers: ɵAngularFireSchedulers;
|
|
94
94
|
readonly firestore: firebase.firestore.Firestore;
|
|
95
95
|
readonly persistenceEnabled$: Observable<boolean>;
|
|
96
|
+
private readonly ngZone;
|
|
96
97
|
/**
|
|
97
98
|
* Each Feature of AngularFire has a FirebaseApp injected. This way we
|
|
98
99
|
* don't rely on the main Firebase App instance and we can create named
|
|
@@ -34,6 +34,7 @@ export declare class AngularFireRemoteConfig {
|
|
|
34
34
|
readonly numbers: Observable<Record<string, number | undefined>> & Record<string, Observable<number>>;
|
|
35
35
|
readonly booleans: Observable<Record<string, boolean | undefined>> & Record<string, Observable<boolean>>;
|
|
36
36
|
readonly strings: Observable<Record<string, string | undefined>> & Record<string, Observable<string | undefined>>;
|
|
37
|
+
private readonly injector;
|
|
37
38
|
constructor(options: FirebaseOptions, name: string | null | undefined, settings: Settings | null, defaultConfig: ConfigTemplate | null, zone: NgZone, schedulers: ɵAngularFireSchedulers, platformId: Object);
|
|
38
39
|
static ɵfac: i0.ɵɵFactoryDeclaration<AngularFireRemoteConfig, [null, { optional: true; }, { optional: true; }, { optional: true; }, null, null, null]>;
|
|
39
40
|
static ɵprov: i0.ɵɵInjectableDeclaration<AngularFireRemoteConfig>;
|
package/compat/storage/ref.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Injector } from '@angular/core';
|
|
1
2
|
import { Observable } from 'rxjs';
|
|
2
3
|
import { ListOptions, ListResult, Reference, SettableMetadata, UploadMetadata } from './interfaces';
|
|
3
4
|
import { AngularFireUploadTask } from './task';
|
|
@@ -16,4 +17,4 @@ export interface AngularFireStorageReference {
|
|
|
16
17
|
* Create an AngularFire wrapped Storage Reference. This object
|
|
17
18
|
* creates observable methods from promise based methods.
|
|
18
19
|
*/
|
|
19
|
-
export declare function createStorageRef(ref: Reference): AngularFireStorageReference;
|
|
20
|
+
export declare function createStorageRef(ref: Reference, injector?: Injector): AngularFireStorageReference;
|
|
@@ -21,6 +21,7 @@ export declare const USE_EMULATOR: InjectionToken<[host: string, port: number, o
|
|
|
21
21
|
*/
|
|
22
22
|
export declare class AngularFireStorage {
|
|
23
23
|
readonly storage: firebase.storage.Storage;
|
|
24
|
+
private readonly injector;
|
|
24
25
|
constructor(options: FirebaseOptions, name: string | null | undefined, storageBucket: string | null, platformId: Object, zone: NgZone, schedulers: ɵAngularFireSchedulers, maxUploadRetryTime: any, maxOperationRetryTime: any, _useEmulator: any, _appCheckInstances: AppCheckInstances);
|
|
25
26
|
ref(path: string): import("./ref").AngularFireStorageReference;
|
|
26
27
|
refFromURL(path: string): import("./ref").AngularFireStorageReference;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import 'firebase/compat/auth';
|
|
2
2
|
import { isPlatformServer } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
4
|
+
import { InjectionToken, inject, EnvironmentInjector, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
5
5
|
import { pendingUntilEvent } from '@angular/core/rxjs-interop';
|
|
6
6
|
import * as i1 from '@angular/fire';
|
|
7
7
|
import { VERSION } from '@angular/fire';
|
|
@@ -79,6 +79,7 @@ const ɵauthFactory = (app, zone, useEmulator, tenantId, languageCode, useDevice
|
|
|
79
79
|
return auth;
|
|
80
80
|
}, [useEmulator, tenantId, languageCode, useDeviceLanguage, settings, persistence]);
|
|
81
81
|
class AngularFireAuth {
|
|
82
|
+
injector = inject(EnvironmentInjector);
|
|
82
83
|
/**
|
|
83
84
|
* Observable of authentication state; as of Firebase 4.0 this is only triggered via sign-in/out
|
|
84
85
|
*/
|
|
@@ -118,7 +119,7 @@ class AngularFireAuth {
|
|
|
118
119
|
// There could potentially be race conditions still... but this greatly decreases the odds while
|
|
119
120
|
// we reevaluate the API.
|
|
120
121
|
auth.pipe(first()).subscribe();
|
|
121
|
-
const redirectResult = auth.pipe(switchMap(auth => auth.getRedirectResult().then(it => it, () => null)), pendingUntilEvent(), shareReplay({ bufferSize: 1, refCount: false }));
|
|
122
|
+
const redirectResult = auth.pipe(switchMap(auth => auth.getRedirectResult().then(it => it, () => null)), pendingUntilEvent(this.injector), shareReplay({ bufferSize: 1, refCount: false }));
|
|
122
123
|
const authStateChanged = auth.pipe(switchMap(auth => new Observable(sub => ({ unsubscribe: zone.runOutsideAngular(() => auth.onAuthStateChanged(next => sub.next(next), err => sub.error(err), () => sub.complete())) }))));
|
|
123
124
|
const idTokenChanged = auth.pipe(switchMap(auth => new Observable(sub => ({ unsubscribe: zone.runOutsideAngular(() => auth.onIdTokenChanged(next => sub.next(next), err => sub.error(err), () => sub.complete())) }))));
|
|
124
125
|
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 { 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
|
+
{"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 { EnvironmentInjector, Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID, inject } 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 private readonly injector = inject(EnvironmentInjector);\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(this.injector),\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,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, NgZone, InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
2
|
+
import { inject, NgZone, InjectionToken, EnvironmentInjector, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/fire';
|
|
4
4
|
import { VERSION } from '@angular/fire';
|
|
5
5
|
import * as i3 from '@angular/fire/app-check';
|
|
@@ -263,7 +263,7 @@ function snapshotChanges(query, events, scheduler) {
|
|
|
263
263
|
return listChanges(query, events, scheduler);
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
function createListReference(query, afDatabase) {
|
|
266
|
+
function createListReference(query, afDatabase, injector) {
|
|
267
267
|
const outsideAngularScheduler = afDatabase.schedulers.outsideAngular;
|
|
268
268
|
const refInZone = inject(NgZone).run(() => query.ref);
|
|
269
269
|
return {
|
|
@@ -273,13 +273,13 @@ function createListReference(query, afDatabase) {
|
|
|
273
273
|
push: (data) => refInZone.push(data),
|
|
274
274
|
remove: createRemoveMethod(refInZone),
|
|
275
275
|
snapshotChanges(events) {
|
|
276
|
-
return snapshotChanges(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());
|
|
276
|
+
return snapshotChanges(query, events, outsideAngularScheduler).pipe(pendingUntilEvent(injector));
|
|
277
277
|
},
|
|
278
278
|
stateChanges(events) {
|
|
279
|
-
return stateChanges(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());
|
|
279
|
+
return stateChanges(query, events, outsideAngularScheduler).pipe(pendingUntilEvent(injector));
|
|
280
280
|
},
|
|
281
281
|
auditTrail(events) {
|
|
282
|
-
return auditTrail(query, events, outsideAngularScheduler).pipe(pendingUntilEvent());
|
|
282
|
+
return auditTrail(query, events, outsideAngularScheduler).pipe(pendingUntilEvent(injector));
|
|
283
283
|
},
|
|
284
284
|
valueChanges(events, options) {
|
|
285
285
|
const snapshotChanges$ = snapshotChanges(query, events, outsideAngularScheduler);
|
|
@@ -295,7 +295,7 @@ function createListReference(query, afDatabase) {
|
|
|
295
295
|
else {
|
|
296
296
|
return a.payload.val();
|
|
297
297
|
}
|
|
298
|
-
})), pendingUntilEvent());
|
|
298
|
+
})), pendingUntilEvent(injector));
|
|
299
299
|
}
|
|
300
300
|
};
|
|
301
301
|
}
|
|
@@ -306,18 +306,18 @@ function createObjectSnapshotChanges(query, scheduler) {
|
|
|
306
306
|
};
|
|
307
307
|
}
|
|
308
308
|
|
|
309
|
-
function createObjectReference(query, afDatabase) {
|
|
309
|
+
function createObjectReference(query, afDatabase, injector) {
|
|
310
310
|
return {
|
|
311
311
|
query,
|
|
312
312
|
snapshotChanges() {
|
|
313
|
-
return createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)().pipe(pendingUntilEvent());
|
|
313
|
+
return createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)().pipe(pendingUntilEvent(injector));
|
|
314
314
|
},
|
|
315
315
|
update(data) { return query.ref.update(data); },
|
|
316
316
|
set(data) { return query.ref.set(data); },
|
|
317
317
|
remove() { return query.ref.remove(); },
|
|
318
318
|
valueChanges() {
|
|
319
319
|
const snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)();
|
|
320
|
-
return snapshotChanges$.pipe(pendingUntilEvent(), map(action => action.payload.exists() ? action.payload.val() : null));
|
|
320
|
+
return snapshotChanges$.pipe(pendingUntilEvent(injector), map(action => action.payload.exists() ? action.payload.val() : null));
|
|
321
321
|
},
|
|
322
322
|
};
|
|
323
323
|
}
|
|
@@ -327,6 +327,7 @@ const USE_EMULATOR = new InjectionToken('angularfire2.database.use-emulator');
|
|
|
327
327
|
class AngularFireDatabase {
|
|
328
328
|
schedulers;
|
|
329
329
|
database;
|
|
330
|
+
injector = inject(EnvironmentInjector);
|
|
330
331
|
constructor(options, name, databaseURL,
|
|
331
332
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
332
333
|
platformId, zone, schedulers, _useEmulator, // tuple isn't working here
|
|
@@ -352,11 +353,11 @@ class AngularFireDatabase {
|
|
|
352
353
|
if (queryFn) {
|
|
353
354
|
query = queryFn(ref);
|
|
354
355
|
}
|
|
355
|
-
return createListReference(query, this);
|
|
356
|
+
return createListReference(query, this, this.injector);
|
|
356
357
|
}
|
|
357
358
|
object(pathOrRef) {
|
|
358
359
|
const ref = inject(NgZone).runOutsideAngular(() => getRef(this.database, pathOrRef));
|
|
359
|
-
return createObjectReference(ref, this);
|
|
360
|
+
return createObjectReference(ref, this, this.injector);
|
|
360
361
|
}
|
|
361
362
|
createPushId() {
|
|
362
363
|
const ref = inject(NgZone).runOutsideAngular(() => this.database.ref());
|
|
@@ -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 { 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
|
+
{"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 { Injector, 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, injector?: Injector): 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(injector));\n },\n stateChanges(events?: ChildEvent[]) {\n return stateChanges<T>(query, events, outsideAngularScheduler).pipe(pendingUntilEvent(injector));\n },\n auditTrail(events?: ChildEvent[]) {\n return auditTrail<T>(query, events, outsideAngularScheduler).pipe(pendingUntilEvent(injector));\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(injector)\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 { Injector } from '@angular/core';\nimport { 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, injector?: Injector): AngularFireObject<T> {\n return {\n query,\n snapshotChanges<T>() {\n return createObjectSnapshotChanges<T>(query, afDatabase.schedulers.outsideAngular)().pipe(\n pendingUntilEvent(injector)\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(injector),\n map(action => action.payload.exists() ? action.payload.val() as T : null)\n );\n },\n };\n}\n","import { EnvironmentInjector, 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 private readonly injector = inject(EnvironmentInjector);\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, this.injector);\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, this.injector);\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,6 +1,6 @@
|
|
|
1
1
|
import { isPlatformServer } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { inject, EnvironmentInjector, InjectionToken, NgZone, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
4
4
|
import * as i1 from '@angular/fire';
|
|
5
5
|
import { VERSION } from '@angular/fire';
|
|
6
6
|
import * as i3 from '@angular/fire/app-check';
|
|
@@ -77,6 +77,7 @@ function fromCollectionRef(ref, scheduler) {
|
|
|
77
77
|
class AngularFirestoreDocument {
|
|
78
78
|
ref;
|
|
79
79
|
afs;
|
|
80
|
+
injector = inject(EnvironmentInjector);
|
|
80
81
|
/**
|
|
81
82
|
* The constructor takes in a DocumentReference to provide wrapper methods
|
|
82
83
|
* for data operations, data streaming, and Symbol.observable.
|
|
@@ -117,7 +118,7 @@ class AngularFirestoreDocument {
|
|
|
117
118
|
*/
|
|
118
119
|
snapshotChanges() {
|
|
119
120
|
const scheduledFromDocRef$ = fromDocRef(this.ref, this.afs.schedulers.outsideAngular);
|
|
120
|
-
return scheduledFromDocRef$.pipe(pendingUntilEvent());
|
|
121
|
+
return scheduledFromDocRef$.pipe(pendingUntilEvent(this.injector));
|
|
121
122
|
}
|
|
122
123
|
valueChanges(options = {}) {
|
|
123
124
|
return this.snapshotChanges().pipe(map(({ payload }) => options.idField ? {
|
|
@@ -129,7 +130,7 @@ class AngularFirestoreDocument {
|
|
|
129
130
|
* Retrieve the document once.
|
|
130
131
|
*/
|
|
131
132
|
get(options) {
|
|
132
|
-
return from(this.ref.get(options)).pipe(pendingUntilEvent());
|
|
133
|
+
return from(this.ref.get(options)).pipe(pendingUntilEvent(this.injector));
|
|
133
134
|
}
|
|
134
135
|
}
|
|
135
136
|
|
|
@@ -272,6 +273,7 @@ class AngularFirestoreCollection {
|
|
|
272
273
|
ref;
|
|
273
274
|
query;
|
|
274
275
|
afs;
|
|
276
|
+
injector = inject(EnvironmentInjector);
|
|
275
277
|
/**
|
|
276
278
|
* The constructor takes in a CollectionReference and Query to provide wrapper methods
|
|
277
279
|
* for data operations and data streaming.
|
|
@@ -299,7 +301,7 @@ class AngularFirestoreCollection {
|
|
|
299
301
|
return source.pipe(
|
|
300
302
|
// We want to filter out empty arrays, but always emit at first, so the developer knows
|
|
301
303
|
// that the collection has been resolve; even if it's empty
|
|
302
|
-
startWith(undefined), pairwise(), filter(([prior, current]) => current.length > 0 || !prior), map(([, current]) => current), pendingUntilEvent());
|
|
304
|
+
startWith(undefined), pairwise(), filter(([prior, current]) => current.length > 0 || !prior), map(([, current]) => current), pendingUntilEvent(this.injector));
|
|
303
305
|
}
|
|
304
306
|
/**
|
|
305
307
|
* Create a stream of changes as they occur it time. This method is similar to stateChanges()
|
|
@@ -315,7 +317,7 @@ class AngularFirestoreCollection {
|
|
|
315
317
|
snapshotChanges(events) {
|
|
316
318
|
const validatedEvents = validateEventsArray(events);
|
|
317
319
|
const scheduledSortedChanges$ = sortedChanges(this.query, validatedEvents, this.afs.schedulers.outsideAngular);
|
|
318
|
-
return scheduledSortedChanges$.pipe(pendingUntilEvent());
|
|
320
|
+
return scheduledSortedChanges$.pipe(pendingUntilEvent(this.injector));
|
|
319
321
|
}
|
|
320
322
|
valueChanges(options = {}) {
|
|
321
323
|
return fromCollectionRef(this.query, this.afs.schedulers.outsideAngular)
|
|
@@ -329,13 +331,13 @@ class AngularFirestoreCollection {
|
|
|
329
331
|
else {
|
|
330
332
|
return a.data();
|
|
331
333
|
}
|
|
332
|
-
})), pendingUntilEvent());
|
|
334
|
+
})), pendingUntilEvent(this.injector));
|
|
333
335
|
}
|
|
334
336
|
/**
|
|
335
337
|
* Retrieve the results of the query once.
|
|
336
338
|
*/
|
|
337
339
|
get(options) {
|
|
338
|
-
return from(this.query.get(options)).pipe(pendingUntilEvent());
|
|
340
|
+
return from(this.query.get(options)).pipe(pendingUntilEvent(this.injector));
|
|
339
341
|
}
|
|
340
342
|
/**
|
|
341
343
|
* Add data to a collection reference.
|
|
@@ -377,6 +379,7 @@ class AngularFirestoreCollection {
|
|
|
377
379
|
class AngularFirestoreCollectionGroup {
|
|
378
380
|
query;
|
|
379
381
|
afs;
|
|
382
|
+
injector = inject(EnvironmentInjector);
|
|
380
383
|
/**
|
|
381
384
|
* The constructor takes in a CollectionGroupQuery to provide wrapper methods
|
|
382
385
|
* for data operations and data streaming.
|
|
@@ -392,10 +395,10 @@ class AngularFirestoreCollectionGroup {
|
|
|
392
395
|
*/
|
|
393
396
|
stateChanges(events) {
|
|
394
397
|
if (!events || events.length === 0) {
|
|
395
|
-
return docChanges(this.query, this.afs.schedulers.outsideAngular).pipe(pendingUntilEvent());
|
|
398
|
+
return docChanges(this.query, this.afs.schedulers.outsideAngular).pipe(pendingUntilEvent(this.injector));
|
|
396
399
|
}
|
|
397
400
|
return docChanges(this.query, this.afs.schedulers.outsideAngular)
|
|
398
|
-
.pipe(map(actions => actions.filter(change => events.indexOf(change.type) > -1)), filter(changes => changes.length > 0), pendingUntilEvent());
|
|
401
|
+
.pipe(map(actions => actions.filter(change => events.indexOf(change.type) > -1)), filter(changes => changes.length > 0), pendingUntilEvent(this.injector));
|
|
399
402
|
}
|
|
400
403
|
/**
|
|
401
404
|
* Create a stream of changes as they occur it time. This method is similar to stateChanges()
|
|
@@ -411,7 +414,7 @@ class AngularFirestoreCollectionGroup {
|
|
|
411
414
|
snapshotChanges(events) {
|
|
412
415
|
const validatedEvents = validateEventsArray(events);
|
|
413
416
|
const scheduledSortedChanges$ = sortedChanges(this.query, validatedEvents, this.afs.schedulers.outsideAngular);
|
|
414
|
-
return scheduledSortedChanges$.pipe(pendingUntilEvent());
|
|
417
|
+
return scheduledSortedChanges$.pipe(pendingUntilEvent(this.injector));
|
|
415
418
|
}
|
|
416
419
|
valueChanges(options = {}) {
|
|
417
420
|
const fromCollectionRefScheduled$ = fromCollectionRef(this.query, this.afs.schedulers.outsideAngular);
|
|
@@ -426,13 +429,13 @@ class AngularFirestoreCollectionGroup {
|
|
|
426
429
|
else {
|
|
427
430
|
return a.data();
|
|
428
431
|
}
|
|
429
|
-
})), pendingUntilEvent());
|
|
432
|
+
})), pendingUntilEvent(this.injector));
|
|
430
433
|
}
|
|
431
434
|
/**
|
|
432
435
|
* Retrieve the results of the query once.
|
|
433
436
|
*/
|
|
434
437
|
get(options) {
|
|
435
|
-
return from(this.query.get(options)).pipe(pendingUntilEvent());
|
|
438
|
+
return from(this.query.get(options)).pipe(pendingUntilEvent(this.injector));
|
|
436
439
|
}
|
|
437
440
|
}
|
|
438
441
|
|
|
@@ -519,6 +522,7 @@ class AngularFirestore {
|
|
|
519
522
|
schedulers;
|
|
520
523
|
firestore;
|
|
521
524
|
persistenceEnabled$;
|
|
525
|
+
ngZone = inject(NgZone);
|
|
522
526
|
/**
|
|
523
527
|
* Each Feature of AngularFire has a FirebaseApp injected. This way we
|
|
524
528
|
* don't rely on the main Firebase App instance and we can create named
|
|
@@ -572,7 +576,7 @@ class AngularFirestore {
|
|
|
572
576
|
collectionRef = pathOrRef;
|
|
573
577
|
}
|
|
574
578
|
const { ref, query } = associateQuery(collectionRef, queryFn);
|
|
575
|
-
const refInZone =
|
|
579
|
+
const refInZone = this.ngZone.run(() => ref);
|
|
576
580
|
return new AngularFirestoreCollection(refInZone, query, this);
|
|
577
581
|
}
|
|
578
582
|
/**
|
|
@@ -593,7 +597,7 @@ class AngularFirestore {
|
|
|
593
597
|
else {
|
|
594
598
|
ref = pathOrRef;
|
|
595
599
|
}
|
|
596
|
-
const refInZone =
|
|
600
|
+
const refInZone = this.ngZone.run(() => ref);
|
|
597
601
|
return new AngularFirestoreDocument(refInZone, this);
|
|
598
602
|
}
|
|
599
603
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-fire-compat-firestore.mjs","sources":["../../../src/compat/firestore/observable/fromRef.ts","../../../src/compat/firestore/document/document.ts","../../../src/compat/firestore/collection/changes.ts","../../../src/compat/firestore/collection/collection.ts","../../../src/compat/firestore/collection-group/collection-group.ts","../../../src/compat/firestore/firestore.ts","../../../src/compat/firestore/firestore.module.ts","../../../src/compat/firestore/angular-fire-compat-firestore.ts"],"sourcesContent":["import { Observable, SchedulerLike, asyncScheduler } from 'rxjs';\nimport { map, pairwise, startWith } from 'rxjs/operators';\nimport { Action, DocumentReference, DocumentSnapshot, Query, QuerySnapshot, Reference } from '../interfaces';\n\nfunction _fromRef<R>(ref: Reference, scheduler: SchedulerLike = asyncScheduler): Observable<R> {\n return new Observable(subscriber => {\n let unsubscribe: () => void;\n if (scheduler != null) {\n scheduler.schedule(() => {\n unsubscribe = ref.onSnapshot({ includeMetadataChanges: true }, subscriber);\n });\n } else {\n unsubscribe = ref.onSnapshot({ includeMetadataChanges: true }, subscriber);\n }\n\n return () => {\n if (unsubscribe != null) {\n unsubscribe();\n }\n };\n });\n}\n\nexport function fromRef<R, T>(ref: DocumentReference<T> | Query<T>, scheduler?: SchedulerLike) {\n return _fromRef<R>(ref, scheduler);\n}\n\nexport function fromDocRef<T>(ref: DocumentReference<T>, scheduler?: SchedulerLike): Observable<Action<DocumentSnapshot<T>>> {\n return fromRef<DocumentSnapshot<T>, T>(ref, scheduler)\n .pipe(\n startWith<DocumentSnapshot<T>, undefined>(undefined),\n pairwise(),\n map((snapshots: [DocumentSnapshot<T>, DocumentSnapshot<T>]) => {\n const [priorPayload, payload] = snapshots;\n if (!payload.exists) {\n return { payload, type: 'removed' };\n }\n if (!priorPayload?.exists) {\n return { payload, type: 'added' };\n }\n return { payload, type: 'modified' };\n })\n );\n}\n\nexport function fromCollectionRef<T>(ref: Query<T>, scheduler?: SchedulerLike): Observable<Action<QuerySnapshot<T>>> {\n return fromRef<QuerySnapshot<T>, T>(ref, scheduler).pipe(map(payload => ({ payload, type: 'query' })));\n}\n","import { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport firebase from 'firebase/compat/app';\nimport { Observable, from } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AngularFirestoreCollection } from '../collection/collection';\nimport { AngularFirestore, associateQuery } from '../firestore';\nimport { Action, DocumentData, DocumentReference, DocumentSnapshot, QueryFn, SetOptions } from '../interfaces';\nimport { fromDocRef } from '../observable/fromRef';\n\n/**\n * AngularFirestoreDocument service\n *\n * This class creates a reference to a Firestore Document. A reference is provided in\n * in the constructor. The class is generic which gives you type safety for data update\n * methods and data streaming.\n *\n * This class uses Symbol.observable to transform into Observable using Observable.from().\n *\n * This class is rarely used directly and should be created from the AngularFirestore service.\n *\n * Example:\n *\n * const fakeStock = new AngularFirestoreDocument<Stock>(doc('stocks/FAKE'));\n * await fakeStock.set({ name: 'FAKE', price: 0.01 });\n * fakeStock.valueChanges().map(snap => {\n * if(snap.exists) return snap.data();\n * return null;\n * }).subscribe(value => console.log(value));\n * // OR! Transform using Observable.from() and the data is unwrapped for you\n * Observable.from(fakeStock).subscribe(value => console.log(value));\n */\nexport class AngularFirestoreDocument<T = DocumentData> {\n\n /**\n * The constructor takes in a DocumentReference to provide wrapper methods\n * for data operations, data streaming, and Symbol.observable.\n */\n constructor(public ref: DocumentReference<T>, private afs: AngularFirestore) { }\n\n /**\n * Create or overwrite a single document.\n */\n set(data: T, options?: SetOptions): Promise<void> {\n return this.ref.set(data, options);\n }\n\n /**\n * Update some fields of a document without overwriting the entire document.\n */\n update(data: Partial<T>): Promise<void> {\n return this.ref.update(data);\n }\n\n /**\n * Delete a document.\n */\n delete(): Promise<void> {\n return this.ref.delete();\n }\n\n /**\n * Create a reference to a sub-collection given a path and an optional query\n * function.\n */\n collection<R = DocumentData>(path: string, queryFn?: QueryFn): AngularFirestoreCollection<R> {\n const collectionRef = this.ref.collection(path) as firebase.firestore.CollectionReference<R>;\n const { ref, query } = associateQuery(collectionRef, queryFn);\n return new AngularFirestoreCollection(ref, query, this.afs);\n }\n\n /**\n * Listen to snapshot updates from the document.\n */\n snapshotChanges(): Observable<Action<DocumentSnapshot<T>>> {\n const scheduledFromDocRef$ = fromDocRef<T>(this.ref, this.afs.schedulers.outsideAngular);\n return scheduledFromDocRef$.pipe(\n pendingUntilEvent()\n );\n }\n\n /**\n * Listen to unwrapped snapshot updates from the document.\n *\n * If the `idField` option is provided, document IDs are included and mapped to the\n * provided `idField` property name.\n */\n valueChanges(options?: unknown): Observable<T | undefined>;\n valueChanges<K extends string>(options: { idField: K }): Observable<(T & { [T in K]: string }) | undefined>;\n valueChanges<K extends string>(options: { idField?: K } = {}): Observable<T | undefined> {\n return this.snapshotChanges().pipe(\n map(({ payload }) =>\n options.idField ? {\n ...payload.data(),\n ...{ [options.idField]: payload.id }\n } as T & { [T in K]: string } : payload.data()\n )\n );\n }\n\n /**\n * Retrieve the document once.\n */\n get(options?: firebase.firestore.GetOptions) {\n return from(this.ref.get(options)).pipe(\n pendingUntilEvent(),\n );\n }\n}\n","import firebase from 'firebase/compat/app';\nimport { Observable, SchedulerLike } from 'rxjs';\nimport { distinctUntilChanged, map, pairwise, scan, startWith } from 'rxjs/operators';\nimport { Action, DocumentChange, DocumentChangeAction, DocumentChangeType, Query, QuerySnapshot } from '../interfaces';\nimport { fromCollectionRef } from '../observable/fromRef';\n\n\ntype ActionTupe = [Action<QuerySnapshot<firebase.firestore.DocumentData>>, Action<QuerySnapshot<firebase.firestore.DocumentData>>]\n/**\n * Return a stream of document changes on a query. These results are not in sort order but in\n * order of occurence.\n */\nexport function docChanges<T>(query: Query, scheduler?: SchedulerLike): Observable<DocumentChangeAction<T>[]> {\n return fromCollectionRef(query, scheduler)\n .pipe(\n startWith<Action<QuerySnapshot<firebase.firestore.DocumentData>>, undefined>(undefined),\n pairwise(),\n map((actionTuple: ActionTupe) => {\n const [priorAction, action] = actionTuple;\n const docChanges = action.payload.docChanges();\n const actions = docChanges.map(change => ({ type: change.type, payload: change }));\n // the metadata has changed from the prior emission\n if (priorAction && JSON.stringify(priorAction.payload.metadata) !== JSON.stringify(action.payload.metadata)) {\n // go through all the docs in payload and figure out which ones changed\n action.payload.docs.forEach((currentDoc, currentIndex) => {\n const docChange = docChanges.find(d => d.doc.ref.isEqual(currentDoc.ref));\n const priorDoc = priorAction?.payload.docs.find(d => d.ref.isEqual(currentDoc.ref));\n if (docChange && JSON.stringify(docChange.doc.metadata) === JSON.stringify(currentDoc.metadata) ||\n !docChange && priorDoc && JSON.stringify(priorDoc.metadata) === JSON.stringify(currentDoc.metadata)) {\n // document doesn't appear to have changed, don't log another action\n } else {\n // since the actions are processed in order just push onto the array\n actions.push({\n type: 'modified',\n payload: {\n oldIndex: currentIndex,\n newIndex: currentIndex,\n type: 'modified',\n doc: currentDoc\n }\n });\n }\n });\n }\n return actions as DocumentChangeAction<T>[];\n }),\n );\n}\n\n/**\n * Return a stream of document changes on a query. These results are in sort order.\n */\nexport function sortedChanges<T>(\n query: Query,\n events: DocumentChangeType[],\n scheduler?: SchedulerLike): Observable<DocumentChangeAction<T>[]> {\n return docChanges<T>(query, scheduler)\n .pipe(\n scan((current, changes) => combineChanges<T>(current, changes.map(it => it.payload), events), []),\n distinctUntilChanged(), // cut down on unneed change cycles\n map(changes => changes.map(c => ({ type: c.type, payload: c } as DocumentChangeAction<T>))));\n}\n\n/**\n * Combines the total result set from the current set of changes from an incoming set\n * of changes.\n */\nexport function combineChanges<T>(current: DocumentChange<T>[], changes: DocumentChange<T>[], events: DocumentChangeType[]) {\n changes.forEach(change => {\n // skip unwanted change types\n if (events.indexOf(change.type) > -1) {\n current = combineChange(current, change);\n }\n });\n return current;\n}\n\n/**\n * Splice arguments on top of a sliced array, to break top-level ===\n * this is useful for change-detection\n */\nfunction sliceAndSplice<T>(\n original: T[],\n start: number,\n deleteCount: number,\n ...args: T[]\n): T[] {\n const returnArray = original.slice();\n returnArray.splice(start, deleteCount, ...args);\n return returnArray;\n}\n\n/**\n * Creates a new sorted array from a new change.\n * Build our own because we allow filtering of action types ('added', 'removed', 'modified') before scanning\n * and so we have greater control over change detection (by breaking ===)\n */\nexport function combineChange<T>(combined: DocumentChange<T>[], change: DocumentChange<T>): DocumentChange<T>[] {\n switch (change.type) {\n case 'added':\n if (combined[change.newIndex]?.doc.ref.isEqual(change.doc.ref)) {\n // Not sure why the duplicates are getting fired\n } else {\n return sliceAndSplice(combined, change.newIndex, 0, change);\n }\n break;\n case 'modified':\n if (combined[change.oldIndex] == null || combined[change.oldIndex].doc.ref.isEqual(change.doc.ref)) {\n // When an item changes position we first remove it\n // and then add it's new position\n if (change.oldIndex !== change.newIndex) {\n const copiedArray = combined.slice();\n copiedArray.splice(change.oldIndex, 1);\n copiedArray.splice(change.newIndex, 0, change);\n return copiedArray;\n } else {\n return sliceAndSplice(combined, change.newIndex, 1, change);\n }\n }\n break;\n case 'removed':\n if (combined[change.oldIndex]?.doc.ref.isEqual(change.doc.ref)) {\n return sliceAndSplice(combined, change.oldIndex, 1);\n }\n break;\n }\n return combined;\n}\n","import { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport firebase from 'firebase/compat/app';\nimport { Observable, from } from 'rxjs';\nimport { filter, map, pairwise, scan, startWith } from 'rxjs/operators';\nimport { AngularFirestoreDocument } from '../document/document';\nimport { AngularFirestore } from '../firestore';\nimport { CollectionReference, DocumentChangeAction, DocumentChangeType, DocumentData, DocumentReference, Query } from '../interfaces';\nimport { fromCollectionRef } from '../observable/fromRef';\nimport { docChanges, sortedChanges } from './changes';\n\ntype DocumentChangeTuple<T> = [DocumentChangeAction<T>[], DocumentChangeAction<T>[]];\n\nexport function validateEventsArray(events?: DocumentChangeType[]) {\n if (!events || events.length === 0) {\n events = ['added', 'removed', 'modified'];\n }\n return events;\n}\n\n/**\n * AngularFirestoreCollection service\n *\n * This class creates a reference to a Firestore Collection. A reference and a query are provided in\n * in the constructor. The query can be the unqueried reference if no query is desired.The class\n * is generic which gives you type safety for data update methods and data streaming.\n *\n * This class uses Symbol.observable to transform into Observable using Observable.from().\n *\n * This class is rarely used directly and should be created from the AngularFirestore service.\n *\n * Example:\n *\n * const collectionRef = firebase.firestore.collection('stocks');\n * const query = collectionRef.where('price', '>', '0.01');\n * const fakeStock = new AngularFirestoreCollection<Stock>(collectionRef, query);\n *\n * // NOTE!: the updates are performed on the reference not the query\n * await fakeStock.add({ name: 'FAKE', price: 0.01 });\n *\n * // Subscribe to changes as snapshots. This provides you data updates as well as delta updates.\n * fakeStock.valueChanges().subscribe(value => console.log(value));\n */\nexport class AngularFirestoreCollection<T = DocumentData> {\n /**\n * The constructor takes in a CollectionReference and Query to provide wrapper methods\n * for data operations and data streaming.\n *\n * Note: Data operation methods are done on the reference not the query. This means\n * when you update data it is not updating data to the window of your query unless\n * the data fits the criteria of the query. See the AssociatedRefence type for details\n * on this implication.\n */\n constructor(\n public readonly ref: CollectionReference<T>,\n private readonly query: Query<T>,\n private readonly afs: AngularFirestore) { }\n\n /**\n * Listen to the latest change in the stream. This method returns changes\n * as they occur and they are not sorted by query order. This allows you to construct\n * your own data structure.\n */\n stateChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n let source = docChanges<T>(this.query, this.afs.schedulers.outsideAngular);\n if (events && events.length > 0) {\n source = source.pipe(\n map(actions => actions.filter(change => events.indexOf(change.type) > -1))\n );\n }\n return source.pipe(\n // We want to filter out empty arrays, but always emit at first, so the developer knows\n // that the collection has been resolve; even if it's empty\n startWith<DocumentChangeAction<T>[], undefined>(undefined),\n pairwise(),\n filter(([prior, current]: DocumentChangeTuple<T>) => current.length > 0 || !prior),\n map(([, current]) => current),\n pendingUntilEvent()\n );\n }\n\n /**\n * Create a stream of changes as they occur it time. This method is similar to stateChanges()\n * but it collects each event in an array over time.\n */\n auditTrail(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n return this.stateChanges(events).pipe(scan((current, action) => [...current, ...action], []));\n }\n\n /**\n * Create a stream of synchronized changes. This method keeps the local array in sorted\n * query order.\n */\n snapshotChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n const validatedEvents = validateEventsArray(events);\n const scheduledSortedChanges$ = sortedChanges<T>(this.query, validatedEvents, this.afs.schedulers.outsideAngular);\n return scheduledSortedChanges$.pipe(\n pendingUntilEvent()\n );\n }\n\n /**\n * Listen to all documents in the collection and its possible query as an Observable.\n *\n * If the `idField` option is provided, document IDs are included and mapped to the\n * provided `idField` property name.\n */\n valueChanges(): Observable<T[]>;\n // eslint-disable-next-line no-empty-pattern\n valueChanges({}): Observable<T[]>;\n valueChanges<K extends string>(options: {idField: K}): Observable<(T & { [T in K]: string })[]>;\n valueChanges<K extends string>(options: {idField?: K} = {}): Observable<T[]> {\n return fromCollectionRef<T>(this.query, this.afs.schedulers.outsideAngular)\n .pipe(\n map(actions => actions.payload.docs.map(a => {\n if (options.idField) {\n return {\n ...a.data() as any,\n ...{ [options.idField]: a.id }\n } as T & { [T in K]: string };\n } else {\n return a.data();\n }\n })),\n pendingUntilEvent()\n );\n }\n\n /**\n * Retrieve the results of the query once.\n */\n get(options?: firebase.firestore.GetOptions) {\n return from(this.query.get(options)).pipe(\n pendingUntilEvent(),\n );\n }\n\n /**\n * Add data to a collection reference.\n *\n * Note: Data operation methods are done on the reference not the query. This means\n * when you update data it is not updating data to the window of your query unless\n * the data fits the criteria of the query.\n */\n add(data: T): Promise<DocumentReference<T>> {\n return this.ref.add(data);\n }\n\n /**\n * Create a reference to a single document in a collection.\n */\n doc<T2 = T>(path?: string): AngularFirestoreDocument<T2> {\n // TODO is there a better way to solve this type issue\n return new AngularFirestoreDocument(this.ref.doc(path) as any, this.afs);\n }\n}\n","import { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport firebase from 'firebase/compat/app';\nimport { Observable, from } from 'rxjs';\nimport { filter, map, scan } from 'rxjs/operators';\nimport { docChanges, sortedChanges } from '../collection/changes';\nimport { validateEventsArray } from '../collection/collection';\nimport { AngularFirestore } from '../firestore';\nimport { DocumentChangeAction, DocumentChangeType, DocumentData, Query } from '../interfaces';\nimport { fromCollectionRef } from '../observable/fromRef';\n\n/**\n * AngularFirestoreCollectionGroup service\n *\n * This class holds a reference to a Firestore Collection Group Query.\n *\n * This class uses Symbol.observable to transform into Observable using Observable.from().\n *\n * This class is rarely used directly and should be created from the AngularFirestore service.\n *\n * Example:\n *\n * const collectionGroup = firebase.firestore.collectionGroup('stocks');\n * const query = collectionRef.where('price', '>', '0.01');\n * const fakeStock = new AngularFirestoreCollectionGroup<Stock>(query, afs);\n *\n * // Subscribe to changes as snapshots. This provides you data updates as well as delta updates.\n * fakeStock.valueChanges().subscribe(value => console.log(value));\n */\nexport class AngularFirestoreCollectionGroup<T = DocumentData> {\n /**\n * The constructor takes in a CollectionGroupQuery to provide wrapper methods\n * for data operations and data streaming.\n */\n constructor(\n private readonly query: Query<T>,\n private readonly afs: AngularFirestore) { }\n\n /**\n * Listen to the latest change in the stream. This method returns changes\n * as they occur and they are not sorted by query order. This allows you to construct\n * your own data structure.\n */\n stateChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n if (!events || events.length === 0) {\n return docChanges<T>(this.query, this.afs.schedulers.outsideAngular).pipe(\n pendingUntilEvent()\n );\n }\n return docChanges<T>(this.query, this.afs.schedulers.outsideAngular)\n .pipe(\n map(actions => actions.filter(change => events.indexOf(change.type) > -1)),\n filter(changes => changes.length > 0),\n pendingUntilEvent()\n );\n }\n\n /**\n * Create a stream of changes as they occur it time. This method is similar to stateChanges()\n * but it collects each event in an array over time.\n */\n auditTrail(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n return this.stateChanges(events).pipe(scan((current, action) => [...current, ...action], []));\n }\n\n /**\n * Create a stream of synchronized changes. This method keeps the local array in sorted\n * query order.\n */\n snapshotChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n const validatedEvents = validateEventsArray(events);\n const scheduledSortedChanges$ = sortedChanges<T>(this.query, validatedEvents, this.afs.schedulers.outsideAngular);\n return scheduledSortedChanges$.pipe(\n pendingUntilEvent()\n );\n }\n\n /**\n * Listen to all documents in the collection and its possible query as an Observable.\n *\n * If the `idField` option is provided, document IDs are included and mapped to the\n * provided `idField` property name.\n */\n valueChanges(): Observable<T[]>;\n // eslint-disable-next-line no-empty-pattern\n valueChanges({}): Observable<T[]>;\n valueChanges<K extends string>(options: {idField: K}): Observable<(T & { [T in K]: string })[]>;\n valueChanges<K extends string>(options: {idField?: K} = {}): Observable<T[]> {\n const fromCollectionRefScheduled$ = fromCollectionRef<T>(this.query, this.afs.schedulers.outsideAngular);\n return fromCollectionRefScheduled$\n .pipe(\n map(actions => actions.payload.docs.map(a => {\n if (options.idField) {\n return {\n [options.idField]: a.id,\n ...a.data()\n } as T & { [T in K]: string };\n } else {\n return a.data();\n }\n })),\n pendingUntilEvent()\n );\n }\n\n /**\n * Retrieve the results of the query once.\n */\n get(options?: firebase.firestore.GetOptions) {\n return from(this.query.get(options)).pipe(\n pendingUntilEvent()\n );\n }\n\n}\n","import { isPlatformServer } from '@angular/common';\nimport { 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 { Observable, from, of } from 'rxjs';\nimport { AngularFirestoreCollection } from './collection/collection';\nimport { AngularFirestoreCollectionGroup } from './collection-group/collection-group';\nimport { AngularFirestoreDocument } from './document/document';\nimport {\n AssociatedReference,\n CollectionReference,\n DocumentReference,\n PersistenceSettings,\n Query,\n QueryFn,\n QueryGroupFn,\n Settings\n} from './interfaces';\nimport 'firebase/compat/auth';\nimport 'firebase/compat/firestore';\n\n/**\n * The value of this token determines whether or not the firestore will have persistance enabled\n */\nexport const ENABLE_PERSISTENCE = new InjectionToken<boolean>('angularfire2.enableFirestorePersistence');\nexport const PERSISTENCE_SETTINGS = new InjectionToken<PersistenceSettings | undefined>('angularfire2.firestore.persistenceSettings');\nexport const SETTINGS = new InjectionToken<Settings>('angularfire2.firestore.settings');\n\ntype UseEmulatorArguments = Parameters<firebase.firestore.Firestore['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.firestore.use-emulator');\n\n/**\n * A utility methods for associating a collection reference with\n * a query.\n *\n * @param collectionRef - A collection reference to query\n * @param queryFn - The callback to create a query\n *\n * Example:\n * const { query, ref } = associateQuery(docRef.collection('items'), ref => {\n * return ref.where('age', '<', 200);\n * });\n */\nexport function associateQuery<T>(collectionRef: CollectionReference<T>, queryFn = ref => ref): AssociatedReference<T> {\n const query = queryFn(collectionRef);\n const ref = collectionRef;\n return { query, ref };\n}\n\n/**\n * AngularFirestore Service\n *\n * This service is the main entry point for this feature module. It provides\n * an API for creating Collection and Reference services. These services can\n * then be used to do data updates and observable streams of the data.\n *\n * Example:\n *\n * import { Component } from '@angular/core';\n * import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from '@angular/fire/firestore';\n * import { Observable } from 'rxjs/Observable';\n * import { from } from 'rxjs/observable';\n *\n * @Component({\n * selector: 'app-my-component',\n * template: `\n * <h2>Items for {{ (profile | async)?.name }}\n * <ul>\n * <li *ngFor=\"let item of items | async\">{{ item.name }}</li>\n * </ul>\n * <div class=\"control-input\">\n * <input type=\"text\" #itemname />\n * <button (click)=\"addItem(itemname.value)\">Add Item</button>\n * </div>\n * `\n * })\n * export class MyComponent implements OnInit {\n *\n * // services for data operations and data streaming\n * private readonly itemsRef: AngularFirestoreCollection<Item>;\n * private readonly profileRef: AngularFirestoreDocument<Profile>;\n *\n * // observables for template\n * items: Observable<Item[]>;\n * profile: Observable<Profile>;\n *\n * // inject main service\n * constructor(private readonly afs: AngularFirestore) {}\n *\n * ngOnInit() {\n * this.itemsRef = afs.collection('items', ref => ref.where('user', '==', 'davideast').limit(10));\n * this.items = this.itemsRef.valueChanges().map(snap => snap.docs.map(data => doc.data()));\n * // this.items = from(this.itemsRef); // you can also do this with no mapping\n *\n * this.profileRef = afs.doc('users/davideast');\n * this.profile = this.profileRef.valueChanges();\n * }\n *\n * addItem(name: string) {\n * const user = 'davideast';\n * this.itemsRef.add({ name, user });\n * }\n * }\n */\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFirestore {\n public readonly firestore: firebase.firestore.Firestore;\n public readonly persistenceEnabled$: Observable<boolean>;\n\n /**\n * Each Feature of AngularFire has a FirebaseApp injected. This way we\n * don't rely on the main Firebase App instance and we can create named\n * apps and use multiple apps.\n */\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(ENABLE_PERSISTENCE) shouldEnablePersistence: boolean | null,\n @Optional() @Inject(SETTINGS) settings: Settings | 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(PERSISTENCE_SETTINGS) persistenceSettings: PersistenceSettings | null,\n @Optional() @Inject(USE_EMULATOR) _useEmulator: any,\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 const app = ɵfirebaseAppFactory(options, zone, name);\n const useEmulator: UseEmulatorArguments | null = _useEmulator;\n\n if (auth) {\n ɵauthFactory(app, zone, useAuthEmulator, tenantId, languageCode, useDeviceLanguage, authSettings, persistence);\n }\n\n [this.firestore, this.persistenceEnabled$] = ɵcacheInstance(`${app.name}.firestore`, 'AngularFirestore', app.name, () => {\n const firestore = zone.runOutsideAngular(() => app.firestore());\n if (settings) {\n firestore.settings(settings);\n }\n if (useEmulator) {\n firestore.useEmulator(...useEmulator);\n }\n\n if (shouldEnablePersistence && !isPlatformServer(platformId)) {\n // We need to try/catch here because not all enablePersistence() failures are caught\n // https://github.com/firebase/firebase-js-sdk/issues/608\n const enablePersistence = () => {\n try {\n return from(firestore.enablePersistence(persistenceSettings || undefined).then(() => true, () => false));\n } catch (e) {\n if (typeof console !== 'undefined') { console.warn(e); }\n return of(false);\n }\n };\n return [firestore, zone.runOutsideAngular(enablePersistence)];\n } else {\n return [firestore, of(false)];\n }\n\n }, [settings, useEmulator, shouldEnablePersistence]);\n }\n\n /**\n * Create a reference to a Firestore Collection based on a path or\n * CollectionReference and an optional query function to narrow the result\n * set.\n */\n collection<T>(path: string, queryFn?: QueryFn): AngularFirestoreCollection<T>;\n collection<T>(ref: CollectionReference, queryFn?: QueryFn): AngularFirestoreCollection<T>;\n collection<T>(pathOrRef: string | CollectionReference<T>, queryFn?: QueryFn): AngularFirestoreCollection<T> {\n let collectionRef: CollectionReference<T>;\n if (typeof pathOrRef === 'string') {\n collectionRef = this.firestore.collection(pathOrRef) as firebase.firestore.CollectionReference<T>;\n } else {\n collectionRef = pathOrRef;\n }\n const { ref, query } = associateQuery<T>(collectionRef, queryFn);\n const refInZone = inject(NgZone).run(() => ref);\n return new AngularFirestoreCollection<T>(refInZone, query, this);\n }\n\n /**\n * Create a reference to a Firestore Collection Group based on a collectionId\n * and an optional query function to narrow the result\n * set.\n */\n collectionGroup<T>(collectionId: string, queryGroupFn?: QueryGroupFn<T>): AngularFirestoreCollectionGroup<T> {\n const queryFn = queryGroupFn || (ref => ref);\n const collectionGroup: Query<T> = this.firestore.collectionGroup(collectionId) as firebase.firestore.Query<T>;\n return new AngularFirestoreCollectionGroup<T>(queryFn(collectionGroup), this);\n }\n\n /**\n * Create a reference to a Firestore Document based on a path or\n * DocumentReference. Note that documents are not queryable because they are\n * simply objects. However, documents have sub-collections that return a\n * Collection reference and can be queried.\n */\n doc<T>(path: string): AngularFirestoreDocument<T>;\n doc<T>(ref: DocumentReference): AngularFirestoreDocument<T>;\n doc<T>(pathOrRef: string | DocumentReference<T>): AngularFirestoreDocument<T> {\n let ref: DocumentReference<T>;\n if (typeof pathOrRef === 'string') {\n ref = this.firestore.doc(pathOrRef) as firebase.firestore.DocumentReference<T>;\n } else {\n ref = pathOrRef;\n }\n const refInZone = inject(NgZone).run(() => ref);\n return new AngularFirestoreDocument<T>(refInZone, this);\n }\n\n /**\n * Returns a generated Firestore Document Id.\n */\n createId() {\n return this.firestore.collection('_').doc().id;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFirestore, ENABLE_PERSISTENCE, PERSISTENCE_SETTINGS } from './firestore';\nimport { PersistenceSettings } from './interfaces';\n\n@NgModule({\n providers: [ AngularFirestore ]\n})\nexport class AngularFirestoreModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'fst-compat');\n }\n /**\n * Attempt to enable persistent storage, if possible\n */\n static enablePersistence(persistenceSettings?: PersistenceSettings): ModuleWithProviders<AngularFirestoreModule> {\n return {\n ngModule: AngularFirestoreModule,\n providers: [\n { provide: ENABLE_PERSISTENCE, useValue: true },\n { provide: PERSISTENCE_SETTINGS, useValue: persistenceSettings },\n ]\n };\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-firestore.mjs","sources":["../../../src/compat/firestore/observable/fromRef.ts","../../../src/compat/firestore/document/document.ts","../../../src/compat/firestore/collection/changes.ts","../../../src/compat/firestore/collection/collection.ts","../../../src/compat/firestore/collection-group/collection-group.ts","../../../src/compat/firestore/firestore.ts","../../../src/compat/firestore/firestore.module.ts","../../../src/compat/firestore/angular-fire-compat-firestore.ts"],"sourcesContent":["import { Observable, SchedulerLike, asyncScheduler } from 'rxjs';\nimport { map, pairwise, startWith } from 'rxjs/operators';\nimport { Action, DocumentReference, DocumentSnapshot, Query, QuerySnapshot, Reference } from '../interfaces';\n\nfunction _fromRef<R>(ref: Reference, scheduler: SchedulerLike = asyncScheduler): Observable<R> {\n return new Observable(subscriber => {\n let unsubscribe: () => void;\n if (scheduler != null) {\n scheduler.schedule(() => {\n unsubscribe = ref.onSnapshot({ includeMetadataChanges: true }, subscriber);\n });\n } else {\n unsubscribe = ref.onSnapshot({ includeMetadataChanges: true }, subscriber);\n }\n\n return () => {\n if (unsubscribe != null) {\n unsubscribe();\n }\n };\n });\n}\n\nexport function fromRef<R, T>(ref: DocumentReference<T> | Query<T>, scheduler?: SchedulerLike) {\n return _fromRef<R>(ref, scheduler);\n}\n\nexport function fromDocRef<T>(ref: DocumentReference<T>, scheduler?: SchedulerLike): Observable<Action<DocumentSnapshot<T>>> {\n return fromRef<DocumentSnapshot<T>, T>(ref, scheduler)\n .pipe(\n startWith<DocumentSnapshot<T>, undefined>(undefined),\n pairwise(),\n map((snapshots: [DocumentSnapshot<T>, DocumentSnapshot<T>]) => {\n const [priorPayload, payload] = snapshots;\n if (!payload.exists) {\n return { payload, type: 'removed' };\n }\n if (!priorPayload?.exists) {\n return { payload, type: 'added' };\n }\n return { payload, type: 'modified' };\n })\n );\n}\n\nexport function fromCollectionRef<T>(ref: Query<T>, scheduler?: SchedulerLike): Observable<Action<QuerySnapshot<T>>> {\n return fromRef<QuerySnapshot<T>, T>(ref, scheduler).pipe(map(payload => ({ payload, type: 'query' })));\n}\n","import { EnvironmentInjector, inject } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport firebase from 'firebase/compat/app';\nimport { Observable, from } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AngularFirestoreCollection } from '../collection/collection';\nimport { AngularFirestore, associateQuery } from '../firestore';\nimport { Action, DocumentData, DocumentReference, DocumentSnapshot, QueryFn, SetOptions } from '../interfaces';\nimport { fromDocRef } from '../observable/fromRef';\n\n/**\n * AngularFirestoreDocument service\n *\n * This class creates a reference to a Firestore Document. A reference is provided in\n * in the constructor. The class is generic which gives you type safety for data update\n * methods and data streaming.\n *\n * This class uses Symbol.observable to transform into Observable using Observable.from().\n *\n * This class is rarely used directly and should be created from the AngularFirestore service.\n *\n * Example:\n *\n * const fakeStock = new AngularFirestoreDocument<Stock>(doc('stocks/FAKE'));\n * await fakeStock.set({ name: 'FAKE', price: 0.01 });\n * fakeStock.valueChanges().map(snap => {\n * if(snap.exists) return snap.data();\n * return null;\n * }).subscribe(value => console.log(value));\n * // OR! Transform using Observable.from() and the data is unwrapped for you\n * Observable.from(fakeStock).subscribe(value => console.log(value));\n */\nexport class AngularFirestoreDocument<T = DocumentData> {\n private readonly injector = inject(EnvironmentInjector);\n\n /**\n * The constructor takes in a DocumentReference to provide wrapper methods\n * for data operations, data streaming, and Symbol.observable.\n */\n constructor(public ref: DocumentReference<T>, private afs: AngularFirestore) { }\n\n /**\n * Create or overwrite a single document.\n */\n set(data: T, options?: SetOptions): Promise<void> {\n return this.ref.set(data, options);\n }\n\n /**\n * Update some fields of a document without overwriting the entire document.\n */\n update(data: Partial<T>): Promise<void> {\n return this.ref.update(data);\n }\n\n /**\n * Delete a document.\n */\n delete(): Promise<void> {\n return this.ref.delete();\n }\n\n /**\n * Create a reference to a sub-collection given a path and an optional query\n * function.\n */\n collection<R = DocumentData>(path: string, queryFn?: QueryFn): AngularFirestoreCollection<R> {\n const collectionRef = this.ref.collection(path) as firebase.firestore.CollectionReference<R>;\n const { ref, query } = associateQuery(collectionRef, queryFn);\n return new AngularFirestoreCollection(ref, query, this.afs);\n }\n\n /**\n * Listen to snapshot updates from the document.\n */\n snapshotChanges(): Observable<Action<DocumentSnapshot<T>>> {\n const scheduledFromDocRef$ = fromDocRef<T>(this.ref, this.afs.schedulers.outsideAngular);\n return scheduledFromDocRef$.pipe(\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Listen to unwrapped snapshot updates from the document.\n *\n * If the `idField` option is provided, document IDs are included and mapped to the\n * provided `idField` property name.\n */\n valueChanges(options?: unknown): Observable<T | undefined>;\n valueChanges<K extends string>(options: { idField: K }): Observable<(T & { [T in K]: string }) | undefined>;\n valueChanges<K extends string>(options: { idField?: K } = {}): Observable<T | undefined> {\n return this.snapshotChanges().pipe(\n map(({ payload }) =>\n options.idField ? {\n ...payload.data(),\n ...{ [options.idField]: payload.id }\n } as T & { [T in K]: string } : payload.data()\n )\n );\n }\n\n /**\n * Retrieve the document once.\n */\n get(options?: firebase.firestore.GetOptions) {\n return from(this.ref.get(options)).pipe(\n pendingUntilEvent(this.injector)\n );\n }\n}\n","import firebase from 'firebase/compat/app';\nimport { Observable, SchedulerLike } from 'rxjs';\nimport { distinctUntilChanged, map, pairwise, scan, startWith } from 'rxjs/operators';\nimport { Action, DocumentChange, DocumentChangeAction, DocumentChangeType, Query, QuerySnapshot } from '../interfaces';\nimport { fromCollectionRef } from '../observable/fromRef';\n\n\ntype ActionTupe = [Action<QuerySnapshot<firebase.firestore.DocumentData>>, Action<QuerySnapshot<firebase.firestore.DocumentData>>]\n/**\n * Return a stream of document changes on a query. These results are not in sort order but in\n * order of occurence.\n */\nexport function docChanges<T>(query: Query, scheduler?: SchedulerLike): Observable<DocumentChangeAction<T>[]> {\n return fromCollectionRef(query, scheduler)\n .pipe(\n startWith<Action<QuerySnapshot<firebase.firestore.DocumentData>>, undefined>(undefined),\n pairwise(),\n map((actionTuple: ActionTupe) => {\n const [priorAction, action] = actionTuple;\n const docChanges = action.payload.docChanges();\n const actions = docChanges.map(change => ({ type: change.type, payload: change }));\n // the metadata has changed from the prior emission\n if (priorAction && JSON.stringify(priorAction.payload.metadata) !== JSON.stringify(action.payload.metadata)) {\n // go through all the docs in payload and figure out which ones changed\n action.payload.docs.forEach((currentDoc, currentIndex) => {\n const docChange = docChanges.find(d => d.doc.ref.isEqual(currentDoc.ref));\n const priorDoc = priorAction?.payload.docs.find(d => d.ref.isEqual(currentDoc.ref));\n if (docChange && JSON.stringify(docChange.doc.metadata) === JSON.stringify(currentDoc.metadata) ||\n !docChange && priorDoc && JSON.stringify(priorDoc.metadata) === JSON.stringify(currentDoc.metadata)) {\n // document doesn't appear to have changed, don't log another action\n } else {\n // since the actions are processed in order just push onto the array\n actions.push({\n type: 'modified',\n payload: {\n oldIndex: currentIndex,\n newIndex: currentIndex,\n type: 'modified',\n doc: currentDoc\n }\n });\n }\n });\n }\n return actions as DocumentChangeAction<T>[];\n }),\n );\n}\n\n/**\n * Return a stream of document changes on a query. These results are in sort order.\n */\nexport function sortedChanges<T>(\n query: Query,\n events: DocumentChangeType[],\n scheduler?: SchedulerLike): Observable<DocumentChangeAction<T>[]> {\n return docChanges<T>(query, scheduler)\n .pipe(\n scan((current, changes) => combineChanges<T>(current, changes.map(it => it.payload), events), []),\n distinctUntilChanged(), // cut down on unneed change cycles\n map(changes => changes.map(c => ({ type: c.type, payload: c } as DocumentChangeAction<T>))));\n}\n\n/**\n * Combines the total result set from the current set of changes from an incoming set\n * of changes.\n */\nexport function combineChanges<T>(current: DocumentChange<T>[], changes: DocumentChange<T>[], events: DocumentChangeType[]) {\n changes.forEach(change => {\n // skip unwanted change types\n if (events.indexOf(change.type) > -1) {\n current = combineChange(current, change);\n }\n });\n return current;\n}\n\n/**\n * Splice arguments on top of a sliced array, to break top-level ===\n * this is useful for change-detection\n */\nfunction sliceAndSplice<T>(\n original: T[],\n start: number,\n deleteCount: number,\n ...args: T[]\n): T[] {\n const returnArray = original.slice();\n returnArray.splice(start, deleteCount, ...args);\n return returnArray;\n}\n\n/**\n * Creates a new sorted array from a new change.\n * Build our own because we allow filtering of action types ('added', 'removed', 'modified') before scanning\n * and so we have greater control over change detection (by breaking ===)\n */\nexport function combineChange<T>(combined: DocumentChange<T>[], change: DocumentChange<T>): DocumentChange<T>[] {\n switch (change.type) {\n case 'added':\n if (combined[change.newIndex]?.doc.ref.isEqual(change.doc.ref)) {\n // Not sure why the duplicates are getting fired\n } else {\n return sliceAndSplice(combined, change.newIndex, 0, change);\n }\n break;\n case 'modified':\n if (combined[change.oldIndex] == null || combined[change.oldIndex].doc.ref.isEqual(change.doc.ref)) {\n // When an item changes position we first remove it\n // and then add it's new position\n if (change.oldIndex !== change.newIndex) {\n const copiedArray = combined.slice();\n copiedArray.splice(change.oldIndex, 1);\n copiedArray.splice(change.newIndex, 0, change);\n return copiedArray;\n } else {\n return sliceAndSplice(combined, change.newIndex, 1, change);\n }\n }\n break;\n case 'removed':\n if (combined[change.oldIndex]?.doc.ref.isEqual(change.doc.ref)) {\n return sliceAndSplice(combined, change.oldIndex, 1);\n }\n break;\n }\n return combined;\n}\n","import { EnvironmentInjector, inject } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport firebase from 'firebase/compat/app';\nimport { Observable, from } from 'rxjs';\nimport { filter, map, pairwise, scan, startWith } from 'rxjs/operators';\nimport { AngularFirestoreDocument } from '../document/document';\nimport { AngularFirestore } from '../firestore';\nimport { CollectionReference, DocumentChangeAction, DocumentChangeType, DocumentData, DocumentReference, Query } from '../interfaces';\nimport { fromCollectionRef } from '../observable/fromRef';\nimport { docChanges, sortedChanges } from './changes';\n\ntype DocumentChangeTuple<T> = [DocumentChangeAction<T>[], DocumentChangeAction<T>[]];\n\nexport function validateEventsArray(events?: DocumentChangeType[]) {\n if (!events || events.length === 0) {\n events = ['added', 'removed', 'modified'];\n }\n return events;\n}\n\n/**\n * AngularFirestoreCollection service\n *\n * This class creates a reference to a Firestore Collection. A reference and a query are provided in\n * in the constructor. The query can be the unqueried reference if no query is desired.The class\n * is generic which gives you type safety for data update methods and data streaming.\n *\n * This class uses Symbol.observable to transform into Observable using Observable.from().\n *\n * This class is rarely used directly and should be created from the AngularFirestore service.\n *\n * Example:\n *\n * const collectionRef = firebase.firestore.collection('stocks');\n * const query = collectionRef.where('price', '>', '0.01');\n * const fakeStock = new AngularFirestoreCollection<Stock>(collectionRef, query);\n *\n * // NOTE!: the updates are performed on the reference not the query\n * await fakeStock.add({ name: 'FAKE', price: 0.01 });\n *\n * // Subscribe to changes as snapshots. This provides you data updates as well as delta updates.\n * fakeStock.valueChanges().subscribe(value => console.log(value));\n */\nexport class AngularFirestoreCollection<T = DocumentData> {\n private readonly injector = inject(EnvironmentInjector);\n\n /**\n * The constructor takes in a CollectionReference and Query to provide wrapper methods\n * for data operations and data streaming.\n *\n * Note: Data operation methods are done on the reference not the query. This means\n * when you update data it is not updating data to the window of your query unless\n * the data fits the criteria of the query. See the AssociatedRefence type for details\n * on this implication.\n */\n constructor(\n public readonly ref: CollectionReference<T>,\n private readonly query: Query<T>,\n private readonly afs: AngularFirestore) { }\n\n /**\n * Listen to the latest change in the stream. This method returns changes\n * as they occur and they are not sorted by query order. This allows you to construct\n * your own data structure.\n */\n stateChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n let source = docChanges<T>(this.query, this.afs.schedulers.outsideAngular);\n if (events && events.length > 0) {\n source = source.pipe(\n map(actions => actions.filter(change => events.indexOf(change.type) > -1))\n );\n }\n return source.pipe(\n // We want to filter out empty arrays, but always emit at first, so the developer knows\n // that the collection has been resolve; even if it's empty\n startWith<DocumentChangeAction<T>[], undefined>(undefined),\n pairwise(),\n filter(([prior, current]: DocumentChangeTuple<T>) => current.length > 0 || !prior),\n map(([, current]) => current),\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Create a stream of changes as they occur it time. This method is similar to stateChanges()\n * but it collects each event in an array over time.\n */\n auditTrail(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n return this.stateChanges(events).pipe(scan((current, action) => [...current, ...action], []));\n }\n\n /**\n * Create a stream of synchronized changes. This method keeps the local array in sorted\n * query order.\n */\n snapshotChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n const validatedEvents = validateEventsArray(events);\n const scheduledSortedChanges$ = sortedChanges<T>(this.query, validatedEvents, this.afs.schedulers.outsideAngular);\n return scheduledSortedChanges$.pipe(\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Listen to all documents in the collection and its possible query as an Observable.\n *\n * If the `idField` option is provided, document IDs are included and mapped to the\n * provided `idField` property name.\n */\n valueChanges(): Observable<T[]>;\n // eslint-disable-next-line no-empty-pattern\n valueChanges({}): Observable<T[]>;\n valueChanges<K extends string>(options: {idField: K}): Observable<(T & { [T in K]: string })[]>;\n valueChanges<K extends string>(options: {idField?: K} = {}): Observable<T[]> {\n return fromCollectionRef<T>(this.query, this.afs.schedulers.outsideAngular)\n .pipe(\n map(actions => actions.payload.docs.map(a => {\n if (options.idField) {\n return {\n ...a.data() as any,\n ...{ [options.idField]: a.id }\n } as T & { [T in K]: string };\n } else {\n return a.data();\n }\n })),\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Retrieve the results of the query once.\n */\n get(options?: firebase.firestore.GetOptions) {\n return from(this.query.get(options)).pipe(\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Add data to a collection reference.\n *\n * Note: Data operation methods are done on the reference not the query. This means\n * when you update data it is not updating data to the window of your query unless\n * the data fits the criteria of the query.\n */\n add(data: T): Promise<DocumentReference<T>> {\n return this.ref.add(data);\n }\n\n /**\n * Create a reference to a single document in a collection.\n */\n doc<T2 = T>(path?: string): AngularFirestoreDocument<T2> {\n // TODO is there a better way to solve this type issue\n return new AngularFirestoreDocument(this.ref.doc(path) as any, this.afs);\n }\n}\n","import { EnvironmentInjector, inject } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport firebase from 'firebase/compat/app';\nimport { Observable, from } from 'rxjs';\nimport { filter, map, scan } from 'rxjs/operators';\nimport { docChanges, sortedChanges } from '../collection/changes';\nimport { validateEventsArray } from '../collection/collection';\nimport { AngularFirestore } from '../firestore';\nimport { DocumentChangeAction, DocumentChangeType, DocumentData, Query } from '../interfaces';\nimport { fromCollectionRef } from '../observable/fromRef';\n\n/**\n * AngularFirestoreCollectionGroup service\n *\n * This class holds a reference to a Firestore Collection Group Query.\n *\n * This class uses Symbol.observable to transform into Observable using Observable.from().\n *\n * This class is rarely used directly and should be created from the AngularFirestore service.\n *\n * Example:\n *\n * const collectionGroup = firebase.firestore.collectionGroup('stocks');\n * const query = collectionRef.where('price', '>', '0.01');\n * const fakeStock = new AngularFirestoreCollectionGroup<Stock>(query, afs);\n *\n * // Subscribe to changes as snapshots. This provides you data updates as well as delta updates.\n * fakeStock.valueChanges().subscribe(value => console.log(value));\n */\nexport class AngularFirestoreCollectionGroup<T = DocumentData> {\n private readonly injector = inject(EnvironmentInjector);\n\n /**\n * The constructor takes in a CollectionGroupQuery to provide wrapper methods\n * for data operations and data streaming.\n */\n constructor(\n private readonly query: Query<T>,\n private readonly afs: AngularFirestore) { }\n\n /**\n * Listen to the latest change in the stream. This method returns changes\n * as they occur and they are not sorted by query order. This allows you to construct\n * your own data structure.\n */\n stateChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n if (!events || events.length === 0) {\n return docChanges<T>(this.query, this.afs.schedulers.outsideAngular).pipe(\n pendingUntilEvent(this.injector)\n );\n }\n return docChanges<T>(this.query, this.afs.schedulers.outsideAngular)\n .pipe(\n map(actions => actions.filter(change => events.indexOf(change.type) > -1)),\n filter(changes => changes.length > 0),\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Create a stream of changes as they occur it time. This method is similar to stateChanges()\n * but it collects each event in an array over time.\n */\n auditTrail(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n return this.stateChanges(events).pipe(scan((current, action) => [...current, ...action], []));\n }\n\n /**\n * Create a stream of synchronized changes. This method keeps the local array in sorted\n * query order.\n */\n snapshotChanges(events?: DocumentChangeType[]): Observable<DocumentChangeAction<T>[]> {\n const validatedEvents = validateEventsArray(events);\n const scheduledSortedChanges$ = sortedChanges<T>(this.query, validatedEvents, this.afs.schedulers.outsideAngular);\n return scheduledSortedChanges$.pipe(\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Listen to all documents in the collection and its possible query as an Observable.\n *\n * If the `idField` option is provided, document IDs are included and mapped to the\n * provided `idField` property name.\n */\n valueChanges(): Observable<T[]>;\n // eslint-disable-next-line no-empty-pattern\n valueChanges({}): Observable<T[]>;\n valueChanges<K extends string>(options: {idField: K}): Observable<(T & { [T in K]: string })[]>;\n valueChanges<K extends string>(options: {idField?: K} = {}): Observable<T[]> {\n const fromCollectionRefScheduled$ = fromCollectionRef<T>(this.query, this.afs.schedulers.outsideAngular);\n return fromCollectionRefScheduled$\n .pipe(\n map(actions => actions.payload.docs.map(a => {\n if (options.idField) {\n return {\n [options.idField]: a.id,\n ...a.data()\n } as T & { [T in K]: string };\n } else {\n return a.data();\n }\n })),\n pendingUntilEvent(this.injector)\n );\n }\n\n /**\n * Retrieve the results of the query once.\n */\n get(options?: firebase.firestore.GetOptions) {\n return from(this.query.get(options)).pipe(\n pendingUntilEvent(this.injector)\n );\n }\n\n}\n","import { isPlatformServer } from '@angular/common';\nimport { 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 { Observable, from, of } from 'rxjs';\nimport { AngularFirestoreCollection } from './collection/collection';\nimport { AngularFirestoreCollectionGroup } from './collection-group/collection-group';\nimport { AngularFirestoreDocument } from './document/document';\nimport {\n AssociatedReference,\n CollectionReference,\n DocumentReference,\n PersistenceSettings,\n Query,\n QueryFn,\n QueryGroupFn,\n Settings\n} from './interfaces';\nimport 'firebase/compat/auth';\nimport 'firebase/compat/firestore';\n\n/**\n * The value of this token determines whether or not the firestore will have persistance enabled\n */\nexport const ENABLE_PERSISTENCE = new InjectionToken<boolean>('angularfire2.enableFirestorePersistence');\nexport const PERSISTENCE_SETTINGS = new InjectionToken<PersistenceSettings | undefined>('angularfire2.firestore.persistenceSettings');\nexport const SETTINGS = new InjectionToken<Settings>('angularfire2.firestore.settings');\n\ntype UseEmulatorArguments = Parameters<firebase.firestore.Firestore['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.firestore.use-emulator');\n\n/**\n * A utility methods for associating a collection reference with\n * a query.\n *\n * @param collectionRef - A collection reference to query\n * @param queryFn - The callback to create a query\n *\n * Example:\n * const { query, ref } = associateQuery(docRef.collection('items'), ref => {\n * return ref.where('age', '<', 200);\n * });\n */\nexport function associateQuery<T>(collectionRef: CollectionReference<T>, queryFn = ref => ref): AssociatedReference<T> {\n const query = queryFn(collectionRef);\n const ref = collectionRef;\n return { query, ref };\n}\n\n/**\n * AngularFirestore Service\n *\n * This service is the main entry point for this feature module. It provides\n * an API for creating Collection and Reference services. These services can\n * then be used to do data updates and observable streams of the data.\n *\n * Example:\n *\n * import { Component } from '@angular/core';\n * import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from '@angular/fire/firestore';\n * import { Observable } from 'rxjs/Observable';\n * import { from } from 'rxjs/observable';\n *\n * @Component({\n * selector: 'app-my-component',\n * template: `\n * <h2>Items for {{ (profile | async)?.name }}\n * <ul>\n * <li *ngFor=\"let item of items | async\">{{ item.name }}</li>\n * </ul>\n * <div class=\"control-input\">\n * <input type=\"text\" #itemname />\n * <button (click)=\"addItem(itemname.value)\">Add Item</button>\n * </div>\n * `\n * })\n * export class MyComponent implements OnInit {\n *\n * // services for data operations and data streaming\n * private readonly itemsRef: AngularFirestoreCollection<Item>;\n * private readonly profileRef: AngularFirestoreDocument<Profile>;\n *\n * // observables for template\n * items: Observable<Item[]>;\n * profile: Observable<Profile>;\n *\n * // inject main service\n * constructor(private readonly afs: AngularFirestore) {}\n *\n * ngOnInit() {\n * this.itemsRef = afs.collection('items', ref => ref.where('user', '==', 'davideast').limit(10));\n * this.items = this.itemsRef.valueChanges().map(snap => snap.docs.map(data => doc.data()));\n * // this.items = from(this.itemsRef); // you can also do this with no mapping\n *\n * this.profileRef = afs.doc('users/davideast');\n * this.profile = this.profileRef.valueChanges();\n * }\n *\n * addItem(name: string) {\n * const user = 'davideast';\n * this.itemsRef.add({ name, user });\n * }\n * }\n */\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFirestore {\n public readonly firestore: firebase.firestore.Firestore;\n public readonly persistenceEnabled$: Observable<boolean>;\n private readonly ngZone = inject(NgZone);\n\n /**\n * Each Feature of AngularFire has a FirebaseApp injected. This way we\n * don't rely on the main Firebase App instance and we can create named\n * apps and use multiple apps.\n */\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(ENABLE_PERSISTENCE) shouldEnablePersistence: boolean | null,\n @Optional() @Inject(SETTINGS) settings: Settings | 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(PERSISTENCE_SETTINGS) persistenceSettings: PersistenceSettings | null,\n @Optional() @Inject(USE_EMULATOR) _useEmulator: any,\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 const app = ɵfirebaseAppFactory(options, zone, name);\n const useEmulator: UseEmulatorArguments | null = _useEmulator;\n\n if (auth) {\n ɵauthFactory(app, zone, useAuthEmulator, tenantId, languageCode, useDeviceLanguage, authSettings, persistence);\n }\n\n [this.firestore, this.persistenceEnabled$] = ɵcacheInstance(`${app.name}.firestore`, 'AngularFirestore', app.name, () => {\n const firestore = zone.runOutsideAngular(() => app.firestore());\n if (settings) {\n firestore.settings(settings);\n }\n if (useEmulator) {\n firestore.useEmulator(...useEmulator);\n }\n\n if (shouldEnablePersistence && !isPlatformServer(platformId)) {\n // We need to try/catch here because not all enablePersistence() failures are caught\n // https://github.com/firebase/firebase-js-sdk/issues/608\n const enablePersistence = () => {\n try {\n return from(firestore.enablePersistence(persistenceSettings || undefined).then(() => true, () => false));\n } catch (e) {\n if (typeof console !== 'undefined') { console.warn(e); }\n return of(false);\n }\n };\n return [firestore, zone.runOutsideAngular(enablePersistence)];\n } else {\n return [firestore, of(false)];\n }\n\n }, [settings, useEmulator, shouldEnablePersistence]);\n }\n\n /**\n * Create a reference to a Firestore Collection based on a path or\n * CollectionReference and an optional query function to narrow the result\n * set.\n */\n collection<T>(path: string, queryFn?: QueryFn): AngularFirestoreCollection<T>;\n collection<T>(ref: CollectionReference, queryFn?: QueryFn): AngularFirestoreCollection<T>;\n collection<T>(pathOrRef: string | CollectionReference<T>, queryFn?: QueryFn): AngularFirestoreCollection<T> {\n let collectionRef: CollectionReference<T>;\n if (typeof pathOrRef === 'string') {\n collectionRef = this.firestore.collection(pathOrRef) as firebase.firestore.CollectionReference<T>;\n } else {\n collectionRef = pathOrRef;\n }\n const { ref, query } = associateQuery<T>(collectionRef, queryFn);\n const refInZone = this.ngZone.run(() => ref);\n return new AngularFirestoreCollection<T>(refInZone, query, this);\n }\n\n /**\n * Create a reference to a Firestore Collection Group based on a collectionId\n * and an optional query function to narrow the result\n * set.\n */\n collectionGroup<T>(collectionId: string, queryGroupFn?: QueryGroupFn<T>): AngularFirestoreCollectionGroup<T> {\n const queryFn = queryGroupFn || (ref => ref);\n const collectionGroup: Query<T> = this.firestore.collectionGroup(collectionId) as firebase.firestore.Query<T>;\n return new AngularFirestoreCollectionGroup<T>(queryFn(collectionGroup), this);\n }\n\n /**\n * Create a reference to a Firestore Document based on a path or\n * DocumentReference. Note that documents are not queryable because they are\n * simply objects. However, documents have sub-collections that return a\n * Collection reference and can be queried.\n */\n doc<T>(path: string): AngularFirestoreDocument<T>;\n doc<T>(ref: DocumentReference): AngularFirestoreDocument<T>;\n doc<T>(pathOrRef: string | DocumentReference<T>): AngularFirestoreDocument<T> {\n let ref: DocumentReference<T>;\n if (typeof pathOrRef === 'string') {\n ref = this.firestore.doc(pathOrRef) as firebase.firestore.DocumentReference<T>;\n } else {\n ref = pathOrRef;\n }\n const refInZone = this.ngZone.run(() => ref);\n return new AngularFirestoreDocument<T>(refInZone, this);\n }\n\n /**\n * Returns a generated Firestore Document Id.\n */\n createId() {\n return this.firestore.collection('_').doc().id;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFirestore, ENABLE_PERSISTENCE, PERSISTENCE_SETTINGS } from './firestore';\nimport { PersistenceSettings } from './interfaces';\n\n@NgModule({\n providers: [ AngularFirestore ]\n})\nexport class AngularFirestoreModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'fst-compat');\n }\n /**\n * Attempt to enable persistent storage, if possible\n */\n static enablePersistence(persistenceSettings?: PersistenceSettings): ModuleWithProviders<AngularFirestoreModule> {\n return {\n ngModule: AngularFirestoreModule,\n providers: [\n { provide: ENABLE_PERSISTENCE, useValue: true },\n { provide: PERSISTENCE_SETTINGS, useValue: persistenceSettings },\n ]\n };\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,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, EnvironmentInjector, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
3
3
|
import { pendingUntilEvent } from '@angular/core/rxjs-interop';
|
|
4
4
|
import * as i1 from '@angular/fire';
|
|
5
5
|
import { VERSION } from '@angular/fire';
|
|
@@ -98,6 +98,7 @@ class AngularFireRemoteConfig {
|
|
|
98
98
|
numbers;
|
|
99
99
|
booleans;
|
|
100
100
|
strings;
|
|
101
|
+
injector = inject(EnvironmentInjector);
|
|
101
102
|
constructor(options, name, settings, defaultConfig, zone, schedulers,
|
|
102
103
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/ban-types
|
|
103
104
|
platformId) {
|
|
@@ -125,7 +126,7 @@ class AngularFireRemoteConfig {
|
|
|
125
126
|
const fresh$ = loadedRemoteConfig$.pipe(switchMap(rc => zone.runOutsideAngular(() => rc.fetchAndActivate()
|
|
126
127
|
.then(() => rc.ensureInitialized())
|
|
127
128
|
.then(() => rc.getAll()))), filterOutDefaults);
|
|
128
|
-
this.parameters = concat(default$, existing$, fresh$).pipe(scanToParametersArray(remoteConfig$), pendingUntilEvent(), shareReplay({ bufferSize: 1, refCount: true }));
|
|
129
|
+
this.parameters = concat(default$, existing$, fresh$).pipe(scanToParametersArray(remoteConfig$), pendingUntilEvent(this.injector), shareReplay({ bufferSize: 1, refCount: true }));
|
|
129
130
|
this.changes = this.parameters.pipe(switchMap(params => of(...params)), groupBy(param => param.key), mergeMap(group => group.pipe(distinctUntilChanged())));
|
|
130
131
|
this.strings = proxyAll(this.parameters, 'strings');
|
|
131
132
|
this.booleans = proxyAll(this.parameters, 'booleans');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-fire-compat-remote-config.mjs","sources":["../../../src/compat/remote-config/base.ts","../../../src/compat/remote-config/remote-config.ts","../../../src/compat/remote-config/remote-config.module.ts","../../../src/compat/remote-config/angular-fire-compat-remote-config.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/remote-config, so Proxy can work with proxy-polyfill in Internet Explorer\nexport const proxyPolyfillCompat = {\n app: null,\n settings: null,\n defaultConfig: null,\n fetchTimeMillis: null,\n lastFetchStatus: null,\n activate: null,\n ensureInitialized: null,\n fetch: null,\n fetchAndActivate: null,\n getAll: null,\n getBoolean: null,\n getNumber: null,\n getString: null,\n getValue: null,\n setLogLevel: null,\n};\n","import { Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { ɵPromiseProxy, ɵapplyMixins, ɵlazySDKProxy } from '@angular/fire/compat';\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';\nimport { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { isSupported } from 'firebase/remote-config';\nimport { EMPTY, MonoTypeOperatorFunction, Observable, OperatorFunction, concat, of, pipe } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n groupBy,\n map,\n mergeMap,\n observeOn,\n scan,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from 'rxjs/operators';\nimport { proxyPolyfillCompat } from './base';\nimport { Settings } from './interfaces';\n\nexport type ConfigTemplate = Record<string, string | number | boolean>;\n\nexport const SETTINGS = new InjectionToken<Settings>('angularfire2.remoteConfig.settings');\nexport const DEFAULTS = new InjectionToken<ConfigTemplate>('angularfire2.remoteConfig.defaultConfig');\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface AngularFireRemoteConfig extends ɵPromiseProxy<firebase.remoteConfig.RemoteConfig> {\n}\n\nconst AS_TO_FN = { strings: 'asString', numbers: 'asNumber', booleans: 'asBoolean' };\nconst STATIC_VALUES = { numbers: 0, booleans: false, strings: undefined };\n\n// TODO look into the types here, I don't like the anys\nconst proxyAll = (observable: Observable<Parameter[]>, as: 'numbers' | 'booleans' | 'strings') => new Proxy(\n observable.pipe(mapToObject(as as any)), {\n get: (self, name: string) => self[name] || observable.pipe(\n map(all => all.find(p => p.key === name)),\n map(param => param ? param[AS_TO_FN[as]]() : STATIC_VALUES[as]),\n distinctUntilChanged()\n )\n }\n) as any;\n\n// TODO export as implements Partial<...> so minor doesn't break us\nexport class Value implements firebase.remoteConfig.Value {\n asBoolean() {\n return ['1', 'true', 't', 'y', 'yes', 'on'].indexOf(this._value.toLowerCase()) > -1;\n }\n\n asString() {\n return this._value;\n }\n\n asNumber() {\n return Number(this._value) || 0;\n }\n\n getSource() {\n return this._source;\n }\n\n constructor(public _source: firebase.remoteConfig.ValueSource, public _value: string) {\n }\n}\n\n// SEMVER use ConstructorParameters when we can support Typescript 3.6\nexport class Parameter extends Value {\n constructor(public key: string, public fetchTimeMillis: number, source: firebase.remoteConfig.ValueSource, value: string) {\n super(source, value);\n }\n}\n\n// If it's a Parameter array, test any, else test the individual Parameter\nconst filterTest = (fn: (param: Parameter) => boolean) => filter<Parameter | Parameter[]>(it => Array.isArray(it) ? it.some(fn) : fn(it));\n\n// Allow the user to bypass the default values and wait till they get something from the server, even if it's a cached copy;\n// if used in conjuntion with first() it will only fetch RC values from the server if they aren't cached locally\nexport const filterRemote = () => filterTest(p => p.getSource() === 'remote');\n\n// filterFresh allows the developer to effectively set up a maximum cache time\nexport const filterFresh = (howRecentInMillis: number) => filterTest(p => p.fetchTimeMillis + howRecentInMillis >= new Date().getTime());\n\n\n// I ditched loading the defaults into RC and a simple map for scan since we already have our own defaults implementation.\n// The idea here being that if they have a default that never loads from the server, they will be able to tell via fetchTimeMillis\n// on the Parameter. Also if it doesn't come from the server it won't emit again in .changes, due to the distinctUntilChanged,\n// which we can simplify to === rather than deep comparison\nconst scanToParametersArray = (\n remoteConfig: Observable<firebase.remoteConfig.RemoteConfig | undefined>\n): OperatorFunction<Record<string, firebase.remoteConfig.Value>, Parameter[]> => pipe(\n withLatestFrom(remoteConfig),\n scan((existing, [all, rc]) => {\n // SEMVER use \"new Set\" to unique once we're only targeting es6\n // at the scale we expect remote config to be at, we probably won't see a performance hit from this unoptimized uniqueness\n // implementation.\n // const allKeys = [...new Set([...existing.map(p => p.key), ...Object.keys(all)])];\n const allKeys = [...existing.map(p => p.key), ...Object.keys(all)].filter((v, i, a) => a.indexOf(v) === i);\n return allKeys.map(key => {\n const updatedValue = all[key];\n return updatedValue ? new Parameter(key, rc ? rc.fetchTimeMillis : -1, updatedValue.getSource(), updatedValue.asString())\n : existing.find(p => p.key === key);\n });\n }, [] as Parameter[])\n);\n\n\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireRemoteConfig {\n\n readonly changes: Observable<Parameter>;\n readonly parameters: Observable<Parameter[]>;\n readonly numbers: Observable<Record<string, number | undefined>> & Record<string, Observable<number>>;\n readonly booleans: Observable<Record<string, boolean | undefined>> & Record<string, Observable<boolean>>;\n readonly strings: Observable<Record<string, string | undefined>> & Record<string, Observable<string | undefined>>;\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(SETTINGS) settings: Settings | null,\n @Optional() @Inject(DEFAULTS) defaultConfig: ConfigTemplate | null,\n private zone: NgZone,\n schedulers: ɵAngularFireSchedulers,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object\n ) {\n const remoteConfig$ = of(undefined).pipe(\n observeOn(schedulers.outsideAngular),\n switchMap(() => isSupported()),\n switchMap(isSupported => isSupported ? import('firebase/compat/remote-config') : EMPTY),\n map(() => ɵfirebaseAppFactory(options, zone, name)),\n map(app => ɵcacheInstance(`${app.name}.remote-config`, 'AngularFireRemoteConfig', app.name, () => {\n const rc = app.remoteConfig();\n if (settings) {\n rc.settings = settings;\n }\n if (defaultConfig) {\n rc.defaultConfig = defaultConfig;\n }\n return rc;\n }, [settings, defaultConfig])),\n startWith<firebase.remoteConfig.RemoteConfig, undefined>(undefined),\n shareReplay({ bufferSize: 1, refCount: false })\n ) as Observable<any>;\n\n const loadedRemoteConfig$ = remoteConfig$.pipe(\n filter<firebase.remoteConfig.RemoteConfig>(rc => !!rc)\n );\n\n const default$: Observable<Record<string, firebase.remoteConfig.Value>> = of(Object.keys(defaultConfig || {}).reduce(\n (c, k) => ({ ...c, [k]: new Value('default', defaultConfig[k].toString()) }), {}\n ));\n\n // we should filter out the defaults we provided to RC, since we have our own implementation\n // that gives us a -1 for fetchTimeMillis (so filterFresh can filter them out)\n const filterOutDefaults = map<Record<string, firebase.remoteConfig.Value>, Record<string, firebase.remoteConfig.Value>>(all =>\n Object.keys(all)\n .filter(key => all[key].getSource() !== 'default')\n .reduce((acc, key) => ({ ...acc, [key]: all[key] }), {})\n );\n\n const existing$ = loadedRemoteConfig$.pipe(\n switchMap(rc =>\n rc.activate()\n .then(() => rc.ensureInitialized())\n .then(() => rc.getAll())\n ),\n filterOutDefaults\n );\n\n const fresh$ = loadedRemoteConfig$.pipe(\n switchMap(rc => zone.runOutsideAngular(() =>\n rc.fetchAndActivate()\n .then(() => rc.ensureInitialized())\n .then(() => rc.getAll())\n )),\n filterOutDefaults\n );\n\n this.parameters = concat(default$, existing$, fresh$).pipe(\n scanToParametersArray(remoteConfig$),\n pendingUntilEvent(),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n this.changes = this.parameters.pipe(\n switchMap(params => of(...params)),\n groupBy(param => param.key),\n mergeMap(group => group.pipe(\n distinctUntilChanged()\n ))\n );\n\n this.strings = proxyAll(this.parameters, 'strings');\n this.booleans = proxyAll(this.parameters, 'booleans');\n this.numbers = proxyAll(this.parameters, 'numbers');\n\n return ɵlazySDKProxy(this, loadedRemoteConfig$, zone);\n }\n\n}\n\n\nexport const budget = <T>(interval: number): MonoTypeOperatorFunction<T> => (source: Observable<T>) => new Observable<T>(observer => {\n let timedOut = false;\n // TODO use scheduler task rather than settimeout\n const timeout = setTimeout(() => {\n observer.complete();\n timedOut = true;\n }, interval);\n return source.subscribe({\n next(val) {\n if (!timedOut) {\n observer.next(val);\n }\n },\n error(err) {\n if (!timedOut) {\n clearTimeout(timeout);\n observer.error(err);\n }\n },\n complete() {\n if (!timedOut) {\n clearTimeout(timeout);\n observer.complete();\n }\n }\n });\n});\n\nconst typedMethod = (it: any) => {\n switch (typeof it) {\n case 'string':\n return 'asString';\n case 'boolean':\n return 'asBoolean';\n case 'number':\n return 'asNumber';\n default:\n return 'asString';\n }\n};\n\n\nexport function scanToObject(): OperatorFunction<Parameter, Record<string, string | undefined>>;\nexport function scanToObject(to: 'numbers'): OperatorFunction<Parameter, Record<string, number | undefined>>;\nexport function scanToObject(to: 'booleans'): OperatorFunction<Parameter, Record<string, boolean | undefined>>;\n// eslint-disable-next-line @typescript-eslint/unified-signatures\nexport function scanToObject(to: 'strings'): OperatorFunction<Parameter, Record<string, string | undefined>>;\nexport function scanToObject<T extends ConfigTemplate>(template: T): OperatorFunction<Parameter, T & Record<string, string | undefined>>;\nexport function scanToObject<T extends ConfigTemplate>(to: 'numbers' | 'booleans' | 'strings' | T = 'strings') {\n return pipe(\n // TODO cleanup\n scan(\n (c, p: Parameter) => ({\n ...c, [p.key]: typeof to === 'object' ?\n p[typedMethod(to[p.key])]() :\n p[AS_TO_FN[to]]()\n }),\n typeof to === 'object' ?\n to as T & Record<string, string | undefined> :\n {} as Record<string, number | boolean | string>\n ),\n debounceTime(1),\n budget(10),\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))\n );\n}\n\nexport function mapToObject(): OperatorFunction<Parameter[], Record<string, string | undefined>>;\nexport function mapToObject(to: 'numbers'): OperatorFunction<Parameter[], Record<string, number | undefined>>;\nexport function mapToObject(to: 'booleans'): OperatorFunction<Parameter[], Record<string, boolean | undefined>>;\n// eslint-disable-next-line @typescript-eslint/unified-signatures\nexport function mapToObject(to: 'strings'): OperatorFunction<Parameter[], Record<string, string | undefined>>;\nexport function mapToObject<T extends ConfigTemplate>(template: T):\n OperatorFunction<Parameter[], T & Record<string, string | undefined>>;\nexport function mapToObject<T extends ConfigTemplate>(to: 'numbers' | 'booleans' | 'strings' | T = 'strings') {\n return pipe(\n // TODO this is getting a little long, cleanup\n map((params: Parameter[]) => params.reduce(\n (c, p) => ({\n ...c, [p.key]: typeof to === 'object' ?\n p[typedMethod(to[p.key])]() :\n p[AS_TO_FN[to]]()\n }),\n typeof to === 'object' ?\n to as T & Record<string, string | undefined> :\n {} as Record<string, number | boolean | string>\n )),\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))\n );\n}\n\nɵapplyMixins(AngularFireRemoteConfig, [proxyPolyfillCompat]);\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireRemoteConfig } from './remote-config';\n\n@NgModule({\n providers: [ AngularFireRemoteConfig ]\n})\nexport class AngularFireRemoteConfigModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'rc-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵfirebaseAppFactory","ɵcacheInstance","ɵlazySDKProxy","ɵapplyMixins"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-fire-compat-remote-config.mjs","sources":["../../../src/compat/remote-config/base.ts","../../../src/compat/remote-config/remote-config.ts","../../../src/compat/remote-config/remote-config.module.ts","../../../src/compat/remote-config/angular-fire-compat-remote-config.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/remote-config, so Proxy can work with proxy-polyfill in Internet Explorer\nexport const proxyPolyfillCompat = {\n app: null,\n settings: null,\n defaultConfig: null,\n fetchTimeMillis: null,\n lastFetchStatus: null,\n activate: null,\n ensureInitialized: null,\n fetch: null,\n fetchAndActivate: null,\n getAll: null,\n getBoolean: null,\n getNumber: null,\n getString: null,\n getValue: null,\n setLogLevel: null,\n};\n","import { EnvironmentInjector, Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID, inject } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { ɵPromiseProxy, ɵapplyMixins, ɵlazySDKProxy } from '@angular/fire/compat';\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';\nimport { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { isSupported } from 'firebase/remote-config';\nimport { EMPTY, MonoTypeOperatorFunction, Observable, OperatorFunction, concat, of, pipe } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n groupBy,\n map,\n mergeMap,\n observeOn,\n scan,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from 'rxjs/operators';\nimport { proxyPolyfillCompat } from './base';\nimport { Settings } from './interfaces';\n\nexport type ConfigTemplate = Record<string, string | number | boolean>;\n\nexport const SETTINGS = new InjectionToken<Settings>('angularfire2.remoteConfig.settings');\nexport const DEFAULTS = new InjectionToken<ConfigTemplate>('angularfire2.remoteConfig.defaultConfig');\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface AngularFireRemoteConfig extends ɵPromiseProxy<firebase.remoteConfig.RemoteConfig> {\n}\n\nconst AS_TO_FN = { strings: 'asString', numbers: 'asNumber', booleans: 'asBoolean' };\nconst STATIC_VALUES = { numbers: 0, booleans: false, strings: undefined };\n\n// TODO look into the types here, I don't like the anys\nconst proxyAll = (observable: Observable<Parameter[]>, as: 'numbers' | 'booleans' | 'strings') => new Proxy(\n observable.pipe(mapToObject(as as any)), {\n get: (self, name: string) => self[name] || observable.pipe(\n map(all => all.find(p => p.key === name)),\n map(param => param ? param[AS_TO_FN[as]]() : STATIC_VALUES[as]),\n distinctUntilChanged()\n )\n }\n) as any;\n\n// TODO export as implements Partial<...> so minor doesn't break us\nexport class Value implements firebase.remoteConfig.Value {\n asBoolean() {\n return ['1', 'true', 't', 'y', 'yes', 'on'].indexOf(this._value.toLowerCase()) > -1;\n }\n\n asString() {\n return this._value;\n }\n\n asNumber() {\n return Number(this._value) || 0;\n }\n\n getSource() {\n return this._source;\n }\n\n constructor(public _source: firebase.remoteConfig.ValueSource, public _value: string) {\n }\n}\n\n// SEMVER use ConstructorParameters when we can support Typescript 3.6\nexport class Parameter extends Value {\n constructor(public key: string, public fetchTimeMillis: number, source: firebase.remoteConfig.ValueSource, value: string) {\n super(source, value);\n }\n}\n\n// If it's a Parameter array, test any, else test the individual Parameter\nconst filterTest = (fn: (param: Parameter) => boolean) => filter<Parameter | Parameter[]>(it => Array.isArray(it) ? it.some(fn) : fn(it));\n\n// Allow the user to bypass the default values and wait till they get something from the server, even if it's a cached copy;\n// if used in conjuntion with first() it will only fetch RC values from the server if they aren't cached locally\nexport const filterRemote = () => filterTest(p => p.getSource() === 'remote');\n\n// filterFresh allows the developer to effectively set up a maximum cache time\nexport const filterFresh = (howRecentInMillis: number) => filterTest(p => p.fetchTimeMillis + howRecentInMillis >= new Date().getTime());\n\n\n// I ditched loading the defaults into RC and a simple map for scan since we already have our own defaults implementation.\n// The idea here being that if they have a default that never loads from the server, they will be able to tell via fetchTimeMillis\n// on the Parameter. Also if it doesn't come from the server it won't emit again in .changes, due to the distinctUntilChanged,\n// which we can simplify to === rather than deep comparison\nconst scanToParametersArray = (\n remoteConfig: Observable<firebase.remoteConfig.RemoteConfig | undefined>\n): OperatorFunction<Record<string, firebase.remoteConfig.Value>, Parameter[]> => pipe(\n withLatestFrom(remoteConfig),\n scan((existing, [all, rc]) => {\n // SEMVER use \"new Set\" to unique once we're only targeting es6\n // at the scale we expect remote config to be at, we probably won't see a performance hit from this unoptimized uniqueness\n // implementation.\n // const allKeys = [...new Set([...existing.map(p => p.key), ...Object.keys(all)])];\n const allKeys = [...existing.map(p => p.key), ...Object.keys(all)].filter((v, i, a) => a.indexOf(v) === i);\n return allKeys.map(key => {\n const updatedValue = all[key];\n return updatedValue ? new Parameter(key, rc ? rc.fetchTimeMillis : -1, updatedValue.getSource(), updatedValue.asString())\n : existing.find(p => p.key === key);\n });\n }, [] as Parameter[])\n);\n\n\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireRemoteConfig {\n\n readonly changes: Observable<Parameter>;\n readonly parameters: Observable<Parameter[]>;\n readonly numbers: Observable<Record<string, number | undefined>> & Record<string, Observable<number>>;\n readonly booleans: Observable<Record<string, boolean | undefined>> & Record<string, Observable<boolean>>;\n readonly strings: Observable<Record<string, string | undefined>> & Record<string, Observable<string | undefined>>;\n\n private readonly injector = inject(EnvironmentInjector);\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(SETTINGS) settings: Settings | null,\n @Optional() @Inject(DEFAULTS) defaultConfig: ConfigTemplate | null,\n private zone: NgZone,\n schedulers: ɵAngularFireSchedulers,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object\n ) {\n const remoteConfig$ = of(undefined).pipe(\n observeOn(schedulers.outsideAngular),\n switchMap(() => isSupported()),\n switchMap(isSupported => isSupported ? import('firebase/compat/remote-config') : EMPTY),\n map(() => ɵfirebaseAppFactory(options, zone, name)),\n map(app => ɵcacheInstance(`${app.name}.remote-config`, 'AngularFireRemoteConfig', app.name, () => {\n const rc = app.remoteConfig();\n if (settings) {\n rc.settings = settings;\n }\n if (defaultConfig) {\n rc.defaultConfig = defaultConfig;\n }\n return rc;\n }, [settings, defaultConfig])),\n startWith<firebase.remoteConfig.RemoteConfig, undefined>(undefined),\n shareReplay({ bufferSize: 1, refCount: false })\n ) as Observable<any>;\n\n const loadedRemoteConfig$ = remoteConfig$.pipe(\n filter<firebase.remoteConfig.RemoteConfig>(rc => !!rc)\n );\n\n const default$: Observable<Record<string, firebase.remoteConfig.Value>> = of(Object.keys(defaultConfig || {}).reduce(\n (c, k) => ({ ...c, [k]: new Value('default', defaultConfig[k].toString()) }), {}\n ));\n\n // we should filter out the defaults we provided to RC, since we have our own implementation\n // that gives us a -1 for fetchTimeMillis (so filterFresh can filter them out)\n const filterOutDefaults = map<Record<string, firebase.remoteConfig.Value>, Record<string, firebase.remoteConfig.Value>>(all =>\n Object.keys(all)\n .filter(key => all[key].getSource() !== 'default')\n .reduce((acc, key) => ({ ...acc, [key]: all[key] }), {})\n );\n\n const existing$ = loadedRemoteConfig$.pipe(\n switchMap(rc =>\n rc.activate()\n .then(() => rc.ensureInitialized())\n .then(() => rc.getAll())\n ),\n filterOutDefaults\n );\n\n const fresh$ = loadedRemoteConfig$.pipe(\n switchMap(rc => zone.runOutsideAngular(() =>\n rc.fetchAndActivate()\n .then(() => rc.ensureInitialized())\n .then(() => rc.getAll())\n )),\n filterOutDefaults\n );\n\n this.parameters = concat(default$, existing$, fresh$).pipe(\n scanToParametersArray(remoteConfig$),\n pendingUntilEvent(this.injector),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n this.changes = this.parameters.pipe(\n switchMap(params => of(...params)),\n groupBy(param => param.key),\n mergeMap(group => group.pipe(\n distinctUntilChanged()\n ))\n );\n\n this.strings = proxyAll(this.parameters, 'strings');\n this.booleans = proxyAll(this.parameters, 'booleans');\n this.numbers = proxyAll(this.parameters, 'numbers');\n\n return ɵlazySDKProxy(this, loadedRemoteConfig$, zone);\n }\n\n}\n\n\nexport const budget = <T>(interval: number): MonoTypeOperatorFunction<T> => (source: Observable<T>) => new Observable<T>(observer => {\n let timedOut = false;\n // TODO use scheduler task rather than settimeout\n const timeout = setTimeout(() => {\n observer.complete();\n timedOut = true;\n }, interval);\n return source.subscribe({\n next(val) {\n if (!timedOut) {\n observer.next(val);\n }\n },\n error(err) {\n if (!timedOut) {\n clearTimeout(timeout);\n observer.error(err);\n }\n },\n complete() {\n if (!timedOut) {\n clearTimeout(timeout);\n observer.complete();\n }\n }\n });\n});\n\nconst typedMethod = (it: any) => {\n switch (typeof it) {\n case 'string':\n return 'asString';\n case 'boolean':\n return 'asBoolean';\n case 'number':\n return 'asNumber';\n default:\n return 'asString';\n }\n};\n\n\nexport function scanToObject(): OperatorFunction<Parameter, Record<string, string | undefined>>;\nexport function scanToObject(to: 'numbers'): OperatorFunction<Parameter, Record<string, number | undefined>>;\nexport function scanToObject(to: 'booleans'): OperatorFunction<Parameter, Record<string, boolean | undefined>>;\n// eslint-disable-next-line @typescript-eslint/unified-signatures\nexport function scanToObject(to: 'strings'): OperatorFunction<Parameter, Record<string, string | undefined>>;\nexport function scanToObject<T extends ConfigTemplate>(template: T): OperatorFunction<Parameter, T & Record<string, string | undefined>>;\nexport function scanToObject<T extends ConfigTemplate>(to: 'numbers' | 'booleans' | 'strings' | T = 'strings') {\n return pipe(\n // TODO cleanup\n scan(\n (c, p: Parameter) => ({\n ...c, [p.key]: typeof to === 'object' ?\n p[typedMethod(to[p.key])]() :\n p[AS_TO_FN[to]]()\n }),\n typeof to === 'object' ?\n to as T & Record<string, string | undefined> :\n {} as Record<string, number | boolean | string>\n ),\n debounceTime(1),\n budget(10),\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))\n );\n}\n\nexport function mapToObject(): OperatorFunction<Parameter[], Record<string, string | undefined>>;\nexport function mapToObject(to: 'numbers'): OperatorFunction<Parameter[], Record<string, number | undefined>>;\nexport function mapToObject(to: 'booleans'): OperatorFunction<Parameter[], Record<string, boolean | undefined>>;\n// eslint-disable-next-line @typescript-eslint/unified-signatures\nexport function mapToObject(to: 'strings'): OperatorFunction<Parameter[], Record<string, string | undefined>>;\nexport function mapToObject<T extends ConfigTemplate>(template: T):\n OperatorFunction<Parameter[], T & Record<string, string | undefined>>;\nexport function mapToObject<T extends ConfigTemplate>(to: 'numbers' | 'booleans' | 'strings' | T = 'strings') {\n return pipe(\n // TODO this is getting a little long, cleanup\n map((params: Parameter[]) => params.reduce(\n (c, p) => ({\n ...c, [p.key]: typeof to === 'object' ?\n p[typedMethod(to[p.key])]() :\n p[AS_TO_FN[to]]()\n }),\n typeof to === 'object' ?\n to as T & Record<string, string | undefined> :\n {} as Record<string, number | boolean | string>\n )),\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))\n );\n}\n\nɵapplyMixins(AngularFireRemoteConfig, [proxyPolyfillCompat]);\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireRemoteConfig } from './remote-config';\n\n@NgModule({\n providers: [ AngularFireRemoteConfig ]\n})\nexport class AngularFireRemoteConfigModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'rc-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵfirebaseAppFactory","ɵcacheInstance","ɵlazySDKProxy","ɵapplyMixins"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { observeOutsideAngular, VERSION } from '@angular/fire';
|
|
|
4
4
|
import { Observable, of, from } from 'rxjs';
|
|
5
5
|
import { debounceTime, map, switchMap, tap } from 'rxjs/operators';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
|
-
import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, makeStateKey, Pipe, NgModule } from '@angular/core';
|
|
7
|
+
import { InjectionToken, inject, EnvironmentInjector, PLATFORM_ID, Injectable, Inject, Optional, makeStateKey, Pipe, NgModule } from '@angular/core';
|
|
8
8
|
import * as i2 from '@angular/fire/app-check';
|
|
9
9
|
import { ɵfirebaseAppFactory as _firebaseAppFactory, ɵcacheInstance as _cacheInstance, FIREBASE_OPTIONS, FIREBASE_APP_NAME } from '@angular/fire/compat';
|
|
10
10
|
import 'firebase/compat/storage';
|
|
@@ -68,12 +68,12 @@ function createUploadTask(task) {
|
|
|
68
68
|
* Create an AngularFire wrapped Storage Reference. This object
|
|
69
69
|
* creates observable methods from promise based methods.
|
|
70
70
|
*/
|
|
71
|
-
function createStorageRef(ref) {
|
|
71
|
+
function createStorageRef(ref, injector) {
|
|
72
72
|
return {
|
|
73
|
-
getDownloadURL: () => of(undefined).pipe(observeOutsideAngular, switchMap(() => ref.getDownloadURL()), pendingUntilEvent()),
|
|
74
|
-
getMetadata: () => of(undefined).pipe(observeOutsideAngular, switchMap(() => ref.getMetadata()), pendingUntilEvent()),
|
|
73
|
+
getDownloadURL: () => of(undefined).pipe(observeOutsideAngular, switchMap(() => ref.getDownloadURL()), pendingUntilEvent(injector)),
|
|
74
|
+
getMetadata: () => of(undefined).pipe(observeOutsideAngular, switchMap(() => ref.getMetadata()), pendingUntilEvent(injector)),
|
|
75
75
|
delete: () => from(ref.delete()),
|
|
76
|
-
child: (path) => createStorageRef(ref.child(path)),
|
|
76
|
+
child: (path) => createStorageRef(ref.child(path), injector),
|
|
77
77
|
updateMetadata: (meta) => from(ref.updateMetadata(meta)),
|
|
78
78
|
put: (data, metadata) => {
|
|
79
79
|
const task = ref.put(data, metadata);
|
|
@@ -101,6 +101,7 @@ const USE_EMULATOR = new InjectionToken('angularfire2.storage.use-emulator');
|
|
|
101
101
|
*/
|
|
102
102
|
class AngularFireStorage {
|
|
103
103
|
storage;
|
|
104
|
+
injector = inject(EnvironmentInjector);
|
|
104
105
|
constructor(options, name, storageBucket,
|
|
105
106
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
106
107
|
platformId, zone, schedulers, maxUploadRetryTime, maxOperationRetryTime, _useEmulator, _appCheckInstances) {
|
|
@@ -121,14 +122,14 @@ class AngularFireStorage {
|
|
|
121
122
|
}, [maxUploadRetryTime, maxOperationRetryTime]);
|
|
122
123
|
}
|
|
123
124
|
ref(path) {
|
|
124
|
-
return createStorageRef(this.storage.ref(path));
|
|
125
|
+
return createStorageRef(this.storage.ref(path), this.injector);
|
|
125
126
|
}
|
|
126
127
|
refFromURL(path) {
|
|
127
|
-
return createStorageRef(this.storage.refFromURL(path));
|
|
128
|
+
return createStorageRef(this.storage.refFromURL(path), this.injector);
|
|
128
129
|
}
|
|
129
130
|
upload(path, data, metadata) {
|
|
130
131
|
const storageRef = this.storage.ref(path);
|
|
131
|
-
const ref = createStorageRef(storageRef);
|
|
132
|
+
const ref = createStorageRef(storageRef, this.injector);
|
|
132
133
|
return ref.put(data, metadata);
|
|
133
134
|
}
|
|
134
135
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: AngularFireStorage, deps: [{ token: FIREBASE_OPTIONS }, { token: FIREBASE_APP_NAME, optional: true }, { token: BUCKET, optional: true }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i1.ɵAngularFireSchedulers }, { token: MAX_UPLOAD_RETRY_TIME, optional: true }, { token: MAX_OPERATION_RETRY_TIME, optional: true }, { token: USE_EMULATOR, optional: true }, { token: i2.AppCheckInstances, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-fire-compat-storage.mjs","sources":["../../../src/compat/storage/observable/fromTask.ts","../../../src/compat/storage/task.ts","../../../src/compat/storage/ref.ts","../../../src/compat/storage/storage.ts","../../../src/compat/storage/pipes/storageUrl.pipe.ts","../../../src/compat/storage/storage.module.ts","../../../src/compat/storage/angular-fire-compat-storage.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { UploadTask, UploadTaskSnapshot } from '../interfaces';\n\n// need to import, else the types become import('firebase/compat/app').default.storage.UploadTask\n// and it no longer works w/Firebase v7\n\n// Things aren't working great, I'm having to put in a lot of work-arounds for what\n// appear to be Firebase JS SDK bugs https://github.com/firebase/firebase-js-sdk/issues/4158\nexport function fromTask(task: UploadTask) {\n return new Observable<UploadTaskSnapshot>(subscriber => {\n const progress = (snap: UploadTaskSnapshot) => subscriber.next(snap);\n const error = e => subscriber.error(e);\n const complete = () => subscriber.complete();\n // emit the current snapshot, so they don't have to wait for state_changes\n // to fire next... this is stale if the task is no longer running :(\n progress(task.snapshot);\n const unsub = task.on('state_changed', progress);\n // it turns out that neither task snapshot nor 'state_changed' fire the last\n // snapshot before completion, the one with status 'success\" and 100% progress\n // so let's use the promise form of the task for that\n task.then(snapshot => {\n progress(snapshot);\n complete();\n }, e => {\n // TODO investigate, again this is stale, we never fire a canceled or error it seems\n progress(task.snapshot);\n error(e);\n });\n // on's type if Function, rather than () => void, need to wrap\n return function unsubscribe() {\n unsub();\n };\n }).pipe(\n // deal with sync emissions from first emitting `task.snapshot`, this makes sure\n // that if the task is already finished we don't emit the old running state\n debounceTime(0)\n );\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { UploadTask, UploadTaskSnapshot } from './interfaces';\nimport { fromTask } from './observable/fromTask';\n\nexport interface AngularFireUploadTask {\n task: UploadTask;\n snapshotChanges(): Observable<UploadTaskSnapshot | undefined>;\n percentageChanges(): Observable<number | undefined>;\n pause(): boolean;\n cancel(): boolean;\n resume(): boolean;\n then(\n onFulfilled?: ((a: UploadTaskSnapshot) => any) | null,\n onRejected?: ((a: Error) => any) | null\n ): Promise<any>;\n catch(onRejected: (a: Error) => any): Promise<any>;\n}\n\n/**\n * Create an AngularFireUploadTask from a regular UploadTask from the Storage SDK.\n * This method creates an observable of the upload and returns on object that provides\n * multiple methods for controlling and monitoring the file upload.\n */\nexport function createUploadTask(task: UploadTask): AngularFireUploadTask {\n const inner$ = fromTask(task);\n return {\n task,\n then: task.then.bind(task),\n catch: task.catch.bind(task),\n pause: task.pause.bind(task),\n cancel: task.cancel.bind(task),\n resume: task.resume.bind(task),\n snapshotChanges: () => inner$,\n percentageChanges: () => inner$.pipe(\n map(s => s.bytesTransferred / s.totalBytes * 100)\n )\n };\n}\n","import { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport { observeOutsideAngular } from '@angular/fire';\nimport { Observable, from, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ListOptions, ListResult, Reference, SettableMetadata, StringFormat, UploadMetadata } from './interfaces';\nimport { AngularFireUploadTask, createUploadTask } from './task';\n\nexport interface AngularFireStorageReference {\n getDownloadURL(): Observable<any>;\n getMetadata(): Observable<any>;\n delete(): Observable<any>;\n child(path: string): AngularFireStorageReference;\n updateMetadata(meta: SettableMetadata): Observable<any>;\n put(data: any, metadata?: UploadMetadata | undefined): AngularFireUploadTask;\n putString(data: string, format?: string | undefined, metadata?: UploadMetadata | undefined): AngularFireUploadTask;\n list(options?: ListOptions): Observable<ListResult>;\n listAll(): Observable<ListResult>;\n}\n\n/**\n * Create an AngularFire wrapped Storage Reference. This object\n * creates observable methods from promise based methods.\n */\nexport function createStorageRef(\n ref: Reference\n): AngularFireStorageReference {\n return {\n getDownloadURL: () => of(undefined).pipe(\n observeOutsideAngular,\n switchMap(() => ref.getDownloadURL()),\n pendingUntilEvent()\n ),\n getMetadata: () => of(undefined).pipe(\n observeOutsideAngular,\n switchMap(() => ref.getMetadata()),\n pendingUntilEvent()\n ),\n delete: () => from(ref.delete()),\n child: (path: string) => createStorageRef(ref.child(path)),\n updateMetadata: (meta: SettableMetadata) => from(ref.updateMetadata(meta)),\n put: (data: any, metadata?: UploadMetadata) => {\n const task = ref.put(data, metadata);\n return createUploadTask(task);\n },\n putString: (data: string, format?: StringFormat, metadata?: UploadMetadata) => {\n const task = ref.putString(data, format, metadata);\n return createUploadTask(task);\n },\n list: (options?: ListOptions) => from(ref.list(options)),\n listAll: () => from(ref.listAll())\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 { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { UploadMetadata } from './interfaces';\nimport { createStorageRef } from './ref';\nimport 'firebase/compat/storage';\n\nexport const BUCKET = new InjectionToken<string>('angularfire2.storageBucket');\nexport const MAX_UPLOAD_RETRY_TIME = new InjectionToken<number>('angularfire2.storage.maxUploadRetryTime');\nexport const MAX_OPERATION_RETRY_TIME = new InjectionToken<number>('angularfire2.storage.maxOperationRetryTime');\n\ntype UseEmulatorArguments = Parameters<firebase.storage.Storage['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.storage.use-emulator');\n\n/**\n * AngularFireStorage Service\n *\n * This service is the main entry point for this feature module. It provides\n * an API for uploading and downloading binary files from Cloud Storage for\n * Firebase.\n */\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireStorage {\n public readonly storage: firebase.storage.Storage;\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(BUCKET) storageBucket: string | null,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n zone: NgZone,\n schedulers: ɵAngularFireSchedulers,\n @Optional() @Inject(MAX_UPLOAD_RETRY_TIME) maxUploadRetryTime: any,\n @Optional() @Inject(MAX_OPERATION_RETRY_TIME) maxOperationRetryTime: any,\n @Optional() @Inject(USE_EMULATOR) _useEmulator: any,\n @Optional() _appCheckInstances: AppCheckInstances,\n ) {\n const app = ɵfirebaseAppFactory(options, zone, name);\n this.storage = ɵcacheInstance(`${app.name}.storage.${storageBucket}`, 'AngularFireStorage', app.name, () => {\n const storage = zone.runOutsideAngular(() => app.storage(storageBucket || undefined));\n const useEmulator = _useEmulator as UseEmulatorArguments|null;\n if (useEmulator) {\n storage.useEmulator(...useEmulator);\n }\n if (maxUploadRetryTime) {\n storage.setMaxUploadRetryTime(maxUploadRetryTime);\n }\n if (maxOperationRetryTime) {\n storage.setMaxOperationRetryTime(maxOperationRetryTime);\n }\n return storage;\n }, [maxUploadRetryTime, maxOperationRetryTime]);\n }\n\n ref(path: string) {\n return createStorageRef(this.storage.ref(path));\n }\n\n refFromURL(path: string) {\n return createStorageRef(this.storage.refFromURL(path));\n }\n\n upload(path: string, data: any, metadata?: UploadMetadata) {\n const storageRef = this.storage.ref(path);\n const ref = createStorageRef(storageRef);\n return ref.put(data, metadata);\n }\n\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, NgModule, OnDestroy, Optional, Pipe, PipeTransform, TransferState, makeStateKey } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { AngularFireStorage } from '../storage';\n\n/** to be used with in combination with | async */\n@Pipe({\n name: 'getDownloadURL',\n pure: false,\n})\nexport class GetDownloadURLPipe implements PipeTransform, OnDestroy {\n\n private asyncPipe: AsyncPipe;\n private path: string;\n private downloadUrl$: Observable<any>;\n\n constructor(\n private storage: AngularFireStorage,\n cdr: ChangeDetectorRef,\n @Optional() private state: TransferState\n ) {\n this.asyncPipe = new AsyncPipe(cdr);\n }\n\n transform(path: string) {\n if (path !== this.path) {\n this.path = path;\n const key = makeStateKey<string>(`|getDownloadURL|${path}`);\n const existing = this.state?.get(key, undefined);\n this.downloadUrl$ = existing ? of(existing) : this.storage.ref(path).getDownloadURL().pipe(\n tap(it => this.state?.set(key, it))\n );\n }\n return this.asyncPipe.transform(this.downloadUrl$);\n }\n\n ngOnDestroy() {\n this.asyncPipe.ngOnDestroy();\n }\n\n}\n\n@NgModule({\n imports: [ GetDownloadURLPipe ],\n exports: [ GetDownloadURLPipe ],\n})\nexport class GetDownloadURLPipeModule {}\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { GetDownloadURLPipeModule } from './pipes/storageUrl.pipe';\nimport { AngularFireStorage } from './storage';\n\n@NgModule({\n imports: [ GetDownloadURLPipeModule ],\n exports: [ GetDownloadURLPipeModule ],\n providers: [ AngularFireStorage ]\n})\nexport class AngularFireStorageModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'gcs-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵfirebaseAppFactory","ɵcacheInstance","i1.AngularFireStorage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-fire-compat-storage.mjs","sources":["../../../src/compat/storage/observable/fromTask.ts","../../../src/compat/storage/task.ts","../../../src/compat/storage/ref.ts","../../../src/compat/storage/storage.ts","../../../src/compat/storage/pipes/storageUrl.pipe.ts","../../../src/compat/storage/storage.module.ts","../../../src/compat/storage/angular-fire-compat-storage.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { UploadTask, UploadTaskSnapshot } from '../interfaces';\n\n// need to import, else the types become import('firebase/compat/app').default.storage.UploadTask\n// and it no longer works w/Firebase v7\n\n// Things aren't working great, I'm having to put in a lot of work-arounds for what\n// appear to be Firebase JS SDK bugs https://github.com/firebase/firebase-js-sdk/issues/4158\nexport function fromTask(task: UploadTask) {\n return new Observable<UploadTaskSnapshot>(subscriber => {\n const progress = (snap: UploadTaskSnapshot) => subscriber.next(snap);\n const error = e => subscriber.error(e);\n const complete = () => subscriber.complete();\n // emit the current snapshot, so they don't have to wait for state_changes\n // to fire next... this is stale if the task is no longer running :(\n progress(task.snapshot);\n const unsub = task.on('state_changed', progress);\n // it turns out that neither task snapshot nor 'state_changed' fire the last\n // snapshot before completion, the one with status 'success\" and 100% progress\n // so let's use the promise form of the task for that\n task.then(snapshot => {\n progress(snapshot);\n complete();\n }, e => {\n // TODO investigate, again this is stale, we never fire a canceled or error it seems\n progress(task.snapshot);\n error(e);\n });\n // on's type if Function, rather than () => void, need to wrap\n return function unsubscribe() {\n unsub();\n };\n }).pipe(\n // deal with sync emissions from first emitting `task.snapshot`, this makes sure\n // that if the task is already finished we don't emit the old running state\n debounceTime(0)\n );\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { UploadTask, UploadTaskSnapshot } from './interfaces';\nimport { fromTask } from './observable/fromTask';\n\nexport interface AngularFireUploadTask {\n task: UploadTask;\n snapshotChanges(): Observable<UploadTaskSnapshot | undefined>;\n percentageChanges(): Observable<number | undefined>;\n pause(): boolean;\n cancel(): boolean;\n resume(): boolean;\n then(\n onFulfilled?: ((a: UploadTaskSnapshot) => any) | null,\n onRejected?: ((a: Error) => any) | null\n ): Promise<any>;\n catch(onRejected: (a: Error) => any): Promise<any>;\n}\n\n/**\n * Create an AngularFireUploadTask from a regular UploadTask from the Storage SDK.\n * This method creates an observable of the upload and returns on object that provides\n * multiple methods for controlling and monitoring the file upload.\n */\nexport function createUploadTask(task: UploadTask): AngularFireUploadTask {\n const inner$ = fromTask(task);\n return {\n task,\n then: task.then.bind(task),\n catch: task.catch.bind(task),\n pause: task.pause.bind(task),\n cancel: task.cancel.bind(task),\n resume: task.resume.bind(task),\n snapshotChanges: () => inner$,\n percentageChanges: () => inner$.pipe(\n map(s => s.bytesTransferred / s.totalBytes * 100)\n )\n };\n}\n","import { Injector } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport { observeOutsideAngular } from '@angular/fire';\nimport { Observable, from, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ListOptions, ListResult, Reference, SettableMetadata, StringFormat, UploadMetadata } from './interfaces';\nimport { AngularFireUploadTask, createUploadTask } from './task';\n\nexport interface AngularFireStorageReference {\n getDownloadURL(): Observable<any>;\n getMetadata(): Observable<any>;\n delete(): Observable<any>;\n child(path: string): AngularFireStorageReference;\n updateMetadata(meta: SettableMetadata): Observable<any>;\n put(data: any, metadata?: UploadMetadata | undefined): AngularFireUploadTask;\n putString(data: string, format?: string | undefined, metadata?: UploadMetadata | undefined): AngularFireUploadTask;\n list(options?: ListOptions): Observable<ListResult>;\n listAll(): Observable<ListResult>;\n}\n\n/**\n * Create an AngularFire wrapped Storage Reference. This object\n * creates observable methods from promise based methods.\n */\nexport function createStorageRef(\n ref: Reference,\n injector?: Injector\n): AngularFireStorageReference {\n return {\n getDownloadURL: () => of(undefined).pipe(\n observeOutsideAngular,\n switchMap(() => ref.getDownloadURL()),\n pendingUntilEvent(injector)\n ),\n getMetadata: () => of(undefined).pipe(\n observeOutsideAngular,\n switchMap(() => ref.getMetadata()),\n pendingUntilEvent(injector)\n ),\n delete: () => from(ref.delete()),\n child: (path: string) => createStorageRef(ref.child(path), injector),\n updateMetadata: (meta: SettableMetadata) => from(ref.updateMetadata(meta)),\n put: (data: any, metadata?: UploadMetadata) => {\n const task = ref.put(data, metadata);\n return createUploadTask(task);\n },\n putString: (data: string, format?: StringFormat, metadata?: UploadMetadata) => {\n const task = ref.putString(data, format, metadata);\n return createUploadTask(task);\n },\n list: (options?: ListOptions) => from(ref.list(options)),\n listAll: () => from(ref.listAll())\n };\n}\n","import { EnvironmentInjector, 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 { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { UploadMetadata } from './interfaces';\nimport { createStorageRef } from './ref';\nimport 'firebase/compat/storage';\n\nexport const BUCKET = new InjectionToken<string>('angularfire2.storageBucket');\nexport const MAX_UPLOAD_RETRY_TIME = new InjectionToken<number>('angularfire2.storage.maxUploadRetryTime');\nexport const MAX_OPERATION_RETRY_TIME = new InjectionToken<number>('angularfire2.storage.maxOperationRetryTime');\n\ntype UseEmulatorArguments = Parameters<firebase.storage.Storage['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.storage.use-emulator');\n\n/**\n * AngularFireStorage Service\n *\n * This service is the main entry point for this feature module. It provides\n * an API for uploading and downloading binary files from Cloud Storage for\n * Firebase.\n */\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireStorage {\n public readonly storage: firebase.storage.Storage;\n private readonly injector = inject(EnvironmentInjector);\n\n constructor(\n @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n @Optional() @Inject(BUCKET) storageBucket: string | null,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n zone: NgZone,\n schedulers: ɵAngularFireSchedulers,\n @Optional() @Inject(MAX_UPLOAD_RETRY_TIME) maxUploadRetryTime: any,\n @Optional() @Inject(MAX_OPERATION_RETRY_TIME) maxOperationRetryTime: any,\n @Optional() @Inject(USE_EMULATOR) _useEmulator: any,\n @Optional() _appCheckInstances: AppCheckInstances,\n ) {\n const app = ɵfirebaseAppFactory(options, zone, name);\n this.storage = ɵcacheInstance(`${app.name}.storage.${storageBucket}`, 'AngularFireStorage', app.name, () => {\n const storage = zone.runOutsideAngular(() => app.storage(storageBucket || undefined));\n const useEmulator = _useEmulator as UseEmulatorArguments|null;\n if (useEmulator) {\n storage.useEmulator(...useEmulator);\n }\n if (maxUploadRetryTime) {\n storage.setMaxUploadRetryTime(maxUploadRetryTime);\n }\n if (maxOperationRetryTime) {\n storage.setMaxOperationRetryTime(maxOperationRetryTime);\n }\n return storage;\n }, [maxUploadRetryTime, maxOperationRetryTime]);\n }\n\n ref(path: string) {\n return createStorageRef(this.storage.ref(path), this.injector);\n }\n\n refFromURL(path: string) {\n return createStorageRef(this.storage.refFromURL(path), this.injector);\n }\n\n upload(path: string, data: any, metadata?: UploadMetadata) {\n const storageRef = this.storage.ref(path);\n const ref = createStorageRef(storageRef, this.injector);\n return ref.put(data, metadata);\n }\n\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, NgModule, OnDestroy, Optional, Pipe, PipeTransform, TransferState, makeStateKey } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { AngularFireStorage } from '../storage';\n\n/** to be used with in combination with | async */\n@Pipe({\n name: 'getDownloadURL',\n pure: false,\n})\nexport class GetDownloadURLPipe implements PipeTransform, OnDestroy {\n\n private asyncPipe: AsyncPipe;\n private path: string;\n private downloadUrl$: Observable<any>;\n\n constructor(\n private storage: AngularFireStorage,\n cdr: ChangeDetectorRef,\n @Optional() private state: TransferState\n ) {\n this.asyncPipe = new AsyncPipe(cdr);\n }\n\n transform(path: string) {\n if (path !== this.path) {\n this.path = path;\n const key = makeStateKey<string>(`|getDownloadURL|${path}`);\n const existing = this.state?.get(key, undefined);\n this.downloadUrl$ = existing ? of(existing) : this.storage.ref(path).getDownloadURL().pipe(\n tap(it => this.state?.set(key, it))\n );\n }\n return this.asyncPipe.transform(this.downloadUrl$);\n }\n\n ngOnDestroy() {\n this.asyncPipe.ngOnDestroy();\n }\n\n}\n\n@NgModule({\n imports: [ GetDownloadURLPipe ],\n exports: [ GetDownloadURLPipe ],\n})\nexport class GetDownloadURLPipeModule {}\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { GetDownloadURLPipeModule } from './pipes/storageUrl.pipe';\nimport { AngularFireStorage } from './storage';\n\n@NgModule({\n imports: [ GetDownloadURLPipeModule ],\n exports: [ GetDownloadURLPipeModule ],\n providers: [ AngularFireStorage ]\n})\nexport class AngularFireStorageModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'gcs-compat');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵfirebaseAppFactory","ɵcacheInstance","i1.AngularFireStorage"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "../node_modules/ng-packagr/package.schema.json",
|
|
3
3
|
"name": "@angular/fire",
|
|
4
|
-
"version": "19.0.0-canary.
|
|
4
|
+
"version": "19.0.0-canary.e567618",
|
|
5
5
|
"description": "Angular + Firebase = ❤️",
|
|
6
6
|
"schematics": "./schematics/collection.json",
|
|
7
7
|
"builders": "./schematics/builders.json",
|
|
@@ -83,14 +83,14 @@
|
|
|
83
83
|
"types": "./compat/index.d.ts",
|
|
84
84
|
"default": "./fesm2022/angular-fire-compat.mjs"
|
|
85
85
|
},
|
|
86
|
-
"./data-connect": {
|
|
87
|
-
"types": "./data-connect/index.d.ts",
|
|
88
|
-
"default": "./fesm2022/angular-fire-data-connect.mjs"
|
|
89
|
-
},
|
|
90
86
|
"./database": {
|
|
91
87
|
"types": "./database/index.d.ts",
|
|
92
88
|
"default": "./fesm2022/angular-fire-database.mjs"
|
|
93
89
|
},
|
|
90
|
+
"./data-connect": {
|
|
91
|
+
"types": "./data-connect/index.d.ts",
|
|
92
|
+
"default": "./fesm2022/angular-fire-data-connect.mjs"
|
|
93
|
+
},
|
|
94
94
|
"./firestore": {
|
|
95
95
|
"types": "./firestore/index.d.ts",
|
|
96
96
|
"default": "./fesm2022/angular-fire-firestore.mjs"
|