@featurevisor/core 0.50.0 → 0.51.1

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 (51) 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/allocator.js.html +1 -1
  6. package/coverage/lcov-report/lib/index.html +1 -1
  7. package/coverage/lcov-report/lib/traffic.js.html +1 -1
  8. package/coverage/lcov-report/src/allocator.ts.html +1 -1
  9. package/coverage/lcov-report/src/index.html +1 -1
  10. package/coverage/lcov-report/src/traffic.ts.html +1 -1
  11. package/lib/linter/attributeSchema.d.ts +2 -0
  12. package/lib/linter/attributeSchema.js +15 -0
  13. package/lib/linter/attributeSchema.js.map +1 -0
  14. package/lib/linter/checkCircularDependency.d.ts +3 -0
  15. package/lib/linter/checkCircularDependency.js +30 -0
  16. package/lib/linter/checkCircularDependency.js.map +1 -0
  17. package/lib/linter/conditionSchema.d.ts +3 -0
  18. package/lib/linter/conditionSchema.js +44 -0
  19. package/lib/linter/conditionSchema.js.map +1 -0
  20. package/lib/linter/featureSchema.d.ts +3 -0
  21. package/lib/linter/featureSchema.js +147 -0
  22. package/lib/linter/featureSchema.js.map +1 -0
  23. package/lib/linter/groupSchema.d.ts +4 -0
  24. package/lib/linter/groupSchema.js +51 -0
  25. package/lib/linter/groupSchema.js.map +1 -0
  26. package/lib/linter/index.d.ts +2 -0
  27. package/lib/linter/index.js +241 -0
  28. package/lib/linter/index.js.map +1 -0
  29. package/lib/linter/printJoiError.d.ts +2 -0
  30. package/lib/linter/printJoiError.js +14 -0
  31. package/lib/linter/printJoiError.js.map +1 -0
  32. package/lib/linter/segmentSchema.d.ts +3 -0
  33. package/lib/linter/segmentSchema.js +14 -0
  34. package/lib/linter/segmentSchema.js.map +1 -0
  35. package/lib/linter/testSchema.d.ts +3 -0
  36. package/lib/linter/testSchema.js +33 -0
  37. package/lib/linter/testSchema.js.map +1 -0
  38. package/package.json +5 -5
  39. package/src/linter/attributeSchema.ts +12 -0
  40. package/src/linter/checkCircularDependency.ts +45 -0
  41. package/src/linter/conditionSchema.ts +85 -0
  42. package/src/linter/featureSchema.ts +205 -0
  43. package/src/linter/groupSchema.ts +63 -0
  44. package/src/linter/index.ts +179 -0
  45. package/src/linter/printJoiError.ts +11 -0
  46. package/src/linter/segmentSchema.ts +13 -0
  47. package/src/linter/testSchema.ts +43 -0
  48. package/lib/linter.d.ts +0 -11
  49. package/lib/linter.js +0 -541
  50. package/lib/linter.js.map +0 -1
  51. package/src/linter.ts +0 -626
