0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-25 06:01:46 -05:00

Merge pull request #5569 from penpot/hiru-export-tokens

This commit is contained in:
Andrey Antukh 2025-01-17 15:45:39 +01:00 committed by GitHub
commit e2b054bbd1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 49 additions and 4 deletions

View file

@ -23,6 +23,7 @@
[app.common.types.page :as ctp]
[app.common.types.plugins :as ctpg]
[app.common.types.shape :as cts]
[app.common.types.tokens-lib :as cto]
[app.common.types.typography :as cty]
[app.common.uuid :as uuid]
[app.config :as cf]
@ -106,6 +107,9 @@
(def encode-typography
(sm/encoder ::cty/typography sm/json-transformer))
(def encode-tokens-lib
(sm/encoder ::cto/tokens-lib sm/json-transformer))
(def encode-plugin-data
(sm/encoder ::ctpg/plugin-data sm/json-transformer))
@ -141,6 +145,9 @@
(def decode-typography
(sm/decoder ::cty/typography sm/json-transformer))
(def decode-tokens-lib
(sm/decoder ::cto/tokens-lib sm/json-transformer))
(def decode-plugin-data
(sm/decoder ::ctpg/plugin-data sm/json-transformer))
@ -176,6 +183,9 @@
(def validate-typography
(sm/check-fn ::cty/typography))
(def validate-tokens-lib
(sm/check-fn ::cto/tokens-lib))
(def validate-plugin-data
(sm/check-fn ::ctpg/plugin-data))
@ -260,6 +270,7 @@
typographies (:typographies data)
components (:components data)
colors (:colors data)
tokens-lib (:tokens-lib data)
pages (:pages data)
pages-index (:pages-index data)
@ -333,9 +344,14 @@
(write-entry! output path color)))
(doseq [[id object] typographies]
(let [path (str "files/" file-id "/typographies/" id ".json")
color (encode-typography object)]
(write-entry! output path color)))))
(let [path (str "files/" file-id "/typographies/" id ".json")
typography (encode-typography object)]
(write-entry! output path typography)))
(when tokens-lib
(let [path (str "files/" file-id "/tokens.json")
encoded-tokens (encode-tokens-lib tokens-lib)]
(write-entry! output path encoded-tokens)))))
(defn- export-files
[{:keys [::ids ::include-libraries ::output] :as cfg}]
@ -471,6 +487,14 @@
{:entry entry
:id (parse-uuid id)}))))
(defn- match-tokens-lib-entry-fn
[file-id]
(let [pattern (str "^files/" file-id "/tokens.json$")
pattern (re-pattern pattern)]
(fn [entry]
(when-let [[_] (re-matches pattern (zip-entry-name entry))]
{:entry entry}))))
(defn- match-thumbnail-entry-fn
[file-id]
(let [pattern (str "^files/" file-id "/thumbnails/([^/]+)/([^/]+)/([^/]+).json$")
@ -516,6 +540,11 @@
(with-open [reader (zip-entry-reader input entry)]
(json/read reader :key-fn json/read-kebab-key)))
(defn- read-plain-entry
[^ZipFile input entry]
(with-open [reader (zip-entry-reader input entry)]
(json/read reader)))
(defn- read-file
[{:keys [::input ::file-id]}]
(let [path (str "files/" file-id ".json")
@ -586,6 +615,13 @@
{})
(not-empty)))
(defn- read-file-tokens-lib
[{:keys [::input ::file-id ::entries]}]
(when-let [entry (d/seek (match-tokens-lib-entry-fn file-id) entries)]
(->> (read-plain-entry input entry)
(decode-tokens-lib)
(validate-tokens-lib))))
(defn- read-file-shapes
[{:keys [::input ::file-id ::page-id ::entries] :as cfg}]
(->> (keep (match-shape-entry-fn file-id page-id) entries)
@ -634,6 +670,7 @@
[cfg]
(let [colors (read-file-colors cfg)
typographies (read-file-typographies cfg)
tokens-lib (read-file-tokens-lib cfg)
components (read-file-components cfg)
plugin-data (read-file-plugin-data cfg)
pages (read-file-pages cfg)]
@ -642,6 +679,7 @@
:pages-index (into {} pages)
:colors colors
:typographies typographies
:tokens-lib tokens-lib
:components components
:plugin-data plugin-data}))

View file

@ -1093,9 +1093,16 @@ Will return a value that matches this schema:
[tokens-lib]
(or tokens-lib (make-tokens-lib)))
(defn decode-dtcg
[encoded-json]
(-> (make-tokens-lib)
(decode-dtcg-json encoded-json)))
(def type:tokens-lib
{:type ::tokens-lib
:pred valid-tokens-lib?})
:pred valid-tokens-lib?
:type-properties {:encode/json encode-dtcg
:decode/json decode-dtcg}})
(sm/register! ::tokens-lib type:tokens-lib)