Skip to content

Commit

Permalink
Cleaned up the schematics more
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesdaniels committed May 18, 2021
1 parent dbda308 commit c1df4df
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 55 deletions.
27 changes: 8 additions & 19 deletions src/schematics/ng-add-ssr.ts
@@ -1,15 +1,13 @@
import { SchematicsException, Tree, SchematicContext, noop } from '@angular-devkit/schematics';
import {
addDependencies,
DeployOptions,
generateFirebaseRc,
NgAddNormalizedOptions,
overwriteIfExists,
safeReadJSON,
stringifyFormatted
} from './ng-add-common';
import { FirebaseJSON, Workspace, WorkspaceProject } from './interfaces';
import { getProject, projectTypePrompt } from './utils';
import { firebaseFunctions as firebaseFunctionsDependencies } from './versions.json';
import { dirname, join } from 'path';
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
Expand Down Expand Up @@ -98,23 +96,14 @@ export function generateFirebaseJson(
overwriteIfExists(tree, path, stringifyFormatted(firebaseJson));
}

export const addFirebaseFunctionsDependencies = (options: DeployOptions) => (tree: Tree, context: SchematicContext) => {
const {project} = getProject(options, tree);
projectTypePrompt(project).then(({universalProject}) => {
if (universalProject) {
(global as any).setupAsAngularUniversalApp = true;
addDependencies(
tree,
firebaseFunctionsDependencies,
context
);
context.addTask(new NodePackageInstallTask());
return tree;
} else {
(global as any).setupAsAngularUniversalApp = false;
return noop();
}
});
export const addFirebaseFunctionsDependencies = (tree: Tree, context: SchematicContext) => {
addDependencies(
tree,
firebaseFunctionsDependencies,
context
);
context.addTask(new NodePackageInstallTask());
return tree;
};

export const setupUniversalDeployment = (config: {
Expand Down
9 changes: 6 additions & 3 deletions src/schematics/ng-add-static.ts
@@ -1,6 +1,7 @@
import { SchematicsException, Tree, SchematicContext } from '@angular-devkit/schematics';
import {
addDependencies,
DeployOptions,
generateFirebaseRc,
NgAddNormalizedOptions,
overwriteIfExists,
Expand All @@ -10,7 +11,7 @@ import {
import { FirebaseJSON, Workspace, WorkspaceProject } from './interfaces';

import { default as defaultDependencies } from './versions.json';
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
import { NodePackageInstallTask, RunSchematicTask } from '@angular-devkit/schematics/tasks';

function emptyFirebaseJson() {
return {
Expand Down Expand Up @@ -73,13 +74,15 @@ export function generateFirebaseJson(
overwriteIfExists(tree, path, stringifyFormatted(firebaseJson));
}

export const addFirebaseHostingDependencies = () => async (tree: Tree, context: SchematicContext) => {
export const addFirebaseHostingDependencies = (options: DeployOptions) => (tree: Tree, context: SchematicContext) => {
addDependencies(
tree,
defaultDependencies,
context
);
context.addTask(new NodePackageInstallTask());
context.addTask(new RunSchematicTask('ng-add-setup-project', options), [
context.addTask(new NodePackageInstallTask())
]);
return tree;
};

Expand Down
42 changes: 21 additions & 21 deletions src/schematics/ng-add.jasmine.ts
Expand Up @@ -370,7 +370,7 @@ describe('ng-add', () => {
it('generates new files if starting from scratch', async () => {
const result = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
});
expect(result.read('firebase.json').toString()).toEqual(initialFirebaseJson);
Expand All @@ -381,7 +381,7 @@ describe('ng-add', () => {
it('uses default project', async () => {
const result = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: undefined
});
expect(result.read('firebase.json').toString()).toEqual(overwriteFirebaseJson);
Expand All @@ -392,12 +392,12 @@ describe('ng-add', () => {
it('overrides existing files', async () => {
const tempTree = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false, project: PROJECT_NAME
universalProject: false, project: PROJECT_NAME
});
const result = await setupProject(tempTree, {
firebaseProject: OTHER_FIREBASE_PROJECT_NAME,
project: OTHER_PROJECT_NAME,
isUniversalProject: false
universalProject: false
});
expect(result.read('firebase.json').toString()).toEqual(projectFirebaseJson);
expect(result.read('.firebaserc').toString()).toEqual(projectFirebaserc);
Expand All @@ -414,7 +414,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: undefined
})
).toThrowError(
Expand All @@ -426,7 +426,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(Tree.empty(), {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/Could not find angular.json/);
Expand All @@ -438,7 +438,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/Could not parse angular.json/);
Expand All @@ -450,7 +450,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/The specified Angular project is not defined in this workspace/);
Expand All @@ -467,7 +467,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/Deploy requires an Angular project type of "application" in angular.json/);
Expand All @@ -484,7 +484,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/Cannot read the output path/);
Expand All @@ -496,14 +496,14 @@ describe('ng-add', () => {
tree.create('angular.json', JSON.stringify(generateAngularJson()));
const tempTree = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
});
expect(() =>
setupProject(tempTree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/already exists in firebase.json/);
Expand All @@ -516,7 +516,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/firebase.json: Unexpected token/);
Expand All @@ -529,7 +529,7 @@ describe('ng-add', () => {
expect(() =>
setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
})
).toThrowError(/.firebaserc: Unexpected token/);
Expand All @@ -542,14 +542,14 @@ describe('ng-add', () => {
tree.create('angular.json', JSON.stringify(generateAngularJson()));
const tempTree = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
});
expect(() =>
setupProject(tempTree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: OTHER_PROJECT_NAME
})
).toThrowError(/ already defined in .firebaserc/);
Expand All @@ -561,14 +561,14 @@ describe('ng-add', () => {
const tempTree = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: PROJECT_NAME
});
expect(() =>
setupProject(tempTree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: false,
universalProject: false,
project: OTHER_PROJECT_NAME
})
).toThrowError(/ already defined in .firebaserc/);
Expand All @@ -581,7 +581,7 @@ describe('ng-add', () => {

expect(() => setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: true,
universalProject: true,
project: PROJECT_NAME
})).toThrowError(/\(architect.server.options.outputPath\) of the Angular project "pie-ka-chu" in angular.json/);
});
Expand All @@ -592,7 +592,7 @@ describe('ng-add', () => {

const result = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: true,
universalProject: true,
project: PROJECT_NAME
});

Expand All @@ -606,7 +606,7 @@ describe('ng-add', () => {

const result = await setupProject(tree, {
firebaseProject: FIREBASE_PROJECT,
isUniversalProject: true,
universalProject: true,
project: PROJECT_NAME
});

Expand Down
22 changes: 10 additions & 12 deletions src/schematics/ng-add.ts
@@ -1,11 +1,11 @@
import { chain, Tree } from '@angular-devkit/schematics';
import { listProjects, projectPrompt, getWorkspace, getProject } from './utils';
import { SchematicContext, Tree } from '@angular-devkit/schematics';
import { listProjects, projectPrompt, getWorkspace, getProject, projectTypePrompt } from './utils';
import { DeployOptions, NgAddNormalizedOptions } from './ng-add-common';
import { addFirebaseFunctionsDependencies, setupUniversalDeployment } from './ng-add-ssr';
import { addFirebaseHostingDependencies, setupStaticDeployment } from './ng-add-static';

export const setupProject =
(host: Tree, options: DeployOptions & { firebaseProject: string, isUniversalProject: boolean }) => {
(host: Tree, options: DeployOptions & { firebaseProject: string, universalProject: boolean }) => {
const { path: workspacePath, workspace } = getWorkspace(host);

const {project, projectName} = getProject(options, host);
Expand All @@ -15,7 +15,7 @@ export const setupProject =
firebaseProject: options.firebaseProject
};

if (options.isUniversalProject) {
if (options.universalProject) {
return setupUniversalDeployment({
workspace,
workspacePath,
Expand All @@ -36,15 +36,13 @@ export const setupProject =

export const ngAddSetupProject = (
options: DeployOptions
) => async (host: Tree) => {
) => async (host: Tree, context: SchematicContext) => {
const projects = await listProjects();
const { firebaseProject } = await projectPrompt(projects);
const isUniversalProject = (global as any).setupAsAngularUniversalApp;
return setupProject(host, {...options, firebaseProject, isUniversalProject });
const { project } = getProject(options, host);
const { universalProject } = await projectTypePrompt(project);
if (universalProject) { host = addFirebaseFunctionsDependencies(host, context); }
return setupProject(host, {...options, firebaseProject, universalProject });
};

export const ngAdd = (options: DeployOptions) => chain([
addFirebaseHostingDependencies(),
addFirebaseFunctionsDependencies(options),
ngAddSetupProject(options),
]);
export const ngAdd = addFirebaseHostingDependencies;

0 comments on commit c1df4df

Please sign in to comment.