Skip to content

Commit ec33419

Browse files
committed
Fix the reexport types and cleanup
1 parent 52247a6 commit ec33419

File tree

8 files changed

+58
-70
lines changed

8 files changed

+58
-70
lines changed

docs/version-7-upgrade.md

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ Intended to be run with Angular 12, AngularFire 7.0 allows you to take full advt
44

55
`ng update @angular/fire --next`
66

7+
## Breaking changes
8+
9+
* Angular 12 is required
10+
* AngularFire now only works in Ivy applications
11+
* Firebase JS SDK v9 is required
12+
* The AngularFire v6 API surface has moved from `@angular/fire/*` to `@angular/fire/compat/*` (see compatibility mode)
13+
714
## Compatibility mode
815

916
AngularFire v7.0 has a compatibility layer that supports the AngularFire v6.0 API. Just change your imports from `@angular/fire/*` to `@angular/fire/compat/*` and `firebase/*` to `firebase/compat/*`.

sample/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"@angular/common": "^12.0.0",
1818
"@angular/compiler": "^12.0.0",
1919
"@angular/core": "^12.0.0",
20-
"@angular/fire": "7.0.0-alpha.3",
20+
"@angular/fire": "../dist/packages-dist",
2121
"@angular/forms": "^12.0.0",
2222
"@angular/platform-browser": "^12.0.0",
2323
"@angular/platform-browser-dynamic": "^12.0.0",
@@ -56,4 +56,4 @@
5656
"resolutions": {
5757
"webpack": "^5.35.0"
5858
}
59-
}
59+
}

sample/src/app/app.component.ts

+12-32
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,36 @@
1-
import { ApplicationRef, Component, NgZone, Optional } from '@angular/core';
1+
import { ApplicationRef, Component, NgZone } from '@angular/core';
22
import { FirebaseApp, FirebaseApps } from '@angular/fire/app';
33
import { Auth, AuthInstances, authState } from '@angular/fire/auth';
4-
import { Firestore, FirestoreInstances } from '@angular/fire/firestore';
5-
import { firestoreInstance$ } from '@angular/fire/firestore';
6-
import { debounceTime } from 'rxjs/operators';
7-
import { initializeFirestore$ } from './firestore';
4+
import { Firestore, FirestoreInstances, getDoc, doc, DocumentSnapshot } from '@angular/fire/firestore/lite';
5+
import { DocumentData } from 'rxfire/firestore/lite/interfaces';
6+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
87

98
@Component({
109
selector: 'app-root',
1110
template: `
12-
<!--The content below is only a placeholder and can be replaced.-->
13-
<div style="text-align:center" class="content">
14-
<h1>
15-
Welcome to {{title}}!
16-
</h1>
17-
<span style="display: block">{{ app.name }} app is running!</span>
18-
<img width="300" alt="Angular Logo" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==">
19-
</div>
20-
<h2>Here are some links to help you start: </h2>
21-
<ul>
22-
<li>
23-
<h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
24-
</li>
25-
<li>
26-
<h2><a target="_blank" rel="noopener" href="https://angular.io/cli">CLI Documentation</a></h2>
27-
</li>
28-
<li>
29-
<h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
30-
</li>
31-
</ul>
11+
<pre>{{ (myDocData | async)?.data() | json }}</pre>
3212
<router-outlet></router-outlet>
3313
`,
3414
styles: []
3515
})
3616
export class AppComponent {
17+
myDocData: Promise<DocumentSnapshot<DocumentData>>;
3718
title = 'sample';
3819
constructor(
3920
public app: FirebaseApp, // default Firebase App
4021
public auth: Auth, // default Firbase Auth
4122
public apps: FirebaseApps, // all initialized App instances
4223
public authInstances: AuthInstances, // all initialized Auth instances
43-
@Optional() public firestore: Firestore,
44-
@Optional() public firestoreInstances: FirestoreInstances,
24+
public firestore: Firestore,
25+
public firestoreInstances: FirestoreInstances,
4526
appRef: ApplicationRef,
4627
zone: NgZone,
4728
) {
4829
console.log({app, auth, apps, authInstances, firestore, firestoreInstances });
49-
// onAuthStateChanged should destablize the zone
50-
// onAuthStateChanged(auth, it => console.log('onAuthStateChanged', it));
5130
authState(auth).subscribe(it => console.log('authState', it));
52-
appRef.isStable.pipe(debounceTime(200)).subscribe(it => console.log('isStable', it));
53-
firestoreInstance$.subscribe(it => console.log('$', it));
54-
initializeFirestore$.subscribe(it => console.log('init', it));
31+
appRef.isStable.pipe(distinctUntilChanged()).subscribe(it => console.log('isStable', it));
32+
this.myDocData = getDoc(doc(firestore, 'animals/NJdGQCv1P92SWsp4nSE7'));
33+
// firestoreInstance$.subscribe(it => console.log('$', it));
34+
// initializeFirestore$.subscribe(it => console.log('init', it));
5535
}
5636
}

sample/src/app/app.module.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { NgModule } from '@angular/core';
22
import { BrowserModule } from '@angular/platform-browser';
3-
import { provideFirebaseApp, getApp } from '@angular/fire/app';
3+
import { provideFirebaseApp, getApp, initializeApp } from '@angular/fire/app';
44
import { provideAuth, initializeAuth } from '@angular/fire/auth';
5-
import { initializeApp } from 'firebase/app';
65
import { AppRoutingModule } from './app-routing.module';
76
import { AppComponent } from './app.component';
87
import { environment } from '../environments/environment';
8+
import { provideFirestore, getFirestore } from '@angular/fire/firestore/lite';
99

