import { z } from 'zod' export const fileInputSchema = z.object({ path: z.string(), type: z.enum(['file', 'directory']), }) export type IFileInput = z.infer export const fileExistenceInputSchema = fileInputSchema.extend({ exists: z.boolean(), }) export type IFileExistenceInput = z.infer const baseConditionSchema = z.object({ command: z.string().optional(), output: z.string().optional(), error: z.string().optional(), pwd: z.string().optional(), files: z.array(fileExistenceInputSchema).optional(), }) export type ICondition = z.infer & { or?: ICondition[] not?: ICondition } export const conditionSchema: z.ZodType = baseConditionSchema.extend({ or: z.lazy(() => z.array(conditionSchema).optional()), not: z.lazy(() => conditionSchema.optional()), }) export interface IFileExistenceChecker { exists(file: IFileInput): Promise } export class VoidFileExistenceChecker implements IFileExistenceChecker { // eslint-disable-next-line class-methods-use-this async exists(): Promise { return false } }