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' ;
5
3
import { DeployOptions , NgAddNormalizedOptions } from './ng-add-common' ;
6
4
import { addFirebaseFunctionsDependencies , setupUniversalDeployment } from './ng-add-ssr' ;
7
5
import { addFirebaseHostingDependencies , setupStaticDeployment } from './ng-add-static' ;
8
6
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
-
62
7
export const setupProject =
63
- ( host : Tree , options : DeployOptions & { isUniversalProject : boolean , firebaseProject : string } ) => {
8
+ ( host : Tree , options : DeployOptions & { firebaseProject : string , isUniversalProject : boolean } ) => {
64
9
const { path : workspacePath , workspace } = getWorkspace ( host ) ;
65
10
66
11
const { project, projectName} = getProject ( options , host ) ;
@@ -78,50 +23,28 @@ export const setupProject =
78
23
tree : host ,
79
24
project
80
25
} ) ;
26
+ } else {
27
+ return setupStaticDeployment ( {
28
+ workspace,
29
+ workspacePath,
30
+ options : config ,
31
+ tree : host ,
32
+ project
33
+ } ) ;
81
34
}
82
- return setupStaticDeployment ( {
83
- workspace,
84
- workspacePath,
85
- options : config ,
86
- tree : host ,
87
- project
88
- } ) ;
89
- } ;
35
+ } ;
90
36
91
37
export const ngAddSetupProject = (
92
- options : DeployOptions & { isUniversalProject : boolean }
38
+ options : DeployOptions
93
39
) => async ( host : Tree ) => {
94
40
const projects = await listProjects ( ) ;
95
41
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 } ) ;
97
44
} ;
98
45
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