@featurevisor/core 1.5.0 → 1.6.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.
Files changed (60) hide show
  1. package/.eslintcache +1 -1
  2. package/CHANGELOG.md +19 -0
  3. package/coverage/clover.xml +2 -2
  4. package/coverage/lcov-report/index.html +1 -1
  5. package/coverage/lcov-report/lib/builder/allocator.js.html +1 -1
  6. package/coverage/lcov-report/lib/builder/index.html +1 -1
  7. package/coverage/lcov-report/lib/builder/traffic.js.html +1 -1
  8. package/coverage/lcov-report/lib/tester/checkIfObjectsAreEqual.js.html +1 -1
  9. package/coverage/lcov-report/lib/tester/index.html +1 -1
  10. package/coverage/lcov-report/lib/tester/matrix.js.html +1 -1
  11. package/coverage/lcov-report/src/builder/allocator.ts.html +1 -1
  12. package/coverage/lcov-report/src/builder/index.html +1 -1
  13. package/coverage/lcov-report/src/builder/traffic.ts.html +1 -1
  14. package/coverage/lcov-report/src/tester/checkIfObjectsAreEqual.ts.html +1 -1
  15. package/coverage/lcov-report/src/tester/index.html +1 -1
  16. package/coverage/lcov-report/src/tester/matrix.ts.html +1 -1
  17. package/lib/linter/attributeSchema.d.ts +17 -2
  18. package/lib/linter/attributeSchema.js +13 -11
  19. package/lib/linter/attributeSchema.js.map +1 -1
  20. package/lib/linter/checkPercentageExceedingSlot.d.ts +3 -0
  21. package/lib/linter/checkPercentageExceedingSlot.js +86 -0
  22. package/lib/linter/checkPercentageExceedingSlot.js.map +1 -0
  23. package/lib/linter/conditionSchema.d.ts +2 -2
  24. package/lib/linter/conditionSchema.js +112 -57
  25. package/lib/linter/conditionSchema.js.map +1 -1
  26. package/lib/linter/featureSchema.d.ts +229 -2
  27. package/lib/linter/featureSchema.js +195 -139
  28. package/lib/linter/featureSchema.js.map +1 -1
  29. package/lib/linter/groupSchema.d.ts +32 -2
  30. package/lib/linter/groupSchema.js +28 -97
  31. package/lib/linter/groupSchema.js.map +1 -1
  32. package/lib/linter/lintProject.js +169 -118
  33. package/lib/linter/lintProject.js.map +1 -1
  34. package/lib/linter/printError.d.ts +2 -0
  35. package/lib/linter/printError.js +20 -0
  36. package/lib/linter/printError.js.map +1 -0
  37. package/lib/linter/segmentSchema.d.ts +14 -2
  38. package/lib/linter/segmentSchema.js +12 -10
  39. package/lib/linter/segmentSchema.js.map +1 -1
  40. package/lib/linter/testSchema.d.ts +90 -2
  41. package/lib/linter/testSchema.js +49 -38
  42. package/lib/linter/testSchema.js.map +1 -1
  43. package/lib/tester/cliFormat.d.ts +1 -0
  44. package/lib/tester/cliFormat.js +2 -1
  45. package/lib/tester/cliFormat.js.map +1 -1
  46. package/package.json +5 -5
  47. package/src/linter/attributeSchema.ts +11 -9
  48. package/src/linter/checkPercentageExceedingSlot.ts +41 -0
  49. package/src/linter/conditionSchema.ts +120 -97
  50. package/src/linter/featureSchema.ts +241 -177
  51. package/src/linter/groupSchema.ts +38 -54
  52. package/src/linter/lintProject.ts +144 -62
  53. package/src/linter/printError.ts +21 -0
  54. package/src/linter/segmentSchema.ts +10 -8
  55. package/src/linter/testSchema.ts +67 -50
  56. package/src/tester/cliFormat.ts +1 -0
  57. package/lib/linter/printJoiError.d.ts +0 -2
  58. package/lib/linter/printJoiError.js +0 -14
  59. package/lib/linter/printJoiError.js.map +0 -1
  60. package/src/linter/printJoiError.ts +0 -11
@@ -1,150 +1,206 @@
1
1
  "use strict";
