1- import { writeFileSync } from 'fs' ;
1+ import { readFileSync , writeFileSync } from 'fs' ;
22import { join } from 'path' ;
33import { asWindowsPath , normalize } from '@angular-devkit/core' ;
44import { SchematicContext , Tree , chain } from '@angular-devkit/schematics' ;
55import { addRootProvider } from '@schematics/angular/utility' ;
66import { getFirebaseTools } from '../firebaseTools' ;
77import {
8- DeployOptions , FEATURES , FirebaseApp , FirebaseProject ,
8+ DataConnectConnectorConfig ,
9+ DeployOptions , FEATURES , FirebaseApp , FirebaseJSON , FirebaseProject ,
910} from '../interfaces' ;
1011import {
1112 addIgnoreFiles ,
1213 featureToRules ,
1314 getFirebaseProjectNameFromHost ,
1415 getProject ,
16+ parseDataConnectConfig ,
17+ setupTanstackDependencies ,
1518} from '../utils' ;
1619import { appPrompt , featuresPrompt , projectPrompt , userPrompt } from './prompts' ;
1720
1821export interface SetupConfig extends DeployOptions {
1922 firebaseProject : FirebaseProject ,
2023 firebaseApp ?: FirebaseApp ,
2124 sdkConfig ?: Record < string , string > ,
25+ firebaseJsonConfig ?: FirebaseJSON ;
26+ dataConnectConfig ?: DataConnectConnectorConfig | null ;
27+ firebaseJsonPath : string ;
2228}
2329
2430export const setupProject =
@@ -35,7 +41,7 @@ export const setupProject =
3541 config . sdkConfig ? `{ ${ Object . entries ( config . sdkConfig ) . map ( ( [ k , v ] ) => `${ k } : ${ JSON . stringify ( v ) } ` ) . join ( ", " ) } }` : ""
3642 } ))`;
3743 } ) ,
38- ...featureToRules ( features , projectName ) ,
44+ ...featureToRules ( features , projectName , config . dataConnectConfig ) ,
3945 ] ) ;
4046 }
4147} ;
@@ -56,6 +62,10 @@ export const ngAddSetupProject = (
5662
5763 // Add the firebase files if they don't exist already so login.use works
5864 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+ ) ;
5969
6070 const user = await userPrompt ( { projectRoot } ) ;
6171 const defaultUser = await firebaseTools . login ( options ) ;
@@ -72,19 +82,57 @@ export const ngAddSetupProject = (
7282 let firebaseApp : FirebaseApp | undefined ;
7383 let sdkConfig : Record < string , string > | undefined ;
7484
85+ const setupConfig : SetupConfig = {
86+ ...options , firebaseProject, firebaseApp, sdkConfig,
87+ firebaseJsonConfig : firebaseJson ,
88+ firebaseJsonPath : projectRoot
89+ } ;
7590 if ( features . length ) {
7691
7792 firebaseApp = await appPrompt ( firebaseProject , undefined , { projectRoot } ) ;
7893
7994 const result = await firebaseTools . apps . sdkconfig ( 'web' , firebaseApp . appId , { nonInteractive : true , projectRoot } ) ;
8095 sdkConfig = result . sdkConfig ;
8196 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+ 83134 }
84135
85- return setupProject ( host , context , features , {
86- ...options , firebaseProject, firebaseApp, sdkConfig,
87- } ) ;
88- 136+ return setupProject ( host , context , features , setupConfig ) ;
89137 }
90138} ;
0 commit comments