Skip to content

Commit 224eeed

Browse files
committed
Handle different formats for .firebaserc and firebase.json
1 parent b46350b commit 224eeed

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

src/schematics/interfaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ export interface FirebaseHostingConfig {
3232
}
3333

3434
export interface FirebaseJSON {
35-
hosting: FirebaseHostingConfig[];
35+
hosting?: FirebaseHostingConfig[] | FirebaseHostingConfig;
3636
}
3737

3838
export interface FirebaseRcTarget {
3939
hosting: Record<string, string[]>;
4040
}
4141

4242
export interface FirebaseRc {
43-
targets: Record<string, FirebaseRcTarget>;
43+
targets?: Record<string, FirebaseRcTarget>;
4444
}

src/schematics/ng-add.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { SchematicsException, Tree } from '@angular-devkit/schematics';
2-
import { FirebaseJSON, FirebaseRc } from './interfaces';
2+
import { FirebaseJSON, FirebaseRc, FirebaseHostingConfig } from './interfaces';
33
import { experimental, JsonParseMode, parseJson } from '@angular-devkit/core';
44
import { from } from 'rxjs';
55
import { map, switchMap } from 'rxjs/operators';
@@ -52,13 +52,24 @@ function generateFirebaseJson(
5252
? safeReadJSON(path, tree)
5353
: emptyFirebaseJson();
5454

55-
if (firebaseJson.hosting.find(config => config.target === project)) {
55+
if (firebaseJson.hosting &&
56+
(Array.isArray(firebaseJson.hosting) &&
57+
firebaseJson.hosting.find(config => config.target === project) ||
58+
(<FirebaseHostingConfig>firebaseJson.hosting).target === project
59+
)) {
5660
throw new SchematicsException(
5761
`Target ${project} already exists in firebase.json`
5862
);
5963
}
6064

61-
firebaseJson.hosting.push(generateHostingConfig(project, dist));
65+
const newConfig = generateHostingConfig(project, dist);
66+
if (firebaseJson.hosting === undefined) {
67+
firebaseJson.hosting = newConfig;
68+
} else if (Array.isArray(firebaseJson.hosting)) {
69+
firebaseJson.hosting.push(newConfig);
70+
} else {
71+
firebaseJson.hosting = [firebaseJson.hosting!, newConfig];
72+
}
6273

6374
overwriteIfExists(tree, path, stringifyFormatted(firebaseJson));
6475
}
@@ -84,7 +95,9 @@ function generateFirebaseRc(
8495
? safeReadJSON(path, tree)
8596
: emptyFirebaseRc();
8697

87-
if (firebaseProject in firebaseRc.targets) {
98+
firebaseRc.targets = firebaseRc.targets || {};
99+
100+
if (firebaseProject in firebaseRc.targets!) {
88101
throw new SchematicsException(
89102
`Firebase project ${firebaseProject} already defined in .firebaserc`
90103
);

src/schematics/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ export function getFirebaseProjectName(
6767
const { targets }: FirebaseRc = JSON.parse(
6868
readFileSync(join(projectRoot, ".firebaserc"), "UTF-8")
6969
);
70-
const projects = Object.keys(targets);
70+
const projects = Object.keys(targets!);
7171
return projects.find(
72-
project => !!Object.keys(targets[project].hosting).find(t => t === target)
72+
project => !!Object.keys(targets![project].hosting).find(t => t === target)
7373
);
7474
}

0 commit comments

Comments
 (0)