UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

70 lines 2.37 kB
import { PayloadType } from 'unleash-client'; import { defaultVariant } 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) { const variant = this.externalResolver.getVariant(flagName, context); if (variant.enabled) { flags[flagName] = variant; } else { flags[flagName] = variant.feature_enabled ?? 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 if (exp.enabled) return exp.enabled; } return this.externalResolver.isEnabled(expName, context); } getVariant(expName, context) { const exp = this.experiments[expName]; if (exp) { if (typeof exp === 'boolean') return defaultVariant; 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