Skip to content

Commit 4ed421c

Browse files
committed
Make schematic deps peers by install deps and devDeps in ngAdd
1 parent 224eeed commit 4ed421c

File tree

6 files changed

+69
-29
lines changed

6 files changed

+69
-29
lines changed

src/core/collection.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
"schematics": {
44
"ng-add": {
55
"description": "Add firebase deploy schematic",
6-
"factory": "./schematics/index#ngDeploy"
6+
"factory": "./schematics/index#ngAdd"
7+
},
8+
"ng-add-setup-firebase-deploy": {
9+
"description": "Setup ng deploy",
10+
"factory": "./schematics/index#setupNgDeploy"
711
}
812
}
913
}

src/core/package.json

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,20 @@
2121
"author": "angular,firebase",
2222
"license": "MIT",
2323
"peerDependencies": {
24+
"@angular-devkit/architect": "ANGULAR_DEVKIT_ARCH_VERSION",
25+
"@angular-devkit/core": "ANGULAR_VERSION",
26+
"@angular-devkit/schematics": "ANGULAR_VERSION",
2427
"@angular/common": "ANGULAR_VERSION",
2528
"@angular/core": "ANGULAR_VERSION",
2629
"@angular/platform-browser": "ANGULAR_VERSION",
2730
"@angular/platform-browser-dynamic": "ANGULAR_VERSION",
2831
"firebase": "FIREBASE_VERSION",
29-
"rxjs": "RXJS_VERSION",
30-
"zone.js": "ZONEJS_VERSION"
31-
},
32-
"dependencies": {
33-
"@angular-devkit/architect": "ANGULAR_DEVKIT_ARCH_VERSION",
34-
"@angular-devkit/core": "ANGULAR_VERSION",
35-
"@angular-devkit/schematics": "ANGULAR_VERSION",
3632
"firebase-tools": "FIREBASE_TOOLS_VERSION",
3733
"fuzzy": "FUZZY_VERSION",
3834
"inquirer": "INQUIRER_VERSION",
39-
"inquirer-autocomplete-prompt": "INQUIRER_AUTOCOMPLETE_VERSION"
35+
"inquirer-autocomplete-prompt": "INQUIRER_AUTOCOMPLETE_VERSION",
36+
"rxjs": "RXJS_VERSION",
37+
"zone.js": "ZONEJS_VERSION"
4038
},
4139
"typings": "index.d.ts"
4240
}

src/schematics/ng-add.ts

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
import { SchematicsException, Tree } from '@angular-devkit/schematics';
1+
import { SchematicsException, Tree, SchematicContext } from '@angular-devkit/schematics';
2+
import { NodePackageInstallTask, RunSchematicTask } from '@angular-devkit/schematics/tasks';
23
import { FirebaseJSON, FirebaseRc, FirebaseHostingConfig } from './interfaces';
34
import { experimental, JsonParseMode, parseJson } from '@angular-devkit/core';
4-
import { from } from 'rxjs';
5+
import { from, of } from 'rxjs';
56
import { map, switchMap } from 'rxjs/operators';
67
import { Project } from './interfaces';
78
import { listProjects, projectPrompt } from './utils';
9+
import { dependencies as requiredDependencyVersions, devDependencies as requiredDevDependencyVersions } from './versions';
810

911
const stringifyFormatted = (obj: any) => JSON.stringify(obj, null, 2);
1012

