Skip to content

Commit d72d844

Browse files
committed
Couple small things
1 parent 4f7932c commit d72d844

File tree

8 files changed

+476
-244
lines changed

8 files changed

+476
-244
lines changed

README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ by conforming to Angular conventions.
77

88
<strong><pre>ng add @angular/fire</pre></strong>
99

10-
_Note: If you want to ng add AngularFire and will be using Hosting/Cloud Functions, you need to configure the
11-
Firebase CLI first so that you are logged in for the schematics that are run as part of `ng add @angular/fire`.
12-
Follow [this guide](docs/install-firebase-tools.md) to have the Firebase CLI walk you through the setup._
13-
1410
- **Dependency injection** - Provide and Inject Firebase services in your components
1511
- **Zone.js wrappers** - Stable zones allow proper functionality of service workers, forms, SSR, and pre-rendering
1612
- **Observable based** - Utilize RxJS rather than callbacks for realtime streams

package-lock.json

Lines changed: 425 additions & 178 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@
4545
},
4646
"homepage": "https://github.com/angular/angularfire#readme",
4747
"dependencies": {
48-
"@angular-devkit/architect": "~0.1700.0-next.0",
49-
"@angular-devkit/core": "^17.0.0-next.0",
50-
"@angular-devkit/schematics": "^17.0.0-next.0",
51-
"@angular/common": "^17.0.0-next.0",
52-
"@angular/compiler": "^17.0.0-next.0",
53-
"@angular/core": "^17.0.0-next.0",
54-
"@angular/platform-browser": "^17.0.0-next.0",
55-
"@angular/platform-browser-dynamic": "^17.0.0-next.0",
56-
"@angular/router": "^17.0.0-next.0",
57-
"@schematics/angular": "^17.0.0-next.0",
48+
"@angular-devkit/architect": "~0.1700.0",
49+
"@angular-devkit/core": "^17.0.0",
50+
"@angular-devkit/schematics": "^17.0.0",
51+
"@angular/common": "^17.0.0",
52+
"@angular/compiler": "^17.0.0",
53+
"@angular/core": "^17.0.0",
54+
"@angular/platform-browser": "^17.0.0",
55+
"@angular/platform-browser-dynamic": "^17.0.0",
56+
"@angular/router": "^17.0.0",
57+
"@schematics/angular": "^17.0.0",
5858
"firebase": "^10.0.0",
5959
"firebase-admin": "^9.11.1",
6060
"firebase-functions": "^3.6.0",
@@ -75,11 +75,11 @@
7575
"zone.js": "~0.14.0"
7676
},
7777
"devDependencies": {
78-
"@angular-devkit/build-angular": "^17.0.0-next.0",
79-
"@angular/animations": "^17.0.0-next.0",
80-
"@angular/cli": "^17.0.0-next.0",
81-
"@angular/compiler-cli": "^17.0.0-next.0",
82-
"@angular/platform-server": "^17.0.0-next.0",
78+
"@angular-devkit/build-angular": "^17.0.0",
79+
"@angular/animations": "^17.0.0",
80+
"@angular/cli": "^17.0.0",
81+
"@angular/compiler-cli": "^17.0.0",
82+
"@angular/platform-server": "^17.0.0",
8383
"@types/fs-extra": "^7.0.0",
8484
"@types/gzip-size": "^5.1.1",
8585
"@types/inquirer": "^0.0.44",
@@ -107,7 +107,7 @@
107107
"karma-jasmine": "~5.1.0",
108108
"karma-jasmine-html-reporter": "^2.1.0",
109109
"karma-safarinative-launcher": "^1.1.0",
110-
"ng-packagr": "^17.0.0-next.0",
110+
"ng-packagr": "^17.0.0",
111111
"reflect-metadata": "^0.1.2",
112112
"replace-in-file": "^5.0.2",
113113
"rimraf": "^2.5.4",

src/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
"author": "angular,firebase",
2424
"license": "MIT",
2525
"peerDependencies": {
26-
"@angular/common": "^17.0.0-next.0",
27-
"@angular/core": "^17.0.0-next.0",
28-
"@angular/platform-browser": "^17.0.0-next.0",
29-
"@angular/platform-browser-dynamic": "^17.0.0-next.0",
26+
"@angular/common": "^17.0.0",
27+
"@angular/core": "^17.0.0",
28+
"@angular/platform-browser": "^17.0.0",
29+
"@angular/platform-browser-dynamic": "^17.0.0",
3030
"rxjs": "~7.8.0",
3131
"firebase-tools": "^12.0.0"
3232
},
@@ -36,8 +36,8 @@
3636
"dependencies": {
3737
"firebase": "^10.5.0",
3838
"rxfire": "^6.0.5",
39-
"@angular-devkit/schematics": "^17.0.0-next.0",
40-
"@schematics/angular": "^17.0.0-next.0",
39+
"@angular-devkit/schematics": "^17.0.0",
40+
"@schematics/angular": "^17.0.0",
4141
"tslib": "^2.3.0",
4242
"fuzzy": "^0.1.3",
4343
"inquirer-autocomplete-prompt": "^1.0.1",

src/schematics/firebaseTools.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ export const getFirebaseTools = () => globalThis.firebaseTools ?
4444
globalThis.firebaseTools = firebaseTools;
4545
const version = firebaseTools.cli.version();
4646
console.log(`Using firebase-tools version ${version}`);
47-
if (semver.compare(version, '9.9.0') === -1) {
48-
console.error('firebase-tools version 9.9+ is required, please upgrade and run again');
47+
if (semver.compare(version, '13.0.0') === -1) {
48+
console.error('firebase-tools version 13.0.0+ is required, please upgrade and run again');
4949
return Promise.reject();
5050
}
5151
return firebaseTools;

src/schematics/interfaces.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@ export interface NgAddNormalizedOptions {
4141
firebaseApp: FirebaseApp|undefined;
4242
firebaseHostingSite: FirebaseHostingSite|undefined;
4343
sdkConfig: Record<string, string>|undefined;
44-
prerender: boolean|undefined;
45-
browserTarget: string|undefined;
46-
serverTarget: string|undefined;
47-
prerenderTarget: string|undefined;
44+
buildTarget: string|undefined;
4845
ssrRegion: string|undefined;
4946
}
5047

@@ -122,7 +119,7 @@ export interface FirebaseTools {
122119
};
123120

124121
login: {
125-
list(): Promise<{user: Record<string, any>}[]>;
122+
list(): Promise<{user: Record<string, any>}[] | { users: undefined }>;
126123
add(): Promise<Record<string, any>>;
127124
use(email: string, options?: unknown): Promise<string>;
128125
} & ((options?: unknown) => Promise<Record<string, any>>);

src/schematics/setup/index.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
import { getFirebaseTools } from '../firebaseTools';
1313
import {
1414
DeployOptions, FEATURES, FirebaseApp, FirebaseHostingSite, FirebaseProject,
15-
NgAddNormalizedOptions, PROJECT_TYPE
15+
NgAddNormalizedOptions
1616
} from '../interfaces';
1717
import { FirebaseJSON, Workspace, WorkspaceProject } from '../interfaces';
1818
import {
@@ -27,14 +27,9 @@ export interface SetupConfig extends DeployOptions {
2727
firebaseApp?: FirebaseApp,
2828
firebaseHostingSite?: FirebaseHostingSite,
2929
sdkConfig?: Record<string, string>,
30-
nodeVersion?: string,
31-
browserTarget?: string,
32-
serverTarget?: string,
33-
prerenderTarget?: string,
30+
buildTarget?: string,
3431
project?: string,
3532
ssrRegion?: string,
36-
projectType?: PROJECT_TYPE,
37-
prerender?: boolean,
3833
}
3934

4035
export const setupProject =
@@ -55,10 +50,7 @@ export const setupProject =
5550
firebaseApp: config.firebaseApp,
5651
firebaseHostingSite: config.firebaseHostingSite,
5752
sdkConfig: config.sdkConfig,
58-
prerender: undefined,
59-
browserTarget: config.browserTarget,
60-
serverTarget: config.serverTarget,
61-
prerenderTarget: config.prerenderTarget,
53+
buildTarget: config.buildTarget,
6254
ssrRegion: config.ssrRegion,
6355
},
6456
tree,
@@ -97,7 +89,10 @@ export const ngAddSetupProject = (
9789
if (!host.exists('/firebase.json')) { writeFileSync(join(projectRoot, 'firebase.json'), '{}'); }
9890

9991
const user = await userPrompt({ projectRoot });
100-
await firebaseTools.login.use(user.email, { projectRoot });
92+
const defaultUser = await firebaseTools.login(options);
93+
if (user.email !== defaultUser?.email) {
94+
await firebaseTools.login.use(user.email, { projectRoot });
95+
}
10196

10297
const { project: ngProject, projectName: ngProjectName } = getProject(options, host);
10398

@@ -187,10 +182,13 @@ export const setupFirebase = (config: {
187182
builder: '@angular/fire:deploy',
188183
options: {
189184
version: 2,
190-
browserTarget: options.browserTarget,
191-
...(options.serverTarget ? {serverTarget: options.serverTarget} : {}),
192-
...(options.prerenderTarget ? {prerenderTarget: options.prerenderTarget} : {})
193-
}
185+
},
186+
configurations: {
187+
production: {
188+
buildTarget: options.buildTarget,
189+
},
190+
},
191+
defaultConfiguration: 'production',
194192
};
195193

196194
tree.overwrite(workspacePath, JSON.stringify(workspace, null, 2));

src/schematics/setup/prompts.ts

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import * as inquirer from 'inquirer';
33
import { shortSiteName } from '../common';
44
import { getFirebaseTools } from '../firebaseTools';
55
import { FEATURES, FirebaseApp, FirebaseHostingSite, FirebaseProject, PROJECT_TYPE, WorkspaceProject, featureOptions } from '../interfaces';
6-
import { hasPrerenderOption, isUniversalApp, shortAppId } from '../utils';
6+
import { isUniversalApp, shortAppId } from '../utils';
7+
import { spawnSync } from 'child_process';
78

89
// eslint-disable-next-line @typescript-eslint/no-var-requires
910
inquirer.registerPrompt('autocomplete', require('inquirer-autocomplete-prompt'));
@@ -122,16 +123,15 @@ export const featuresPrompt = async (): Promise<FEATURES[]> => {
122123
return features;
123124
};
124125

125-
export const userPrompt = async (options: unknown): Promise<Record<string, any>> => {
126+
export const userPrompt = async (options: { projectRoot: string }): Promise<Record<string, any>> => {
126127
const firebaseTools = await getFirebaseTools();
127-
const users = await firebaseTools.login.list();
128-
if (!users || users.length === 0) {
129-
await firebaseTools.login(); // first login isn't returning anything of value
130-
const user = await firebaseTools.login(options);
131-
return user;
128+
const loginList = await firebaseTools.login.list();
129+
if (!Array.isArray(loginList) || loginList.length === 0) {
130+
spawnSync('firebase login', { shell: true, cwd: options.projectRoot, stdio: 'inherit' });
131+
return await firebaseTools.login(options);
132132
} else {
133133
const defaultUser = await firebaseTools.login(options);
134-
const choices = users.map(({user}) => ({ name: user.email, value: user }));
134+
const choices = loginList.map(({user}) => ({ name: user.email, value: user }));
135135
const newChoice = { name: '[Login in with another account]', value: NEW_OPTION };
136136
const { user } = await inquirer.prompt({
137137
type: 'list',
@@ -242,22 +242,16 @@ const ALLOWED_SSR_REGIONS = [
242242
];
243243

244244
export const projectTypePrompt = async (project: WorkspaceProject, name: string) => {
245-
let serverTarget: string|undefined;
246-
let browserTarget = `${name}:build:${project.architect?.build?.defaultConfiguration || 'production'}`;
247-
let prerenderTarget: string|undefined;
245+
const buildTarget = `${name}:build:${project.architect?.build?.defaultConfiguration || 'production'}`;
248246
if (isUniversalApp(project)) {
249-
serverTarget = `${name}:server:${project.architect?.server?.defaultConfiguration || 'production'}`;
250-
browserTarget = `${name}:build:${project.architect?.build?.defaultConfiguration || 'production'}`;
251-
const prerender = hasPrerenderOption(project);
252-
prerenderTarget = prerender && `${name}:prerender:${prerender.defaultConfiguration || 'production'}`;
253247
const { ssrRegion } = await inquirer.prompt({
254248
type: 'list',
255249
name: 'ssrRegion',
256250
choices: ALLOWED_SSR_REGIONS,
257251
message: 'In which region would you like to host server-side content?',
258252
default: DEFAULT_REGION,
259253
}) as { ssrRegion: string };
260-
return { prerender, projectType: PROJECT_TYPE.WebFrameworks, ssrRegion, browserTarget, serverTarget, prerenderTarget };
254+
return { projectType: PROJECT_TYPE.WebFrameworks, ssrRegion, buildTarget };
261255
}
262-
return { projectType: PROJECT_TYPE.WebFrameworks, browserTarget, serverTarget, prerenderTarget };
256+
return { projectType: PROJECT_TYPE.WebFrameworks, buildTarget };
263257
};

0 commit comments

Comments
 (0)