Files
dspace-angular/src/main.browser.ts
2023-04-04 12:04:32 -05:00

51 lines
1.6 KiB
TypeScript

import 'zone.js';
import 'reflect-metadata';
import 'core-js/es/reflect';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { BrowserAppModule } from './modules/app/browser-app.module';
import { environment } from './environments/environment';
import { AppConfig } from './config/app-config.interface';
import { extendEnvironmentWithAppConfig } from './config/config.util';
import { enableProdMode } from '@angular/core';
const bootstrap = () => platformBrowserDynamic()
.bootstrapModule(BrowserAppModule, {});
/**
* We use this to determine have been serven SSR HTML or not.
*
* At this point, {@link environment} may not be in sync with the configuration.
* Therefore, we cannot depend on it to determine how to bootstrap the app.
*/
const hasTransferState = document.querySelector('script#dspace-angular-state') !== null;
const main = () => {
if (environment.production) {
enableProdMode();
}
if (hasTransferState) {
// Configuration will be taken from transfer state during initialization
return bootstrap();
} else {
// Configuration must be fetched explicitly
return fetch('assets/config.json')
.then((response) => response.json())
.then((appConfig: AppConfig) => {
// extend environment with app config for browser when not prerendered
extendEnvironmentWithAppConfig(environment, appConfig);
return bootstrap();
});
}
};
// support async tag or hmr
if (document.readyState === 'complete' && !hasTransferState) {
main();
} else {
document.addEventListener('DOMContentLoaded', main);
}