UNPKG

@code-pushup/models

Version:

Model definitions and validators for the Code PushUp CLI

42 lines 1.9 kB
import { z } from 'zod'; import { pluginAuditsSchema } from './audit.js'; import { groupsSchema } from './group.js'; import { createCheck } from './implementation/checks.js'; import { materialIconSchema, metaSchema, packageVersionSchema, slugSchema, } from './implementation/schemas.js'; import { formatSlugsList, hasMissingStrings } from './implementation/utils.js'; import { runnerConfigSchema, runnerFunctionSchema } from './runner-config.js'; export const pluginContextSchema = z .record(z.string(), z.unknown()) .optional() .describe('Plugin-specific context data for helpers'); export const pluginMetaSchema = packageVersionSchema() .merge(metaSchema({ titleDescription: 'Descriptive name', descriptionDescription: 'Description (markdown)', docsUrlDescription: 'Plugin documentation site', description: 'Plugin metadata', })) .merge(z.object({ slug: slugSchema.describe('Unique plugin slug within core config'), icon: materialIconSchema, })); export const pluginDataSchema = z.object({ runner: z.union([runnerConfigSchema, runnerFunctionSchema]), audits: pluginAuditsSchema, groups: groupsSchema, context: pluginContextSchema, }); export const pluginConfigSchema = pluginMetaSchema .merge(pluginDataSchema) .check(createCheck(findMissingSlugsInGroupRefs)); // every listed group ref points to an audit within the plugin export function findMissingSlugsInGroupRefs({ audits, groups = [] }) { const missingSlugs = getAuditSlugsFromGroups(audits, groups); return (missingSlugs && { message: `Group references audits which don't exist in this plugin: ${formatSlugsList(missingSlugs)}`, }); } function getAuditSlugsFromGroups(audits, groups) { return hasMissingStrings(groups.flatMap(({ refs }) => refs.map(({ slug }) => slug)), audits.map(({ slug }) => slug)); } //# sourceMappingURL=plugin-config.js.map