UNPKG

@code-pushup/models

Version:

Model definitions and validators for the Code PushUp CLI

58 lines 2.32 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).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