Represent feature flags using an enum

Replaces the previous string literal type
This commit is contained in:
Henry Mercer 2021-12-16 13:14:32 +00:00
parent 5e87034b3b
commit 6d62c245ec
12 changed files with 88 additions and 108 deletions

40
lib/feature-flags.js generated
View file

@ -19,9 +19,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFeatureFlags = exports.GitHubFeatureFlags = void 0;
exports.createFeatureFlags = exports.GitHubFeatureFlags = exports.FeatureFlag = void 0;
const api_client_1 = require("./api-client");
const util = __importStar(require("./util"));
var FeatureFlag;
(function (FeatureFlag) {
FeatureFlag["DatabaseUploadsEnabled"] = "database_uploads_enabled";
FeatureFlag["MlPoweredQueriesEnabled"] = "ml_powered_queries_enabled";
FeatureFlag["UploadsDomainEnabled"] = "uploads_domain_enabled";
})(FeatureFlag = exports.FeatureFlag || (exports.FeatureFlag = {}));
class GitHubFeatureFlags {
constructor(gitHubVersion, apiDetails, repositoryNwo, logger) {
this.gitHubVersion = gitHubVersion;
@ -29,25 +35,17 @@ class GitHubFeatureFlags {
this.repositoryNwo = repositoryNwo;
this.logger = logger;
}
getDatabaseUploadsEnabled() {
return this.getFeatureFlag("database_uploads_enabled");
}
getMlPoweredQueriesEnabled() {
return this.getFeatureFlag("ml_powered_queries_enabled");
}
getUploadsDomainEnabled() {
return this.getFeatureFlag("uploads_domain_enabled");
async getValue(flag) {
const response = (await this.getApiResponse())[flag];
if (response === undefined) {
this.logger.debug(`Feature flag '${flag}' undefined in API response, considering it disabled.`);
return false;
}
return response;
}
async preloadFeatureFlags() {
await this.getApiResponse();
}
async getFeatureFlag(name) {
const response = (await this.getApiResponse())[name];
if (response === undefined) {
this.logger.debug(`Feature flag '${name}' undefined in API response, considering it disabled.`);
}
return response || false;
}
async getApiResponse() {
const loadApiResponse = async () => {
// Do nothing when not running against github.com
@ -84,14 +82,8 @@ exports.GitHubFeatureFlags = GitHubFeatureFlags;
*/
function createFeatureFlags(enabledFlags) {
return {
getDatabaseUploadsEnabled: async () => {
return enabledFlags.includes("database_uploads_enabled");
},
getMlPoweredQueriesEnabled: async () => {
return enabledFlags.includes("ml_powered_queries_enabled");
},
getUploadsDomainEnabled: async () => {
return enabledFlags.includes("uploads_domain_enabled");
getValue: async (flag) => {
return enabledFlags.includes(flag);
},
};
}