0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-12 01:58:44 -05:00

🐛 Update puppeter and try fix exporting bug.

This commit is contained in:
Andrey Antukh 2021-03-02 10:51:06 +01:00
parent f14325d12b
commit 3234b19790
5 changed files with 72 additions and 62 deletions

View file

@ -10,17 +10,17 @@
"license": "SEE LICENSE IN <LICENSE>",
"dependencies": {
"inflation": "^2.0.0",
"jszip": "^3.5.0",
"jszip": "^3.6.0",
"koa": "^2.13.0",
"puppeteer": "^5.5.0",
"puppeteer": "^8.0.0",
"puppeteer-cluster": "^0.22.0",
"raw-body": "^2.4.1",
"svgo": "^1.3.2",
"xml-js": "^1.6.11",
"xregexp": "^4.4.0"
"xregexp": "^5.0.1"
},
"devDependencies": {
"shadow-cljs": "^2.11.8",
"shadow-cljs": "^2.11.19",
"source-map-support": "^0.5.19"
}
}

View file

@ -41,7 +41,13 @@
(defn sleep
[page ms]
(.waitFor ^js page ms))
(.waitForTimeout ^js page ms))
(defn wait-for
([page selector] (wait-for page selector nil))
([page selector {:keys [visible] :or {visible false}}]
(.waitForSelector ^js page selector #js {:visible visible})))
(defn screenshot
([frame] (screenshot frame nil))

View file

@ -29,8 +29,7 @@
(:import
goog.Uri))
(def default-svgo-plugins
#js [#js {:convertStyleToAttrs false}])
(log/set-level "app.http.export-svg" :trace)
(defn- create-tmpdir!
[prefix]
@ -63,10 +62,10 @@
[cmd]
(p/create
(fn [resolve reject]
(log/info :fn :run-cmd :cmd cmd)
(log/trace :fn :run-cmd :cmd cmd)
(chp/exec cmd #js {:encoding "buffer"}
(fn [error stdout stderr]
;; (log/info :fn :run-cmd :stdout stdout)
;; (log/trace :fn :run-cmd :stdout stdout)
(if error
(reject error)
(resolve stdout)))))))
@ -91,24 +90,15 @@
(defn- render-object
[browser {:keys [page-id file-id object-id token scale suffix type]}]
(letfn [(render-in-page [page {:keys [uri cookie] :as rctx}]
(p/do!
(bwr/emulate! page {:viewport [1920 1080]
:scale 4})
(bwr/set-cookie! page cookie)
(bwr/navigate! page uri)
;; (bwr/eval! page (js* "() => document.body.style.background = 'transparent'"))
page))
(convert-to-ppm [pngpath]
(log/info :fn :convert-to-ppm)
(letfn [(convert-to-ppm [pngpath]
(log/trace :fn :convert-to-ppm)
(let [basepath (path/dirname pngpath)
ppmpath (path/join basepath "origin.ppm")]
(-> (run-cmd! (str "convert " pngpath " " ppmpath))
(p/then (constantly ppmpath)))))
(trace-color-mask [pbmpath]
(log/info :fn :trace-color-mask :pbmpath pbmpath)
(log/trace :fn :trace-color-mask :pbmpath pbmpath)
(let [basepath (path/dirname pbmpath)
basename (path/basename pbmpath ".pbm")
svgpath (path/join basepath (str basename ".svg"))]
@ -116,7 +106,7 @@
(p/then (constantly svgpath)))))
(generate-color-mask [ppmpath color]
(log/info :fn :generate-color-mask :ppmpath ppmpath :color color)
(log/trace :fn :generate-color-mask :ppmpath ppmpath :color color)
(let [basepath (path/dirname ppmpath)
pbmpath (path/join basepath (str "mask-" (subs color 1) ".pbm"))]
(-> (run-cmd! (str/format "ppmcolormask \"%s\" %s" color ppmpath))
@ -133,7 +123,7 @@
:svgdata data}))))))
(join-color-layers [layers]
(log/info :fn :join-color-layers)
(log/trace :fn :join-color-layers)
(loop [main (-> (:svgdata (first layers))
(assoc "elements" []))
layers (seq layers)]
@ -147,16 +137,16 @@
(next layers))))))
(convert-to-svg [colors ppmpath]
(log/info :fn :convert-to-svg :ppmpath ppmpath :colors colors)
(log/trace :fn :convert-to-svg :ppmpath ppmpath :colors colors)
(-> (p/all (map (partial generate-color-mask ppmpath) colors))
(p/then join-color-layers)))
(clean-svg [data]
(log/info :fn :clean-svg)
(log/trace :fn :clean-svg)
(svgc/optimize data))
(trace-single-node [{:keys [data] :as node}]
(log/info :fn :trace-single-node)
(log/trace :fn :trace-single-node)
(p/let [tdpath (create-tmpdir! "svgexport-")
pngpath (path/join tdpath "origin.png")
_ (write-file! pngpath data)
@ -183,7 +173,7 @@
:colors (.split colors ",")}))
(extract-single-node [node]
(log/info :fn :extract-single-node)
(log/trace :fn :extract-single-node)
(p/let [attrs (bwr/eval! node extract-element-attrs)
shot (bwr/screenshot node {:omit-background? true :type "png"})]
@ -207,7 +197,7 @@
(p/then clean-temp-data)))
(process-text-nodes [page]
(log/info :fn :process-text-nodes)
(log/trace :fn :process-text-nodes)
(-> (bwr/select-all page "#screenshot foreignObject")
(p/then #(p/all (map process-single-text-node %)))))
@ -236,6 +226,17 @@
nodes (process-text-nodes page)]
(replace-nodes-on-main main nodes)))
(render-in-page [page {:keys [uri cookie] :as rctx}]
(p/do!
(bwr/emulate! page {:viewport [1920 1080]
:scale 4})
(bwr/set-cookie! page cookie)
(bwr/navigate! page uri)
;; (bwr/sleep page 5000)
;; (bwr/wait-for page "#screenshot foreignObject" {:visible true})
;; (bwr/eval! page (js* "() => document.body.style.background = 'transparent'"))
page))
(handle [rctx page]
(p/let [page (render-in-page page rctx)]
(render-svg page)))]
@ -248,6 +249,8 @@
:key "auth-token"
:value token}
:uri (.toString uri)}]
(log/info :uri (.toString uri))
(bwr/exec! browser (partial handle rctx)))))
(s/def ::name ::us/string)

