diff --git a/exporter/package.json b/exporter/package.json index bb3640b55..80a4f0b42 100644 --- a/exporter/package.json +++ b/exporter/package.json @@ -10,17 +10,17 @@ "license": "SEE LICENSE IN ", "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" } } diff --git a/exporter/src/app/browser.cljs b/exporter/src/app/browser.cljs index f9811f714..5fb1bdefe 100644 --- a/exporter/src/app/browser.cljs +++ b/exporter/src/app/browser.cljs @@ -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)) diff --git a/exporter/src/app/http/export_svg.cljs b/exporter/src/app/http/export_svg.cljs index 33264b042..d12b53985 100644 --- a/exporter/src/app/http/export_svg.cljs +++ b/exporter/src/app/http/export_svg.cljs @@ -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) diff --git a/exporter/yarn.lock b/exporter/yarn.lock index 0518f3fc1..3258860c0 100644 --- a/exporter/yarn.lock +++ b/exporter/yarn.lock @@ -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" diff --git a/frontend/src/app/util/logging.cljs b/frontend/src/app/util/logging.cljs index 6ea7392a3..b299a36e1 100644 --- a/frontend/src/app/util/logging.cljs +++ b/frontend/src/app/util/logging.cljs @@ -39,7 +39,6 @@ (def root (get-logger :root)) - (def levels {:off Level/OFF :shout Level/SHOUT