UNPKG

vde-layout

Version:

Terminal multiplexer layout management tool for VDE (Vibe Coding Development Environment)

95 lines 3.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConfigSchema = exports.PresetSchema = exports.LayoutSchema = exports.PaneSchema = void 0; exports.validateConfig = validateConfig; exports.validatePreset = validatePreset; exports.validatePane = validatePane; const zod_1 = require("zod"); const TerminalPaneSchema = zod_1.z .object({ name: zod_1.z.string().min(1), command: zod_1.z.string().optional(), cwd: zod_1.z.string().optional(), env: zod_1.z.record(zod_1.z.string()).optional(), delay: zod_1.z.number().int().positive().optional(), title: zod_1.z.string().optional(), focus: zod_1.z.boolean().optional(), }) .strict(); const SplitPaneSchema = zod_1.z.lazy(() => zod_1.z .object({ type: zod_1.z.enum(["horizontal", "vertical"]), ratio: zod_1.z.array(zod_1.z.number().positive()).min(1), panes: zod_1.z.array(exports.PaneSchema).min(1), }) .strict() .refine((data) => data.ratio.length === data.panes.length, { message: "Number of elements in ratio array does not match number of elements in panes array", })); exports.PaneSchema = zod_1.z.lazy(() => zod_1.z.union([SplitPaneSchema, TerminalPaneSchema])); exports.LayoutSchema = zod_1.z .object({ type: zod_1.z.enum(["horizontal", "vertical"]), ratio: zod_1.z.array(zod_1.z.number().positive()).min(1), panes: zod_1.z.array(exports.PaneSchema).min(1), }) .refine((data) => data.ratio.length === data.panes.length, { message: "Number of elements in ratio array does not match number of elements in panes array", }); exports.PresetSchema = zod_1.z.object({ name: zod_1.z.string().min(1), description: zod_1.z.string().optional(), layout: exports.LayoutSchema.optional(), command: zod_1.z.string().optional(), }); exports.ConfigSchema = zod_1.z.object({ presets: zod_1.z.record(exports.PresetSchema), }); function formatValidationError(error) { const messages = error.errors.map((e) => { const path = e.path.join("."); const message = e.message; if (path === "layout.panes" && message.includes("at least 2 element")) { return `${path}: panes array must have at least 2 elements`; } return `${path}: ${message}`; }); return messages.join("\n"); } function validateConfig(data) { try { const parsed = exports.ConfigSchema.parse(data); return { success: true, data: parsed }; } catch (error) { if (error instanceof zod_1.z.ZodError) { return { success: false, error: formatValidationError(error) }; } return { success: false, error: String(error) }; } } function validatePreset(data) { try { const parsed = exports.PresetSchema.parse(data); return { success: true, data: parsed }; } catch (error) { if (error instanceof zod_1.z.ZodError) { return { success: false, error: formatValidationError(error) }; } return { success: false, error: String(error) }; } } function validatePane(data) { try { const parsed = exports.PaneSchema.parse(data); return { success: true, data: parsed }; } catch (error) { if (error instanceof zod_1.z.ZodError) { return { success: false, error: formatValidationError(error) }; } return { success: false, error: String(error) }; } } //# sourceMappingURL=schema.js.map