@@ -155,13 +157,36 @@ interface DeployOptions {
155157

156158
// You don't have to export the function as default. You can also have more than one rule factory
157159
// per file.
158-
export const ngDeploy = ({ project }: DeployOptions) => (host: Tree) =>
159-
from(listProjects()).pipe(
160+
export const setupNgDeploy = ({ project }: DeployOptions) => (host: Tree) => {
161+
return from(listProjects()).pipe(
160162
switchMap((projects: Project[]) => projectPrompt(projects)),
161-
map(({ firebaseProject }: any) => ngAdd(host, { firebaseProject, project }))
163+
map(({ firebaseProject }: any) => setupFirebaseProject(host, { firebaseProject, project }))
162164
);
165+
}
166+
167+
export const ngAdd = (options: DeployOptions) => (host: Tree, context: SchematicContext) => {
168+
const packageJson = host.exists('package.json') && safeReadJSON('package.json', host);
169+
170+
if (packageJson === undefined) {
171+
throw new SchematicsException('Could not locate package.json');
172+
}
173+
174+
Object.keys(requiredDependencyVersions).forEach(name => {
175+
packageJson.dependencies[name] = packageJson.dependencies[name] || requiredDependencyVersions[name];
176+
});
177+
178+
Object.keys(requiredDevDependencyVersions).forEach(name => {
179+
packageJson.devDependencies[name] = packageJson.devDependencies[name] || requiredDevDependencyVersions[name];
180+
});
181+
182+
overwriteIfExists(host, 'package.json', stringifyFormatted(packageJson));
183+
184+
const installTaskId = context.addTask(new NodePackageInstallTask());
185+
186+
context.addTask(new RunSchematicTask('ng-add-setup-firebase-deploy', options), [installTaskId]);
187+
}
163188

164-
export function ngAdd(tree: Tree, options: NgAddOptions) {
189+
export function setupFirebaseProject(tree: Tree, options: NgAddOptions) {
165190
const { path: workspacePath, workspace } = getWorkspace(tree);
166191

167192
if (!options.project) {

src/schematics/utils.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
11
import { readFileSync } from "fs";
2-
import * as inquirer from "inquirer";
32
import { FirebaseRc, Project } from "./interfaces";
43
import { join } from "path";
54

6-
const firebase = require("firebase-tools");
7-
8-
const fuzzy = require("fuzzy");
9-
105
export function listProjects() {
6+
const firebase = require('firebase-tools');
117
return firebase.list().catch(
128
/* If list failed, then login and try again. */
139
() => firebase.login().then(() => firebase.list())
1410
);
1511
}
1612

17-
inquirer.registerPrompt(
18-
"autocomplete",
19-
require("inquirer-autocomplete-prompt")
20-
);
21-
2213
// `fuzzy` passes either the original list of projects or an internal object
2314
// which contains the project as a property.
2415
const isProject = (elem: Project | { original: Project }): elem is Project => {
@@ -28,7 +19,7 @@ const isProject = (elem: Project | { original: Project }): elem is Project => {
2819
const searchProjects = (projects: Project[]) => {
2920
return (_: any, input: string) => {
3021
return Promise.resolve(
31-
fuzzy
22+
require('fuzzy')
3223
.filter(input, projects, {
3324
extract(el: Project) {
3425
return `${el.id} ${el.name} ${el.permission}`;
@@ -52,7 +43,12 @@ const searchProjects = (projects: Project[]) => {
5243
};
5344

5445
export const projectPrompt = (projects: Project[]) => {
55-
return (inquirer as any).prompt({
46+
const inquirer = require('inquirer');
47+
inquirer.registerPrompt(
48+
"autocomplete",
49+
require("inquirer-autocomplete-prompt")
50+
);
51+
return inquirer.prompt({
5652
type: "autocomplete",
5753
name: "firebaseProject",
5854
source: searchProjects(projects),

src/schematics/versions.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export const dependencies = {
2+
"firebase": "FIREBASE_VERSION"
3+
};
4+
5+
export const devDependencies = {
6+
"@angular-devkit/architect": "ANGULAR_DEVKIT_ARCH_VERSION",
7+
"firebase-tools": "FIREBASE_TOOLS_VERSION",
8+
"fuzzy": "FUZZY_VERSION",
9+
"inquirer": "INQUIRER_VERSION",
10+
"inquirer-autocomplete-prompt": "INQUIRER_AUTOCOMPLETE_VERSION"
11+
};

tools/build.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@ const SRC_PKG_PATHS = {
102102
functions: `${process.cwd()}/src/functions/package.json`,
103103
storage: `${process.cwd()}/src/storage/package.json`,
104104
messaging: `${process.cwd()}/src/messaging/package.json`,
105-
performance: `${process.cwd()}/src/performance/package.json`
105+
performance: `${process.cwd()}/src/performance/package.json`,
106+
schematics: `${process.cwd()}/dist/packages-dist/schematics/versions.js`,
107+
"schematics-es2015": `${process.cwd()}/dist/packages-dist/schematics/es2015/versions.js`
106108
};
107109

108110
const DEST_PKG_PATHS = {
@@ -116,7 +118,9 @@ const DEST_PKG_PATHS = {
116118
functions: `${process.cwd()}/dist/packages-dist/functions/package.json`,
117119
storage: `${process.cwd()}/dist/packages-dist/storage/package.json`,
118120
messaging: `${process.cwd()}/dist/packages-dist/messaging/package.json`,
119-
performance: `${process.cwd()}/dist/packages-dist/performance/package.json`
121+
performance: `${process.cwd()}/dist/packages-dist/performance/package.json`,
122+
schematics: `${process.cwd()}/dist/packages-dist/schematics/versions.js`,
123+
"schematics-es2015": `${process.cwd()}/dist/packages-dist/schematics/es2015/versions.js`
120124
};
121125

122126
// Constants for running typescript commands
@@ -367,6 +371,8 @@ function buildLibrary(globals) {
367371
switchMap(() => from(copyDocs())),
368372
switchMap(() => from(copyNodeFixes())),
369373
switchMap(() => from(copySchematicFiles())),
374+
switchMap(() => replaceVersionsObservable('schematics', VERSIONS)),
375+
switchMap(() => replaceVersionsObservable('schematics-es2015', VERSIONS)),
370376
switchMap(() => replaceVersionsObservable('firebase-node', VERSIONS)),
371377
switchMap(() => from(createTestUmd(globals))),
372378
tap(() => {

0 commit comments

Comments
 (0)