signal-desktop/ts/environment.ts

59 lines
1.7 KiB
TypeScript
Raw Normal View History

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
2021-03-31 16:14:45 +00:00
import { makeEnumParser } from './util/enum';
import * as log from './logging/log';
2021-03-31 16:14:45 +00:00
// Many places rely on this enum being a string.
export enum Environment {
Development = 'development',
2024-09-04 18:12:45 +00:00
PackagedApp = 'production',
Staging = 'staging',
Test = 'test',
}
let environment: undefined | Environment;
let isMockTestEnvironment: undefined | boolean;
export function getEnvironment(): Environment {
if (environment === undefined) {
// This should never happen—we should always have initialized the environment by this
// point. It'd be nice to log here but the logger depends on the environment and we
// can't have circular dependencies.
2024-09-04 18:12:45 +00:00
return Environment.PackagedApp;
}
return environment;
}
/**
* Sets the current environment. Should be called early in a process's life, and can only
* be called once.
*
* isMockTestEnv is used when running tests that require a non-"test" environment but
* need to mock certain behaviors.
*/
export function setEnvironment(env: Environment, isMockTestEnv: boolean): void {
if (environment !== undefined) {
throw new Error('Environment has already been set');
}
environment = env;
isMockTestEnvironment = isMockTestEnv;
}
2021-03-31 16:14:45 +00:00
export const parseEnvironment = makeEnumParser(
Environment,
2024-09-04 18:12:45 +00:00
Environment.PackagedApp
2021-03-31 16:14:45 +00:00
);
2021-07-28 23:46:25 +00:00
export const isTestEnvironment = (env: Environment): boolean =>
2021-12-09 08:06:04 +00:00
env === Environment.Test;
export const isTestOrMockEnvironment = (): boolean => {
if (isMockTestEnvironment == null) {
log.error('Mock test environment not set');
}
return (
isTestEnvironment(getEnvironment()) || (isMockTestEnvironment ?? false)
);
};