@featurevisor/core 2.25.0 → 2.26.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.
- package/CHANGELOG.md +22 -0
- package/coverage/clover.xml +1499 -1476
- package/coverage/coverage-final.json +18 -17
- package/coverage/lcov-report/builder/allocator.ts.html +1 -1
- package/coverage/lcov-report/builder/buildDatafile.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
- package/coverage/lcov-report/builder/convertToV1.ts.html +1 -1
- package/coverage/lcov-report/builder/getFeatureRanges.ts.html +1 -1
- package/coverage/lcov-report/builder/hashes.ts.html +1 -1
- package/coverage/lcov-report/builder/index.html +1 -1
- package/coverage/lcov-report/builder/mutateVariables.ts.html +1 -1
- package/coverage/lcov-report/builder/mutator.ts.html +52 -52
- package/coverage/lcov-report/builder/revision.ts.html +1 -1
- package/coverage/lcov-report/builder/traffic.ts.html +1 -1
- package/coverage/lcov-report/config/index.html +1 -1
- package/coverage/lcov-report/config/index.ts.html +1 -1
- package/coverage/lcov-report/config/projectConfig.ts.html +15 -15
- package/coverage/lcov-report/datasource/adapter.ts.html +1 -1
- package/coverage/lcov-report/datasource/datasource.ts.html +18 -18
- package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +43 -43
- package/coverage/lcov-report/datasource/index.html +1 -1
- package/coverage/lcov-report/datasource/index.ts.html +1 -1
- package/coverage/lcov-report/generate-code/index.html +1 -1
- package/coverage/lcov-report/generate-code/typescript.ts.html +3 -3
- package/coverage/lcov-report/index.html +18 -18
- package/coverage/lcov-report/linter/attributeSchema.ts.html +130 -130
- package/coverage/lcov-report/linter/checkCircularDependency.ts.html +11 -11
- package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +15 -15
- package/coverage/lcov-report/linter/conditionSchema.ts.html +150 -150
- package/coverage/lcov-report/linter/featureSchema.ts.html +458 -443
- package/coverage/lcov-report/linter/groupSchema.ts.html +24 -27
- package/coverage/lcov-report/linter/index.html +83 -68
- package/coverage/lcov-report/linter/lintProject.ts.html +158 -158
- package/coverage/lcov-report/linter/mutationNotation.ts.html +104 -104
- package/coverage/lcov-report/linter/printError.ts.html +79 -28
- package/coverage/lcov-report/linter/schema.ts.html +129 -135
- package/coverage/lcov-report/linter/segmentSchema.ts.html +15 -9
- package/coverage/lcov-report/linter/testSchema.ts.html +67 -94
- package/coverage/lcov-report/linter/zodHelpers.ts.html +133 -0
- package/coverage/lcov-report/list/index.html +1 -1
- package/coverage/lcov-report/list/matrix.ts.html +1 -1
- package/coverage/lcov-report/tester/cliFormat.ts.html +6 -6
- package/coverage/lcov-report/tester/helpers.ts.html +1 -1
- package/coverage/lcov-report/tester/index.html +1 -1
- package/coverage/lcov-report/utils/extractKeys.ts.html +1 -1
- package/coverage/lcov-report/utils/git.ts.html +1 -1
- package/coverage/lcov-report/utils/index.html +1 -1
- package/coverage/lcov-report/utils/index.ts.html +1 -1
- package/coverage/lcov-report/utils/pretty.ts.html +1 -1
- package/coverage/lcov.info +3031 -2984
- package/lib/generate-code/typescript.js +2 -2
- package/lib/linter/attributeSchema.d.ts +19 -352
- package/lib/linter/attributeSchema.spec.js.map +1 -1
- package/lib/linter/conditionSchema.d.ts +1 -1
- package/lib/linter/conditionSchema.js +2 -3
- package/lib/linter/conditionSchema.js.map +1 -1
- package/lib/linter/conditionSchema.spec.js.map +1 -1
- package/lib/linter/featureSchema.d.ts +75 -964
- package/lib/linter/featureSchema.js +64 -53
- package/lib/linter/featureSchema.js.map +1 -1
- package/lib/linter/featureSchema.spec.js +28 -0
- package/lib/linter/featureSchema.spec.js.map +1 -1
- package/lib/linter/groupSchema.d.ts +4 -28
- package/lib/linter/groupSchema.js +3 -5
- package/lib/linter/groupSchema.js.map +1 -1
- package/lib/linter/lintProject.spec.js +101 -13
- package/lib/linter/lintProject.spec.js.map +1 -1
- package/lib/linter/printError.js +21 -7
- package/lib/linter/printError.js.map +1 -1
- package/lib/linter/schema.d.ts +9 -2
- package/lib/linter/schema.js +2 -6
- package/lib/linter/schema.js.map +1 -1
- package/lib/linter/schema.spec.js +3 -2
- package/lib/linter/schema.spec.js.map +1 -1
- package/lib/linter/segmentSchema.d.ts +1 -9
- package/lib/linter/segmentSchema.js +3 -1
- package/lib/linter/segmentSchema.js.map +1 -1
- package/lib/linter/segmentSchema.spec.js.map +1 -1
- package/lib/linter/testSchema.d.ts +16 -222
- package/lib/linter/testSchema.js +23 -38
- package/lib/linter/testSchema.js.map +1 -1
- package/lib/linter/testSchema.spec.d.ts +1 -0
- package/lib/linter/testSchema.spec.js +162 -0
- package/lib/linter/testSchema.spec.js.map +1 -0
- package/lib/linter/zodHelpers.d.ts +2 -0
- package/lib/linter/zodHelpers.js +15 -0
- package/lib/linter/zodHelpers.js.map +1 -0
- package/package.json +3 -3
- package/src/generate-code/typescript.ts +2 -2
- package/src/linter/attributeSchema.spec.ts +3 -3
- package/src/linter/conditionSchema.spec.ts +3 -3
- package/src/linter/conditionSchema.ts +4 -4
- package/src/linter/featureSchema.spec.ts +39 -4
- package/src/linter/featureSchema.ts +82 -77
- package/src/linter/groupSchema.ts +11 -12
- package/src/linter/lintProject.spec.ts +121 -13
- package/src/linter/printError.ts +27 -10
- package/src/linter/schema.spec.ts +12 -11
- package/src/linter/schema.ts +7 -9
- package/src/linter/segmentSchema.spec.ts +5 -5
- package/src/linter/segmentSchema.ts +3 -1
- package/src/linter/testSchema.spec.ts +193 -0
- package/src/linter/testSchema.ts +36 -45
- package/src/linter/zodHelpers.ts +16 -0
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">82.6% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>19/23</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">87.5% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>7/8</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">66.66% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>8/12</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">86.36% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>19/22</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -209,28 +209,19 @@
|
|
|
209
209
|
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
210
|
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
211
|
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
|
|
222
213
|
<span class="cline-any cline-neutral"> </span>
|
|
223
214
|
<span class="cline-any cline-neutral"> </span>
|
|
215
|
+
<span class="cline-any cline-yes">2x</span>
|
|
224
216
|
<span class="cline-any cline-neutral"> </span>
|
|
225
|
-
<span class="cline-any cline-yes">
|
|
226
|
-
<span class="cline-any cline-neutral"> </span>
|
|
217
|
+
<span class="cline-any cline-yes">2x</span>
|
|
227
218
|
<span class="cline-any cline-neutral"> </span>
|
|
228
219
|
<span class="cline-any cline-neutral"> </span>
|
|
229
220
|
<span class="cline-any cline-neutral"> </span>
|
|
230
|
-
<span class="cline-any cline-yes">6x</span>
|
|
231
221
|
<span class="cline-any cline-neutral"> </span>
|
|
232
|
-
<span class="cline-any cline-yes">
|
|
222
|
+
<span class="cline-any cline-yes">13x</span>
|
|
233
223
|
<span class="cline-any cline-neutral"> </span>
|
|
224
|
+
<span class="cline-any cline-yes">13x</span>
|
|
234
225
|
<span class="cline-any cline-neutral"> </span>
|
|
235
226
|
<span class="cline-any cline-neutral"> </span>
|
|
236
227
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -241,14 +232,14 @@
|
|
|
241
232
|
<span class="cline-any cline-neutral"> </span>
|
|
242
233
|
<span class="cline-any cline-neutral"> </span>
|
|
243
234
|
<span class="cline-any cline-neutral"> </span>
|
|
244
|
-
<span class="cline-any cline-yes">6x</span>
|
|
245
235
|
<span class="cline-any cline-neutral"> </span>
|
|
246
236
|
<span class="cline-any cline-neutral"> </span>
|
|
247
|
-
<span class="cline-any cline-yes">
|
|
248
|
-
<span class="cline-any cline-no"> </span>
|
|
237
|
+
<span class="cline-any cline-yes">13x</span>
|
|
249
238
|
<span class="cline-any cline-neutral"> </span>
|
|
250
239
|
<span class="cline-any cline-neutral"> </span>
|
|
251
240
|
<span class="cline-any cline-neutral"> </span>
|
|
241
|
+
<span class="cline-any cline-yes">45x</span>
|
|
242
|
+
<span class="cline-any cline-yes">1x</span>
|
|
252
243
|
<span class="cline-any cline-neutral"> </span>
|
|
253
244
|
<span class="cline-any cline-neutral"> </span>
|
|
254
245
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -262,13 +253,13 @@
|
|
|
262
253
|
<span class="cline-any cline-neutral"> </span>
|
|
263
254
|
<span class="cline-any cline-neutral"> </span>
|
|
264
255
|
<span class="cline-any cline-neutral"> </span>
|
|
265
|
-
<span class="cline-any cline-yes">6x</span>
|
|
266
256
|
<span class="cline-any cline-neutral"> </span>
|
|
257
|
+
<span class="cline-any cline-yes">13x</span>
|
|
267
258
|
<span class="cline-any cline-neutral"> </span>
|
|
268
|
-
<span class="cline-any cline-yes">73x</span>
|
|
269
|
-
<span class="cline-any cline-no"> </span>
|
|
270
259
|
<span class="cline-any cline-neutral"> </span>
|
|
271
260
|
<span class="cline-any cline-neutral"> </span>
|
|
261
|
+
<span class="cline-any cline-yes">102x</span>
|
|
262
|
+
<span class="cline-any cline-yes">1x</span>
|
|
272
263
|
<span class="cline-any cline-neutral"> </span>
|
|
273
264
|
<span class="cline-any cline-neutral"> </span>
|
|
274
265
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -284,38 +275,32 @@
|
|
|
284
275
|
<span class="cline-any cline-neutral"> </span>
|
|
285
276
|
<span class="cline-any cline-neutral"> </span>
|
|
286
277
|
<span class="cline-any cline-neutral"> </span>
|
|
287
|
-
<span class="cline-any cline-yes">408x</span>
|
|
288
278
|
<span class="cline-any cline-neutral"> </span>
|
|
289
|
-
<span class="cline-any cline-yes">
|
|
279
|
+
<span class="cline-any cline-yes">549x</span>
|
|
290
280
|
<span class="cline-any cline-neutral"> </span>
|
|
281
|
+
<span class="cline-any cline-yes">5x</span>
|
|
291
282
|
<span class="cline-any cline-neutral"> </span>
|
|
292
283
|
<span class="cline-any cline-neutral"> </span>
|
|
293
|
-
<span class="cline-any cline-yes">405x</span>
|
|
294
284
|
<span class="cline-any cline-neutral"> </span>
|
|
285
|
+
<span class="cline-any cline-yes">544x</span>
|
|
295
286
|
<span class="cline-any cline-neutral"> </span>
|
|
296
287
|
<span class="cline-any cline-neutral"> </span>
|
|
297
|
-
<span class="cline-any cline-yes">405x</span>
|
|
298
288
|
<span class="cline-any cline-neutral"> </span>
|
|
289
|
+
<span class="cline-any cline-yes">542x</span>
|
|
299
290
|
<span class="cline-any cline-neutral"> </span>
|
|
300
|
-
<span class="cline-any cline-no"> </span>
|
|
301
291
|
<span class="cline-any cline-neutral"> </span>
|
|
302
|
-
<span class="cline-any cline-
|
|
292
|
+
<span class="cline-any cline-yes">2x</span>
|
|
303
293
|
<span class="cline-any cline-neutral"> </span>
|
|
294
|
+
<span class="cline-any cline-yes">2x</span>
|
|
304
295
|
<span class="cline-any cline-neutral"> </span>
|
|
305
296
|
<span class="cline-any cline-neutral"> </span>
|
|
306
297
|
<span class="cline-any cline-neutral"> </span>
|
|
307
298
|
<span class="cline-any cline-neutral"> </span>
|
|
308
|
-
<span class="cline-any cline-
|
|
309
|
-
<span class="cline-any cline-neutral"> </span>
|
|
310
|
-
<span class="cline-any cline-no"> </span>
|
|
299
|
+
<span class="cline-any cline-yes">1x</span>
|
|
311
300
|
<span class="cline-any cline-no"> </span>
|
|
312
301
|
<span class="cline-any cline-neutral"> </span>
|
|
313
302
|
<span class="cline-any cline-neutral"> </span>
|
|
314
303
|
<span class="cline-any cline-neutral"> </span>
|
|
315
|
-
<span class="cline-any cline-neutral"> </span>
|
|
316
|
-
<span class="cline-any cline-neutral"> </span>
|
|
317
|
-
<span class="cline-any cline-neutral"> </span>
|
|
318
|
-
<span class="cline-any cline-neutral"> </span>
|
|
319
304
|
<span class="cline-any cline-no"> </span>
|
|
320
305
|
<span class="cline-any cline-no"> </span>
|
|
321
306
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -368,23 +353,22 @@
|
|
|
368
353
|
<span class="cline-any cline-neutral"> </span>
|
|
369
354
|
<span class="cline-any cline-neutral"> </span>
|
|
370
355
|
<span class="cline-any cline-neutral"> </span>
|
|
371
|
-
<span class="cline-any cline-
|
|
372
|
-
<span class="cline-any cline-neutral"> </span>
|
|
373
|
-
<span class="cline-any cline-neutral"> </span>
|
|
374
|
-
<span class="cline-any cline-yes">6x</span>
|
|
356
|
+
<span class="cline-any cline-yes">13x</span>
|
|
375
357
|
<span class="cline-any cline-neutral"> </span>
|
|
376
358
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { z } from "zod";
|
|
377
359
|
|
|
378
360
|
import { ProjectConfig } from "../config";
|
|
361
|
+
import { refineWithMessage } from "./zodHelpers";
|
|
379
362
|
|
|
380
363
|
export function getTestsZodSchema(
|
|
381
364
|
projectConfig: ProjectConfig,
|
|
382
365
|
availableFeatureKeys: [string, ...string[]],
|
|
383
366
|
availableSegmentKeys: [string, ...string[]],
|
|
384
367
|
) {
|
|
385
|
-
const scopeNames = projectConfig.scopes ? projectConfig.scopes.map(<span class="fstat-no" title="function not covered" >(s</span>cope) => <span class="cstat-no" title="statement not covered" >scope.name)</span> :
|
|
368
|
+
const scopeNames = projectConfig.scopes ? projectConfig.scopes.map(<span class="fstat-no" title="function not covered" >(s</span>cope) => <span class="cstat-no" title="statement not covered" >scope.name)</span> : [];
|
|
386
369
|
|
|
387
370
|
const matrixZodSchema = z.record(
|
|
371
|
+
z.string(),
|
|
388
372
|
z.array(
|
|
389
373
|
z.union([
|
|
390
374
|
// allowed values in arrays
|
|
@@ -398,18 +382,17 @@ export function getTestsZodSchema(
|
|
|
398
382
|
|
|
399
383
|
const segmentTestZodSchema = z
|
|
400
384
|
.object({
|
|
401
|
-
segment:
|
|
385
|
+
segment: refineWithMessage(
|
|
386
|
+
z.string(),
|
|
402
387
|
(value) => availableSegmentKeys.includes(value),
|
|
403
|
-
|
|
404
|
-
message: `Unknown segment "${value}"`,
|
|
405
|
-
}),
|
|
388
|
+
(value) => `Unknown segment "${value}"`,
|
|
406
389
|
),
|
|
407
390
|
assertions: z.array(
|
|
408
391
|
z
|
|
409
392
|
.object({
|
|
410
393
|
matrix: matrixZodSchema.optional(),
|
|
411
394
|
description: z.string().optional(),
|
|
412
|
-
context: z.record(z.unknown()),
|
|
395
|
+
context: z.record(z.string(), z.unknown()),
|
|
413
396
|
expectedToMatch: z.boolean(),
|
|
414
397
|
})
|
|
415
398
|
.strict(),
|
|
@@ -419,11 +402,10 @@ export function getTestsZodSchema(
|
|
|
419
402
|
|
|
420
403
|
const featureTestZodSchema = z
|
|
421
404
|
.object({
|
|
422
|
-
feature:
|
|
405
|
+
feature: refineWithMessage(
|
|
406
|
+
z.string(),
|
|
423
407
|
(value) => availableFeatureKeys.includes(value),
|
|
424
|
-
|
|
425
|
-
message: `Unknown feature "${value}"`,
|
|
426
|
-
}),
|
|
408
|
+
(value) => `Unknown feature "${value}"`,
|
|
427
409
|
),
|
|
428
410
|
assertions: z.array(
|
|
429
411
|
z
|
|
@@ -437,7 +419,8 @@ export function getTestsZodSchema(
|
|
|
437
419
|
z.string(),
|
|
438
420
|
]),
|
|
439
421
|
environment: Array.isArray(projectConfig.environments)
|
|
440
|
-
?
|
|
422
|
+
? refineWithMessage(
|
|
423
|
+
z.string(),
|
|
441
424
|
(value) => {
|
|
442
425
|
if (value.indexOf("${{") === 0) {
|
|
443
426
|
// allow unknown strings for matrix
|
|
@@ -452,47 +435,37 @@ export function getTestsZodSchema(
|
|
|
452
435
|
return true;
|
|
453
436
|
}
|
|
454
437
|
|
|
455
|
-
|
|
438
|
+
return false;
|
|
456
439
|
},
|
|
457
|
-
|
|
458
|
-
message: `Unknown environment "${value}"`,
|
|
459
|
-
}),
|
|
440
|
+
(value) => `Unknown environment "${value}"`,
|
|
460
441
|
)
|
|
461
442
|
: <span class="branch-1 cbranch-no" title="branch not covered" >z.never().optional(),</span>
|
|
462
|
-
tag:
|
|
463
|
-
.string()
|
|
464
|
-
.
|
|
465
|
-
<span class="fstat-no" title="function not covered" >
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
)
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
.string()
|
|
473
|
-
.refine(
|
|
474
|
-
<span class="fstat-no" title="function not covered" > (v</span>alue) => <span class="cstat-no" title="statement not covered" >scopeNames.includes(value),</span>
|
|
475
|
-
<span class="fstat-no" title="function not covered" > (v</span>alue) => (<span class="cstat-no" title="statement not covered" >{</span>
|
|
476
|
-
message: `Unknown scope "${value}"`,
|
|
477
|
-
}),
|
|
478
|
-
)
|
|
479
|
-
.optional(),
|
|
443
|
+
tag: refineWithMessage(
|
|
444
|
+
z.string(),
|
|
445
|
+
(value) => projectConfig.tags.includes(value),
|
|
446
|
+
<span class="fstat-no" title="function not covered" > (v</span>alue) => <span class="cstat-no" title="statement not covered" >`Unknown tag "${value}"`,</span>
|
|
447
|
+
).optional(),
|
|
448
|
+
scope: refineWithMessage(
|
|
449
|
+
z.string(),
|
|
450
|
+
<span class="fstat-no" title="function not covered" > (v</span>alue) => <span class="cstat-no" title="statement not covered" >scopeNames.includes(value),</span>
|
|
451
|
+
<span class="fstat-no" title="function not covered" > (v</span>alue) => <span class="cstat-no" title="statement not covered" >`Unknown scope "${value}"`,</span>
|
|
452
|
+
).optional(),
|
|
480
453
|
|
|
481
454
|
// parent
|
|
482
|
-
sticky: z.record(z.record(z.any())).optional(),
|
|
483
|
-
context: z.record(z.unknown()).optional(),
|
|
455
|
+
sticky: z.record(z.string(), z.record(z.string(), z.any())).optional(),
|
|
456
|
+
context: z.record(z.string(), z.unknown()).optional(),
|
|
484
457
|
|
|
485
458
|
defaultVariationValue: z.string().optional(),
|
|
486
|
-
defaultVariableValues: z.record(z.unknown()).optional(),
|
|
459
|
+
defaultVariableValues: z.record(z.string(), z.unknown()).optional(),
|
|
487
460
|
|
|
488
461
|
expectedToBeEnabled: z.boolean().optional(),
|
|
489
462
|
expectedVariation: z.string().nullable().optional(),
|
|
490
|
-
expectedVariables: z.record(z.unknown()).optional(),
|
|
463
|
+
expectedVariables: z.record(z.string(), z.unknown()).optional(),
|
|
491
464
|
expectedEvaluations: z
|
|
492
465
|
.object({
|
|
493
|
-
flag: z.record(z.any()).optional(),
|
|
494
|
-
variation: z.record(z.any()).optional(),
|
|
495
|
-
variables: z.record(z.record(z.any())).optional(),
|
|
466
|
+
flag: z.record(z.string(), z.any()).optional(),
|
|
467
|
+
variation: z.record(z.string(), z.any()).optional(),
|
|
468
|
+
variables: z.record(z.string(), z.record(z.string(), z.any())).optional(),
|
|
496
469
|
})
|
|
497
470
|
.optional(),
|
|
498
471
|
|
|
@@ -500,21 +473,21 @@ export function getTestsZodSchema(
|
|
|
500
473
|
.array(
|
|
501
474
|
z.object({
|
|
502
475
|
// copied from parent
|
|
503
|
-
sticky: z.record(z.record(z.any())).optional(),
|
|
504
|
-
context: z.record(z.unknown()).optional(),
|
|
476
|
+
sticky: z.record(z.string(), z.record(z.string(), z.any())).optional(),
|
|
477
|
+
context: z.record(z.string(), z.unknown()).optional(),
|
|
505
478
|
|
|
506
479
|
defaultVariationValue: z.string().optional(),
|
|
507
|
-
defaultVariableValues: z.record(z.unknown()).optional(),
|
|
480
|
+
defaultVariableValues: z.record(z.string(), z.unknown()).optional(),
|
|
508
481
|
|
|
509
482
|
expectedToBeEnabled: z.boolean().optional(),
|
|
510
483
|
expectedVariation: z.string().nullable().optional(),
|
|
511
|
-
expectedVariables: z.record(z.unknown()).optional(),
|
|
484
|
+
expectedVariables: z.record(z.string(), z.unknown()).optional(),
|
|
512
485
|
|
|
513
486
|
expectedEvaluations: z
|
|
514
487
|
.object({
|
|
515
|
-
flag: z.record(z.any()).optional(),
|
|
516
|
-
variation: z.record(z.any()).optional(),
|
|
517
|
-
variables: z.record(z.record(z.any())).optional(),
|
|
488
|
+
flag: z.record(z.string(), z.any()).optional(),
|
|
489
|
+
variation: z.record(z.string(), z.any()).optional(),
|
|
490
|
+
variables: z.record(z.string(), z.record(z.string(), z.any())).optional(),
|
|
518
491
|
})
|
|
519
492
|
.optional(),
|
|
520
493
|
}),
|
|
@@ -535,7 +508,7 @@ export function getTestsZodSchema(
|
|
|
535
508
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
536
509
|
Code coverage generated by
|
|
537
510
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
538
|
-
at 2026-04-
|
|
511
|
+
at 2026-04-26T16:47:51.164Z
|
|
539
512
|
</div>
|
|
540
513
|
<script src="../prettify.js"></script>
|
|
541
514
|
<script>
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for linter/zodHelpers.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">linter</a> zodHelpers.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>5/5</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>1/1</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>2/2</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>5/5</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">7x</span>
|
|
83
|
+
<span class="cline-any cline-neutral"> </span>
|
|
84
|
+
<span class="cline-any cline-yes">7x</span>
|
|
85
|
+
<span class="cline-any cline-neutral"> </span>
|
|
86
|
+
<span class="cline-any cline-neutral"> </span>
|
|
87
|
+
<span class="cline-any cline-neutral"> </span>
|
|
88
|
+
<span class="cline-any cline-neutral"> </span>
|
|
89
|
+
<span class="cline-any cline-yes">800x</span>
|
|
90
|
+
<span class="cline-any cline-yes">1958x</span>
|
|
91
|
+
<span class="cline-any cline-yes">15x</span>
|
|
92
|
+
<span class="cline-any cline-neutral"> </span>
|
|
93
|
+
<span class="cline-any cline-neutral"> </span>
|
|
94
|
+
<span class="cline-any cline-neutral"> </span>
|
|
95
|
+
<span class="cline-any cline-neutral"> </span>
|
|
96
|
+
<span class="cline-any cline-neutral"> </span>
|
|
97
|
+
<span class="cline-any cline-neutral"> </span>
|
|
98
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { z } from "zod";
|
|
99
|
+
|
|
100
|
+
export function refineWithMessage<T>(
|
|
101
|
+
schema: z.ZodType<T>,
|
|
102
|
+
predicate: (value: T) => boolean,
|
|
103
|
+
getMessage: (value: T) => string,
|
|
104
|
+
) {
|
|
105
|
+
return schema.superRefine((value, ctx) => {
|
|
106
|
+
if (!predicate(value)) {
|
|
107
|
+
ctx.addIssue({
|
|
108
|
+
code: z.ZodIssueCode.custom,
|
|
109
|
+
message: getMessage(value),
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
</pre></td></tr></table></pre>
|
|
115
|
+
|
|
116
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
117
|
+
</div><!-- /wrapper -->
|
|
118
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
119
|
+
Code coverage generated by
|
|
120
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
121
|
+
at 2026-04-26T16:47:51.164Z
|
|
122
|
+
</div>
|
|
123
|
+
<script src="../prettify.js"></script>
|
|
124
|
+
<script>
|
|
125
|
+
window.onload = function () {
|
|
126
|
+
prettyPrint();
|
|
127
|
+
};
|
|
128
|
+
</script>
|
|
129
|
+
<script src="../sorter.js"></script>
|
|
130
|
+
<script src="../block-navigation.js"></script>
|
|
131
|
+
</body>
|
|
132
|
+
</html>
|
|
133
|
+
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2026-04-
|
|
104
|
+
at 2026-04-26T16:47:51.164Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -721,7 +721,7 @@ export function <span class="fstat-no" title="function not covered" >getSegmentA
|
|
|
721
721
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
722
722
|
Code coverage generated by
|
|
723
723
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
724
|
-
at 2026-04-
|
|
724
|
+
at 2026-04-26T16:47:51.164Z
|
|
725
725
|
</div>
|
|
726
726
|
<script src="../prettify.js"></script>
|
|
727
727
|
<script>
|
|
@@ -69,12 +69,12 @@
|
|
|
69
69
|
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
70
|
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
71
|
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">
|
|
73
|
-
<span class="cline-any cline-yes">
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
|
|
73
|
+
<span class="cline-any cline-yes">2x</span>
|
|
74
74
|
<span class="cline-any cline-neutral"> </span>
|
|
75
|
-
<span class="cline-any cline-yes">
|
|
76
|
-
<span class="cline-any cline-yes">
|
|
77
|
-
<span class="cline-any cline-yes">
|
|
75
|
+
<span class="cline-any cline-yes">2x</span>
|
|
76
|
+
<span class="cline-any cline-yes">2x</span>
|
|
77
|
+
<span class="cline-any cline-yes">2x</span>
|
|
78
78
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">export const CLI_FORMAT_RED = "\x1b[31m%s\x1b[0m";
|
|
79
79
|
export const CLI_FORMAT_GREEN = "\x1b[32m%s\x1b[0m";
|
|
80
80
|
|
|
@@ -88,7 +88,7 @@ export const CLI_FORMAT_BOLD_UNDERLINE = "\x1b[1m\x1b[4m%s\x1b[0m";
|
|
|
88
88
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
89
89
|
Code coverage generated by
|
|
90
90
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
91
|
-
at 2026-04-
|
|
91
|
+
at 2026-04-26T16:47:51.164Z
|
|
92
92
|
</div>
|
|
93
93
|
<script src="../prettify.js"></script>
|
|
94
94
|
<script>
|
|
@@ -298,7 +298,7 @@ export function checkIfArraysAreEqual(arr1: any[], arr2: any[]): boolean {
|
|
|
298
298
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
299
299
|
Code coverage generated by
|
|
300
300
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
301
|
-
at 2026-04-
|
|
301
|
+
at 2026-04-26T16:47:51.164Z
|
|
302
302
|
</div>
|
|
303
303
|
<script src="../prettify.js"></script>
|
|
304
304
|
<script>
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
117
117
|
Code coverage generated by
|
|
118
118
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
119
|
-
at 2026-04-
|
|
119
|
+
at 2026-04-26T16:47:51.164Z
|
|
120
120
|
</div>
|
|
121
121
|
<script src="../prettify.js"></script>
|
|
122
122
|
<script>
|
|
@@ -478,7 +478,7 @@ export function extractAttributeKeysFromConditions(
|
|
|
478
478
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
479
479
|
Code coverage generated by
|
|
480
480
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
481
|
-
at 2026-04-
|
|
481
|
+
at 2026-04-26T16:47:51.164Z
|
|
482
482
|
</div>
|
|
483
483
|
<script src="../prettify.js"></script>
|
|
484
484
|
<script>
|
|
@@ -568,7 +568,7 @@ export function <span class="fstat-no" title="function not covered" >getCommit(<
|
|
|
568
568
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
569
569
|
Code coverage generated by
|
|
570
570
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
571
|
-
at 2026-04-
|
|
571
|
+
at 2026-04-26T16:47:51.164Z
|
|
572
572
|
</div>
|
|
573
573
|
<script src="../prettify.js"></script>
|
|
574
574
|
<script>
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
147
147
|
Code coverage generated by
|
|
148
148
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
149
|
-
at 2026-04-
|
|
149
|
+
at 2026-04-26T16:47:51.164Z
|
|
150
150
|
</div>
|
|
151
151
|
<script src="../prettify.js"></script>
|
|
152
152
|
<script>
|
|
@@ -79,7 +79,7 @@ export * from "./pretty";
|
|
|
79
79
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
80
80
|
Code coverage generated by
|
|
81
81
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
82
|
-
at 2026-04-
|
|
82
|
+
at 2026-04-26T16:47:51.164Z
|
|
83
83
|
</div>
|
|
84
84
|
<script src="../prettify.js"></script>
|
|
85
85
|
<script>
|
|
@@ -106,7 +106,7 @@ export function <span class="fstat-no" title="function not covered" >prettyPerce
|
|
|
106
106
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
107
107
|
Code coverage generated by
|
|
108
108
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
109
|
-
at 2026-04-
|
|
109
|
+
at 2026-04-26T16:47:51.164Z
|
|
110
110
|
</div>
|
|
111
111
|
<script src="../prettify.js"></script>
|
|
112
112
|
<script>
|