0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-06 14:50:20 -05:00

Add support for svg optimizations on exporter output

Under `enable-exporter-svgo` flag, disabled by default.
This commit is contained in:
Andrey Antukh 2023-09-14 18:49:50 +02:00
parent b92fcca17c
commit 9fc771292a
5 changed files with 59 additions and 33 deletions

View file

@ -316,6 +316,22 @@
(let [v (if (string? v) (str/split v #"[\s,]+") v)]
(into #{} non-empty-strings-xf v)))}})
(def! ::set-of-keywords
{:type ::set-of-keywords
:pred #(and (set? %) (every? keyword? %))
:type-properties
{:title "set[string]"
:description "Set of Strings"
:error/message "should be a set of strings"
:gen/gen (-> :keyword sg/generator sg/set)
::oapi/type "array"
::oapi/format "set"
::oapi/items {:type "string" :format "keyword"}
::oapi/unique-items true
::oapi/decode (fn [v]
(let [v (if (string? v) (str/split v #"[\s,]+") v)]
(into #{} (comp non-empty-strings-xf (map keyword)) v)))}})
(def! ::set-of-emails
{:type ::set-of-emails
:pred #(and (set? %) (every? string? %))

View file

@ -9,14 +9,15 @@
(:require
["process" :as process]
[app.common.data :as d]
[app.common.flags :as flags]
[app.common.pprint :as pp]
[app.common.schema :as sm]
[app.common.spec :as us]
[app.common.version :as v]
[cljs.core :as c]
[cljs.pprint]
[cljs.spec.alpha :as s]
[cuerdas.core :as str]))
(def defaults
(def ^:private defaults
{:public-uri "http://localhost:3449"
:tenant "default"
:host "localhost"
@ -24,22 +25,19 @@
:http-server-host "0.0.0.0"
:redis-uri "redis://redis/0"})
(s/def ::http-server-port ::us/integer)
(s/def ::http-server-host ::us/string)
(s/def ::public-uri ::us/uri)
(s/def ::tenant ::us/string)
(s/def ::host ::us/string)
(s/def ::browser-pool-max ::us/integer)
(s/def ::browser-pool-min ::us/integer)
(def ^:private schema:config
[:map {:title "config"}
[:public-uri {:optional true} ::sm/uri]
[:host {:optional true} :string]
[:tenant {:optional true} :string]
[:flags {:optional true} ::sm/set-of-keywords]
[:redis-uri {:optional true} :string]
[:browser-pool-max {:optional true} :int]
[:browser-pool-min {:optional true} :int]])
(s/def ::config
(s/keys :opt-un [::public-uri
::host
::tenant
::http-server-port
::http-server-host
::browser-pool-max
::browser-pool-min]))
(defn- parse-flags
[config]
(flags/parse (:flags config)))
(defn- read-env
[prefix]
@ -58,24 +56,30 @@
(defn- prepare-config
[]
(try
(let [env (read-env "penpot")
env (d/without-nils env)
data (merge defaults env)]
(us/conform ::config data))
(catch :default cause
(js/console.log (us/pretty-explain (ex-data cause)))
(throw cause))))
(let [env (read-env "penpot")
env (d/without-nils env)
data (merge defaults env)
data (sm/decode schema:config data sm/default-transformer)]
(when-not (sm/validate schema:config data)
(pp/pprint (-> (sm/explain-data schema:config data)
(sm/humanize)))
(process/exit -1))
data))
(def config
(atom (prepare-config)))
(prepare-config))
(def version
(atom (v/parse "%version%")))
(v/parse "%version%"))
(def flags
(parse-flags config))
(defn get
"A configuration getter."
([key]
(c/get @config key))
(c/get config key))
([key default]
(c/get @config key default)))
(c/get config key default)))

View file

@ -21,7 +21,7 @@
[& _]
(l/info :msg "initializing"
:public-uri (str (cf/get :public-uri))
:version (:full @cf/version))
:version (:full cf/version))
(p/do!
(bwr/init)
(redis/init)

View file

@ -172,7 +172,8 @@
(.listen server port)
(l/info :hint "welcome to penpot"
:module "exporter"
:version (:full @cf/version))
:flags cf/flags
:version (:full cf/version))
(l/info :hint "starting http server" :port port)
(reset! instance server)))

View file

@ -10,6 +10,7 @@
[app.browser :as bw]
[app.common.data :as d]
[app.common.logging :as l]
[app.common.svg :as svg]
[app.common.uri :as u]
[app.config :as cf]
[app.util.mime :as mime]
@ -316,7 +317,11 @@
;; SVG standard don't allow the entity
;; nbsp.   is equivalent but compatible
;; with SVG.
result (str/replace result " " " ")]
result (str/replace result " " " ")
result (if (contains? cf/flags :exporter-svgo)
(svg/optimize result)
result)]
;; (println "------- ORIGIN:")
;; (cljs.pprint/pprint (xml->clj xmldata))