package/lib/linter.js DELETED
@@ -1,541 +0,0 @@
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
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
- if (ar || !(i in from)) {
41
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
- ar[i] = from[i];
43
- }
44
- }
45
- return to.concat(ar || Array.prototype.slice.call(from));
46
- };
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.lintProject = exports.printJoiError = exports.getTestsJoiSchema = exports.getFeatureJoiSchema = exports.getGroupJoiSchema = exports.getSegmentJoiSchema = exports.getConditionsJoiSchema = exports.getAttributeJoiSchema = void 0;
49
- // for use in node only
50
- var fs = require("fs");
51
- var Joi = require("joi");
52
- var datasource_1 = require("./datasource/datasource");
53
- function getAttributeJoiSchema() {
54
- var attributeJoiSchema = Joi.object({
55
- archived: Joi.boolean(),
56
- type: Joi.string().allow("boolean", "string", "integer", "double", "date").required(),
57
- description: Joi.string().required(),
58
- capture: Joi.boolean(),
59
- });
60
- return attributeJoiSchema;
61
- }
62
- exports.getAttributeJoiSchema = getAttributeJoiSchema;
63
- function getConditionsJoiSchema(projectConfig, availableAttributeKeys) {
64
- var _a;
65
- var plainConditionJoiSchema = Joi.object({
66
- attribute: (_a = Joi.string())
67
- .valid.apply(_a, availableAttributeKeys).required(),
68
- operator: Joi.string()
69
- .valid("equals", "notEquals",
70
- // numeric
71
- "greaterThan", "greaterThanOrEquals", "lessThan", "lessThanOrEquals",
72
- // string
73
- "contains", "notContains", "startsWith", "endsWith",
74
- // semver (string)
75
- "semverEquals", "semverNotEquals", "semverGreaterThan", "semverGreaterThanOrEquals", "semverLessThan", "semverLessThanOrEquals",
76
- // date comparisons
77
- "before", "after",
78
- // array of strings
79
- "in", "notIn")
80
- .required(),
81
- value: Joi.alternatives()
82
- .try(
83
- // @TODO: make them more specific
84
- Joi.string(), Joi.number(), Joi.boolean(), Joi.date(), Joi.array().items(Joi.string()))
85
- .required(),
86
- });
87
- var andOrNotConditionJoiSchema = Joi.alternatives()
88
- .try(Joi.object({
89
- and: Joi.array().items(Joi.link("#andOrNotCondition"), plainConditionJoiSchema),
90
- }), Joi.object({
91
- or: Joi.array().items(Joi.link("#andOrNotCondition"), plainConditionJoiSchema),
92
- }), Joi.object({
93
- // @TODO: allow plainConditionJoiSchema as well?
94
- not: Joi.array().items(Joi.link("#andOrNotCondition"), plainConditionJoiSchema),
95
- }))
96
- .id("andOrNotCondition");
97
- var conditionJoiSchema = Joi.alternatives().try(andOrNotConditionJoiSchema, plainConditionJoiSchema);
98
- var conditionsJoiSchema = Joi.alternatives().try(conditionJoiSchema, Joi.array().items(conditionJoiSchema));
99
- return conditionsJoiSchema;
100
- }
101
- exports.getConditionsJoiSchema = getConditionsJoiSchema;
102
- function getSegmentJoiSchema(projectConfig, conditionsJoiSchema) {
103
- var segmentJoiSchema = Joi.object({
104
- archived: Joi.boolean().optional(),
105
- description: Joi.string().required(),
106
- conditions: conditionsJoiSchema.required(),
107
- });
108
- return segmentJoiSchema;
109
- }
110
- exports.getSegmentJoiSchema = getSegmentJoiSchema;
111
- function getGroupJoiSchema(projectConfig, datasource, availableFeatureKeys) {
112
- var _a;
113
- var groupJoiSchema = Joi.object({
114
- description: Joi.string().required(),
115
- slots: Joi.array()
116
- .items(Joi.object({
117
- feature: (_a = Joi.string()).valid.apply(_a, availableFeatureKeys),
118
- percentage: Joi.number().precision(3).min(0).max(100),
119
- }))
120
- .custom(function (value) {
121
- var totalPercentage = value.reduce(function (acc, slot) { return acc + slot.percentage; }, 0);
122
- if (totalPercentage !== 100) {
123
- throw new Error("total percentage is not 100");
124
- }
125
- for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
126
- var slot = value_1[_i];
127
- var maxPercentageForRule = slot.percentage;
128
- if (slot.feature) {
129
- var featureKey = slot.feature;
130
- var featureExists = datasource.entityExists("feature", featureKey);
131
- if (!featureExists) {
132
- throw new Error("feature ".concat(featureKey, " not found"));
133
- }
134
- var parsedFeature = datasource.readFeature(featureKey);
135
- var environmentKeys = Object.keys(parsedFeature.environments);
136
- for (var _a = 0, environmentKeys_1 = environmentKeys; _a < environmentKeys_1.length; _a++) {
137
- var environmentKey = environmentKeys_1[_a];
138
- var environment = parsedFeature.environments[environmentKey];
139
- var rules = environment.rules;
140
- for (var _b = 0, rules_1 = rules; _b < rules_1.length; _b++) {
141
- var rule = rules_1[_b];
142
- if (rule.percentage > maxPercentageForRule) {
143
- // @TODO: this does not help with same feature belonging to multiple slots. fix that.
144
- 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"));
145
- }
146
- }
147
- }
148
- }
149
- }
150
- return value;
151
- })
152
- .required(),
153
- });
154
- return groupJoiSchema;
155
- }
156
- exports.getGroupJoiSchema = getGroupJoiSchema;
157
- var tagRegex = /^[a-z0-9-]+$/;
158
- function getFeatureJoiSchema(projectConfig, conditionsJoiSchema, availableSegmentKeys, availableFeatureKeys) {
159
- var _a, _b, _c;
160
- var variationValueJoiSchema = Joi.string().required();
161
- var variableValueJoiSchema = Joi.alternatives()
162
- .try(
163
- // @TODO: make it stricter based on variableSchema.type
164
- Joi.string(), Joi.number(), Joi.boolean(), Joi.array().items(Joi.string()), Joi.object().custom(function (value) {
165
- var isFlat = true;
166
- Object.keys(value).forEach(function (key) {
167
- if (typeof value[key] === "object") {
168
- isFlat = false;
169
- }
170
- });
171
- if (!isFlat) {
172
- throw new Error("object is not flat");
173
- }
174
- return value;
175
- }))
176
- .allow("");
177
- var plainGroupSegment = (_a = Joi.string()).valid.apply(_a, __spreadArray(["*"], availableSegmentKeys, false));
178
- var andOrNotGroupSegment = Joi.alternatives()
179
- .try(Joi.object({
180
- and: Joi.array().items(Joi.link("#andOrNotGroupSegment"), plainGroupSegment),
181
- }), Joi.object({
182
- or: Joi.array().items(Joi.link("#andOrNotGroupSegment"), plainGroupSegment),
183
- }), Joi.object({
184
- // @TODO: allow plainGroupSegment as well?
185
- not: Joi.array().items(Joi.link("#andOrNotGroupSegment"), plainGroupSegment),
186
- }))
187
- .id("andOrNotGroupSegment");
188
- var groupSegment = Joi.alternatives().try(andOrNotGroupSegment, plainGroupSegment);
189
- var groupSegmentsJoiSchema = Joi.alternatives().try(Joi.array().items(groupSegment), groupSegment);
190
- var environmentJoiSchema = Joi.object({
191
- expose: Joi.boolean(),
192
- rules: Joi.array()
193
- .items(Joi.object({
194
- key: Joi.string(),
195
- segments: groupSegmentsJoiSchema,
196
- percentage: Joi.number().precision(3).min(0).max(100),
197
- enabled: Joi.boolean().optional(),
198
- variation: variationValueJoiSchema.optional(),
199
- variables: Joi.object().optional(), // @TODO: make it stricter
200
- }))
201
- .unique("key")
202
- .required(),
203
- force: Joi.array().items(Joi.object({
204
- // @TODO: either of the two below
205
- segments: groupSegmentsJoiSchema.optional(),
206
- conditions: conditionsJoiSchema.optional(),
207
- enabled: Joi.boolean().optional(),
208
- variation: variationValueJoiSchema.optional(),
209
- variables: Joi.object().optional(), // @TODO: make it stricter
210
- })),
211
- });
212
- var allEnvironmentsSchema = {};
213
- projectConfig.environments.forEach(function (environmentKey) {
214
- allEnvironmentsSchema[environmentKey] = environmentJoiSchema.required();
215
- });
216
- var allEnvironmentsJoiSchema = Joi.object(allEnvironmentsSchema);
217
- var featureJoiSchema = Joi.object({
218
- archived: Joi.boolean().optional(),
219
- deprecated: Joi.boolean().optional(),
220
- description: Joi.string().required(),
221
- tags: Joi.array()
222
- .items(Joi.string().custom(function (value) {
223
- if (!tagRegex.test(value)) {
224
- throw new Error("tag must be lower cased and alphanumeric, and may contain hyphens.");
225
- }
226
- return value;
227
- }))
228
- .required(),
229
- required: Joi.array()
230
- .items(Joi.alternatives().try((_b = Joi.string()
231
- .required())
232
- .valid.apply(_b, availableFeatureKeys), Joi.object({
233
- key: (_c = Joi.string()
234
- .required())
235
- .valid.apply(_c, availableFeatureKeys),
236
- variation: Joi.string().optional(), // @TODO: can be made stricter
237
- })))
238
- .optional(),
239
- bucketBy: Joi.alternatives()
240
- .try(
241
- // plain
242
- Joi.string(),
243
- // and
244
- Joi.array().items(Joi.string()),
245
- // or
246
- Joi.object({
247
- or: Joi.array().items(Joi.string()),
248
- }))
249
- .required(),
250
- variablesSchema: Joi.array()
251
- .items(Joi.object({
252
- key: Joi.string().disallow("variation"),
253
- type: Joi.string().valid("string", "integer", "boolean", "double", "array", "object", "json"),
254
- defaultValue: variableValueJoiSchema, // @TODO: make it stricter based on `type`
255
- }))
256
- .unique("key"),
257
- variations: Joi.array()
258
- .items(Joi.object({
259
- description: Joi.string(),
260
- value: variationValueJoiSchema.required(),
261
- weight: Joi.number().precision(3).min(0).max(100).required(),
262
- variables: Joi.array()
263
- .items(Joi.object({
264
- key: Joi.string(),
265
- value: variableValueJoiSchema,
266
- overrides: Joi.array().items(Joi.object({
267
- // @TODO: either segments or conditions prsent at a time
268
- segments: groupSegmentsJoiSchema,
269
- conditions: conditionsJoiSchema,
270
- // @TODO: make it stricter based on `type`
271
- value: variableValueJoiSchema,
272
- })),
273
- }))
274
- .unique("key"),
275
- }))
276
- .custom(function (value) {
277
- var total = value.reduce(function (acc, v) { return acc + v.weight; }, 0);
278
- if (total !== 100) {
279
- throw new Error("Sum of all variation weights must be 100, got ".concat(total));
280
- }
281
- return value;
282
- })
283
- .optional(),
284
- environments: allEnvironmentsJoiSchema.required(),
285
- });
286
- return featureJoiSchema;
287
- }
288
- exports.getFeatureJoiSchema = getFeatureJoiSchema;
289
- function getTestsJoiSchema(projectConfig, availableFeatureKeys, availableSegmentKeys) {
290
- var _a, _b, _c;
291
- var segmentTestJoiSchema = Joi.object({
292
- segment: (_a = Joi.string())
293
- .valid.apply(_a, availableSegmentKeys).required(),
294
- assertions: Joi.array().items(Joi.object({
295
- description: Joi.string().optional(),
296
- context: Joi.object(),
297
- expectedToMatch: Joi.boolean(),
298
- })),
299
- });
300
- var featureTestJoiSchema = Joi.object({
301
- feature: (_b = Joi.string())
302
- .valid.apply(_b, availableFeatureKeys).required(),
303
- assertions: Joi.array().items(Joi.object({
304
- description: Joi.string().optional(),
305
- at: Joi.number().precision(3).min(0).max(100),
306
- environment: (_c = Joi.string()).valid.apply(_c, projectConfig.environments),
307
- context: Joi.object(),
308
- // @TODO: one or all below
309
- expectedToBeEnabled: Joi.boolean().required(),
310
- expectedVariation: Joi.alternatives().try(Joi.string(), Joi.number(), Joi.boolean()),
311
- expectedVariables: Joi.object(),
312
- })),
313
- });
314
- return Joi.alternatives().try(segmentTestJoiSchema, featureTestJoiSchema);
315
- }
316
- exports.getTestsJoiSchema = getTestsJoiSchema;
317
- function printJoiError(e) {
318
- var details = e.details;
319
- details.forEach(function (detail) {
320
- var _a;
321
- console.error(" => Error:", detail.message);
322
- console.error(" => Path:", detail.path.join("."));
323
- console.error(" => Value:", (_a = detail.context) === null || _a === void 0 ? void 0 : _a.value);
324
- });
325
- }
326
- exports.printJoiError = printJoiError;
327
- function checkForCircularDependencyInRequired(datasource, featureKey, required, chain) {
328
- if (chain === void 0) { chain = []; }
329
- if (!required) {
330
- return;
331
- }
332
- var requiredKeys = required.map(function (r) { return (typeof r === "string" ? r : r.key); });
333
- if (requiredKeys.length === 0) {
334
- return;
335
- }
336
- for (var _i = 0, requiredKeys_1 = requiredKeys; _i < requiredKeys_1.length; _i++) {
337
- var requiredKey = requiredKeys_1[_i];
338
- chain.push(requiredKey);
339
- if (chain.indexOf(featureKey) > -1) {
340
- throw new Error("circular dependency found: ".concat(chain.join(" -> ")));
341
- }
342
- var requiredFeatureExists = datasource.entityExists("feature", requiredKey);
343
- if (!requiredFeatureExists) {
344
- throw new Error("required feature \"".concat(requiredKey, "\" not found"));
345
- }
346
- var requiredParsedFeature = datasource.readFeature(requiredKey);
347
- if (requiredParsedFeature.required) {
348
- checkForCircularDependencyInRequired(datasource, featureKey, requiredParsedFeature.required, chain);
349
- }
350
- }
351
- }
352
- function lintProject(projectConfig) {
353
- return __awaiter(this, void 0, void 0, function () {
354
- var hasError, datasource, availableAttributeKeys, availableSegmentKeys, availableFeatureKeys, attributes, attributeJoiSchema, _i, attributes_1, key, parsed, e_1, segments, conditionsJoiSchema, segmentJoiSchema, _a, segments_1, key, parsed, e_2, groups, groupJoiSchema, _b, groups_1, key, parsed, e_3, features, featureJoiSchema, _c, features_1, key, parsed, e_4, tests, testsJoiSchema, _d, tests_1, key, parsed, e_5;
355
- return __generator(this, function (_e) {
356
- switch (_e.label) {
357
- case 0:
358
- hasError = false;
359
- datasource = new datasource_1.Datasource(projectConfig);
360
- availableAttributeKeys = [];
361
- availableSegmentKeys = [];
362
- availableFeatureKeys = [];
363
- attributes = datasource.listAttributes();
364
- console.log("Linting ".concat(attributes.length, " attributes...\n"));
365
- attributeJoiSchema = getAttributeJoiSchema();
366
- _i = 0, attributes_1 = attributes;
367
- _e.label = 1;
368
- case 1:
369
- if (!(_i < attributes_1.length)) return [3 /*break*/, 6];
370
- key = attributes_1[_i];
371
- parsed = datasource.readAttribute(key);
372
- availableAttributeKeys.push(key);
373
- _e.label = 2;
374
- case 2:
375
- _e.trys.push([2, 4, , 5]);
376
- return [4 /*yield*/, attributeJoiSchema.validateAsync(parsed)];
377
- case 3:
378
- _e.sent();
379
- return [3 /*break*/, 5];
380
- case 4:
381
- e_1 = _e.sent();
382
- console.log(" =>", key);
383
- if (e_1 instanceof Joi.ValidationError) {
384
- printJoiError(e_1);
385
- }
386
- else {
387
- console.log(e_1);
388
- }
389
- hasError = true;
390
- return [3 /*break*/, 5];
391
- case 5:
392
- _i++;
393
- return [3 /*break*/, 1];
394
- case 6:
395
- segments = datasource.listSegments();
396
- console.log("\nLinting ".concat(segments.length, " segments...\n"));
397
- conditionsJoiSchema = getConditionsJoiSchema(projectConfig, availableAttributeKeys);
398
- segmentJoiSchema = getSegmentJoiSchema(projectConfig, conditionsJoiSchema);
399
- _a = 0, segments_1 = segments;
400
- _e.label = 7;
401
- case 7:
402
- if (!(_a < segments_1.length)) return [3 /*break*/, 12];
403
- key = segments_1[_a];
404
- parsed = datasource.readSegment(key);
405
- availableSegmentKeys.push(key);
406
- _e.label = 8;
407
- case 8:
408
- _e.trys.push([8, 10, , 11]);
409
- return [4 /*yield*/, segmentJoiSchema.validateAsync(parsed)];
410
- case 9:
411
- _e.sent();
412
- return [3 /*break*/, 11];
413
- case 10:
414
- e_2 = _e.sent();
415
- console.log(" =>", key);
416
- if (e_2 instanceof Joi.ValidationError) {
417
- printJoiError(e_2);
418
- }
419
- else {
420
- console.log(e_2);
421
- }
422
- hasError = true;
423
- return [3 /*break*/, 11];
424
- case 11:
425
- _a++;
426
- return [3 /*break*/, 7];
427
- case 12:
428
- if (!fs.existsSync(projectConfig.groupsDirectoryPath)) return [3 /*break*/, 18];
429
- groups = datasource.listGroups();
430
- console.log("\nLinting ".concat(groups.length, " groups...\n"));
431
- groupJoiSchema = getGroupJoiSchema(projectConfig, datasource, availableFeatureKeys);
432
- _b = 0, groups_1 = groups;
433
- _e.label = 13;
434
- case 13:
435
- if (!(_b < groups_1.length)) return [3 /*break*/, 18];
436
- key = groups_1[_b];
437
- parsed = datasource.readGroup(key);
438
- _e.label = 14;
439
- case 14:
440
- _e.trys.push([14, 16, , 17]);
441
- return [4 /*yield*/, groupJoiSchema.validateAsync(parsed)];
442
- case 15:
443
- _e.sent();
444
- return [3 /*break*/, 17];
445
- case 16:
446
- e_3 = _e.sent();
447
- console.log(" =>", key);
448
- if (e_3 instanceof Joi.ValidationError) {
449
- printJoiError(e_3);
450
- }
451
- else {
452
- console.log(e_3);
453
- }
454
- hasError = true;
455
- return [3 /*break*/, 17];
456
- case 17:
457
- _b++;
458
- return [3 /*break*/, 13];
459
- case 18:
460
- features = datasource.listFeatures();
461
- console.log("\nLinting ".concat(features.length, " features...\n"));
462
- featureJoiSchema = getFeatureJoiSchema(projectConfig, conditionsJoiSchema, availableSegmentKeys, availableFeatureKeys);
463
- _c = 0, features_1 = features;
464
- _e.label = 19;
465
- case 19:
466
- if (!(_c < features_1.length)) return [3 /*break*/, 25];
467
- key = features_1[_c];
468
- parsed = datasource.readFeature(key);
469
- availableFeatureKeys.push(key);
470
- _e.label = 20;
471
- case 20:
472
- _e.trys.push([20, 22, , 23]);
473
- return [4 /*yield*/, featureJoiSchema.validateAsync(parsed)];
474
- case 21:
475
- _e.sent();
476
- return [3 /*break*/, 23];
477
- case 22:
478
- e_4 = _e.sent();
479
- console.log(" =>", key);
480
- if (e_4 instanceof Joi.ValidationError) {
481
- printJoiError(e_4);
482
- }
483
- else {
484
- console.log(e_4);
485
- }
486
- hasError = true;
487
- return [3 /*break*/, 23];
488
- case 23:
489
- if (parsed.required) {
490
- try {
491
- checkForCircularDependencyInRequired(datasource, key, parsed.required);
492
- }
493
- catch (e) {
494
- console.log(" =>", key);
495
- console.log(" => Error:", e.message);
496
- hasError = true;
497
- }
498
- }
499
- _e.label = 24;
500
- case 24:
501
- _c++;
502
- return [3 /*break*/, 19];
503
- case 25:
504
- if (!fs.existsSync(projectConfig.testsDirectoryPath)) return [3 /*break*/, 31];
505
- tests = datasource.listTests();
506
- console.log("\nLinting ".concat(tests.length, " tests...\n"));
507
- testsJoiSchema = getTestsJoiSchema(projectConfig, availableFeatureKeys, availableSegmentKeys);
508
- _d = 0, tests_1 = tests;
509
- _e.label = 26;
510
- case 26:
511
- if (!(_d < tests_1.length)) return [3 /*break*/, 31];
512
- key = tests_1[_d];
513
- parsed = datasource.readTest(key);
514
- _e.label = 27;
515
- case 27:
516
- _e.trys.push([27, 29, , 30]);
517
- return [4 /*yield*/, testsJoiSchema.validateAsync(parsed)];
518
- case 28:
519
- _e.sent();
520
- return [3 /*break*/, 30];
521
- case 29:
522
- e_5 = _e.sent();
523
- console.log(" =>", key);
524
- if (e_5 instanceof Joi.ValidationError) {
525
- printJoiError(e_5);
526
- }
527
- else {
528
- console.log(e_5);
529
- }
530
- hasError = true;
531
- return [3 /*break*/, 30];
532
- case 30:
533
- _d++;
534
- return [3 /*break*/, 26];
535
- case 31: return [2 /*return*/, hasError];
536
- }
537
- });
538
- });
539
- }
540
- exports.lintProject = lintProject;
541
- //# sourceMappingURL=linter.js.map
package/lib/linter.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"linter.js","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"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"}