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}`; +}