UNPKG

@code-pushup/eslint-plugin

Version:

Code PushUp plugin for detecting problems in source code using ESLint.📋

55 lines • 2.14 kB
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