@featurevisor/core 2.20.0 → 2.22.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 (87) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/coverage/clover.xml +1286 -515
  3. package/coverage/coverage-final.json +17 -16
  4. package/coverage/lcov-report/builder/allocator.ts.html +1 -1
  5. package/coverage/lcov-report/builder/buildDatafile.ts.html +1 -1
  6. package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
  7. package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
  8. package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
  9. package/coverage/lcov-report/builder/convertToV1.ts.html +1 -1
  10. package/coverage/lcov-report/builder/getFeatureRanges.ts.html +1 -1
  11. package/coverage/lcov-report/builder/hashes.ts.html +1 -1
  12. package/coverage/lcov-report/builder/index.html +1 -1
  13. package/coverage/lcov-report/builder/mutateVariables.ts.html +1 -1
  14. package/coverage/lcov-report/builder/mutator.ts.html +1 -1
  15. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  16. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  17. package/coverage/lcov-report/config/index.html +1 -1
  18. package/coverage/lcov-report/config/index.ts.html +1 -1
  19. package/coverage/lcov-report/config/projectConfig.ts.html +42 -42
  20. package/coverage/lcov-report/datasource/adapter.ts.html +2 -2
  21. package/coverage/lcov-report/datasource/datasource.ts.html +43 -43
  22. package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +48 -48
  23. package/coverage/lcov-report/datasource/index.html +19 -19
  24. package/coverage/lcov-report/datasource/index.ts.html +4 -4
  25. package/coverage/lcov-report/generate-code/index.html +116 -0
  26. package/coverage/lcov-report/generate-code/typescript.ts.html +3004 -0
  27. package/coverage/lcov-report/index.html +44 -29
  28. package/coverage/lcov-report/linter/attributeSchema.ts.html +1815 -30
  29. package/coverage/lcov-report/linter/checkCircularDependency.ts.html +1 -1
  30. package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +1 -1
  31. package/coverage/lcov-report/linter/conditionSchema.ts.html +1606 -157
  32. package/coverage/lcov-report/linter/featureSchema.ts.html +56 -56
  33. package/coverage/lcov-report/linter/groupSchema.ts.html +1 -1
  34. package/coverage/lcov-report/linter/index.html +39 -39
  35. package/coverage/lcov-report/linter/lintProject.ts.html +189 -78
  36. package/coverage/lcov-report/linter/mutationNotation.ts.html +1 -1
  37. package/coverage/lcov-report/linter/printError.ts.html +1 -1
  38. package/coverage/lcov-report/linter/schema.ts.html +59 -59
  39. package/coverage/lcov-report/linter/segmentSchema.ts.html +3 -3
  40. package/coverage/lcov-report/linter/testSchema.ts.html +6 -6
  41. package/coverage/lcov-report/list/index.html +1 -1
  42. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  43. package/coverage/lcov-report/parsers/index.html +1 -1
  44. package/coverage/lcov-report/parsers/index.ts.html +4 -4
  45. package/coverage/lcov-report/parsers/json.ts.html +2 -2
  46. package/coverage/lcov-report/parsers/yml.ts.html +6 -6
  47. package/coverage/lcov-report/tester/cliFormat.ts.html +1 -1
  48. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  49. package/coverage/lcov-report/tester/index.html +1 -1
  50. package/coverage/lcov-report/utils/extractKeys.ts.html +1 -1
  51. package/coverage/lcov-report/utils/git.ts.html +3 -3
  52. package/coverage/lcov-report/utils/index.html +1 -1
  53. package/coverage/lcov-report/utils/index.ts.html +1 -1
  54. package/coverage/lcov-report/utils/pretty.ts.html +1 -1
  55. package/coverage/lcov.info +2624 -926
  56. package/lib/generate-code/typescript.js +57 -29
  57. package/lib/generate-code/typescript.js.map +1 -1
  58. package/lib/generate-code/typescript.spec.d.ts +1 -0
  59. package/lib/generate-code/typescript.spec.js +78 -0
  60. package/lib/generate-code/typescript.spec.js.map +1 -0
  61. package/lib/linter/attributeSchema.d.ts +352 -20
  62. package/lib/linter/attributeSchema.js +426 -16
  63. package/lib/linter/attributeSchema.js.map +1 -1
  64. package/lib/linter/attributeSchema.spec.d.ts +1 -0
  65. package/lib/linter/attributeSchema.spec.js +266 -0
  66. package/lib/linter/attributeSchema.spec.js.map +1 -0
  67. package/lib/linter/conditionSchema.d.ts +2 -1
  68. package/lib/linter/conditionSchema.js +370 -100
  69. package/lib/linter/conditionSchema.js.map +1 -1
  70. package/lib/linter/conditionSchema.spec.js +200 -153
  71. package/lib/linter/conditionSchema.spec.js.map +1 -1
  72. package/lib/linter/featureSchema.spec.js +114 -3
  73. package/lib/linter/featureSchema.spec.js.map +1 -1
  74. package/lib/linter/lintProject.js +45 -14
  75. package/lib/linter/lintProject.js.map +1 -1
  76. package/lib/linter/segmentSchema.spec.js +71 -1
  77. package/lib/linter/segmentSchema.spec.js.map +1 -1
  78. package/package.json +5 -5
  79. package/src/generate-code/typescript.spec.ts +108 -0
  80. package/src/generate-code/typescript.ts +80 -34
  81. package/src/linter/attributeSchema.spec.ts +342 -0
  82. package/src/linter/attributeSchema.ts +613 -18
  83. package/src/linter/conditionSchema.spec.ts +231 -189
  84. package/src/linter/conditionSchema.ts +582 -99
  85. package/src/linter/featureSchema.spec.ts +129 -4
  86. package/src/linter/lintProject.ts +55 -18
  87. package/src/linter/segmentSchema.spec.ts +82 -1
