@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
70 lines (69 loc) • 3 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRolloutPlan = void 0;
var sets_1 = require("../utils/lang/sets");
var key_1 = require("../utils/key");
/**
* Gets the rollout plan snapshot from the given synchronous storage.
*/
function getRolloutPlan(log, storage, options) {
if (options === void 0) { options = {}; }
var keys = options.keys, exposeSegments = options.exposeSegments;
var splits = storage.splits, segments = storage.segments, rbSegments = storage.rbSegments;
log.debug("storage: get feature flags" + (keys ? ", and memberships for keys: " + keys : '') + (exposeSegments ? ', and segments' : ''));
return {
splitChanges: {
ff: {
t: splits.getChangeNumber(),
s: -1,
d: splits.getAll(),
},
rbs: {
t: rbSegments.getChangeNumber(),
s: -1,
d: rbSegments.getAll(),
}
},
segmentChanges: exposeSegments ? // @ts-ignore accessing private prop
Object.keys(segments.segmentCache).map(function (segmentName) { return ({
name: segmentName,
added: (0, sets_1.setToArray)(segments.segmentCache[segmentName]),
removed: [],
since: -1,
till: segments.getChangeNumber(segmentName)
}); }) :
undefined,
memberships: keys ?
keys.reduce(function (prev, key) {
var matchingKey = (0, key_1.getMatching)(key);
if (storage.shared) { // Client-side segments
var sharedStorage = storage.shared(matchingKey);
prev[matchingKey] = {
ms: {
k: Object.keys(sharedStorage.segments.segmentCache).map(function (segmentName) { return ({ n: segmentName }); }),
},
ls: sharedStorage.largeSegments ? {
k: Object.keys(sharedStorage.largeSegments.segmentCache).map(function (segmentName) { return ({ n: segmentName }); }),
} : undefined
};
}
else { // Server-side segments
prev[matchingKey] = {
ms: {
k: Object.keys(storage.segments.segmentCache).reduce(function (prev, segmentName) {
return storage.segments.segmentCache[segmentName].has(matchingKey) ?
prev.concat({ n: segmentName }) :
prev;
}, [])
},
ls: {
k: []
}
};
}
return prev;
}, {}) :
undefined
};
}
exports.getRolloutPlan = getRolloutPlan;
;