diff --git a/frontend/src/app/main/ui/workspace/tokens/errors.cljs b/frontend/src/app/main/ui/workspace/tokens/errors.cljs index d5c9918f3e..835e017ded 100644 --- a/frontend/src/app/main/ui/workspace/tokens/errors.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/errors.cljs @@ -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))) diff --git a/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs b/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs index b4f4c7afbc..b3e7fe37a3 100644 --- a/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs @@ -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)) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 1e31799749..679a703e32 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -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" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index d594384555..f9a319e923 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -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"