2
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
- if (ar || !(i in from)) {
5
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
- ar[i] = from[i];
7
- }
8
- }
9
- return to.concat(ar || Array.prototype.slice.call(from));
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.getFeatureJoiSchema = void 0;
13
- var Joi = require("joi");
3
+ exports.getFeatureZodSchema = void 0;
4
+ var zod_1 = require("zod");
14
5
  var tagRegex = /^[a-z0-9-]+$/;
15
- function getFeatureJoiSchema(projectConfig, conditionsJoiSchema, availableSegmentKeys, availableFeatureKeys) {
16
- var _a, _b, _c, _d;
17
- var variationValueJoiSchema = Joi.string().required();
18
- var variableValueJoiSchema = Joi.alternatives()
19
- .try(
20
- // @TODO: make it stricter based on variableSchema.type
21
- Joi.string(), Joi.number(), Joi.boolean(), Joi.array().items(Joi.string()), Joi.object().custom(function (value) {
22
- var isFlat = true;
23
- Object.keys(value).forEach(function (key) {
24
- if (typeof value[key] === "object") {
25
- isFlat = false;
26
- }
27
- });
28
- if (!isFlat) {
29
- throw new Error("object is not flat");
30
- }
31
- return value;
32
- }))
33
- .allow("");
34
- var plainGroupSegment = (_a = Joi.string()).valid.apply(_a, __spreadArray(["*"], availableSegmentKeys, false));
35
- var andOrNotGroupSegment = Joi.alternatives()
36
- .try(Joi.object({
37
- and: Joi.array().items(Joi.link("#andOrNotGroupSegment"), plainGroupSegment),
38
- }), Joi.object({
39
- or: Joi.array().items(Joi.link("#andOrNotGroupSegment"), plainGroupSegment),
40
- }), Joi.object({
41
- // @TODO: allow plainGroupSegment as well?
42
- not: Joi.array().items(Joi.link("#andOrNotGroupSegment"), plainGroupSegment),
43
- }))
44
- .id("andOrNotGroupSegment");
45
- var groupSegment = Joi.alternatives().try(andOrNotGroupSegment, plainGroupSegment);
46
- var groupSegmentsJoiSchema = Joi.alternatives().try(Joi.array().items(groupSegment), groupSegment);
47
- var environmentJoiSchema = Joi.object({
48
- expose: Joi.alternatives().try(Joi.boolean(), Joi.array().items((_b = Joi.string()).valid.apply(_b, projectConfig.tags))),
49
- rules: Joi.array()
50
- .items(Joi.object({
51
- key: Joi.string().required(),
52
- description: Joi.string().optional(),
53
- segments: groupSegmentsJoiSchema.required(),
54
- percentage: Joi.number().precision(3).min(0).max(100).required(),
55
- enabled: Joi.boolean().optional(),
56
- variation: variationValueJoiSchema.optional(),
57
- variables: Joi.object().optional(), // @TODO: make it stricter
58
- }))
59
- .unique("key")
60
- .required(),
61
- force: Joi.array().items(Joi.object({
62
- // @TODO: either of the two below should be required
63
- segments: groupSegmentsJoiSchema.optional(),
64
- conditions: conditionsJoiSchema.optional(),
65
- enabled: Joi.boolean().optional(),
66
- variation: variationValueJoiSchema.optional(),
67
- variables: Joi.object().optional(), // @TODO: make it stricter
68
- })),
69
- });
6
+ function getFeatureZodSchema(projectConfig, conditionsZodSchema, availableAttributeKeys, availableSegmentKeys, availableFeatureKeys) {
7
+ var variationValueZodSchema = zod_1.z.string().min(1);
8
+ var variableValueZodSchema = zod_1.z.union([
9
+ zod_1.z.string(),
10
+ zod_1.z.number(),
11
+ zod_1.z.boolean(),
12
+ zod_1.z.array(zod_1.z.string()),
13
+ zod_1.z.record(zod_1.z.unknown()).refine(function (value) {
14
+ var isFlat = true;
15
+ Object.keys(value).forEach(function (key) {
16
+ if (typeof value[key] === "object") {
17
+ isFlat = false;
18
+ }
19
+ });
20
+ return isFlat;
21
+ }, {
22
+ message: "object is not flat",
23
+ }),
24
+ ]);
25
+ var plainGroupSegment = zod_1.z.string().refine(function (value) { return value === "*" || availableSegmentKeys.includes(value); }, function (value) { return ({
26
+ message: "Unknown segment key \"".concat(value, "\""),
27
+ }); });
28
+ var andOrNotGroupSegment = zod_1.z.union([
29
+ zod_1.z
30
+ .object({
31
+ and: zod_1.z.array(zod_1.z.lazy(function () { return groupSegmentZodSchema; })),
32
+ })
33
+ .strict(),
34
+ zod_1.z
35
+ .object({
36
+ or: zod_1.z.array(zod_1.z.lazy(function () { return groupSegmentZodSchema; })),
37
+ })
38
+ .strict(),
39
+ zod_1.z
40
+ .object({
41
+ not: zod_1.z.array(zod_1.z.lazy(function () { return groupSegmentZodSchema; })),
42
+ })
43
+ .strict(),
44
+ ]);
45
+ var groupSegmentZodSchema = zod_1.z.union([andOrNotGroupSegment, plainGroupSegment]);
46
+ var groupSegmentsZodSchema = zod_1.z.union([zod_1.z.array(groupSegmentZodSchema), groupSegmentZodSchema]);
47
+ var environmentZodSchema = zod_1.z
48
+ .object({
49
+ expose: zod_1.z
50
+ .union([
51
+ zod_1.z.boolean(),
52
+ zod_1.z.array(zod_1.z.string().refine(function (value) { return projectConfig.tags.includes(value); })),
53
+ ])
54
+ .optional(),
55
+ rules: zod_1.z
56
+ .array(zod_1.z
57
+ .object({
58
+ key: zod_1.z.string(),
59
+ description: zod_1.z.string().optional(),
60
+ segments: groupSegmentsZodSchema,
61
+ percentage: zod_1.z.number().min(0).max(100),
62
+ enabled: zod_1.z.boolean().optional(),
63
+ variation: variationValueZodSchema.optional(),
64
+ variables: zod_1.z.record(variableValueZodSchema).optional(),
65
+ })
66
+ .strict())
67
+ .refine(function (value) {
68
+ var keys = value.map(function (v) { return v.key; });
69
+ return keys.length === new Set(keys).size;
70
+ }, function (value) { return ({
71
+ message: "Duplicate rule keys found: " + value.map(function (v) { return v.key; }).join(", "),
72
+ }); }),
73
+ force: zod_1.z
74
+ .array(zod_1.z.union([
75
+ zod_1.z
76
+ .object({
77
+ segments: groupSegmentsZodSchema,
78
+ enabled: zod_1.z.boolean().optional(),
79
+ variation: variationValueZodSchema.optional(),
80
+ variables: zod_1.z.record(variableValueZodSchema).optional(),
81
+ })
82
+ .strict(),
83
+ zod_1.z
84
+ .object({
85
+ conditions: conditionsZodSchema,
86
+ enabled: zod_1.z.boolean().optional(),
87
+ variation: variationValueZodSchema.optional(),
88
+ variables: zod_1.z.record(variableValueZodSchema).optional(),
89
+ })
90
+ .strict(),
91
+ ]))
92
+ .optional(),
93
+ })
94
+ .strict();
70
95
  var allEnvironmentsSchema = {};
71
96
  projectConfig.environments.forEach(function (environmentKey) {
72
- allEnvironmentsSchema[environmentKey] = environmentJoiSchema.required();
97
+ allEnvironmentsSchema[environmentKey] = environmentZodSchema;
73
98
  });
74
- var allEnvironmentsJoiSchema = Joi.object(allEnvironmentsSchema);
75
- var featureJoiSchema = Joi.object({
76
- archived: Joi.boolean().optional(),
77
- deprecated: Joi.boolean().optional(),
78
- description: Joi.string().required(),
79
- tags: Joi.array()
80
- .items(Joi.string().custom(function (value) {
81
- if (!tagRegex.test(value)) {
82
- throw new Error("tag must be lower cased and alphanumeric, and may contain hyphens.");
83
- }
84
- return value;
85
- }))
86
- .required(),
87
- required: Joi.array()
88
- .items(Joi.alternatives().try((_c = Joi.string()
89
- .required())
90
- .valid.apply(_c, availableFeatureKeys), Joi.object({
91
- key: (_d = Joi.string()
92
- .required())
93
- .valid.apply(_d, availableFeatureKeys),
94
- variation: Joi.string().optional(), // @TODO: can be made stricter
95
- })))
99
+ var allEnvironmentsZodSchema = zod_1.z.object(allEnvironmentsSchema).strict();
100
+ var attributeKeyZodSchema = zod_1.z.string().refine(function (value) { return value === "*" || availableAttributeKeys.includes(value); }, function (value) { return ({
101
+ message: "Unknown attribute \"".concat(value, "\""),
102
+ }); });
103
+ var featureKeyZodSchema = zod_1.z.string().refine(function (value) { return availableFeatureKeys.includes(value); }, function (value) { return ({
104
+ message: "Unknown feature \"".concat(value, "\""),
105
+ }); });
106
+ var featureZodSchema = zod_1.z
107
+ .object({
108
+ archived: zod_1.z.boolean().optional(),
109
+ deprecated: zod_1.z.boolean().optional(),
110
+ description: zod_1.z.string(),
111
+ tags: zod_1.z
112
+ .array(zod_1.z.string().refine(function (value) { return tagRegex.test(value); }, function (value) { return ({
113
+ message: "Tag \"".concat(value, "\" must be lower cased and alphanumeric, and may contain hyphens."),
114
+ }); }))
115
+ .refine(function (value) {
116
+ return value.length === new Set(value).size;
117
+ }, function (value) { return ({
118
+ message: "Duplicate tags found: " + value.join(", "),
119
+ }); }),
120
+ required: zod_1.z
121
+ .array(zod_1.z.union([
122
+ featureKeyZodSchema,
123
+ zod_1.z
124
+ .object({
125
+ key: featureKeyZodSchema,
126
+ variation: zod_1.z.string().optional(),
127
+ })
128
+ .strict(),
129
+ ]))
96
130
  .optional(),
97
- bucketBy: Joi.alternatives()
98
- .try(
99
- // plain
100
- Joi.string(),
101
- // and
102
- Joi.array().items(Joi.string()),
103
- // or
104
- Joi.object({
105
- or: Joi.array().items(Joi.string()),
106
- }))
107
- .required(),
108
- variablesSchema: Joi.array()
109
- .items(Joi.object({
110
- key: Joi.string().disallow("variation").required(),
111
- type: Joi.string()
112
- .valid("string", "integer", "boolean", "double", "array", "object", "json")
113
- .required(),
114
- description: Joi.string().optional(),
115
- defaultValue: variableValueJoiSchema, // @TODO: make it stricter based on `type`
116
- }))
117
- .unique("key"),
118
- variations: Joi.array()
119
- .items(Joi.object({
120
- description: Joi.string(),
121
- value: variationValueJoiSchema.required(),
122
- weight: Joi.number().precision(3).min(0).max(100).required(),
123
- variables: Joi.array()
124
- .items(Joi.object({
125
- key: Joi.string(),
126
- value: variableValueJoiSchema,
127
- overrides: Joi.array().items(Joi.object({
128
- // @TODO: either segments or conditions prsent at a time
129
- segments: groupSegmentsJoiSchema,
130
- conditions: conditionsJoiSchema,
131
- // @TODO: make it stricter based on `type`
132
- value: variableValueJoiSchema,
133
- })),
134
- }))
135
- .unique("key"),
136
- }))
137
- .custom(function (value) {
138
- var total = value.reduce(function (acc, v) { return acc + v.weight; }, 0);
139
- if (total !== 100) {
140
- throw new Error("Sum of all variation weights must be 100, got ".concat(total));
141
- }
142
- return value;
131
+ bucketBy: zod_1.z.union([
132
+ attributeKeyZodSchema,
133
+ zod_1.z.array(attributeKeyZodSchema),
134
+ zod_1.z
135
+ .object({
136
+ or: zod_1.z.array(attributeKeyZodSchema),
137
+ })
138
+ .strict(),
139
+ ]),
140
+ variablesSchema: zod_1.z
141
+ .array(zod_1.z
142
+ .object({
143
+ key: zod_1.z
144
+ .string()
145
+ .min(1)
146
+ .refine(function (value) { return value !== "variation"; }, {
147
+ message: "variable key cannot be \"variation\"",
148
+ }),
149
+ type: zod_1.z.enum(["string", "integer", "boolean", "double", "array", "object", "json"]),
150
+ description: zod_1.z.string().optional(),
151
+ defaultValue: variableValueZodSchema,
143
152
  })
153
+ .strict())
154
+ .refine(function (value) {
155
+ var keys = value.map(function (v) { return v.key; });
156
+ return keys.length === new Set(keys).size;
157
+ }, function (value) { return ({
158
+ message: "Duplicate variable keys found: " + value.map(function (v) { return v.key; }).join(", "),
159
+ }); })
144
160
  .optional(),
145
- environments: allEnvironmentsJoiSchema.required(),
146
- });
147
- return featureJoiSchema;
161
+ variations: zod_1.z
162
+ .array(zod_1.z
163
+ .object({
164
+ description: zod_1.z.string().optional(),
165
+ value: variationValueZodSchema,
166
+ weight: zod_1.z.number().min(0).max(100),
167
+ variables: zod_1.z
168
+ .array(zod_1.z
169
+ .object({
170
+ key: zod_1.z.string().min(1),
171
+ value: variableValueZodSchema,
172
+ overrides: zod_1.z
173
+ .array(zod_1.z.union([
174
+ zod_1.z
175
+ .object({
176
+ conditions: conditionsZodSchema,
177
+ value: variableValueZodSchema,
178
+ })
179
+ .strict(),
180
+ zod_1.z
181
+ .object({
182
+ segments: groupSegmentsZodSchema,
183
+ value: variableValueZodSchema,
184
+ })
185
+ .strict(),
186
+ ]))
187
+ .optional(),
188
+ })
189
+ .strict())
190
+ .optional(),
191
+ })
192
+ .strict())
193
+ .refine(function (value) {
194
+ var variationValues = value.map(function (v) { return v.value; });
195
+ return variationValues.length === new Set(variationValues).size;
196
+ }, function (value) { return ({
197
+ message: "Duplicate variation values found: " + value.map(function (v) { return v.value; }).join(", "),
198
+ }); })
199
+ .optional(),
200
+ environments: allEnvironmentsZodSchema,
201
+ })
202
+ .strict();
203
+ return featureZodSchema;
148
204
  }
149
- exports.getFeatureJoiSchema = getFeatureJoiSchema;
205
+ exports.getFeatureZodSchema = getFeatureZodSchema;
150
206
  //# sourceMappingURL=featureSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"featureSchema.js","sourceRoot":"","sources":["../../src/linter/featureSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"featureSchema.js","sourceRoot":"","sources":["../../src/linter/featureSchema.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,34 @@
1
- import * as Joi from "joi";
1
+ import { z } from "zod";
2
2
  import { ProjectConfig } from "../config";
3
3
  import { Datasource } from "../datasource";
4
- export declare function getGroupJoiSchema(projectConfig: ProjectConfig, datasource: Datasource, availableFeatureKeys: string[]): Joi.ObjectSchema<any>;
4
+ export declare function getGroupZodSchema(projectConfig: ProjectConfig, datasource: Datasource, availableFeatureKeys: string[]): z.ZodObject<{
5
+ description: z.ZodString;
6
+ slots: z.ZodEffects<z.ZodArray<z.ZodObject<{
7
+ feature: z.ZodEffects<z.ZodOptional<z.ZodString>, string, string>;
8
+ percentage: z.ZodNumber;
9
+ }, "strict", z.ZodTypeAny, {
10
+ feature?: string;
11
+ percentage?: number;
12
+ }, {
13
+ feature?: string;
14
+ percentage?: number;
15
+ }>, "many">, {
16
+ feature?: string;
17
+ percentage?: number;
18
+ }[], {
19
+ feature?: string;
20
+ percentage?: number;
21
+ }[]>;
22
+ }, "strict", z.ZodTypeAny, {
23
+ description?: string;
24
+ slots?: {
25
+ feature?: string;
26
+ percentage?: number;
27
+ }[];
28
+ }, {
29
+ description?: string;
30
+ slots?: {
31
+ feature?: string;
32
+ percentage?: number;
33
+ }[];
34
+ }>;
@@ -1,102 +1,33 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.getGroupJoiSchema = void 0;
40
- var Joi = require("joi");
41
- function getGroupJoiSchema(projectConfig, datasource, availableFeatureKeys) {
42
- var _a;
43
- var groupJoiSchema = Joi.object({
44
- description: Joi.string().required(),
45
- slots: Joi.array()
46
- .items(Joi.object({
47
- feature: (_a = Joi.string()).valid.apply(_a, availableFeatureKeys),
48
- percentage: Joi.number().precision(3).min(0).max(100).required(),
49
- }))
50
- .custom(function (value) {
51
- return __awaiter(this, void 0, void 0, function () {
52
- var totalPercentage, _i, value_1, slot, maxPercentageForRule, featureKey, featureExists, parsedFeature, environmentKeys, _a, environmentKeys_1, environmentKey, environment, rules, _b, rules_1, rule;
53
- return __generator(this, function (_c) {
54
- switch (_c.label) {
55
- case 0:
56
- totalPercentage = value.reduce(function (acc, slot) { return acc + slot.percentage; }, 0);
57
- if (totalPercentage !== 100) {
58
- throw new Error("total percentage is not 100");
59
- }
60
- _i = 0, value_1 = value;
61
- _c.label = 1;
62
- case 1:
63
- if (!(_i < value_1.length)) return [3 /*break*/, 4];
64
- slot = value_1[_i];
65
- maxPercentageForRule = slot.percentage;
66
- if (!slot.feature) return [3 /*break*/, 3];
67
- featureKey = slot.feature;
68
- featureExists = availableFeatureKeys.indexOf(featureKey) > -1;
69
- if (!featureExists) {
70
- throw new Error("feature ".concat(featureKey, " not found"));
71
- }
72
- return [4 /*yield*/, datasource.readFeature(featureKey)];
73
- case 2:
74
- parsedFeature = _c.sent();
75
- environmentKeys = Object.keys(parsedFeature.environments);
76
- for (_a = 0, environmentKeys_1 = environmentKeys; _a < environmentKeys_1.length; _a++) {
77
- environmentKey = environmentKeys_1[_a];
78
- environment = parsedFeature.environments[environmentKey];
79
- rules = environment.rules;
80
- for (_b = 0, rules_1 = rules; _b < rules_1.length; _b++) {
81
- rule = rules_1[_b];
82
- if (rule.percentage > maxPercentageForRule) {
83
- // @TODO: this does not help with same feature belonging to multiple slots. fix that.
84
- throw new Error("Feature ".concat(featureKey, "'s rule ").concat(rule.key, " in ").concat(environmentKey, " has a percentage of ").concat(rule.percentage, " which is greater than the maximum percentage of ").concat(maxPercentageForRule, " for the slot"));
85
- }
86
- }
87
- }
88
- _c.label = 3;
89
- case 3:
90
- _i++;
91
- return [3 /*break*/, 1];
92
- case 4: return [2 /*return*/, value];
93
- }
94
- });
95
- });
3
+ exports.getGroupZodSchema = void 0;
4
+ var zod_1 = require("zod");
5
+ function getGroupZodSchema(projectConfig, datasource, availableFeatureKeys) {
6
+ var groupZodSchema = zod_1.z
7
+ .object({
8
+ description: zod_1.z.string(),
9
+ slots: zod_1.z
10
+ .array(zod_1.z
11
+ .object({
12
+ feature: zod_1.z
13
+ .string()
14
+ .optional()
15
+ .refine(function (value) {
16
+ if (value && availableFeatureKeys.indexOf(value) === -1) {
17
+ return false;
18
+ }
19
+ return true;
20
+ }, function (value) { return ({ message: "Unknown feature \"".concat(value, "\"") }); }),
21
+ percentage: zod_1.z.number().min(0).max(100),
96
22
  })
97
- .required(),
98
- });
99
- return groupJoiSchema;
23
+ .strict())
24
+ .refine(function (value) {
25
+ var totalPercentage = value.reduce(function (acc, slot) { return acc + slot.percentage; }, 0);
26
+ return totalPercentage === 100;
27
+ }, { message: "Total percentage of all slots is not 100" }),
28
+ })
29
+ .strict();
30
+ return groupZodSchema;
100
31
  }
101
- exports.getGroupJoiSchema = getGroupJoiSchema;
32
+ exports.getGroupZodSchema = getGroupZodSchema;
102
33
  //# sourceMappingURL=groupSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"groupSchema.js","sourceRoot":"","sources":["../../src/linter/groupSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAA2B;AAK3B,SAAgB,iBAAiB,CAC/B,aAA4B,EAC5B,UAAsB,EACtB,oBAA8B;;IAE9B,IAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;QAChC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE;aACf,KAAK,CACJ,GAAG,CAAC,MAAM,CAAC;YACT,OAAO,EAAE,CAAA,KAAA,GAAG,CAAC,MAAM,EAAE,CAAA,CAAC,KAAK,WAAI,oBAAoB,CAAC;YACpD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;SACjE,CAAC,CACH;aACA,MAAM,CAAC,UAAgB,KAAK;;;;;;4BACrB,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,UAAU,EAArB,CAAqB,EAAE,CAAC,CAAC,CAAC;4BAE9E,IAAI,eAAe,KAAK,GAAG,EAAE;gCAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;6BAChD;kCAEuB,EAAL,eAAK;;;iCAAL,CAAA,mBAAK,CAAA;4BAAb,IAAI;4BACP,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC;iCAEzC,IAAI,CAAC,OAAO,EAAZ,wBAAY;4BACR,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;4BAC1B,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;4BAEpE,IAAI,CAAC,aAAa,EAAE;gCAClB,MAAM,IAAI,KAAK,CAAC,kBAAW,UAAU,eAAY,CAAC,CAAC;6BACpD;4BAEqB,qBAAM,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,EAAA;;4BAAxD,aAAa,GAAG,SAAwC;4BAExD,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;4BAChE,WAA4C,EAAf,mCAAe,EAAf,6BAAe,EAAf,IAAe,EAAE;gCAAnC,cAAc;gCACjB,WAAW,GAAG,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;gCACzD,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;gCAEhC,WAAwB,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;oCAAf,IAAI;oCACb,IAAI,IAAI,CAAC,UAAU,GAAG,oBAAoB,EAAE;wCAC1C,qFAAqF;wCACrF,MAAM,IAAI,KAAK,CACb,kBAAW,UAAU,qBAAW,IAAI,CAAC,GAAG,iBAAO,cAAc,kCAAwB,IAAI,CAAC,UAAU,8DAAoD,oBAAoB,kBAAe,CAC5L,CAAC;qCACH;iCACF;6BACF;;;4BA1Bc,IAAK,CAAA;;gCA8BxB,sBAAO,KAAK,EAAC;;;;SACd,CAAC;aACD,QAAQ,EAAE;KACd,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC;AAzDD,8CAyDC"}
1
+ {"version":3,"file":"groupSchema.js","sourceRoot":"","sources":["../../src/linter/groupSchema.ts"],"names":[],"mappings":";;;AAAA,2BAAwB;AAKxB,SAAgB,iBAAiB,CAC/B,aAA4B,EAC5B,UAAsB,EACtB,oBAA8B;IAE9B,IAAM,cAAc,GAAG,OAAC;SACrB,MAAM,CAAC;QACN,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;QACvB,KAAK,EAAE,OAAC;aACL,KAAK,CACJ,OAAC;aACE,MAAM,CAAC;YACN,OAAO,EAAE,OAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,MAAM,CACL,UAAC,KAAK;gBACJ,IAAI,KAAK,IAAI,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBACvD,OAAO,KAAK,CAAC;iBACd;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,EACD,UAAC,KAAK,IAAK,OAAA,CAAC,EAAE,OAAO,EAAE,4BAAoB,KAAK,OAAG,EAAE,CAAC,EAA3C,CAA2C,CACvD;YACH,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;SACvC,CAAC;aACD,MAAM,EAAE,CACZ;aACA,MAAM,CACL,UAAC,KAAK;YACJ,IAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,UAAU,EAArB,CAAqB,EAAE,CAAC,CAAC,CAAC;YAE9E,OAAO,eAAe,KAAK,GAAG,CAAC;QACjC,CAAC,EACD,EAAE,OAAO,EAAE,0CAA0C,EAAE,CACxD;KACJ,CAAC;SACD,MAAM,EAAE,CAAC;IAEZ,OAAO,cAAc,CAAC;AACxB,CAAC;AAzCD,8CAyCC"}