| 149 | } |
| 150 | |
| 151 | export function featureToRules( |
| 152 | features: FEATURES[], |
| 153 | projectName: string, |
| 154 | dataConnectConfig?: DataConnectConnectorConfig | null |
| 155 | ) { |
| 156 | return features |
| 157 | .map((feature) => { |
| 158 | switch (feature) { |
| 159 | case FEATURES.AppCheck: |
| 160 | // TODO make this smarter in Angular Universal |
| 161 | return addRootProvider(projectName, ({ code, external }) => { |
| 162 | external("initializeAppCheck", "@angular/fire/app-check"); |
| 163 | external("ReCaptchaEnterpriseProvider", "@angular/fire/app-check"); |
| 164 | return code`${external( |
| 165 | "provideAppCheck", |
| 166 | "@angular/fire/app-check" |
| 167 | )}(() => { |
| 168 | // TODO get a reCAPTCHA Enterprise here https://console.cloud.google.com/security/recaptcha?project=_ |
| 169 | const provider = new ReCaptchaEnterpriseProvider(/* reCAPTCHA Enterprise site key */); |
| 170 | return initializeAppCheck(undefined, { provider, isTokenAutoRefreshEnabled: true }); |
| 171 | })`; |
| 172 | }); |
| 173 | case FEATURES.Analytics: |
| 174 | return chain([ |
| 175 | addRootProvider(projectName, ({ code, external }) => { |
| 176 | external("getAnalytics", "@angular/fire/analytics"); |
| 177 | return code`${external( |
| 178 | "provideAnalytics", |
| 179 | "@angular/fire/analytics" |
| 180 | )}(() => getAnalytics())`; |
| 181 | }), |
| 182 | // TODO if using Angular router |
| 183 | addRootProvider(projectName, ({ code, external }) => { |
| 184 | return code`${external( |
| 185 | "ScreenTrackingService", |
| 186 | "@angular/fire/analytics" |
| 187 | )}`; |
| 188 | }), |
| 189 | ...(features.includes(FEATURES.Authentication) |
| 190 | ? [ |
| 191 | addRootProvider(projectName, ({ code, external }) => { |
| 192 | return code`${external( |
| 193 | "UserTrackingService", |
| 194 | "@angular/fire/analytics" |
| 195 | )}`; |
| 196 | }), |
| 197 | ] |
| 198 | : []), |
| 199 | ]); |
| 200 | case FEATURES.Authentication: |
| 201 | return addRootProvider(projectName, ({ code, external }) => { |
| 202 | external("getAuth", "@angular/fire/auth"); |
| 203 | return code`${external( |
| 204 | "provideAuth", |
| 205 | "@angular/fire/auth" |
| 206 | )}(() => getAuth())`; |
| 207 | }); |
| 208 | case FEATURES.Database: |