View file

@ -35,10 +35,12 @@ accepts@^1.3.5:
mime-types "~2.1.24"
negotiator "0.6.2"
agent-base@5:
version "5.1.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c"
integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==
agent-base@6:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
dependencies:
debug "4"
ansi-styles@^3.2.1:
version "3.2.1"
@ -486,10 +488,10 @@ destroy@^1.0.4:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
devtools-protocol@0.0.818844:
version "0.0.818844"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e"
integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==
devtools-protocol@0.0.854822:
version "0.0.854822"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.854822.tgz#eac3a5260a6b3b4e729a09fdc0c77b0d322e777b"
integrity sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg==
diffie-hellman@^5.0.0:
version "5.0.3"
@ -790,12 +792,12 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
https-proxy-agent@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b"
integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==
https-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
dependencies:
agent-base "5"
agent-base "6"
debug "4"
iconv-lite@0.4.24:
@ -895,10 +897,10 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
jszip@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6"
integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==
jszip@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.6.0.tgz#839b72812e3f97819cc13ac4134ffced95dd6af9"
integrity sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==
dependencies:
lie "~3.3.0"
pako "~1.0.2"
@ -1270,7 +1272,7 @@ progress@^2.0.1:
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
proxy-from-env@^1.0.0:
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
@ -1312,19 +1314,19 @@ puppeteer-cluster@^0.22.0:
dependencies:
debug "^4.1.1"
puppeteer@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.5.0.tgz#331a7edd212ca06b4a556156435f58cbae08af00"
integrity sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg==
puppeteer@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-8.0.0.tgz#a236669118aa795331c2d0ca19877159e7664705"
integrity sha512-D0RzSWlepeWkxPPdK3xhTcefj8rjah1791GE82Pdjsri49sy11ci/JQsAO8K2NRukqvwEtcI+ImP5F4ZiMvtIQ==
dependencies:
debug "^4.1.0"
devtools-protocol "0.0.818844"
devtools-protocol "0.0.854822"
extract-zip "^2.0.0"
https-proxy-agent "^4.0.0"
https-proxy-agent "^5.0.0"
node-fetch "^2.6.1"
pkg-dir "^4.2.0"
progress "^2.0.1"
proxy-from-env "^1.0.0"
proxy-from-env "^1.1.0"
rimraf "^3.0.2"
tar-fs "^2.0.0"
unbzip2-stream "^1.3.3"
@ -1470,10 +1472,10 @@ shadow-cljs-jar@1.3.2:
resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.2.tgz#97273afe1747b6a2311917c1c88d9e243c81957b"
integrity sha512-XmeffAZHv8z7451kzeq9oKh8fh278Ak+UIOGGrapyqrFBB773xN8vMQ3O7J7TYLnb9BUwcqadKkmgaq7q6fhZg==
shadow-cljs@^2.11.8:
version "2.11.13"
resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.11.13.tgz#ac229923bd2cb7f69e816ecd856b2250d4acfff3"
integrity sha512-igdiPxa9zx5sp66O/zD3SygL2SNobZUKjF74x+eVDfmRue4dudtqtAthMZwnB82SFx1Xh9LpmQGDK+45RvFhZQ==
shadow-cljs@^2.11.19:
version "2.11.19"
resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.11.19.tgz#f0e6c6a4cd18a4db147225084dc1de2644a65c20"
integrity sha512-yH62i5G1k7mKgVEjDgiOITw9dLjdXiT28TwZ0DYpL8CQ7BMJr7ZlJanPxPTpptdCU7Mb1MBXfspuMGja3Ii1DQ==
dependencies:
node-libs-browser "^2.2.1"
readline-sync "^1.4.7"
@ -1761,10 +1763,10 @@ xml-js@^1.6.11:
dependencies:
sax "^1.2.4"
xregexp@^4.4.0:
version "4.4.1"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65"
integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==
xregexp@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-5.0.1.tgz#b2f20e87790876585fb4103e91cb163a63cd2547"
integrity sha512-flG0ykxHQLOfF886GpnY26WQkj4/RmcxYvoVcSFbg+1lPMdnXEPoTKuLzw1olKnJ+o2Wc1+RCD1oktV4bYzVlQ==
dependencies:
"@babel/runtime-corejs3" "^7.12.1"

View file

@ -39,7 +39,6 @@
(def root (get-logger :root))
(def levels
{:off Level/OFF
:shout Level/SHOUT