( options: DeployOptions )
| 47 | }; |
| 48 | |
| 49 | export const ngAddSetupProject = ( |
| 50 | options: DeployOptions |
| 51 | ) => async (host: Tree, context: SchematicContext) => { |
| 52 | |
| 53 | // TODO is there a public API for this? |
| 54 | let projectRoot: string = (host as any)._backend._root; |
| 55 | if (process.platform.startsWith('win32')) { projectRoot = asWindowsPath(normalize(projectRoot)); } |
| 56 | |
| 57 | const features = await featuresPrompt(); |
| 58 | |
| 59 | if (features.length > 0) { |
| 60 | |
| 61 | const firebaseTools = await getFirebaseTools(); |
| 62 | |
| 63 | // Add the firebase files if they don't exist already so login.use works |
| 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 | ); |
| 69 | |
| 70 | const user = await userPrompt({ projectRoot }); |
| 71 | const defaultUser = await firebaseTools.login(options); |
| 72 | if (user.email !== defaultUser?.email) { |
| 73 | await firebaseTools.login.use(user.email, { projectRoot }); |
| 74 | } |
| 75 | |
| 76 | const { projectName: ngProjectName } = getProject(options, host); |
| 77 | |
| 78 | const [ defaultProjectName ] = getFirebaseProjectNameFromHost(host, ngProjectName); |
| 79 | |
| 80 | const firebaseProject = await projectPrompt(defaultProjectName, { projectRoot, account: user.email }); |
| 81 | |
| 82 | let firebaseApp: FirebaseApp|undefined; |
| 83 | let sdkConfig: Record<string, string>|undefined; |
| 84 | |
| 85 | const setupConfig: SetupConfig = { |
| 86 | ...options, firebaseProject, firebaseApp, sdkConfig, |
| 87 | firebaseJsonConfig: firebaseJson, |
| 88 | firebaseJsonPath: projectRoot |
| 89 | }; |
| 90 | if (features.length) { |
| 91 | |
| 92 | firebaseApp = await appPrompt(firebaseProject, undefined, { projectRoot }); |
| 93 | |
| 94 | const result = await firebaseTools.apps.sdkconfig('web', firebaseApp.appId, { nonInteractive: true, projectRoot }); |
| 95 | sdkConfig = result.sdkConfig; |
| 96 | delete sdkConfig.locationId; |
| 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 | }); |
nothing calls this directly
no test coverage detected