@code-pushup/eslint-plugin
Version:
Code PushUp plugin for detecting problems in source code using ESLint.📋
55 lines • 2.14 kB
JavaScript
import { z } from 'zod';
import { pluginArtifactOptionsSchema, pluginScoreTargetsSchema, } from '@code-pushup/models';
import { toArray } from '@code-pushup/utils';
const patternsSchema = z.union([z.string(), z.array(z.string()).min(1)]).meta({
description: 'Lint target files. May contain file paths, directory paths or glob patterns',
});
const eslintrcSchema = z
.string()
.meta({ description: 'Path to ESLint config file' });
const eslintTargetObjectSchema = z.object({
eslintrc: eslintrcSchema.optional(),
patterns: patternsSchema,
});
export const eslintTargetSchema = z
.union([patternsSchema, eslintTargetObjectSchema])
.transform((target) => typeof target === 'string' || Array.isArray(target)
? { patterns: target }
: target)
.meta({ title: 'ESLintTarget' });
export const eslintPluginConfigSchema = z
.union([eslintTargetSchema, z.array(eslintTargetSchema).min(1)])
.transform(toArray)
.meta({ title: 'ESLintPluginConfig' });
const customGroupRulesSchema = z
.union([
z
.array(z.string())
.min(1, 'Custom group rules must contain at least 1 element'),
z
.record(z.string(), z.number())
.refine(schema => Object.keys(schema).length > 0, {
error: 'Custom group rules must contain at least 1 element',
}),
])
.meta({
description: 'Array of rule IDs with equal weights or object mapping rule IDs to specific weights',
});
const customGroupSchema = z.object({
slug: z.string().meta({ description: 'Unique group identifier' }),
title: z.string().meta({ description: 'Group display title' }),
description: z.string().meta({ description: 'Group metadata' }).optional(),
docsUrl: z
.string()
.meta({ description: 'Group documentation site' })
.optional(),
rules: customGroupRulesSchema,
});
export const eslintPluginOptionsSchema = z
.object({
groups: z.array(customGroupSchema).optional(),
artifacts: pluginArtifactOptionsSchema.optional(),
scoreTargets: pluginScoreTargetsSchema,
})
.meta({ title: 'ESLintPluginOptions' });
//# sourceMappingURL=config.js.map