feature-management
Version:
Feature Flag Management
32 lines • 1.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FeatureManager = void 0;
require("reflect-metadata");
const feature_flag_store_1 = require("./feature-flag.store");
const constants_1 = require("./decorator/constants");
const container_1 = require("./container");
class FeatureManager {
constructor(environment) {
this.environment = environment;
}
async isEnabled(feature, context) {
const featureName = typeof feature === 'string' ? feature : feature['name'];
const featureFlagOptions = feature_flag_store_1.featureFlagStore.get(this.environment, featureName);
if (!featureFlagOptions || !featureFlagOptions.enabled) {
return false;
}
const strategies = featureFlagOptions?.strategies || [];
for (const strategy of strategies) {
const filterHandler = Reflect.getMetadata(constants_1.FEATURE_FILTER_METADATA, strategy.constructor);
const filterHandlerInstance = container_1.containerProvider
.resolveContainer()
.get(filterHandler);
const evaluatedResult = await filterHandlerInstance.evaluate(strategy, context);
if (evaluatedResult)
return true;
}
return !strategies.length;
}
}
exports.FeatureManager = FeatureManager;
//# sourceMappingURL=feature-manager.js.map