UNPKG

@code-pushup/models

Version:

Model definitions and validators for the Code PushUp CLI

40 lines 1.99 kB
import { z } from 'zod'; import { createDuplicateSlugsCheck, createDuplicatesCheck, } from './implementation/checks.js'; import { metaSchema, scorableSchema, slugSchema, weightedRefSchema, } from './implementation/schemas.js'; import { formatRef } from './implementation/utils.js'; export const categoryRefSchema = weightedRefSchema('Weighted references to audits and/or groups for the category', 'Slug of an audit or group (depending on `type`)').merge(z.object({ type: z .enum(['audit', 'group']) .describe('Discriminant for reference kind, affects where `slug` is looked up'), plugin: slugSchema.describe('Plugin slug (plugin should contain referenced audit or group)'), })); export const categoryConfigSchema = scorableSchema('Category with a score calculated from audits and groups from various plugins', categoryRefSchema, createDuplicatesCheck(serializeCategoryRefTarget, duplicates => `Category has duplicate references: ${formatSerializedCategoryRefTargets(duplicates)}`)) .merge(metaSchema({ titleDescription: 'Category Title', docsUrlDescription: 'Category docs URL', descriptionDescription: 'Category description', description: 'Meta info for category', })) .merge(z.object({ isBinary: z .boolean() .describe('Is this a binary category (i.e. only a perfect score considered a "pass")?') .optional(), })); const CATEGORY_REF_SEP = '||'; function serializeCategoryRefTarget(ref) { return [ref.type, ref.plugin, ref.slug].join(CATEGORY_REF_SEP); } function formatSerializedCategoryRefTargets(keys) { return keys .map(key => { const [type, plugin, slug] = key.split(CATEGORY_REF_SEP); return formatRef({ type, plugin, slug }); }) .join(', '); } export const categoriesSchema = z .array(categoryConfigSchema) .check(createDuplicateSlugsCheck('Category')) .describe('Categorization of individual audits'); //# sourceMappingURL=category-config.js.map