mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 20:29:06 +00:00
fix: restore feature boolean logic (#671)
Co-authored-by: Igor Loskutov <igor.loskutoff@gmail.com>
This commit is contained in:
@@ -21,8 +21,10 @@ const FEATURE_ENV_NAMES = [
|
|||||||
FEATURE_ROOMS_ENV_NAME,
|
FEATURE_ROOMS_ENV_NAME,
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
|
export type FeatureEnvName = (typeof FEATURE_ENV_NAMES)[number];
|
||||||
|
|
||||||
export type EnvFeaturePartial = {
|
export type EnvFeaturePartial = {
|
||||||
[key in (typeof FEATURE_ENV_NAMES)[number]]: boolean;
|
[key in FeatureEnvName]: boolean | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
// CONTRACT: isomorphic with JSON.stringify
|
// CONTRACT: isomorphic with JSON.stringify
|
||||||
@@ -51,7 +53,8 @@ export const getClientEnvClient = (): ClientEnvCommon => {
|
|||||||
return clientEnv!;
|
return clientEnv!;
|
||||||
};
|
};
|
||||||
|
|
||||||
const parseBooleanString = (str: string | undefined): boolean => {
|
const parseBooleanString = (str: string | undefined): boolean | null => {
|
||||||
|
if (str === undefined) return null;
|
||||||
return str === "true";
|
return str === "true";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import {
|
|||||||
FEATURE_REQUIRE_LOGIN_ENV_NAME,
|
FEATURE_REQUIRE_LOGIN_ENV_NAME,
|
||||||
FEATURE_ROOMS_ENV_NAME,
|
FEATURE_ROOMS_ENV_NAME,
|
||||||
FEATURE_SEND_TO_ZULIP_ENV_NAME,
|
FEATURE_SEND_TO_ZULIP_ENV_NAME,
|
||||||
|
FeatureEnvName,
|
||||||
|
getClientEnv,
|
||||||
} from "./clientEnv";
|
} from "./clientEnv";
|
||||||
|
|
||||||
export const FEATURES = [
|
export const FEATURES = [
|
||||||
@@ -26,37 +28,30 @@ export const DEFAULT_FEATURES: Features = {
|
|||||||
rooms: true,
|
rooms: true,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
function parseBooleanEnv(
|
export const ENV_TO_FEATURE: {
|
||||||
value: string | undefined,
|
[k in FeatureEnvName]: FeatureName;
|
||||||
defaultValue: boolean = false,
|
} = {
|
||||||
): boolean {
|
FEATURE_REQUIRE_LOGIN: "requireLogin",
|
||||||
if (!value) return defaultValue;
|
FEATURE_PRIVACY: "privacy",
|
||||||
return value.toLowerCase() === "true";
|
FEATURE_BROWSE: "browse",
|
||||||
}
|
FEATURE_SEND_TO_ZULIP: "sendToZulip",
|
||||||
|
FEATURE_ROOMS: "rooms",
|
||||||
|
} as const;
|
||||||
|
|
||||||
const features: Features = {
|
export const FEATURE_TO_ENV: {
|
||||||
requireLogin: parseBooleanEnv(
|
[k in FeatureName]: FeatureEnvName;
|
||||||
process.env[FEATURE_REQUIRE_LOGIN_ENV_NAME],
|
} = {
|
||||||
DEFAULT_FEATURES.requireLogin,
|
requireLogin: "FEATURE_REQUIRE_LOGIN",
|
||||||
),
|
privacy: "FEATURE_PRIVACY",
|
||||||
privacy: parseBooleanEnv(
|
browse: "FEATURE_BROWSE",
|
||||||
process.env[FEATURE_PRIVACY_ENV_NAME],
|
sendToZulip: "FEATURE_SEND_TO_ZULIP",
|
||||||
DEFAULT_FEATURES.privacy,
|
rooms: "FEATURE_ROOMS",
|
||||||
),
|
|
||||||
browse: parseBooleanEnv(
|
|
||||||
process.env[FEATURE_BROWSE_ENV_NAME],
|
|
||||||
DEFAULT_FEATURES.browse,
|
|
||||||
),
|
|
||||||
sendToZulip: parseBooleanEnv(
|
|
||||||
process.env[FEATURE_SEND_TO_ZULIP_ENV_NAME],
|
|
||||||
DEFAULT_FEATURES.sendToZulip,
|
|
||||||
),
|
|
||||||
rooms: parseBooleanEnv(
|
|
||||||
process.env[FEATURE_ROOMS_ENV_NAME],
|
|
||||||
DEFAULT_FEATURES.rooms,
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const features = getClientEnv();
|
||||||
|
|
||||||
export const featureEnabled = (featureName: FeatureName): boolean => {
|
export const featureEnabled = (featureName: FeatureName): boolean => {
|
||||||
return features[featureName];
|
const isSet = features[FEATURE_TO_ENV[featureName]];
|
||||||
|
if (isSet === null) return DEFAULT_FEATURES[featureName];
|
||||||
|
return isSet;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user