UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

99 lines (98 loc) 4.17 kB
import proj4 from 'proj4'; import { register } from 'ol/proj/proj4'; import ConfigManager from './tools/configuration/configmanager'; import OfflineManager from './tools/offline/offlinemanager'; import ShareManager from './tools/share/sharemanager'; import StateManager from './tools/state/statemanager'; import ThemesManager from './tools/themes/themesmanager'; import LogManager from './tools/logging/logmanager'; import AuthManager from './tools/auth/authmanager'; import ErrorManager from './tools/error/errormanager'; import CsvManager from './tools/export/csvmanager'; import I18nManager from './tools/i18n/i18nmanager'; import WfsManager from './tools/wfs/wfsmanager'; import OrderingManager from './tools/ordering/orderingmanager'; import PluginManager from './tools/auth/pluginmanager'; async function waitForServiceWorkerActivation() { const registration = await navigator.serviceWorker.register('service-worker.js'); if (registration.active) { return registration.active; } const sw = registration.installing || registration.waiting; if (!sw) { throw new Error('No service worker is installing or waiting.'); } return new Promise((resolve) => { sw.addEventListener('statechange', function onStateChange() { if (sw.state === 'activated') { sw.removeEventListener('statechange', onStateChange); resolve(sw); } }); }); } async function initializeServiceWorker() { const storeVersion = 6; const dbCacheName = 'geogirafe-cache'; if (!navigator?.serviceWorker) { console.warn("Service worker could not be initialized. Authentication and offline maps won't work"); return; } let sw; try { sw = await waitForServiceWorkerActivation(); } catch { console.warn("Service worker could not be initialized. Authentication and offline maps won't work"); return; } // Communicate logging configuration to service-worker const config = ConfigManager.getInstance().Config; sw.postMessage({ logLevel: config.general.logLevel }); // Communicate oauth configuration to service-worker const issuerConfig = config.oauth?.issuer ?? config.gmfauth; const gmfConfig = config.oauth?.geomapfish ?? config.gmfauth; if (issuerConfig && gmfConfig) { const issuerHostname = new URL(issuerConfig.url).hostname; const audience = [...issuerConfig.audience, issuerHostname]; sw.postMessage({ audience: audience, audienceExcludedPaths: issuerConfig.audienceExcludedPaths, authMode: gmfConfig.authMode, refererPolicy: gmfConfig.refererPolicy }); } await OfflineManager.getInstance().setServiceWorker(sw, storeVersion, dbCacheName); await AuthManager.getInstance().initialize(sw); } export async function initialize() { // First of all : Load the configuration await ConfigManager.getInstance().loadConfig(); await LogManager.getInstance().initLogging(); // Default configuration for Cesium (see https://cesium.com/learn/cesiumjs-learn/cesiumjs-quickstart/) window.CESIUM_BASE_URL = 'lib/cesium/'; // Register Coordinate Reference Systems (CRS) definitions in PROJ4 ConfigManager.getInstance().Config.crs.forEach((x) => { proj4.defs(x.code, x.definition); }); register(proj4); // Register Service Worker await initializeServiceWorker(); // Initialize the managers ErrorManager.getInstance(); CsvManager.getInstance(); I18nManager.getInstance(); WfsManager.getInstance(); OrderingManager.getInstance(); PluginManager.getInstance(); await ThemesManager.getInstance().initialize(); // Add the state to document, so that it will be accessible everywhere document.geogirafe = { state: StateManager.getInstance().state, stateManager: StateManager.getInstance(), shareManager: ShareManager.getInstance(), offlineManager: OfflineManager.getInstance(), themesManager: ThemesManager.getInstance(), configManager: ConfigManager.getInstance() }; }