From cbec80981daacd5e03ba88ac7c6e2357ff8fcffb Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Mon, 15 Jan 2024 22:36:10 +0000 Subject: [PATCH] feat: improve ZodIssue rendering in config validation --- backend/src/configValidator.ts | 10 +++++++--- backend/src/utils/formatZodIssue.ts | 6 ++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 backend/src/utils/formatZodIssue.ts diff --git a/backend/src/configValidator.ts b/backend/src/configValidator.ts index 96e08ba3..eb115d46 100644 --- a/backend/src/configValidator.ts +++ b/backend/src/configValidator.ts @@ -1,9 +1,10 @@ -import { PluginConfigManager } from "knub"; +import { ConfigValidationError, PluginConfigManager } from "knub"; import moment from "moment-timezone"; import { ZodError } from "zod"; import { ZeppelinPlugin } from "./plugins/ZeppelinPlugin"; import { guildPlugins } from "./plugins/availablePlugins"; import { ZeppelinGuildConfig, zZeppelinGuildConfig } from "./types"; +import { formatZodIssue } from "./utils/formatZodIssue"; const pluginNameToPlugin = new Map(); for (const plugin of guildPlugins) { @@ -13,7 +14,7 @@ for (const plugin of guildPlugins) { export async function validateGuildConfig(config: any): Promise { const validationResult = zZeppelinGuildConfig.safeParse(config); if (!validationResult.success) { - return validationResult.error.issues.join("\n"); + return validationResult.error.issues.map(formatZodIssue).join("\n"); } const guildConfig = config as ZeppelinGuildConfig; @@ -44,7 +45,10 @@ export async function validateGuildConfig(config: any): Promise { await configManager.init(); } catch (err) { if (err instanceof ZodError) { - return `${pluginName}: ${err.issues.join("\n")}`; + return `${pluginName}: ${err.issues.map(formatZodIssue).join("\n")}`; + } + if (err instanceof ConfigValidationError) { + return `${pluginName}: ${err.message}`; } throw err; diff --git a/backend/src/utils/formatZodIssue.ts b/backend/src/utils/formatZodIssue.ts new file mode 100644 index 00000000..2b5c3d8e --- /dev/null +++ b/backend/src/utils/formatZodIssue.ts @@ -0,0 +1,6 @@ +import { ZodIssue } from "zod"; + +export function formatZodIssue(issue: ZodIssue): string { + const path = issue.path.join("/"); + return `${path}: ${issue.message}`; +}