51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
|
|
/**
|
||
|
|
* Feature Flags — enable features without new releases
|
||
|
|
*
|
||
|
|
* Pilot 001-010: Control which modules are visible.
|
||
|
|
*/
|
||
|
|
|
||
|
|
export type FeatureFlag =
|
||
|
|
| 'ENABLE_REPLAY'
|
||
|
|
| 'ENABLE_DATASET_EXPLORER'
|
||
|
|
| 'ENABLE_MODEL_TRAINING'
|
||
|
|
| 'ENABLE_HOTSPOTS'
|
||
|
|
| 'ENABLE_ECONOMIC_ENGINE'
|
||
|
|
| 'ENABLE_DEVELOPER_MODE';
|
||
|
|
|
||
|
|
export interface FeatureFlags {
|
||
|
|
readonly flags: Record<FeatureFlag, boolean>;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const DefaultFeatureFlags: FeatureFlags = {
|
||
|
|
flags: {
|
||
|
|
ENABLE_REPLAY: false,
|
||
|
|
ENABLE_DATASET_EXPLORER: true,
|
||
|
|
ENABLE_MODEL_TRAINING: false,
|
||
|
|
ENABLE_HOTSPOTS: false,
|
||
|
|
ENABLE_ECONOMIC_ENGINE: false,
|
||
|
|
ENABLE_DEVELOPER_MODE: false,
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
export function isEnabled(flags: FeatureFlags, flag: FeatureFlag): boolean {
|
||
|
|
return flags.flags[flag] ?? false;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function enable(flags: FeatureFlags, flag: FeatureFlag): FeatureFlags {
|
||
|
|
return {
|
||
|
|
flags: {
|
||
|
|
...flags.flags,
|
||
|
|
[flag]: true,
|
||
|
|
},
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export function disable(flags: FeatureFlags, flag: FeatureFlag): FeatureFlags {
|
||
|
|
return {
|
||
|
|
flags: {
|
||
|
|
...flags.flags,
|
||
|
|
[flag]: false,
|
||
|
|
},
|
||
|
|
};
|
||
|
|
}
|