flagsmith-nodejs
Version:
Flagsmith lets you manage features flags and remote config across web, mobile and server side applications. Deliver true Continuous Integration. Get builds out faster. Control who has access to new features.
77 lines (76 loc) • 4.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getEnvironmentFeatureStates = exports.getEnvironmentFeatureState = exports.getIdentityFeatureStates = exports.getIdentityFeatureState = exports.OrganisationModel = exports.SegmentModel = exports.TraitModel = exports.IdentityModel = exports.FeatureStateModel = exports.FeatureModel = exports.EnvironmentModel = void 0;
const evaluators_js_1 = require("./segments/evaluators.js");
const errors_js_1 = require("./utils/errors.js");
var models_js_1 = require("./environments/models.js");
Object.defineProperty(exports, "EnvironmentModel", { enumerable: true, get: function () { return models_js_1.EnvironmentModel; } });
var models_js_2 = require("./features/models.js");
Object.defineProperty(exports, "FeatureModel", { enumerable: true, get: function () { return models_js_2.FeatureModel; } });
Object.defineProperty(exports, "FeatureStateModel", { enumerable: true, get: function () { return models_js_2.FeatureStateModel; } });
var models_js_3 = require("./identities/models.js");
Object.defineProperty(exports, "IdentityModel", { enumerable: true, get: function () { return models_js_3.IdentityModel; } });
var models_js_4 = require("./identities/traits/models.js");
Object.defineProperty(exports, "TraitModel", { enumerable: true, get: function () { return models_js_4.TraitModel; } });
var models_js_5 = require("./segments/models.js");
Object.defineProperty(exports, "SegmentModel", { enumerable: true, get: function () { return models_js_5.SegmentModel; } });
var models_js_6 = require("./organisations/models.js");
Object.defineProperty(exports, "OrganisationModel", { enumerable: true, get: function () { return models_js_6.OrganisationModel; } });
function getIdentityFeatureStatesDict(environment, identity, overrideTraits) {
// Get feature states from the environment
const featureStates = {};
for (const fs of environment.featureStates) {
featureStates[fs.feature.id] = fs;
}
// Override with any feature states defined by matching segments
const identitySegments = (0, evaluators_js_1.getIdentitySegments)(environment, identity, overrideTraits);
for (const matchingSegment of identitySegments) {
for (const featureState of matchingSegment.featureStates) {
if (featureStates[featureState.feature.id]) {
if (featureStates[featureState.feature.id].isHigherSegmentPriority(featureState)) {
continue;
}
}
featureStates[featureState.feature.id] = featureState;
}
}
// Override with any feature states defined directly the identity
for (const fs of identity.identityFeatures) {
if (featureStates[fs.feature.id]) {
featureStates[fs.feature.id] = fs;
}
}
return featureStates;
}
function getIdentityFeatureState(environment, identity, featureName, overrideTraits) {
const featureStates = getIdentityFeatureStatesDict(environment, identity, overrideTraits);
const matchingFeature = Object.values(featureStates).filter(f => f.feature.name === featureName);
if (matchingFeature.length === 0) {
throw new errors_js_1.FeatureStateNotFound('Feature State Not Found');
}
return matchingFeature[0];
}
exports.getIdentityFeatureState = getIdentityFeatureState;
function getIdentityFeatureStates(environment, identity, overrideTraits) {
const featureStates = Object.values(getIdentityFeatureStatesDict(environment, identity, overrideTraits));
if (environment.project.hideDisabledFlags) {
return featureStates.filter(fs => !!fs.enabled);
}
return featureStates;
}
exports.getIdentityFeatureStates = getIdentityFeatureStates;
function getEnvironmentFeatureState(environment, featureName) {
const featuresStates = environment.featureStates.filter(f => f.feature.name === featureName);
if (featuresStates.length === 0) {
throw new errors_js_1.FeatureStateNotFound('Feature State Not Found');
}
return featuresStates[0];
}
exports.getEnvironmentFeatureState = getEnvironmentFeatureState;
function getEnvironmentFeatureStates(environment) {
if (environment.project.hideDisabledFlags) {
return environment.featureStates.filter(fs => !!fs.enabled);
}
return environment.featureStates;
}
exports.getEnvironmentFeatureStates = getEnvironmentFeatureStates;