UNPKG

@code-pushup/models

Version:

Model definitions and validators for the Code PushUp CLI

76 lines 2.99 kB
/** * Regular expression to validate a slug for categories, plugins and audits. * - audit (e.g. 'max-lines') * - category (e.g. 'performance') * Also validates ``and ` ` */ export const slugRegex = /^[a-z\d]+(?:-[a-z\d]+)*$/; /** * Regular expression to validate a filename. */ export const filenameRegex = /^(?!.*[ \\/:*?"<>|]).+$/; /** * helper function to validate string arrays * * @param strings */ export function hasDuplicateStrings(strings) { const sortedStrings = strings.toSorted(); const duplStrings = sortedStrings.filter((item, index) => index !== 0 && item === sortedStrings[index - 1]); return duplStrings.length === 0 ? false : [...new Set(duplStrings)]; } /** * helper function to validate string arrays * * @param toCheck * @param existing */ export function hasMissingStrings(toCheck, existing) { const nonExisting = toCheck.filter(s => !existing.includes(s)); return nonExisting.length === 0 ? false : nonExisting; } export function formatSlugsList(slugs) { return slugs.map(slug => `"${slug}"`).join(', '); } /** * helper for error items */ export function errorItems(items, transform = itemArr => itemArr.join(', ')) { return transform(items || []); } export function exists(value) { return value != null; } /** * Get category references that do not point to any audit or group * @param categories * @param plugins * @returns Array of missing references. */ export function getMissingRefsForCategories(categories, plugins) { if (!categories || categories.length === 0) { return false; } const auditRefsFromCategory = categories.flatMap(({ refs }) => refs.filter(({ type }) => type === 'audit').map(formatRef)); const auditRefsFromPlugins = plugins.flatMap(({ audits, slug: plugin }) => audits.map(({ slug }) => formatRef({ type: 'audit', plugin, slug }))); const missingAuditRefs = hasMissingStrings(auditRefsFromCategory, auditRefsFromPlugins); const groupRefsFromCategory = categories.flatMap(({ refs }) => refs.filter(({ type }) => type === 'group').map(formatRef)); const groupRefsFromPlugins = plugins.flatMap(({ groups, slug: plugin }) => Array.isArray(groups) ? groups.map(({ slug }) => formatRef({ type: 'group', plugin, slug })) : []); const missingGroupRefs = hasMissingStrings(groupRefsFromCategory, groupRefsFromPlugins); const missingRefs = [missingAuditRefs, missingGroupRefs] .filter((refs) => Array.isArray(refs) && refs.length > 0) .flat(); return missingRefs.length > 0 ? missingRefs : false; } export function findMissingSlugsInCategoryRefs({ categories, plugins, }) { const missingRefs = getMissingRefsForCategories(categories, plugins); return (missingRefs && { message: `Category references audits or groups which don't exist: ${missingRefs.join(', ')}`, }); } export function formatRef(ref) { return `${ref.type} "${ref.slug}" (plugin "${ref.plugin}")`; } //# sourceMappingURL=utils.js.map