@jschneller/nestjs-feature-flag-manager
Version:
Feature flag manager library in Nestjs
52 lines • 3.35 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FeatureFlagManager = void 0;
const common_1 = require("@nestjs/common");
const feature_flag_manager_tokens_1 = require("./feature-flag-manager.tokens");
const application_environment_enum_1 = require("./application-environment.enum");
const nestjs_unleash_1 = require("@jschneller/nestjs-unleash");
let FeatureFlagManager = class FeatureFlagManager {
constructor(featureFlagMap, applicationEnvironment, unleashClient) {
this.featureFlagMap = featureFlagMap;
this.applicationEnvironment = applicationEnvironment;
this.unleashClient = unleashClient;
}
async isEnabled(featureFlagName, unleashContext) {
const mappedFeatureFlag = this.featureFlagMap.get(featureFlagName);
if (mappedFeatureFlag === undefined) {
throw new Error(`Feature flag "${featureFlagName}" is not present in the feature flag map of the manager module.`);
}
if (this.applicationEnvironment === application_environment_enum_1.ApplicationEnvironmentEnum.LOCALHOST) {
let environmentVariableFeatureFlagValue = process.env[mappedFeatureFlag.envVariableKey];
if (environmentVariableFeatureFlagValue === undefined) {
throw new Error(`Feature flag "${featureFlagName}" is not present in environment variables under key "${mappedFeatureFlag.envVariableKey}"`);
}
environmentVariableFeatureFlagValue = String(environmentVariableFeatureFlagValue);
if (environmentVariableFeatureFlagValue !== '0' && environmentVariableFeatureFlagValue !== '1') {
throw new Error(`Feature flag "${featureFlagName}" in environment variables under key "${mappedFeatureFlag.envVariableKey}" has an incorrect value. Expected 1 or 0.`);
}
return environmentVariableFeatureFlagValue === '1';
}
return this.unleashClient.isEnabled(mappedFeatureFlag.unleashKey, unleashContext);
}
};
FeatureFlagManager = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, feature_flag_manager_tokens_1.injectFeatureFlagMap)()),
__param(1, (0, feature_flag_manager_tokens_1.injectApplicationEnvironmentConfig)()),
__metadata("design:paramtypes", [Object, String, nestjs_unleash_1.UnleashClient])
], FeatureFlagManager);
exports.FeatureFlagManager = FeatureFlagManager;
//# sourceMappingURL=feature-flag.manager.js.map