3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-15 05:41:51 +00:00

feat: improve ZodIssue rendering in config validation

This commit is contained in:
Dragory 2024-01-15 22:36:10 +00:00
parent ac8926cdb8
commit cbec80981d
No known key found for this signature in database
2 changed files with 13 additions and 3 deletions

View file

@ -1,9 +1,10 @@
import { PluginConfigManager } from "knub"; import { ConfigValidationError, PluginConfigManager } from "knub";
import moment from "moment-timezone"; import moment from "moment-timezone";
import { ZodError } from "zod"; import { ZodError } from "zod";
import { ZeppelinPlugin } from "./plugins/ZeppelinPlugin"; import { ZeppelinPlugin } from "./plugins/ZeppelinPlugin";
import { guildPlugins } from "./plugins/availablePlugins"; import { guildPlugins } from "./plugins/availablePlugins";
import { ZeppelinGuildConfig, zZeppelinGuildConfig } from "./types"; import { ZeppelinGuildConfig, zZeppelinGuildConfig } from "./types";
import { formatZodIssue } from "./utils/formatZodIssue";
const pluginNameToPlugin = new Map<string, ZeppelinPlugin>(); const pluginNameToPlugin = new Map<string, ZeppelinPlugin>();
for (const plugin of guildPlugins) { for (const plugin of guildPlugins) {
@ -13,7 +14,7 @@ for (const plugin of guildPlugins) {
export async function validateGuildConfig(config: any): Promise<string | null> { export async function validateGuildConfig(config: any): Promise<string | null> {
const validationResult = zZeppelinGuildConfig.safeParse(config); const validationResult = zZeppelinGuildConfig.safeParse(config);
if (!validationResult.success) { if (!validationResult.success) {
return validationResult.error.issues.join("\n"); return validationResult.error.issues.map(formatZodIssue).join("\n");
} }
const guildConfig = config as ZeppelinGuildConfig; const guildConfig = config as ZeppelinGuildConfig;
@ -44,7 +45,10 @@ export async function validateGuildConfig(config: any): Promise<string | null> {
await configManager.init(); await configManager.init();
} catch (err) { } catch (err) {
if (err instanceof ZodError) { 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; throw err;

View file

@ -0,0 +1,6 @@
import { ZodIssue } from "zod";
export function formatZodIssue(issue: ZodIssue): string {
const path = issue.path.join("/");
return `${path}: ${issue.message}`;
}