1010
@NgModule({
1111
declarations: [
@@ -21,6 +21,7 @@ import { environment } from '../environments/environment';
2121
return app;
2222
}),
2323
provideAuth(() => initializeAuth(getApp())),
24+
provideFirestore(() => getFirestore()),
2425
],
2526
providers: [ ],
2627
bootstrap: [AppComponent]
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { getFirestore } from 'firebase/firestore';
1+
export { getFirestore } from '@angular/fire/firestore';

sample/yarn.lock

+2-4
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,8 @@
216216
dependencies:
217217
tslib "^2.2.0"
218218

219-
"@angular/fire@7.0.0-alpha.3":
220-
version "7.0.0-alpha.3"
221-
resolved "https://registry.yarnpkg.com/@angular/fire/-/fire-7.0.0-alpha.3.tgz#d3b7c2414ffbc2ffbda6bb7c4f2bdf0779a40ce2"
222-
integrity sha512-5S8olqo33OGNOn9/3fKQixHQBFUjNU3FelkC0ScBbMCjHC/nYoUukYLBWDhu/MwNX2RnfujFuMGUb41NPN9OFw==
219+
"@angular/fire@../dist/packages-dist":
220+
version "7.0.0"
223221
dependencies:
224222
tslib "^2.0.0"
225223

src/zones.ts

+13-11
Original file line numberDiff line numberDiff line change
@@ -130,16 +130,18 @@ const zoneWrapFn = (it: (...args: any[]) => any) => {
130130
};
131131
};
132132

133-
export const ɵzoneWrap = <T= Observable<any>|number>(it: (..._: any[]) => T, args: IArguments): T => {
134-
for (let i = 0; i < args.length; i++) {
135-
if (typeof args[i] === 'function') {
136-
args[i] = zoneWrapFn(args[i]);
133+
export const ɵzoneWrap = <T= unknown>(it: T): T => {
134+
return function() {
135+
for (let i = 0; i < arguments.length; i++) {
136+
if (typeof arguments[i] === 'function') {
137+
arguments[i] = zoneWrapFn(arguments[i]);
138+
}
137139
}
138-
}
139-
const ret = runOutsideAngular(() => it.apply(this, args));
140-
if (ret instanceof Observable) {
141-
return ret.pipe(keepUnstableUntilFirst) as any;
142-
} else {
143-
return run(() => ret);
144-
}
140+
const ret = runOutsideAngular(() => (it as any).apply(this, arguments));
141+
if (ret instanceof Observable) {
142+
return ret.pipe(keepUnstableUntilFirst) as any;
143+
} else {
144+
return run(() => ret);
145+
}
146+
} as any;
145147
};

tools/build.ts

+18-18
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,25 @@ function zoneWrapExports() {
3232
overrides: Record<string, OverrideOptions|null> = {}
3333
) => {
3434
const imported = await import(path);
35-
await writeFile(`./src/${module}/${name}.ts`, `// DO NOT MODIFY, this file is autogenerated by tools/build.ts
36-
// Zone wrap and reexport all of ${path}
37-
35+
const toBeExported = exports.filter(it => overrides[it] !== null).map(importName => {
36+
const zoneWrap = overrides[importName]?.zoneWrap ?? importName[0] !== importName[0].toUpperCase();
37+
const exportName = overrides[importName]?.exportName ?? importName;
38+
return [importName, exportName, zoneWrap];
39+
});
40+
const zoneWrapped = toBeExported.filter(([, , zoneWrap]) => zoneWrap);
41+
const rawExport = toBeExported.filter(([, , zoneWrap]) => !zoneWrap);
42+
await writeFile(`./src/${module}/${name}.ts`, `// DO NOT MODIFY, this file is autogenerated by tools/build.ts${zoneWrapped.length > 0 ? `
3843
import { ɵzoneWrap } from '@angular/fire';
39-
40-
type Before = typeof import('${path}');
41-
42-
${exports.filter(it => overrides[it] !== null).map(importName => {
43-
const zoneWrap = overrides[importName]?.zoneWrap ?? importName[0] !== importName[0].toUpperCase();
44-
const exportName = overrides[importName]?.exportName ?? importName;
45-
return zoneWrap ?
46-
`import { ${importName} as _${exportName} } from '${path}';
47-
48-
export function ${exportName}(..._: Parameters<Before['${importName}']>) {
49-
return ɵzoneWrap(_${exportName}, arguments);
50-
}\n` :
51-
`export { ${importName}${exportName === importName ? '' : `as ${exportName}`} } from '${path}';\n`;
52-
}).flat().join(`\n`)}`);
53-
};
44+
import {
45+
${zoneWrapped.map(([importName]) => `${importName} as _${importName}`).join(',\n ')}
46+
} from '${path}';
47+
` : ''}${rawExport.length > 0 ? `
48+
export {
49+
${rawExport.map(([importName, exportName]) => `${importName}${exportName === importName ? '' : `as ${exportName}`}`).join(',\n ')}
50+
} from '${path}';
51+
` : ''}
52+
${zoneWrapped.map(([importName, exportName]) => `export const ${exportName} = ɵzoneWrap(_${importName});`).join('\n')}
53+
`); };
5454
return Promise.all([
5555
reexport('analytics', 'firebase', 'firebase/analytics', tsKeys<typeof import('firebase/analytics')>()),
5656
reexport('app', 'firebase', 'firebase/app', tsKeys<typeof import('firebase/app')>()),

0 commit comments

Comments
 (0)