UNPKG

@code-pushup/models

Version:

Model definitions and validators for the Code PushUp CLI

79 lines 2.83 kB
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).meta({ description: 'Text label for node' }), values: basicTreeNodeValuesSchema .optional() .meta({ description: 'Additional values for node' }), }); export const basicTreeNodeSchema = basicTreeNodeDataSchema .extend({ get children() { return z.array(basicTreeNodeSchema).optional().meta({ description: 'Direct descendants of this node (omit if leaf)', }); }, }) .meta({ title: 'BasicTreeNode' }); export const coverageTreeMissingLOCSchema = filePositionSchema .extend({ name: z .string() .optional() .meta({ description: 'Identifier of function/class/etc.' }), kind: z .string() .optional() .meta({ description: 'E.g. "function", "class"' }), }) .meta({ title: 'CoverageTreeMissingLOC', description: 'Uncovered line of code, optionally referring to a named function/class/etc.', }); const coverageTreeNodeValuesSchema = z.object({ coverage: z.number().min(0).max(1).meta({ description: 'Coverage ratio' }), missing: z .array(coverageTreeMissingLOCSchema) .optional() .meta({ description: 'Uncovered lines of code' }), }); const coverageTreeNodeDataSchema = z.object({ name: z.string().min(1).meta({ description: 'File or folder name' }), values: coverageTreeNodeValuesSchema.meta({ description: 'Coverage metrics for file/folder', }), }); export const coverageTreeNodeSchema = coverageTreeNodeDataSchema .extend({ get children() { return z.array(coverageTreeNodeSchema).optional().meta({ description: 'Files and folders contained in this folder (omit if file)', }); }, }) .meta({ title: 'CoverageTreeNode' }); export const basicTreeSchema = z .object({ title: z.string().optional().meta({ description: 'Heading' }), type: z.literal('basic').optional().meta({ description: 'Discriminant' }), root: basicTreeNodeSchema.meta({ description: 'Root node' }), }) .meta({ title: 'BasicTree', description: 'Generic tree', }); export const coverageTreeSchema = z .object({ title: z.string().optional().meta({ description: 'Heading' }), type: z.literal('coverage').meta({ description: 'Discriminant' }), root: coverageTreeNodeSchema.meta({ description: 'Root folder' }), }) .meta({ title: 'CoverageTree', description: 'Coverage for files and folders', }); export const treeSchema = z .union([basicTreeSchema, coverageTreeSchema]) .meta({ title: 'Tree' }); //# sourceMappingURL=tree.js.map