mirror of
https://github.com/penpot/penpot.git
synced 2025-07-26 10:27:23 +02:00
✨ Catch invalid name errors in json
This commit is contained in:
parent
25950bb5a5
commit
d26464c810
4 changed files with 43 additions and 14 deletions
|
@ -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)))
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue