vde-layout
Version:
Terminal multiplexer layout management tool for VDE (Vibe Coding Development Environment)
95 lines • 3.46 kB
JavaScript
;
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