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/code :error.import/invalid-json-data
:error/fn #(tr "workspace.token.invalid-json")} :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.import/style-dictionary-reference-errors
{:error/code :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 %)) :error/fn #(str (tr "workspace.token.import-error") "\n\n" (first %))
@ -80,4 +85,6 @@
(->> errors (->> errors
(map (fn [err] (map (fn [err]
(when (:error/detail 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.tinycolor :as tinycolor]
[app.main.ui.workspace.tokens.token :as wtt] [app.main.ui.workspace.tokens.token :as wtt]
[app.main.ui.workspace.tokens.warnings :as wtw] [app.main.ui.workspace.tokens.warnings :as wtw]
[app.util.i18n :refer [tr]]
[app.util.time :as dt] [app.util.time :as dt]
[beicon.v2.core :as rx] [beicon.v2.core :as rx]
[cuerdas.core :as str] [cuerdas.core :as str]
@ -265,6 +264,16 @@
(= header-2 "Reference Errors:")) (= header-2 "Reference Errors:"))
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 (defn process-json-stream
([data-stream] ([data-stream]
(process-json-stream nil data-stream)) (process-json-stream nil data-stream))
@ -296,7 +305,9 @@
(ctob/decode-dtcg-json (ctob/ensure-tokens-lib nil) json-data)) (ctob/decode-dtcg-json (ctob/ensure-tokens-lib nil) json-data))
(catch js/Error e (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] (rx/mapcat (fn [tokens-lib]
(try (try
(-> (ctob/get-all-tokens tokens-lib) (-> (ctob/get-all-tokens tokens-lib)
@ -311,17 +322,6 @@
(catch js/Error e (catch js/Error e
(p/rejected (wte/error-ex-info :error.import/style-dictionary-unknown-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 ;; === Hooks
(defonce !tokens-cache (atom nil)) (defonce !tokens-cache (atom nil))

View file

@ -6871,6 +6871,17 @@ msgstr "Invalid color value: %s"
msgid "workspace.token.invalid-json" msgid "workspace.token.invalid-json"
msgstr "Import Error: Invalid token data in 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 #: src/app/main/ui/workspace/tokens/errors.cljs:41, src/app/main/ui/workspace/tokens/errors.cljs:45
msgid "workspace.token.invalid-value" msgid "workspace.token.invalid-value"
msgstr "Invalid token value: %s" msgstr "Invalid token value: %s"

View file

@ -6889,6 +6889,17 @@ msgstr "Valor de color no válido: %s"
msgid "workspace.token.invalid-json" msgid "workspace.token.invalid-json"
msgstr "Error al importar: Datos de token no válidos en 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 #: src/app/main/ui/workspace/tokens/errors.cljs:41, src/app/main/ui/workspace/tokens/errors.cljs:45
msgid "workspace.token.invalid-value" msgid "workspace.token.invalid-value"
msgstr "Valor de token no válido: %s" msgstr "Valor de token no válido: %s"