Catch invalid name errors in json

This commit is contained in:
Florian Schroedl 2025-04-14 10:49:28 +02:00 committed by Andrés Moya
parent 25950bb5a5
commit d26464c810
4 changed files with 43 additions and 14 deletions

View file

@ -12,6 +12,11 @@
{:error/code :error.import/invalid-json-data
:error/fn #(tr "workspace.token.invalid-json")}
:error.import/invalid-token-name
{:error/code :error.import/invalid-json-data
:error/fn #(tr "workspace.token.invalid-json-token-name")
:error/detail #(tr "workspace.token.invalid-json-token-name-detail" %)}
:error.import/style-dictionary-reference-errors
{:error/code :error.import/style-dictionary-reference-errors
:error/fn #(str (tr "workspace.token.import-error") "\n\n" (first %))
@ -80,4 +85,6 @@
(->> errors
(map (fn [err]
(when (:error/detail err)
((:error/detail err) (:error/value err)))))))
((:error/detail err) (:error/value err)))))
(filter some?)
(seq)))

View file

@ -10,7 +10,6 @@
[app.main.ui.workspace.tokens.tinycolor :as tinycolor]
[app.main.ui.workspace.tokens.token :as wtt]
[app.main.ui.workspace.tokens.warnings :as wtw]
[app.util.i18n :refer [tr]]
[app.util.time :as dt]
[beicon.v2.core :as rx]
[cuerdas.core :as str]
@ -265,6 +264,16 @@
(= header-2 "Reference Errors:"))
errors)))
(defn name-error
"Extracts name error out of malli schema error during import."
[err]
(let [schema-error (some-> (ex-data err)
(get-in [:app.common.schema/explain :errors])
(first))
name-error? (= (:in schema-error) [:name])]
(when name-error?
(wte/error-ex-info :error.import/invalid-token-name (:value schema-error) err))))
(defn process-json-stream
([data-stream]
(process-json-stream nil data-stream))
@ -296,7 +305,9 @@
(ctob/decode-dtcg-json (ctob/ensure-tokens-lib nil) json-data))
(catch js/Error e
(throw (wte/error-ex-info :error.import/invalid-json-data json-data e)))))))
(let [err (or (name-error e)
(wte/error-ex-info :error.import/invalid-json-data json-data e))]
(throw err)))))))
(rx/mapcat (fn [tokens-lib]
(try
(-> (ctob/get-all-tokens tokens-lib)
@ -311,17 +322,6 @@
(catch js/Error e
(p/rejected (wte/error-ex-info :error.import/style-dictionary-unknown-error "" e))))))))))
;; === Errors
(defn humanize-errors [{:keys [errors] :as token}]
(->> (map (fn [err]
(case (:error/code err)
;; TODO: This needs translations
:error.style-dictionary/missing-reference (tr "workspace.token.token-not-resolved" (:error/value err))
nil))
errors)
(str/join "\n")))
;; === Hooks
(defonce !tokens-cache (atom nil))

View file

@ -6871,6 +6871,17 @@ msgstr "Invalid color value: %s"
msgid "workspace.token.invalid-json"
msgstr "Import Error: Invalid token data in JSON."
#: src/app/main/ui/workspace/tokens/errors.cljs:16
msgid "workspace.token.invalid-json-token-name"
msgstr "Import Error: Invalid token name in in JSON."
#: src/app/main/ui/workspace/tokens/errors.cljs:18
msgid "workspace.token.invalid-json-token-name-detail"
msgstr ""
"\"%s\" is not a valid token name.\n"
"Token names should only contain letters and digits separated by . "
"characters and must not start with a $ sign."
#: src/app/main/ui/workspace/tokens/errors.cljs:41, src/app/main/ui/workspace/tokens/errors.cljs:45
msgid "workspace.token.invalid-value"
msgstr "Invalid token value: %s"

View file

@ -6889,6 +6889,17 @@ msgstr "Valor de color no válido: %s"
msgid "workspace.token.invalid-json"
msgstr "Error al importar: Datos de token no válidos en JSON."
#: src/app/main/ui/workspace/tokens/errors.cljs:16
msgid "workspace.token.invalid-json-token-name"
msgstr "Error al importar: Nombre de token no válido en JSON."
#: src/app/main/ui/workspace/tokens/errors.cljs:18
msgid "workspace.token.invalid-json-token-name-detail"
msgstr ""
"\"%s\" no es un nombre de token válido.\n"
"Los nombres de token solo pueden contener letras y dígitos separados por "
"caracteres . y no pueden empezar con un signo $."
#: src/app/main/ui/workspace/tokens/errors.cljs:41, src/app/main/ui/workspace/tokens/errors.cljs:45
msgid "workspace.token.invalid-value"
msgstr "Valor de token no válido: %s"