1- import { SchematicContext , SchematicsException , Tree } from '@angular-devkit/schematics' ;
2- import { NodePackageInstallTask , RunSchematicTask } from '@angular-devkit/schematics/tasks' ;
3- import { listProjects , projectPrompt , projectTypePrompt } from './utils' ;
4- import { Workspace } from './interfaces' ;
1+ import { chain , Tree } from '@angular-devkit/schematics' ;
2+ import { listProjects , projectPrompt , getWorkspace , getProject } from './utils' ;
53import { DeployOptions , NgAddNormalizedOptions } from './ng-add-common' ;
64import { addFirebaseFunctionsDependencies , setupUniversalDeployment } from './ng-add-ssr' ;
75import { addFirebaseHostingDependencies , setupStaticDeployment } from './ng-add-static' ;
86
9- function getWorkspace (
10- host : Tree
11- ) : { path : string ; workspace : Workspace } {
12- const possibleFiles = [ '/angular.json' , '/.angular.json' ] ;
13- const path = possibleFiles . filter ( p => host . exists ( p ) ) [ 0 ] ;
14-
15- const configBuffer = host . read ( path ) ;
16- if ( configBuffer === null ) {
17- throw new SchematicsException ( `Could not find angular.json` ) ;
18- }
19-
20- // We can not depend on this library to have be included in older (or newer) Angular versions.
21- // Require here, since the schematic will add it to the package.json and install it before
22- // continuing.
23- const { parse } : typeof import ( 'jsonc-parser' ) = require ( 'jsonc-parser' ) ;
24-
25- const workspace = parse ( configBuffer . toString ( ) ) as Workspace | undefined ;
26- if ( ! workspace ) {
27- throw new SchematicsException ( 'Could not parse angular.json' ) ;
28- }
29-
30- return {
31- path,
32- workspace
33- } ;
34- }
35-
36- const getProject = ( options : DeployOptions , host : Tree ) => {
37- const { workspace } = getWorkspace ( host ) ;
38- const projectName = options . project || workspace . defaultProject ;
39-
40- if ( ! projectName ) {
41- throw new SchematicsException (
42- 'No Angular project selected and no default project in the workspace'
43- ) ;
44- }
45-
46- const project = workspace . projects [ projectName ] ;
47- if ( ! project ) {
48- throw new SchematicsException (
49- 'The specified Angular project is not defined in this workspace'
50- ) ;
51- }
52-
53- if ( project . projectType !== 'application' ) {
54- throw new SchematicsException (
55- `Deploy requires an Angular project type of "application" in angular.json`
56- ) ;
57- }
58-
59- return { project, projectName} ;
60- } ;
61-
627export const setupProject =
63- ( host : Tree , options : DeployOptions & { isUniversalProject : boolean , firebaseProject : string } ) => {
8+ ( host : Tree , options : DeployOptions & { firebaseProject : string , isUniversalProject : boolean } ) => {
649 const { path : workspacePath , workspace } = getWorkspace ( host ) ;
6510
6611 const { project, projectName} = getProject ( options , host ) ;
@@ -78,50 +23,28 @@ export const setupProject =
7823 tree : host ,
7924 project
8025 } ) ;
26+ } else {
27+ return setupStaticDeployment ( {
28+ workspace,
29+ workspacePath,
30+ options : config ,
31+ tree : host ,
32+ project
33+ } ) ;
8134 }
82- return setupStaticDeployment ( {
83- workspace,
84- workspacePath,
85- options : config ,
86- tree : host ,
87- project
88- } ) ;
89- } ;
35+ } ;
9036
9137export const ngAddSetupProject = (
92- options : DeployOptions & { isUniversalProject : boolean }
38+ options : DeployOptions
9339) => async ( host : Tree ) => {
9440 const projects = await listProjects ( ) ;
9541 const { firebaseProject } = await projectPrompt ( projects ) ;
96- return setupProject ( host , { ...options , firebaseProject} ) ;
42+ const isUniversalProject = ( global as any ) . setupAsAngularUniversalApp ;
43+ return setupProject ( host , { ...options , firebaseProject, isUniversalProject } ) ;
9744} ;
9845
99- export const ngAdd = ( options : DeployOptions ) => (
100- host : Tree ,
101- context : SchematicContext
102- ) => {
103-
104- addFirebaseHostingDependencies ( host , context ) ;
105-
106- const { project} = getProject ( options , host ) ;
107-
108- // In Angular 12 it appears I might need some sort of timeout to allow
109- // node_modules to resolve?
110- const timeout = new Promise ( resolve => setTimeout ( resolve , 1_000 ) ) ;
111-
112- return timeout .
113- then ( ( ) => projectTypePrompt ( project ) ) .
114- then ( ( { universalProject } : { universalProject : boolean } ) => {
115- if ( universalProject ) {
116- addFirebaseFunctionsDependencies ( host , context ) ;
117- }
118- const projectOptions : DeployOptions & { isUniversalProject : boolean } = {
119- ...options ,
120- isUniversalProject : universalProject
121- } ;
122- context . addTask ( new RunSchematicTask ( 'ng-add-setup-project' , projectOptions ) , [
123- context . addTask ( new NodePackageInstallTask ( ) )
124- ] ) ;
125- }
126- ) ;
127- } ;
46+ export const ngAdd = ( options : DeployOptions ) => chain ( [
47+ addFirebaseHostingDependencies ( ) ,
48+ addFirebaseFunctionsDependencies ( options ) ,
49+ ngAddSetupProject ( options ) ,
50+ ] ) ;
0 commit comments