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:
parent
f14325d12b
commit
3234b19790
5 changed files with 72 additions and 62 deletions
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@
|
|||
|
||||
(def root (get-logger :root))
|
||||
|
||||
|
||||
(def levels
|
||||
{:off Level/OFF
|
||||
:shout Level/SHOUT
|
||||
|
|
Loading…
Add table
Reference in a new issue