127 lines · 4.5 KB
import { z } from "zod";

const MAX_RESULTS = 5000;
const MAX_MESSAGE = 2000;
const CRITICAL_SCORE = 9;
const HIGH_SCORE = 7;
const MEDIUM_SCORE = 4;

const message = z.object({ text: z.string().optional(), markdown: z.string().optional() }).loose();
const region = z.object({ startLine: z.number().int().optional(), endLine: z.number().int().optional() }).loose();
const location = z
  .object({
    physicalLocation: z
      .object({
        artifactLocation: z.object({ uri: z.string().optional() }).loose().optional(),
        region: region.optional(),
      })
      .loose()
      .optional(),
  })
  .loose();
const level = z.enum(["error", "warning", "note", "none"]);
const rule = z
  .object({
    id: z.string(),
    name: z.string().optional(),
    shortDescription: message.optional(),
    defaultConfiguration: z.object({ level: level.optional() }).loose().optional(),
    properties: z.record(z.string(), z.unknown()).optional(),
  })
  .loose();
const result = z
  .object({
    ruleId: z.string().optional(),
    rule: z.object({ id: z.string().optional(), index: z.number().int().optional() }).loose().optional(),
    ruleIndex: z.number().int().optional(),
    level: level.optional(),
    message,
    locations: z.array(location).optional(),
    partialFingerprints: z.record(z.string(), z.string()).optional(),