UNPKG

@splitsoftware/splitio-commons

Version:
70 lines (69 loc) 3 kB
"use strict"; 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;