@featurevisor/core 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/lib/allocator.d.ts +3 -0
- package/lib/allocator.js +40 -0
- package/lib/allocator.js.map +1 -0
- package/lib/allocator.spec.d.ts +1 -0
- package/lib/allocator.spec.js +85 -0
- package/lib/allocator.spec.js.map +1 -0
- package/lib/builder.js +58 -23
- package/lib/builder.js.map +1 -1
- package/lib/config.d.ts +2 -0
- package/lib/config.js +3 -1
- package/lib/config.js.map +1 -1
- package/lib/linter.d.ts +1 -0
- package/lib/linter.js +122 -41
- package/lib/linter.js.map +1 -1
- package/lib/tester.js +3 -8
- package/lib/tester.js.map +1 -1
- package/lib/traffic.d.ts +8 -2
- package/lib/traffic.js +99 -88
- package/lib/traffic.js.map +1 -1
- package/lib/traffic.spec.js +166 -14
- package/lib/traffic.spec.js.map +1 -1
- package/package.json +5 -5
- package/src/allocator.spec.ts +104 -0
- package/src/allocator.ts +44 -0
- package/src/builder.ts +53 -23
- package/src/config.ts +3 -0
- package/src/linter.ts +100 -16
- package/src/tester.ts +3 -8
- package/src/traffic.spec.ts +167 -16
- package/src/traffic.ts +123 -109
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.17.0](https://github.com/fahad19/featurevisor/compare/v0.16.0...v0.17.0) (2023-05-12)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @featurevisor/core
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [0.16.0](https://github.com/fahad19/featurevisor/compare/v0.15.0...v0.16.0) (2023-04-30)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* Mutually exclusive experiments via Groups ([#63](https://github.com/fahad19/featurevisor/issues/63)) ([f3c8523](https://github.com/fahad19/featurevisor/commit/f3c85236d36fd0e499897f9ce1c2ed551c111523))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
# [0.15.0](https://github.com/fahad19/featurevisor/compare/v0.14.1...v0.15.0) (2023-04-23)
|
|
7
26
|
|
|
8
27
|
|
package/lib/allocator.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUpdatedAvailableRangesAfterFilling = exports.getAllocation = void 0;
|
|
4
|
+
function getAllocation(availableRanges, fill) {
|
|
5
|
+
var result = [];
|
|
6
|
+
var remaining = fill;
|
|
7
|
+
var i = 0;
|
|
8
|
+
while (remaining > 0 && i < availableRanges.length) {
|
|
9
|
+
var range = availableRanges[i];
|
|
10
|
+
var rangeFill = Math.min(remaining, range.end - range.start);
|
|
11
|
+
result.push({
|
|
12
|
+
start: range.start,
|
|
13
|
+
end: range.start + rangeFill,
|
|
14
|
+
});
|
|
15
|
+
remaining -= rangeFill;
|
|
16
|
+
i++;
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
exports.getAllocation = getAllocation;
|
|
21
|
+
function getUpdatedAvailableRangesAfterFilling(availableRanges, fill) {
|
|
22
|
+
var result = [];
|
|
23
|
+
var remaining = fill;
|
|
24
|
+
var i = 0;
|
|
25
|
+
while (remaining > 0 && i < availableRanges.length) {
|
|
26
|
+
var range = availableRanges[i];
|
|
27
|
+
var rangeFill = Math.min(remaining, range.end - range.start);
|
|
28
|
+
if (rangeFill < range.end - range.start) {
|
|
29
|
+
result.push({
|
|
30
|
+
start: range.start + rangeFill,
|
|
31
|
+
end: range.end,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
remaining -= rangeFill;
|
|
35
|
+
i++;
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
exports.getUpdatedAvailableRangesAfterFilling = getUpdatedAvailableRangesAfterFilling;
|
|
40
|
+
//# sourceMappingURL=allocator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allocator.js","sourceRoot":"","sources":["../src/allocator.ts"],"names":[],"mappings":";;;AAEA,SAAgB,aAAa,CAAC,eAAwB,EAAE,IAAgB;IACtE,IAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE;QAClD,IAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS;SAC7B,CAAC,CAAC;QACH,SAAS,IAAI,SAAS,CAAC;QACvB,CAAC,EAAE,CAAC;KACL;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAjBD,sCAiBC;AAED,SAAgB,qCAAqC,CACnD,eAAwB,EACxB,IAAgB;IAEhB,IAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE;QAClD,IAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE;YACvC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS;gBAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAC,CAAC;SACJ;QACD,SAAS,IAAI,SAAS,CAAC;QACvB,CAAC,EAAE,CAAC;KACL;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAtBD,sFAsBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var allocator_1 = require("./allocator");
|
|
4
|
+
describe("core: allocator", function () {
|
|
5
|
+
test("is a function", function () {
|
|
6
|
+
expect(allocator_1.getAllocation).toBeInstanceOf(Function);
|
|
7
|
+
expect(allocator_1.getUpdatedAvailableRangesAfterFilling).toBeInstanceOf(Function);
|
|
8
|
+
});
|
|
9
|
+
test("fills a single range fully", function () {
|
|
10
|
+
var availableRanges = [{ start: 0, end: 100 }];
|
|
11
|
+
var result = (0, allocator_1.getAllocation)(availableRanges, 100);
|
|
12
|
+
expect(result).toEqual(availableRanges);
|
|
13
|
+
var updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, 100);
|
|
14
|
+
expect(updatedAvailableRanges).toEqual([]);
|
|
15
|
+
});
|
|
16
|
+
test("fills a single range partially", function () {
|
|
17
|
+
var availableRanges = [{ start: 0, end: 100 }];
|
|
18
|
+
var result = (0, allocator_1.getAllocation)(availableRanges, 80);
|
|
19
|
+
expect(result).toEqual([{ start: 0, end: 80 }]);
|
|
20
|
+
var updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, 80);
|
|
21
|
+
expect(updatedAvailableRanges).toEqual([{ start: 80, end: 100 }]);
|
|
22
|
+
});
|
|
23
|
+
test("fills multiple ranges fully", function () {
|
|
24
|
+
var availableRanges = [
|
|
25
|
+
{ start: 0, end: 50 },
|
|
26
|
+
{ start: 50, end: 100 },
|
|
27
|
+
];
|
|
28
|
+
var result = (0, allocator_1.getAllocation)(availableRanges, 100);
|
|
29
|
+
expect(result).toEqual(availableRanges);
|
|
30
|
+
var updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, 100);
|
|
31
|
+
expect(updatedAvailableRanges).toEqual([]);
|
|
32
|
+
});
|
|
33
|
+
test("fills multiple ranges with breaks in between fully", function () {
|
|
34
|
+
var availableRanges = [
|
|
35
|
+
{ start: 0, end: 40 },
|
|
36
|
+
{ start: 60, end: 100 },
|
|
37
|
+
];
|
|
38
|
+
var result = (0, allocator_1.getAllocation)(availableRanges, 80);
|
|
39
|
+
expect(result).toEqual(availableRanges);
|
|
40
|
+
var updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, 80);
|
|
41
|
+
expect(updatedAvailableRanges).toEqual([]);
|
|
42
|
+
});
|
|
43
|
+
test("fills multiple ranges partially", function () {
|
|
44
|
+
var availableRanges = [
|
|
45
|
+
{ start: 0, end: 50 },
|
|
46
|
+
{ start: 50, end: 100 },
|
|
47
|
+
];
|
|
48
|
+
var result = (0, allocator_1.getAllocation)(availableRanges, 80);
|
|
49
|
+
expect(result).toEqual([
|
|
50
|
+
{ start: 0, end: 50 },
|
|
51
|
+
{ start: 50, end: 80 },
|
|
52
|
+
]);
|
|
53
|
+
var updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, 80);
|
|
54
|
+
expect(updatedAvailableRanges).toEqual([{ start: 80, end: 100 }]);
|
|
55
|
+
});
|
|
56
|
+
test("fills multiple ranges with breaks in between partially", function () {
|
|
57
|
+
var availableRanges = [
|
|
58
|
+
{ start: 0, end: 40 },
|
|
59
|
+
{ start: 60, end: 100 },
|
|
60
|
+
];
|
|
61
|
+
var result = (0, allocator_1.getAllocation)(availableRanges, 50);
|
|
62
|
+
expect(result).toEqual([
|
|
63
|
+
{ start: 0, end: 40 },
|
|
64
|
+
{ start: 60, end: 70 },
|
|
65
|
+
]);
|
|
66
|
+
var updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, 50);
|
|
67
|
+
expect(updatedAvailableRanges).toEqual([{ start: 70, end: 100 }]);
|
|
68
|
+
});
|
|
69
|
+
test("fills multiple ranges with breaks in between partially, with 3 range items", function () {
|
|
70
|
+
var availableRanges = [
|
|
71
|
+
{ start: 0, end: 30 },
|
|
72
|
+
{ start: 60, end: 70 },
|
|
73
|
+
{ start: 90, end: 95 },
|
|
74
|
+
];
|
|
75
|
+
var result = (0, allocator_1.getAllocation)(availableRanges, 42);
|
|
76
|
+
expect(result).toEqual([
|
|
77
|
+
{ start: 0, end: 30 },
|
|
78
|
+
{ start: 60, end: 70 },
|
|
79
|
+
{ start: 90, end: 92 },
|
|
80
|
+
]);
|
|
81
|
+
var updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, 42);
|
|
82
|
+
expect(updatedAvailableRanges).toEqual([{ start: 92, end: 95 }]);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=allocator.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allocator.spec.js","sourceRoot":"","sources":["../src/allocator.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/builder.js
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.buildProject = exports.buildDatafile = exports.getExistingStateFilePath = exports.getDatafilePath = void 0;
|
|
4
15
|
var fs = require("fs");
|
|
5
16
|
var path = require("path");
|
|
6
17
|
var mkdirp = require("mkdirp");
|
|
7
|
-
var sdk_1 = require("@featurevisor/sdk");
|
|
8
18
|
var config_1 = require("./config");
|
|
9
19
|
var traffic_1 = require("./traffic");
|
|
10
20
|
var utils_1 = require("./utils");
|
|
@@ -27,6 +37,41 @@ function buildDatafile(projectConfig, options) {
|
|
|
27
37
|
};
|
|
28
38
|
var segmentKeysUsedByTag = new Set();
|
|
29
39
|
var attributeKeysUsedByTag = new Set();
|
|
40
|
+
var featureRanges = new Map();
|
|
41
|
+
// groups
|
|
42
|
+
var groups = [];
|
|
43
|
+
if (fs.existsSync(projectConfig.groupsDirectoryPath)) {
|
|
44
|
+
var groupFiles = fs
|
|
45
|
+
.readdirSync(projectConfig.groupsDirectoryPath)
|
|
46
|
+
.filter(function (f) { return f.endsWith(".yml"); });
|
|
47
|
+
var _loop_1 = function (groupFile) {
|
|
48
|
+
var groupKey = path.basename(groupFile, ".yml");
|
|
49
|
+
var groupFilePath = path.join(projectConfig.groupsDirectoryPath, groupFile);
|
|
50
|
+
var parsedGroup = (0, utils_1.parseYaml)(fs.readFileSync(groupFilePath, "utf8"));
|
|
51
|
+
groups.push(__assign(__assign({}, parsedGroup), { key: groupKey }));
|
|
52
|
+
var accumulatedPercentage = 0;
|
|
53
|
+
parsedGroup.slots.forEach(function (slot, slotIndex) {
|
|
54
|
+
var isFirstSlot = slotIndex === 0;
|
|
55
|
+
var isLastSlot = slotIndex === parsedGroup.slots.length - 1;
|
|
56
|
+
if (slot.feature) {
|
|
57
|
+
var featureKey = slot.feature;
|
|
58
|
+
var featureRangesForFeature = featureRanges.get(featureKey) || [];
|
|
59
|
+
var start = isFirstSlot ? accumulatedPercentage : accumulatedPercentage + 1;
|
|
60
|
+
var end = accumulatedPercentage + slot.percentage * 1000;
|
|
61
|
+
featureRangesForFeature.push({
|
|
62
|
+
start: start,
|
|
63
|
+
end: end,
|
|
64
|
+
});
|
|
65
|
+
featureRanges.set(slot.feature, featureRangesForFeature);
|
|
66
|
+
}
|
|
67
|
+
accumulatedPercentage += slot.percentage * 1000;
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
for (var _i = 0, groupFiles_1 = groupFiles; _i < groupFiles_1.length; _i++) {
|
|
71
|
+
var groupFile = groupFiles_1[_i];
|
|
72
|
+
_loop_1(groupFile);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
30
75
|
// features
|
|
31
76
|
var features = [];
|
|
32
77
|
var featuresDirectory = projectConfig.featuresDirectoryPath;
|
|
@@ -41,8 +86,8 @@ function buildDatafile(projectConfig, options) {
|
|
|
41
86
|
}
|
|
42
87
|
if (fs.existsSync(featuresDirectory)) {
|
|
43
88
|
var featureFiles = fs.readdirSync(featuresDirectory).filter(function (f) { return f.endsWith(".yml"); });
|
|
44
|
-
for (var
|
|
45
|
-
var featureFile = featureFiles_1[
|
|
89
|
+
for (var _a = 0, featureFiles_1 = featureFiles; _a < featureFiles_1.length; _a++) {
|
|
90
|
+
var featureFile = featureFiles_1[_a];
|
|
46
91
|
var featureKey = path.basename(featureFile, ".yml");
|
|
47
92
|
var featureFilePath = path.join(featuresDirectory, featureFile);
|
|
48
93
|
var parsedFeature = (0, utils_1.parseYaml)(fs.readFileSync(featureFilePath, "utf8"));
|
|
@@ -55,23 +100,10 @@ function buildDatafile(projectConfig, options) {
|
|
|
55
100
|
if (parsedFeature.environments[options.environment].expose === false) {
|
|
56
101
|
continue;
|
|
57
102
|
}
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
var parsedRule = _b[_a];
|
|
103
|
+
for (var _b = 0, _c = parsedFeature.environments[options.environment].rules; _b < _c.length; _b++) {
|
|
104
|
+
var parsedRule = _c[_b];
|
|
61
105
|
var extractedSegmentKeys = (0, utils_1.extractSegmentKeysFromGroupSegments)(parsedRule.segments);
|
|
62
106
|
extractedSegmentKeys.forEach(function (segmentKey) { return segmentKeysUsedByTag.add(segmentKey); });
|
|
63
|
-
var traffic = {
|
|
64
|
-
key: parsedRule.key,
|
|
65
|
-
segments: typeof parsedRule.segments === "string"
|
|
66
|
-
? parsedRule.segments
|
|
67
|
-
: JSON.stringify(parsedRule.segments),
|
|
68
|
-
percentage: parsedRule.percentage * (sdk_1.MAX_BUCKETED_NUMBER / 100),
|
|
69
|
-
allocation: [],
|
|
70
|
-
};
|
|
71
|
-
if (parsedRule.variables) {
|
|
72
|
-
traffic.variables = parsedRule.variables;
|
|
73
|
-
}
|
|
74
|
-
featureTraffic.push(traffic);
|
|
75
107
|
}
|
|
76
108
|
var feature = {
|
|
77
109
|
key: featureKey,
|
|
@@ -80,6 +112,7 @@ function buildDatafile(projectConfig, options) {
|
|
|
80
112
|
variations: parsedFeature.variations.map(function (variation) {
|
|
81
113
|
var mappedVariation = {
|
|
82
114
|
value: variation.value,
|
|
115
|
+
weight: variation.weight, // @TODO: added so state files can maintain weight info, but datafiles don't need this. find a way to remove it from datafiles later
|
|
83
116
|
};
|
|
84
117
|
if (!variation.variables) {
|
|
85
118
|
return mappedVariation;
|
|
@@ -117,7 +150,7 @@ function buildDatafile(projectConfig, options) {
|
|
|
117
150
|
});
|
|
118
151
|
return mappedVariation;
|
|
119
152
|
}),
|
|
120
|
-
traffic: (0, traffic_1.
|
|
153
|
+
traffic: (0, traffic_1.getTraffic)(parsedFeature.variations, parsedFeature.environments[options.environment].rules, existingFeatures && existingFeatures[featureKey], featureRanges.get(featureKey) || []),
|
|
121
154
|
};
|
|
122
155
|
if (parsedFeature.variablesSchema) {
|
|
123
156
|
feature.variablesSchema = parsedFeature.variablesSchema;
|
|
@@ -133,8 +166,8 @@ function buildDatafile(projectConfig, options) {
|
|
|
133
166
|
var segmentsDirectory = projectConfig.segmentsDirectoryPath;
|
|
134
167
|
if (fs.existsSync(segmentsDirectory)) {
|
|
135
168
|
var segmentFiles = fs.readdirSync(segmentsDirectory).filter(function (f) { return f.endsWith(".yml"); });
|
|
136
|
-
for (var
|
|
137
|
-
var segmentFile = segmentFiles_1[
|
|
169
|
+
for (var _d = 0, segmentFiles_1 = segmentFiles; _d < segmentFiles_1.length; _d++) {
|
|
170
|
+
var segmentFile = segmentFiles_1[_d];
|
|
138
171
|
var segmentKey = path.basename(segmentFile, ".yml");
|
|
139
172
|
var segmentFilePath = path.join(segmentsDirectory, segmentFile);
|
|
140
173
|
var parsedSegment = (0, utils_1.parseYaml)(fs.readFileSync(segmentFilePath, "utf8"));
|
|
@@ -160,8 +193,8 @@ function buildDatafile(projectConfig, options) {
|
|
|
160
193
|
var attributesDirectory = projectConfig.attributesDirectoryPath;
|
|
161
194
|
if (fs.existsSync(attributesDirectory)) {
|
|
162
195
|
var attributeFiles = fs.readdirSync(attributesDirectory).filter(function (f) { return f.endsWith(".yml"); });
|
|
163
|
-
for (var
|
|
164
|
-
var attributeFile = attributeFiles_1[
|
|
196
|
+
for (var _e = 0, attributeFiles_1 = attributeFiles; _e < attributeFiles_1.length; _e++) {
|
|
197
|
+
var attributeFile = attributeFiles_1[_e];
|
|
165
198
|
var attributeKey = path.basename(attributeFile, ".yml");
|
|
166
199
|
var attributeFilePath = path.join(attributesDirectory, attributeFile);
|
|
167
200
|
var parsedAttribute = (0, utils_1.parseYaml)(fs.readFileSync(attributeFilePath, "utf8"));
|
|
@@ -209,10 +242,12 @@ function buildDatafile(projectConfig, options) {
|
|
|
209
242
|
return {
|
|
210
243
|
variation: a.variation,
|
|
211
244
|
percentage: a.percentage,
|
|
245
|
+
range: a.range,
|
|
212
246
|
};
|
|
213
247
|
}),
|
|
214
248
|
};
|
|
215
249
|
}),
|
|
250
|
+
ranges: featureRanges.get(feature.key) || undefined,
|
|
216
251
|
};
|
|
217
252
|
acc[feature.key] = item;
|
|
218
253
|
return acc;
|
package/lib/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { BucketBy } from "@featurevisor/types";
|
|
|
2
2
|
export declare const FEATURES_DIRECTORY_NAME = "features";
|
|
3
3
|
export declare const SEGMENTS_DIRECTORY_NAME = "segments";
|
|
4
4
|
export declare const ATTRIBUTES_DIRECTORY_NAME = "attributes";
|
|
5
|
+
export declare const GROUPS_DIRECTORY_NAME = "groups";
|
|
5
6
|
export declare const TESTS_DIRECTORY_NAME = "tests";
|
|
6
7
|
export declare const STATE_DIRECTORY_NAME = ".featurevisor";
|
|
7
8
|
export declare const OUTPUT_DIRECTORY_NAME = "dist";
|
|
@@ -16,6 +17,7 @@ export interface ProjectConfig {
|
|
|
16
17
|
featuresDirectoryPath: string;
|
|
17
18
|
segmentsDirectoryPath: string;
|
|
18
19
|
attributesDirectoryPath: string;
|
|
20
|
+
groupsDirectoryPath: string;
|
|
19
21
|
testsDirectoryPath: string;
|
|
20
22
|
stateDirectoryPath: string;
|
|
21
23
|
outputDirectoryPath: string;
|
package/lib/config.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getProjectConfig = exports.SCHEMA_VERSION = exports.DEFAULT_BUCKET_BY_ATTRIBUTE = exports.DEFAULT_TAGS = exports.DEFAULT_ENVIRONMENTS = exports.ROOT_DIR_PLACECOLDER = exports.CONFIG_MODULE_NAME = exports.SITE_EXPORT_DIRECTORY_NAME = exports.OUTPUT_DIRECTORY_NAME = exports.STATE_DIRECTORY_NAME = exports.TESTS_DIRECTORY_NAME = exports.ATTRIBUTES_DIRECTORY_NAME = exports.SEGMENTS_DIRECTORY_NAME = exports.FEATURES_DIRECTORY_NAME = void 0;
|
|
3
|
+
exports.getProjectConfig = exports.SCHEMA_VERSION = exports.DEFAULT_BUCKET_BY_ATTRIBUTE = exports.DEFAULT_TAGS = exports.DEFAULT_ENVIRONMENTS = exports.ROOT_DIR_PLACECOLDER = exports.CONFIG_MODULE_NAME = exports.SITE_EXPORT_DIRECTORY_NAME = exports.OUTPUT_DIRECTORY_NAME = exports.STATE_DIRECTORY_NAME = exports.TESTS_DIRECTORY_NAME = exports.GROUPS_DIRECTORY_NAME = exports.ATTRIBUTES_DIRECTORY_NAME = exports.SEGMENTS_DIRECTORY_NAME = exports.FEATURES_DIRECTORY_NAME = void 0;
|
|
4
4
|
var path = require("path");
|
|
5
5
|
exports.FEATURES_DIRECTORY_NAME = "features";
|
|
6
6
|
exports.SEGMENTS_DIRECTORY_NAME = "segments";
|
|
7
7
|
exports.ATTRIBUTES_DIRECTORY_NAME = "attributes";
|
|
8
|
+
exports.GROUPS_DIRECTORY_NAME = "groups";
|
|
8
9
|
exports.TESTS_DIRECTORY_NAME = "tests";
|
|
9
10
|
exports.STATE_DIRECTORY_NAME = ".featurevisor";
|
|
10
11
|
exports.OUTPUT_DIRECTORY_NAME = "dist";
|
|
@@ -21,6 +22,7 @@ function getProjectConfig(rootDirectoryPath) {
|
|
|
21
22
|
featuresDirectoryPath: path.join(rootDirectoryPath, exports.FEATURES_DIRECTORY_NAME),
|
|
22
23
|
segmentsDirectoryPath: path.join(rootDirectoryPath, exports.SEGMENTS_DIRECTORY_NAME),
|
|
23
24
|
attributesDirectoryPath: path.join(rootDirectoryPath, exports.ATTRIBUTES_DIRECTORY_NAME),
|
|
25
|
+
groupsDirectoryPath: path.join(rootDirectoryPath, exports.GROUPS_DIRECTORY_NAME),
|
|
24
26
|
testsDirectoryPath: path.join(rootDirectoryPath, exports.TESTS_DIRECTORY_NAME),
|
|
25
27
|
stateDirectoryPath: path.join(rootDirectoryPath, exports.STATE_DIRECTORY_NAME),
|
|
26
28
|
outputDirectoryPath: path.join(rootDirectoryPath, exports.OUTPUT_DIRECTORY_NAME),
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,2BAA6B;AAIhB,QAAA,uBAAuB,GAAG,UAAU,CAAC;AACrC,QAAA,uBAAuB,GAAG,UAAU,CAAC;AACrC,QAAA,yBAAyB,GAAG,YAAY,CAAC;AACzC,QAAA,oBAAoB,GAAG,OAAO,CAAC;AAC/B,QAAA,oBAAoB,GAAG,eAAe,CAAC;AACvC,QAAA,qBAAqB,GAAG,MAAM,CAAC;AAC/B,QAAA,0BAA0B,GAAG,KAAK,CAAC;AAEnC,QAAA,kBAAkB,GAAG,wBAAwB,CAAC;AAC9C,QAAA,oBAAoB,GAAG,WAAW,CAAC;AAEnC,QAAA,oBAAoB,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACjD,QAAA,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,2BAA2B,GAAG,QAAQ,CAAC;AAEvC,QAAA,cAAc,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,2BAA6B;AAIhB,QAAA,uBAAuB,GAAG,UAAU,CAAC;AACrC,QAAA,uBAAuB,GAAG,UAAU,CAAC;AACrC,QAAA,yBAAyB,GAAG,YAAY,CAAC;AACzC,QAAA,qBAAqB,GAAG,QAAQ,CAAC;AACjC,QAAA,oBAAoB,GAAG,OAAO,CAAC;AAC/B,QAAA,oBAAoB,GAAG,eAAe,CAAC;AACvC,QAAA,qBAAqB,GAAG,MAAM,CAAC;AAC/B,QAAA,0BAA0B,GAAG,KAAK,CAAC;AAEnC,QAAA,kBAAkB,GAAG,wBAAwB,CAAC;AAC9C,QAAA,oBAAoB,GAAG,WAAW,CAAC;AAEnC,QAAA,oBAAoB,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACjD,QAAA,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,2BAA2B,GAAG,QAAQ,CAAC;AAEvC,QAAA,cAAc,GAAG,GAAG,CAAC;AAiBlC,6FAA6F;AAC7F,SAAgB,gBAAgB,CAAC,iBAAyB;IACxD,IAAM,UAAU,GAAkB;QAChC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,+BAAuB,CAAC;QAC5E,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,+BAAuB,CAAC;QAC5E,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,iCAAyB,CAAC;QAChF,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,6BAAqB,CAAC;QACxE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,4BAAoB,CAAC;QAEtE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,4BAAoB,CAAC;QACtE,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,6BAAqB,CAAC;QAExE,YAAY,EAAE,4BAAoB;QAClC,IAAI,EAAE,oBAAY;QAClB,eAAe,EAAE,QAAQ;QAEzB,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,kCAA0B,CAAC;KAClF,CAAC;IAEF,IAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,0BAAkB,CAAC,CAAC;IAC1E,IAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE/C,IAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;QAClC,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,4BAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;YACjF,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,4BAAoB,EAAE,iBAAiB,CAAC,CAAC;SACtF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,WAA4B,CAAC;AACtC,CAAC;AAhCD,4CAgCC"}
|
package/lib/linter.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { ProjectConfig } from "./config";
|
|
|
3
3
|
export declare function getAttributeJoiSchema(projectConfig: ProjectConfig): Joi.ObjectSchema<any>;
|
|
4
4
|
export declare function getConditionsJoiSchema(projectConfig: ProjectConfig): Joi.AlternativesSchema<any>;
|
|
5
5
|
export declare function getSegmentJoiSchema(projectConfig: ProjectConfig, conditionsJoiSchema: any): Joi.ObjectSchema<any>;
|
|
6
|
+
export declare function getGroupJoiSchema(projectConfig: ProjectConfig): Joi.ObjectSchema<any>;
|
|
6
7
|
export declare function getFeatureJoiSchema(projectConfig: ProjectConfig, conditionsJoiSchema: any): Joi.ObjectSchema<any>;
|
|
7
8
|
export declare function getTestsJoiSchema(projectConfig: ProjectConfig): Joi.ObjectSchema<any>;
|
|
8
9
|
export declare function printJoiError(e: Joi.ValidationError): void;
|