@@ -9,8 +9,8 @@ const stringOperators = [
9
9
  "notContains",
10
10
  "startsWith",
11
11
  "endsWith",
12
- "includes",
13
- "notIncludes",
12
+ "matches",
13
+ "notMatches",
14
14
  ];
15
15
  const semverOperators = [
16
16
  "semverEquals",
@@ -21,17 +21,347 @@ const semverOperators = [
21
21
  "semverLessThanOrEquals",
22
22
  ];
23
23
  const dateOperators = ["before", "after"];
24
- const arrayOperators = ["in", "notIn"];
25
- const regexOperators = ["matches", "notMatches"];
24
+ const arrayMembershipOperators = ["in", "notIn"];
25
+ const arrayOperators = ["includes", "notIncludes"];
26
26
  const operatorsWithoutValue = ["exists", "notExists"];
27
27
  const isoDateRegex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|([+\-]\d{2}:\d{2})))?$/;
28
28
  function isIsoDateString(value) {
29
29
  return isoDateRegex.test(value);
30
30
  }
31
- function getConditionsZodSchema(projectConfig, availableAttributeKeys) {
31
+ function isPrimitiveAttributeValue(value) {
32
+ return (value === null ||
33
+ typeof value === "string" ||
34
+ typeof value === "number" ||
35
+ typeof value === "boolean");
36
+ }
37
+ function isStringArray(value) {
38
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
39
+ }
40
+ function valueDeepEqual(a, b) {
41
+ if (a === b)
42
+ return true;
43
+ if (typeof a !== typeof b)
44
+ return false;
45
+ if (a === null || b === null)
46
+ return a === b;
47
+ if (typeof a === "object" && typeof b === "object") {
48
+ if (Array.isArray(a) !== Array.isArray(b))
49
+ return false;
50
+ if (Array.isArray(a) && Array.isArray(b)) {
51
+ if (a.length !== b.length)
52
+ return false;
53
+ return a.every((value, index) => valueDeepEqual(value, b[index]));
54
+ }
55
+ const keysA = Object.keys(a).sort();
56
+ const keysB = Object.keys(b).sort();
57
+ if (keysA.length !== keysB.length || keysA.some((key, index) => key !== keysB[index])) {
58
+ return false;
59
+ }
60
+ return keysA.every((key) => valueDeepEqual(a[key], b[key]));
61
+ }
62
+ return false;
63
+ }
64
+ function resolveSchemaRefs(schema, schemasByKey) {
65
+ if ("schema" in schema && schema.schema && schemasByKey[schema.schema]) {
66
+ return resolveSchemaRefs(schemasByKey[schema.schema], schemasByKey);
67
+ }
68
+ return schema;
69
+ }
70
+ function getLeafType(resolvedLeaf) {
71
+ if (resolvedLeaf.kind === "flat-object-property" || resolvedLeaf.kind === "flat-array-item") {
72
+ return "primitive";
73
+ }
74
+ return "type" in resolvedLeaf.schema ? resolvedLeaf.schema.type : undefined;
75
+ }
76
+ function getLeafTypes(resolvedLeaf, schemasByKey) {
77
+ if (resolvedLeaf.kind === "flat-object-property" || resolvedLeaf.kind === "flat-array-item") {
78
+ return ["primitive"];
79
+ }
80
+ const resolved = resolveSchemaRefs(resolvedLeaf.schema, schemasByKey);
81
+ if (resolved.oneOf && Array.isArray(resolved.oneOf) && resolved.oneOf.length > 0) {
82
+ return Array.from(new Set(resolved.oneOf.flatMap((branch) => getLeafTypes({ kind: "schema", schema: branch }, schemasByKey))));
83
+ }
84
+ return resolved.type ? [resolved.type] : [];
85
+ }
86
+ function resolveAttributePath(attributePath, attributesByKey, schemasByKey) {
87
+ const [rootKey, ...rest] = attributePath.split(".");
88
+ const rootAttribute = attributesByKey[rootKey];
89
+ if (!rootAttribute) {
90
+ return null;
91
+ }
92
+ let current = rootAttribute;
93
+ if (rest.length === 0) {
94
+ return { kind: "schema", schema: resolveSchemaRefs(current, schemasByKey) };
95
+ }
96
+ for (let index = 0; index < rest.length; index++) {
97
+ const segment = rest[index];
98
+ current = resolveSchemaRefs(current, schemasByKey);
99
+ const type = "type" in current ? current.type : undefined;
100
+ if (type !== "object") {
101
+ return null;
102
+ }
103
+ if ("oneOf" in current && Array.isArray(current.oneOf) && current.oneOf.length > 0) {
104
+ return null;
105
+ }
106
+ const properties = "properties" in current ? current.properties : undefined;
107
+ const additionalProperties = "additionalProperties" in current ? current.additionalProperties : undefined;
108
+ if (properties && typeof properties === "object" && properties[segment]) {
109
+ current = properties[segment];
110
+ continue;
111
+ }
112
+ if (additionalProperties && typeof additionalProperties === "object") {
113
+ current = additionalProperties;
114
+ continue;
115
+ }
116
+ if (!properties && !additionalProperties) {
117
+ return index === rest.length - 1 ? { kind: "flat-object-property" } : null;
118
+ }
119
+ return null;
120
+ }
121
+ return { kind: "schema", schema: resolveSchemaRefs(current, schemasByKey) };
122
+ }
123
+ function matchesSchemaValue(schema, value, schemasByKey) {
124
+ const resolved = resolveSchemaRefs(schema, schemasByKey);
125
+ if (resolved.oneOf && Array.isArray(resolved.oneOf) && resolved.oneOf.length > 0) {
126
+ const matches = resolved.oneOf.filter((branch) => matchesSchemaValue(branch, value, schemasByKey)).length;
127
+ return matches === 1;
128
+ }
129
+ if (resolved.const !== undefined) {
130
+ return valueDeepEqual(value, resolved.const);
131
+ }
132
+ if (Array.isArray(resolved.enum) && resolved.enum.length > 0) {
133
+ return resolved.enum.some((entry) => valueDeepEqual(entry, value));
134
+ }
135
+ const type = resolved.type;
136
+ if (!type) {
137
+ return true;
138
+ }
139
+ if (type === "boolean") {
140
+ return typeof value === "boolean";
141
+ }
142
+ if (type === "string" || type === "semver" || type === "date") {
143
+ if (typeof value !== "string") {
144
+ return false;
145
+ }
146
+ if (resolved.minLength !== undefined && value.length < resolved.minLength)
147
+ return false;
148
+ if (resolved.maxLength !== undefined && value.length > resolved.maxLength)
149
+ return false;
150
+ if (resolved.pattern !== undefined) {
151
+ try {
152
+ if (!new RegExp(resolved.pattern).test(value))
153
+ return false;
154
+ }
155
+ catch {
156
+ return true;
157
+ }
158
+ }
159
+ if (type === "date" && !isIsoDateString(value)) {
160
+ return false;
161
+ }
162
+ return true;
163
+ }
164
+ if (type === "integer" || type === "double") {
165
+ if (typeof value !== "number") {
166
+ return false;
167
+ }
168
+ if (type === "integer" && !Number.isInteger(value)) {
169
+ return false;
170
+ }
171
+ if (resolved.minimum !== undefined && value < resolved.minimum)
172
+ return false;
173
+ if (resolved.maximum !== undefined && value > resolved.maximum)
174
+ return false;
175
+ return true;
176
+ }
177
+ if (type === "object") {
178
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
179
+ return false;
180
+ }
181
+ const objectValue = value;
182
+ const properties = resolved.properties;
183
+ const additionalProperties = resolved.additionalProperties;
184
+ if ((!properties || typeof properties !== "object") && !additionalProperties) {
185
+ return Object.values(objectValue).every((entry) => isPrimitiveAttributeValue(entry));
186
+ }
187
+ if (properties && typeof properties === "object") {
188
+ const required = new Set(resolved.required || []);
189
+ for (const key of required) {
190
+ if (!Object.prototype.hasOwnProperty.call(objectValue, key)) {
191
+ return false;
192
+ }
193
+ }
194
+ for (const key of Object.keys(objectValue)) {
195
+ if (properties[key]) {
196
+ if (!matchesSchemaValue(properties[key], objectValue[key], schemasByKey)) {
197
+ return false;
198
+ }
199
+ continue;
200
+ }
201
+ if (additionalProperties && typeof additionalProperties === "object") {
202
+ if (!matchesSchemaValue(additionalProperties, objectValue[key], schemasByKey)) {
203
+ return false;
204
+ }
205
+ continue;
206
+ }
207
+ return false;
208
+ }
209
+ return true;
210
+ }
211
+ if (additionalProperties && typeof additionalProperties === "object") {
212
+ return Object.values(objectValue).every((entry) => matchesSchemaValue(additionalProperties, entry, schemasByKey));
213
+ }
214
+ return true;
215
+ }
216
+ if (type === "array") {
217
+ if (!Array.isArray(value)) {
218
+ return false;
219
+ }
220
+ if (resolved.minItems !== undefined && value.length < resolved.minItems)
221
+ return false;
222
+ if (resolved.maxItems !== undefined && value.length > resolved.maxItems)
223
+ return false;
224
+ if (resolved.uniqueItems) {
225
+ for (let i = 0; i < value.length; i++) {
226
+ for (let j = i + 1; j < value.length; j++) {
227
+ if (valueDeepEqual(value[i], value[j]))
228
+ return false;
229
+ }
230
+ }
231
+ }
232
+ if (!resolved.items || typeof resolved.items !== "object") {
233
+ return value.every((entry) => typeof entry === "string");
234
+ }
235
+ return value.every((entry) => matchesSchemaValue(resolved.items, entry, schemasByKey));
236
+ }
237
+ return true;
238
+ }
239
+ function matchesLeafValue(leaf, value, schemasByKey) {
240
+ if (leaf.kind === "flat-object-property" || leaf.kind === "flat-array-item") {
241
+ return leaf.kind === "flat-array-item"
242
+ ? typeof value === "string"
243
+ : isPrimitiveAttributeValue(value);
244
+ }
245
+ return matchesSchemaValue(leaf.schema, value, schemasByKey);
246
+ }
247
+ function getArrayItemLeaf(leaf, schemasByKey) {
248
+ if (leaf.kind !== "schema") {
249
+ return leaf.kind === "flat-array-item" ? leaf : null;
250
+ }
251
+ const resolved = resolveSchemaRefs(leaf.schema, schemasByKey);
252
+ if ("oneOf" in resolved && Array.isArray(resolved.oneOf) && resolved.oneOf.length > 0) {
253
+ const itemLeaves = resolved.oneOf
254
+ .map((branch) => getArrayItemLeaf({ kind: "schema", schema: branch }, schemasByKey))
255
+ .filter((item) => item !== null);
256
+ if (itemLeaves.length === 0) {
257
+ return null;
258
+ }
259
+ if (itemLeaves.every((item) => item.kind === "flat-array-item")) {
260
+ return { kind: "flat-array-item" };
261
+ }
262
+ return {
263
+ kind: "schema",
264
+ schema: {
265
+ oneOf: itemLeaves.map((item) => item.kind === "schema" ? item.schema : { type: "string" }),
266
+ },
267
+ };
268
+ }
269
+ if (!("type" in resolved) || resolved.type !== "array") {
270
+ return null;
271
+ }
272
+ if ("items" in resolved && resolved.items && typeof resolved.items === "object") {
273
+ return {
274
+ kind: "schema",
275
+ schema: resolveSchemaRefs(resolved.items, schemasByKey),
276
+ };
277
+ }
278
+ return { kind: "flat-array-item" };
279
+ }
280
+ function addIssue(context, message, path = ["value"]) {
281
+ context.addIssue({
282
+ code: zod_1.z.ZodIssueCode.custom,
283
+ message,
284
+ path,
285
+ });
286
+ }
287
+ function validateAttributeAwareCondition(data, context, attributesByKey, schemasByKey) {
288
+ const resolvedLeaf = resolveAttributePath(data.attribute, attributesByKey, schemasByKey);
289
+ if (!resolvedLeaf) {
290
+ return;
291
+ }
292
+ const leafType = getLeafType(resolvedLeaf);
293
+ const leafTypes = getLeafTypes(resolvedLeaf, schemasByKey);
294
+ if (operatorsWithoutValue.includes(data.operator)) {
295
+ return;
296
+ }
297
+ if (resolvedLeaf.kind === "schema" && leafType === "object") {
298
+ addIssue(context, `Attribute "${data.attribute}" resolves to an object. Use a nested attribute path or \`exists\`/\`notExists\` instead.`);
299
+ return;
300
+ }
301
+ if (numericOperators.includes(data.operator) &&
302
+ !leafTypes.some((type) => ["integer", "double"].includes(type))) {
303
+ addIssue(context, `Operator "${data.operator}" can only be used with integer or double attributes.`);
304
+ return;
305
+ }
306
+ if (stringOperators.includes(data.operator) &&
307
+ !leafTypes.some((type) => ["string", "semver", "date"].includes(type))) {
308
+ addIssue(context, `Operator "${data.operator}" can only be used with string-like attributes.`);
309
+ return;
310
+ }
311
+ if (semverOperators.includes(data.operator) &&
312
+ !leafTypes.some((type) => ["string", "semver"].includes(type))) {
313
+ addIssue(context, `Operator "${data.operator}" can only be used with string or semver attributes.`);
314
+ return;
315
+ }
316
+ if (dateOperators.includes(data.operator) &&
317
+ !leafTypes.some((type) => ["string", "date"].includes(type))) {
318
+ addIssue(context, `Operator "${data.operator}" can only be used with string or date attributes.`);
319
+ return;
320
+ }
321
+ if (arrayMembershipOperators.includes(data.operator)) {
322
+ if (!["primitive", "string", "semver", "date", "integer", "double", "boolean"].includes(leafType || "")) {
323
+ addIssue(context, `Operator "${data.operator}" can only be used with primitive attribute values.`);
324
+ return;
325
+ }
326
+ if (!Array.isArray(data.value)) {
327
+ return;
328
+ }
329
+ data.value.forEach((entry, index) => {
330
+ if (!matchesLeafValue(resolvedLeaf, entry, schemasByKey)) {
331
+ addIssue(context, `Value at index ${index} does not match the schema of attribute "${data.attribute}".`, ["value", index]);
332
+ }
333
+ });
334
+ return;
335
+ }
336
+ if (arrayOperators.includes(data.operator)) {
337
+ const itemLeaf = getArrayItemLeaf(resolvedLeaf, schemasByKey);
338
+ if (!itemLeaf) {
339
+ addIssue(context, `Operator "${data.operator}" can only be used with array attributes.`);
340
+ return;
341
+ }
342
+ const itemType = getLeafType(itemLeaf);
343
+ if (itemType === "object" || itemType === "array") {
344
+ addIssue(context, `Operator "${data.operator}" only supports arrays of primitive values.`);
345
+ return;
346
+ }
347
+ if (!matchesLeafValue(itemLeaf, data.value, schemasByKey)) {
348
+ addIssue(context, `Value does not match the item schema of attribute "${data.attribute}".`);
349
+ }
350
+ return;
351
+ }
352
+ if (commonOperators.includes(data.operator)) {
353
+ if (data.value === null) {
354
+ return;
355
+ }
356
+ if (!matchesLeafValue(resolvedLeaf, data.value, schemasByKey)) {
357
+ addIssue(context, `Value does not match the schema of attribute "${data.attribute}".`);
358
+ }
359
+ }
360
+ }
361
+ function getConditionsZodSchema(projectConfig, attributesByKey, schemasByKey = {}) {
32
362
  const plainConditionZodSchema = zod_1.z
33
363
  .object({
34
- attribute: zod_1.z.string().refine((value) => availableAttributeKeys.includes(value), (value) => ({
364
+ attribute: zod_1.z.string().refine((value) => resolveAttributePath(value, attributesByKey, schemasByKey) !== null, (value) => ({
35
365
  message: `Unknown attribute "${value}"`,
36
366
  })),
37
367
  operator: zod_1.z.enum([
@@ -40,8 +370,8 @@ function getConditionsZodSchema(projectConfig, availableAttributeKeys) {
40
370
  ...stringOperators,
41
371
  ...semverOperators,
42
372
  ...dateOperators,
373
+ ...arrayMembershipOperators,
43
374
  ...arrayOperators,
44
- ...regexOperators,
45
375
  ...operatorsWithoutValue,
46
376
  ]),
47
377
  value: zod_1.z
@@ -60,7 +390,6 @@ function getConditionsZodSchema(projectConfig, availableAttributeKeys) {
60
390
  .optional(),
61
391
  })
62
392
  .superRefine((data, context) => {
63
- // common
64
393
  if (commonOperators.includes(data.operator) &&
65
394
  !(data.value === null ||
66
395
  typeof data.value === "string" ||
@@ -68,115 +397,58 @@ function getConditionsZodSchema(projectConfig, availableAttributeKeys) {
68
397
  typeof data.value === "boolean" ||
69
398
  data.value instanceof Date ||
70
399
  data.value === null)) {
71
- context.addIssue({
72
- code: zod_1.z.ZodIssueCode.custom,
73
- message: `when operator is "${data.operator}", value has to be either a string, number, boolean, date or null`,
74
- path: ["value"],
75
- });
400
+ addIssue(context, `when operator is "${data.operator}", value has to be either a string, number, boolean, date or null`);
76
401
  }
77
- // numeric
78
402
  if (numericOperators.includes(data.operator) && typeof data.value !== "number") {
79
- context.addIssue({
80
- code: zod_1.z.ZodIssueCode.custom,
81
- message: `when operator is "${data.operator}", value must be a number`,
82
- path: ["value"],
83
- });
84
- }
85
- // string
86
- if (stringOperators.includes(data.operator) && typeof data.value !== "string") {
87
- context.addIssue({
88
- code: zod_1.z.ZodIssueCode.custom,
89
- message: `when operator is "${data.operator}", value must be a string`,
90
- path: ["value"],
91
- });
92
- }
93
- // semver
94
- if (semverOperators.includes(data.operator) && typeof data.value !== "string") {
95
- context.addIssue({
96
- code: zod_1.z.ZodIssueCode.custom,
97
- message: `when operator is "${data.operator}", value must be a string`,
98
- path: ["value"],
99
- });
100
- }
101
- // date
403
+ addIssue(context, `when operator is "${data.operator}", value must be a number`);
404
+ }
405
+ if ([...stringOperators, ...semverOperators].includes(data.operator) &&
406
+ typeof data.value !== "string") {
407
+ addIssue(context, `when operator is "${data.operator}", value must be a string`);
408
+ }
102
409
  if (dateOperators.includes(data.operator)) {
103
- // Value is required and must not be undefined or null
104
410
  if (typeof data.value === "undefined" || data.value === null || data.value === "") {
105
- context.addIssue({
106
- code: zod_1.z.ZodIssueCode.custom,
107
- message: `when operator is "${data.operator}", value must be provided`,
108
- path: ["value"],
109
- });
411
+ addIssue(context, `when operator is "${data.operator}", value must be provided`);
110
412
  }
111
413
  else if (typeof data.value === "string") {
112
- // If it's a string, must be valid ISO 8601
113
414
  if (!isIsoDateString(data.value)) {
114
- context.addIssue({
115
- code: zod_1.z.ZodIssueCode.custom,
116
- message: `when operator is "${data.operator}", value must be a stringified date in ISO 8601 format`,
117
- path: ["value"],
118
- });
119
- }
120
- else {
121
- // valid ISO 8601 string -- no issue
415
+ addIssue(context, `when operator is "${data.operator}", value must be a stringified date in ISO 8601 format`);
122
416
  }
123
417
  }
124
418
  else if (data.value instanceof Date) {
125
- // If it's a Date, must be valid
126
419
  if (isNaN(data.value.getTime())) {
127
- context.addIssue({
128
- code: zod_1.z.ZodIssueCode.custom,
129
- message: `when operator is "${data.operator}", value is a Date but invalid`,
130
- path: ["value"],
131
- });
420
+ addIssue(context, `when operator is "${data.operator}", value is a Date but invalid`);
132
421
  }
133
- // Valid JS Date -- no issue
134
422
  }
135
423
  else {
136
- // NOT a string, NOT a Date
137
- context.addIssue({
138
- code: zod_1.z.ZodIssueCode.custom,
139
- message: `when operator is "${data.operator}", value must be a stringified date in ISO 8601 format or a valid Date object`,
140
- path: ["value"],
141
- });
424
+ addIssue(context, `when operator is "${data.operator}", value must be a stringified date in ISO 8601 format or a valid Date object`);
142
425
  }
143
426
  }
144
- // array
145
- if (arrayOperators.includes(data.operator) && !Array.isArray(data.value)) {
146
- context.addIssue({
147
- code: zod_1.z.ZodIssueCode.custom,
148
- message: `when operator is "${data.operator}", value must be an array of strings`,
149
- path: ["value"],
150
- });
427
+ if (arrayMembershipOperators.includes(data.operator) && !Array.isArray(data.value)) {
428
+ addIssue(context, `when operator is "${data.operator}", value must be an array of strings`);
151
429
  }
152
- // regex
153
- if (regexOperators.includes(data.operator)) {
154
- if (typeof data.value !== "string") {
155
- context.addIssue({
156
- code: zod_1.z.ZodIssueCode.custom,
157
- message: `when operator is "${data.operator}", value must be a string`,
158
- path: ["value"],
159
- });
430
+ if (arrayMembershipOperators.includes(data.operator) &&
431
+ Array.isArray(data.value) &&
432
+ !isStringArray(data.value)) {
433
+ addIssue(context, `when operator is "${data.operator}", value must be an array of strings`);
434
+ }
435
+ if (!arrayMembershipOperators.includes(data.operator) && Array.isArray(data.value)) {
436
+ if (!["in", "notIn"].includes(data.operator)) {
437
+ addIssue(context, `when operator is "${data.operator}", value must not be an array`);
160
438
  }
161
439
  }
162
- else {
163
- // regex flags are not needed
164
- if (data.regexFlags) {
165
- context.addIssue({
166
- code: zod_1.z.ZodIssueCode.custom,
167
- message: `when operator is nether "matches" nor "notMatches", regexFlags are not needed`,
168
- path: ["regexFlags"],
169
- });
440
+ if (regexFlagsRequired(data.operator)) {
441
+ if (typeof data.value !== "string") {
442
+ addIssue(context, `when operator is "${data.operator}", value must be a string`);
170
443
  }
171
444
  }
172
- // operators without value
445
+ else if (data.regexFlags) {
446
+ addIssue(context, `when operator is nether "matches" nor "notMatches", regexFlags are not needed`, ["regexFlags"]);
447
+ }
173
448
  if (operatorsWithoutValue.includes(data.operator) && data.value !== undefined) {
174
- context.addIssue({
175
- code: zod_1.z.ZodIssueCode.custom,
176
- message: `when operator is "${data.operator}", value is not needed`,
177
- path: ["value"],
178
- });
449
+ addIssue(context, `when operator is "${data.operator}", value is not needed`);
179
450
  }
451
+ validateAttributeAwareCondition(data, context, attributesByKey, schemasByKey);
180
452
  });
181
453
  const andOrNotConditionZodSchema = zod_1.z.union([
182
454
  zod_1.z
@@ -197,11 +469,9 @@ function getConditionsZodSchema(projectConfig, availableAttributeKeys) {
197
469
  ]);
198
470
  const everyoneZodSchema = zod_1.z.literal("*");
199
471
  const conditionZodSchema = zod_1.z.union([andOrNotConditionZodSchema, plainConditionZodSchema]);
200
- const conditionsZodSchema = zod_1.z.union([
201
- conditionZodSchema,
202
- zod_1.z.array(conditionZodSchema),
203
- everyoneZodSchema,
204
- ]);
205
- return conditionsZodSchema;
472
+ return zod_1.z.union([conditionZodSchema, zod_1.z.array(conditionZodSchema), everyoneZodSchema]);
473
+ }
474
+ function regexFlagsRequired(operator) {
475
+ return operator === "matches" || operator === "notMatches";
206
476
  }
207
477
  //# sourceMappingURL=conditionSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conditionSchema.js","sourceRoot":"","sources":["../../src/linter/conditionSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditionSchema.js","sourceRoot":"","sources":["../../src/linter/conditionSchema.ts"],"names":[],"mappings":"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"}