1
- import { writeFileSync } from 'fs' ;
1
+ import { readFileSync , writeFileSync } from 'fs' ;
2
2
import { join } from 'path' ;
3
3
import { asWindowsPath , normalize } from '@angular-devkit/core' ;
4
4
import { SchematicContext , Tree , chain } from '@angular-devkit/schematics' ;
5
5
import { addRootProvider } from '@schematics/angular/utility' ;
6
6
import { getFirebaseTools } from '../firebaseTools' ;
7
7
import {
8
- DeployOptions , FEATURES , FirebaseApp , FirebaseProject ,
8
+ DataConnectConnectorConfig ,
9
+ DeployOptions , FEATURES , FirebaseApp , FirebaseJSON , FirebaseProject ,
9
10
} from '../interfaces' ;
10
11
import {
11
12
addIgnoreFiles ,
12
13
featureToRules ,
13
14
getFirebaseProjectNameFromHost ,
14
15
getProject ,
16
+ parseDataConnectConfig ,
17
+ setupTanstackDependencies ,
15
18
} from '../utils' ;
16
19
import { appPrompt , featuresPrompt , projectPrompt , userPrompt } from './prompts' ;
17
20
18
21
export interface SetupConfig extends DeployOptions {
19
22
firebaseProject : FirebaseProject ,
20
23
firebaseApp ?: FirebaseApp ,
21
24
sdkConfig ?: Record < string , string > ,
25
+ firebaseJsonConfig ?: FirebaseJSON ;
26
+ dataConnectConfig ?: DataConnectConnectorConfig | null ;
27
+ firebaseJsonPath : string ;
22
28
}
23
29
24
30
export const setupProject =
@@ -35,7 +41,7 @@ export const setupProject =
35
41
config . sdkConfig ? `{ ${ Object . entries ( config . sdkConfig ) . map ( ( [ k , v ] ) => `${ k } : ${ JSON . stringify ( v ) } ` ) . join ( ", " ) } }` : ""
36
42
} ))`;
37
43
} ) ,
38
- ...featureToRules ( features , projectName ) ,
44
+ ...featureToRules ( features , projectName , config . dataConnectConfig ) ,
39
45
] ) ;
40
46
}
41
47
} ;
@@ -56,6 +62,10 @@ export const ngAddSetupProject = (
56
62
57
63
// Add the firebase files if they don't exist already so login.use works
58
64
if ( ! host . exists ( '/firebase.json' ) ) { writeFileSync ( join ( projectRoot , 'firebase.json' ) , '{}' ) ; }
65
+
66
+ let firebaseJson : FirebaseJSON = JSON . parse (
67
+ readFileSync ( join ( projectRoot , "firebase.json" ) ) . toString ( )
68
+ ) ;
59
69
60
70
const user = await userPrompt ( { projectRoot } ) ;
61
71
const defaultUser = await firebaseTools . login ( options ) ;
@@ -72,19 +82,57 @@ export const ngAddSetupProject = (
72
82
let firebaseApp : FirebaseApp | undefined ;
73
83
let sdkConfig : Record < string , string > | undefined ;
74
84
85
+ const setupConfig : SetupConfig = {
86
+ ...options , firebaseProject, firebaseApp, sdkConfig,
87
+ firebaseJsonConfig : firebaseJson ,
88
+ firebaseJsonPath : projectRoot
89
+ } ;
75
90
if ( features . length ) {
76
91
77
92
firebaseApp = await appPrompt ( firebaseProject , undefined , { projectRoot } ) ;
78
93
79
94
const result = await firebaseTools . apps . sdkconfig ( 'web' , firebaseApp . appId , { nonInteractive : true , projectRoot } ) ;
80
95
sdkConfig = result . sdkConfig ;
81
96
delete sdkConfig . locationId ;
82
-
97
+ setupConfig . sdkConfig = sdkConfig ;
98
+ setupConfig . firebaseApp = firebaseApp ;
99
+ // set up data connect locally if data connect hasn't already been initialized.
100
+ if ( features . includes ( FEATURES . DataConnect ) ) {
101
+ if ( ! firebaseJson . dataconnect ) {
102
+ try {
103
+ await firebaseTools . init ( "dataconnect" , {
104
+ projectRoot,
105
+ project : firebaseProject . projectId ,
106
+ } ) ;
107
+ // Update firebaseJson values to include newly added dataconnect field in firebase.json.
108
+ firebaseJson = JSON . parse (
109
+ readFileSync ( join ( projectRoot , "firebase.json" ) ) . toString ( )
110
+ ) ;
111
+ setupConfig . firebaseJsonConfig = firebaseJson ;
112
+ } catch ( e ) {
113
+ console . error ( e ) ;
114
+ }
115
+ }
116
+ let dataConnectConfig = parseDataConnectConfig ( setupConfig ) ;
117
+ if ( ! dataConnectConfig ?. connectorYaml . generate ?. javascriptSdk ) {
118
+ await firebaseTools . init ( "dataconnect:sdk" , {
119
+ projectRoot,
120
+ project : firebaseProject . projectId ,
121
+ } ) ;
122
+ }
123
+ // Parse through sdk again
124
+ dataConnectConfig = parseDataConnectConfig ( setupConfig ) ;
125
+ if ( dataConnectConfig ?. angular ) {
126
+ context . logger . info ( 'Generated Angular SDK Enabled.' ) ;
127
+ } else {
128
+ context . logger . info ( 'Generated Angular SDK Disabled. Please add `angular: true` to your connector.yaml' ) ;
129
+ }
130
+ setupTanstackDependencies ( host , context ) ;
131
+ setupConfig . dataConnectConfig = dataConnectConfig ;
132
+ }
133
+
83
134
}
84
135
85
- return setupProject ( host , context , features , {
86
- ...options , firebaseProject, firebaseApp, sdkConfig,
87
- } ) ;
88
-
136
+ return setupProject ( host , context , features , setupConfig ) ;
89
137
}
90
138
} ;
0 commit comments