import { HttpClient } from '@angular/common/http'; import { APP_INITIALIZER, InjectionToken } from '@angular/core'; import { lastValueFrom } from 'rxjs'; export interface AppConfig { apiBaseUrl: string; } export const APP_CONFIG = new InjectionToken('appConfig'); const _appConfig: AppConfig = { apiBaseUrl: '', }; export function appConfigFactory(http: HttpClient) { return (): Promise => { return lastValueFrom(http.get('./config.json')).then( (config) => { Object.assign(_appConfig, config); }, () => { // Keep defaults if config.json is not available (dev mode). }, ); }; } export const appConfigProvider = { provide: APP_CONFIG, useValue: _appConfig, }; export const appConfigInitProvider = { provide: APP_INITIALIZER, useFactory: appConfigFactory, deps: [HttpClient], multi: true, }; export function getAppConfig(): AppConfig { return _appConfig; }