@code-pushup/models
Version:
Model definitions and validators for the Code PushUp CLI
58 lines • 2.32 kB
JavaScript
import { z } from 'zod';
import { filePositionSchema } from './implementation/schemas.js';
const basicTreeNodeValuesSchema = z.record(z.string(), z.union([z.number(), z.string()]));
const basicTreeNodeDataSchema = z.object({
name: z.string().min(1).describe('Text label for node'),
values: basicTreeNodeValuesSchema
.optional()
.describe('Additional values for node'),
});
export const basicTreeNodeSchema = basicTreeNodeDataSchema.extend({
get children() {
return z
.array(basicTreeNodeSchema)
.optional()
.describe('Direct descendants of this node (omit if leaf)');
},
});
export const coverageTreeMissingLOCSchema = filePositionSchema
.extend({
name: z.string().optional().describe('Identifier of function/class/etc.'),
kind: z.string().optional().describe('E.g. "function", "class"'),
})
.describe('Uncovered line of code, optionally referring to a named function/class/etc.');
const coverageTreeNodeValuesSchema = z.object({
coverage: z.number().min(0).max(1).describe('Coverage ratio'),
missing: z
.array(coverageTreeMissingLOCSchema)
.optional()
.describe('Uncovered lines of code'),
});
const coverageTreeNodeDataSchema = z.object({
name: z.string().min(1).describe('File or folder name'),
values: coverageTreeNodeValuesSchema.describe('Coverage metrics for file/folder'),
});
export const coverageTreeNodeSchema = coverageTreeNodeDataSchema.extend({
get children() {
return z
.array(coverageTreeNodeSchema)
.optional()
.describe('Files and folders contained in this folder (omit if file)');
},
});
export const basicTreeSchema = z
.object({
title: z.string().optional().describe('Heading'),
type: z.literal('basic').optional().describe('Discriminant'),
root: basicTreeNodeSchema.describe('Root node'),
})
.describe('Generic tree');
export const coverageTreeSchema = z
.object({
title: z.string().optional().describe('Heading'),
type: z.literal('coverage').describe('Discriminant'),
root: coverageTreeNodeSchema.describe('Root folder'),
})
.describe('Coverage for files and folders');
export const treeSchema = z.union([basicTreeSchema, coverageTreeSchema]);
//# sourceMappingURL=tree.js.map