unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
62 lines • 2.02 kB
JavaScript
import { PayloadType } from 'unleash-client';
import { getDefaultVariant } from 'unleash-client/lib/variant.js';
export default class FlagResolver {
constructor(expOpt) {
this.experiments = expOpt.flags;
this.externalResolver = expOpt.externalResolver;
}
getAll(context) {
const flags = { ...this.experiments };
Object.keys(flags).forEach((flagName) => {
const flag = flags[flagName];
if (typeof flag === 'boolean') {
if (!flag) {
flags[flagName] = this.externalResolver.isEnabled(flagName, context);
}
}
else {
if (!flag?.enabled) {
flags[flagName] = this.externalResolver.getVariant(flagName, context);
}
}
});
return flags;
}
isEnabled(expName, context) {
const exp = this.experiments[expName];
if (exp) {
if (typeof exp === 'boolean')
return exp;
else
return exp.enabled;
}
return this.externalResolver.isEnabled(expName, context);
}
getVariant(expName, context) {
const exp = this.experiments[expName];
if (exp) {
if (typeof exp === 'boolean')
return getDefaultVariant();
else if (exp.enabled)
return exp;
}
return this.externalResolver.getVariant(expName, context);
}
getStaticContext() {
return this.externalResolver.getStaticContext();
}
get impactMetrics() {
return this.externalResolver?.impactMetrics;
}
}
export const getVariantValue = (variant) => {
if (variant?.enabled) {
if (!variant.payload)
return variant.name;
if (variant.payload.type === PayloadType.JSON) {
return JSON.parse(variant.payload.value);
}
return variant.payload.value;
}
};
//# sourceMappingURL=flag-resolver.js.map