From 70d140ec597f299f5b5c65624ece5cdbed8f3ace Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Sun, 5 May 2024 00:48:22 -0700 Subject: [PATCH] settings_linkifiers: Fix implicit use of any. Signed-off-by: Anders Kaseorg --- web/src/settings_linkifiers.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/web/src/settings_linkifiers.ts b/web/src/settings_linkifiers.ts index 2af482576b..1d4ad92191 100644 --- a/web/src/settings_linkifiers.ts +++ b/web/src/settings_linkifiers.ts @@ -70,9 +70,12 @@ function open_linkifier_edit_form(linkifier_id: number): void { }, error_continuation(xhr: JQuery.jqXHR) { $change_linkifier_button.prop("disabled", false); - if (xhr.responseJSON?.errors) { + const parsed = z + .object({errors: z.record(z.array(z.string()).optional())}) + .safeParse(xhr.responseJSON); + if (parsed.success) { handle_linkifier_api_error( - xhr, + parsed.data.errors, $pattern_status, $template_status, $dialog_error_element, @@ -119,7 +122,7 @@ function update_linkifiers_order(): void { } function handle_linkifier_api_error( - xhr: JQuery.jqXHR, + errors: Record, pattern_status: JQuery, template_status: JQuery, linkifier_status: JQuery, @@ -127,7 +130,6 @@ function handle_linkifier_api_error( // The endpoint uses the Django ValidationError system for error // handling, which returns somewhat complicated error // dictionaries. This logic parses them. - const errors = xhr.responseJSON.errors; if (errors.pattern !== undefined) { ui_report.error( $t_html({defaultMessage: "Failed: {error}"}, {error: errors.pattern[0]}), @@ -272,9 +274,12 @@ export function build_page(): void { }, error(xhr) { $add_linkifier_button.prop("disabled", false); - if (xhr.responseJSON?.errors) { + const parsed = z + .object({errors: z.record(z.array(z.string()).optional())}) + .safeParse(xhr.responseJSON); + if (parsed.success) { handle_linkifier_api_error( - xhr, + parsed.data.errors, $pattern_status, $template_status, $linkifier_status,