@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
32 lines (25 loc) • 1.09 kB
text/typescript
import { ENGINE_BUCKET } from '../../logger/constants';
import { ILogger } from '../../logger/types';
import { bucket } from '../../utils/murmur3/murmur3';
/**
* Get the treatment name given a key, a seed, and the percentage of each treatment.
*/
export function getTreatment(log: ILogger, key: string, seed: number | undefined, treatments: { getTreatmentFor: (x: number) => string }) {
const _bucket = bucket(key, seed);
const treatment = treatments.getTreatmentFor(_bucket);
log.debug(ENGINE_BUCKET, [_bucket, key, seed, treatment]);
return treatment;
}
/**
* Evaluates the traffic allocation to see if we should apply rollout conditions or not.
*/
export function shouldApplyRollout(trafficAllocation: number, key: string, trafficAllocationSeed: number) {
// For rollout, if traffic allocation for splits is 100%, we don't need to filter it because everything should evaluate the rollout.
if (trafficAllocation < 100) {
const _bucket = bucket(key, trafficAllocationSeed);
if (_bucket > trafficAllocation) {
return false;
}
}
return true;
}