import { z } from 'zod'; export const pongResult = z.object({ pong: z.string().min(1), }); export type PongResult = z.infer; export const documentStateResult = z.object({ stateId: z.string().min(1), }); export type DocumentStateResult = z.infer; export const conflict = z.enum(['invalidStateId', 'canceled']); export type Conflict = z.infer; export const serviceConflictResult = z.object({ conflict, }); export type ServiceConflictResult = z.infer; export function isConflictResult(result: unknown, conflictType: Conflict): boolean { const parsedConflictResult = serviceConflictResult.safeParse(result); return parsedConflictResult.success && parsedConflictResult.data.conflict === conflictType; } export const severity = z.enum(['error', 'warning', 'info', 'ignore']); export type Severity = z.infer; export const issue = z.object({ description: z.string().min(1), severity, line: z.number().int(), column: z.number().int().nonnegative(), offset: z.number().int().nonnegative(), length: z.number().int().nonnegative(), }); export type Issue = z.infer; export const validationResult = z.object({ issues: issue.array(), }); export type ValidationResult = z.infer; export const replaceRegion = z.object({ offset: z.number().int().nonnegative(), length: z.number().int().nonnegative(), text: z.string(), }); export type ReplaceRegion = z.infer; export const textRegion = z.object({ offset: z.number().int().nonnegative(), length: z.number().int().nonnegative(), }); export type TextRegion = z.infer; export const contentAssistEntry = z.object({ prefix: z.string(), proposal: z.string().min(1), label: z.string().optional(), description: z.string().min(1).optional(), documentation: z.string().min(1).optional(), escapePosition: z.number().int().nonnegative().optional(), textReplacements: replaceRegion.array(), editPositions: textRegion.array(), kind: z.string().min(1), }); export type ContentAssistEntry = z.infer; export const contentAssistResult = documentStateResult.extend({ entries: contentAssistEntry.array(), }); export type ContentAssistResult = z.infer; export const highlightingRegion = z.object({ offset: z.number().int().nonnegative(), length: z.number().int().nonnegative(), styleClasses: z.string().min(1).array(), }); export type HighlightingRegion = z.infer; export const highlightingResult = z.object({ regions: highlightingRegion.array(), }); export type HighlightingResult = z.infer; export const occurrencesResult = documentStateResult.extend({ writeRegions: textRegion.array(), readRegions: textRegion.array(), }); export type OccurrencesResult = z.infer; export const formattingResult = documentStateResult.extend({ formattedText: z.string(), replaceRegion: textRegion, }); export type FormattingResult = z.infer;