-import { enableProdMode } from '@angular/core';
-import { bootstrap } from '@angular/platform-browser-dynamic';
-import { provideRouter } from '@angular/router';
+import { ApplicationRef, enableProdMode } from '@angular/core'
+import { enableDebugTools } from '@angular/platform-browser'
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
+import { AppModule } from './app/app.module'
+import { environment } from './environments/environment'
+import { logger } from './root-helpers'
-import { AppComponent } from './app/app.component';
-import { routes } from './app/app.routes';
-
-if (process.env.ENV === 'production') {
- enableProdMode();
+if (environment.production) {
+ enableProdMode()
}
-bootstrap(AppComponent, [ provideRouter(routes) ]);
+logger.registerServerSending(environment.apiUrl)
+
+const bootstrap = () => platformBrowserDynamic()
+ .bootstrapModule(AppModule)
+ .then(bootstrapModule => {
+ if (!environment.production) {
+ const applicationRef = bootstrapModule.injector.get(ApplicationRef)
+ const componentRef = applicationRef.components[0]
+
+ // allows to run `ng.profiler.timeChangeDetection();`
+ enableDebugTools(componentRef)
+ }
+
+ return bootstrapModule
+ })
+ .catch(err => {
+ try {
+ logger.error(err)
+ } catch (err2) {
+ console.error('Cannot log error', { err, err2 })
+ }
+
+ // Ensure we display an "incompatible message" on Angular bootstrap error
+ setTimeout(() => {
+ if (document.querySelector('my-app').innerHTML === '') {
+ throw err
+ }
+ }, 1000)
+
+ return null
+ })
+
+bootstrap()