@featurevisor/core
Version:
Core package of Featurevisor for Node.js usage
110 lines • 3.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractSegmentsFromFeature = extractSegmentsFromFeature;
exports.extractSegmentKeysFromGroupSegments = extractSegmentKeysFromGroupSegments;
exports.extractAttributeKeysFromConditions = extractAttributeKeysFromConditions;
function extractSegmentsFromFeature(feature) {
const result = new Set();
// rules
for (const traffic of feature.traffic) {
if (traffic.segments) {
extractSegmentKeysFromGroupSegments(traffic.segments).forEach((segmentKey) => {
result.add(segmentKey);
});
}
}
// force
if (feature.force) {
for (const f of feature.force) {
if (f.segments) {
extractSegmentKeysFromGroupSegments(f.segments).forEach((segmentKey) => {
result.add(segmentKey);
});
}
}
}
// variable overrides from inside variations
if (feature.variations) {
for (const variation of feature.variations) {
if (variation.variableOverrides) {
for (const variableKey in variation.variableOverrides) {
const overrides = variation.variableOverrides[variableKey];
if (overrides) {
for (const override of overrides) {
if (override.segments) {
extractSegmentKeysFromGroupSegments(override.segments).forEach((segmentKey) => {
result.add(segmentKey);
});
}
}
}
}
}
}
}
return result;
}
function extractSegmentKeysFromGroupSegments(segments) {
const result = new Set();
if (Array.isArray(segments)) {
segments.forEach((segment) => {
extractSegmentKeysFromGroupSegments(segment).forEach((segmentKey) => {
result.add(segmentKey);
});
});
}
if (typeof segments === "object") {
if ("and" in segments) {
extractSegmentKeysFromGroupSegments(segments.and).forEach((segmentKey) => {
result.add(segmentKey);
});
}
if ("or" in segments) {
extractSegmentKeysFromGroupSegments(segments.or).forEach((segmentKey) => {
result.add(segmentKey);
});
}
if ("not" in segments) {
extractSegmentKeysFromGroupSegments(segments.not).forEach((segmentKey) => {
result.add(segmentKey);
});
}
}
if (typeof segments === "string") {
result.add(segments);
}
return result;
}
function extractAttributeKeysFromConditions(conditions) {
const result = new Set();
if (Array.isArray(conditions)) {
conditions.forEach((condition) => {
extractAttributeKeysFromConditions(condition).forEach((attributeKey) => {
result.add(attributeKey);
});
});
}
if (typeof conditions === "string") {
return result;
}
if ("attribute" in conditions) {
result.add(conditions.attribute);
}
if ("and" in conditions) {
extractAttributeKeysFromConditions(conditions.and).forEach((attributeKey) => {
result.add(attributeKey);
});
}
if ("or" in conditions) {
extractAttributeKeysFromConditions(conditions.or).forEach((attributeKey) => {
result.add(attributeKey);
});
}
if ("not" in conditions) {
extractAttributeKeysFromConditions(conditions.not).forEach((attributeKey) => {
result.add(attributeKey);
});
}
return result;
}
//# sourceMappingURL=extractKeys.js.map