@code-pushup/models
Version:
Model definitions and validators for the Code PushUp CLI
42 lines • 1.9 kB
JavaScript
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