@code-pushup/models
Version:
Model definitions and validators for the Code PushUp CLI
79 lines • 2.83 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).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