From c879090a34f89b32892ae2d7e41d38ad80d8c6c1 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 21 Dec 2022 10:17:53 +0000 Subject: [PATCH] Re-jig config accessors We only ever used the static instance() method to get to the config object, so just make a static instance that returns the ConfigOptions directly, throwing an exception if it's not yet initialised. This way the types can all be non-optional (plus it's shorter). --- src/PosthogAnalytics.ts | 4 ++-- src/config/Config.ts | 22 ++++++++++++---------- src/initializer.tsx | 9 +++------ src/settings/submit-rageshake.ts | 4 ++-- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/PosthogAnalytics.ts b/src/PosthogAnalytics.ts index 0e40ab06..9e5b2456 100644 --- a/src/PosthogAnalytics.ts +++ b/src/PosthogAnalytics.ts @@ -114,8 +114,8 @@ export class PosthogAnalytics { constructor(private readonly posthog: PostHog) { const posthogConfig: PosthogSettings = { - project_api_key: Config.instance.config.posthog?.api_key, - api_host: Config.instance.config.posthog?.api_host, + project_api_key: Config.get().posthog?.api_key, + api_host: Config.get().posthog?.api_host, }; if (posthogConfig.project_api_key && posthogConfig.api_host) { diff --git a/src/config/Config.ts b/src/config/Config.ts index af6b8b53..d961a452 100644 --- a/src/config/Config.ts +++ b/src/config/Config.ts @@ -18,13 +18,15 @@ import { DEFAULT_CONFIG, ConfigOptions } from "./ConfigOptions"; export class Config { private static internalInstance: Config; - public static get instance(): Config { - if (!this.internalInstance) + + public static get(): ConfigOptions { + if (!this.internalInstance?.config) throw new Error("Config instance read before config got initialized"); - return this.internalInstance; + return this.internalInstance.config; } + public static init(): Promise { - if (Config?.internalInstance?.initPromise) { + if (Config.internalInstance?.initPromise) { return Config.internalInstance.initPromise; } Config.internalInstance = new Config(); @@ -39,25 +41,25 @@ export class Config { // Convenience accessors public static defaultHomeserverUrl(): string | undefined { - const defaultServerConfig = Config.instance.config.default_server_config; + const defaultServerConfig = Config.get().default_server_config; if (!defaultServerConfig) { return undefined; } - return defaultServerConfig["m.homeserver"]?.base_url; + return defaultServerConfig["m.homeserver"].base_url; } public static defaultServerName(): string | undefined { - const defaultServerConfig = Config.instance.config.default_server_config; + const defaultServerConfig = Config.get().default_server_config; if (!defaultServerConfig) { return undefined; } - return defaultServerConfig["m.homeserver"]?.server_name; + return defaultServerConfig["m.homeserver"].server_name; } - public config: ConfigOptions; - private initPromise: Promise; + public config?: ConfigOptions; + private initPromise?: Promise; } async function downloadConfig( diff --git a/src/initializer.tsx b/src/initializer.tsx index 4358f02b..63b90fca 100644 --- a/src/initializer.tsx +++ b/src/initializer.tsx @@ -191,13 +191,10 @@ export class Initializer { this.loadStates.sentry === LoadState.None && this.loadStates.config === LoadState.Loaded ) { - if ( - Config.instance.config.sentry?.DSN && - Config.instance.config.sentry?.environment - ) { + if (Config.get().sentry?.DSN && Config.get().sentry?.environment) { Sentry.init({ - dsn: Config.instance.config.sentry?.DSN, - environment: Config.instance.config.sentry?.environment, + dsn: Config.get().sentry?.DSN, + environment: Config.get().sentry?.environment, integrations: [ new Integrations.BrowserTracing({ routingInstrumentation: diff --git a/src/settings/submit-rageshake.ts b/src/settings/submit-rageshake.ts index 3bf223a4..8a77004c 100644 --- a/src/settings/submit-rageshake.ts +++ b/src/settings/submit-rageshake.ts @@ -53,7 +53,7 @@ export function useSubmitRageshake(): { const submitRageshake = useCallback( async (opts) => { - if (!Config.instance.config.rageshake?.submit_url) { + if (!Config.get().rageshake?.submit_url) { throw new Error("No rageshake URL is configured"); } @@ -261,7 +261,7 @@ export function useSubmitRageshake(): { ); } - await fetch(Config.instance.config.rageshake?.submit_url, { + await fetch(Config.get().rageshake?.submit_url, { method: "POST", body, });