mirror of
https://github.com/penpot/penpot.git
synced 2025-12-11 22:14:05 +01:00
🐛 Fix incorrect resource lifetime handling on exporter
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
"raw-body": "^3.0.1",
|
"raw-body": "^3.0.1",
|
||||||
"source-map-support": "^0.5.21",
|
"source-map-support": "^0.5.21",
|
||||||
"svgo": "penpot/svgo#v3.1",
|
"svgo": "penpot/svgo#v3.1",
|
||||||
|
"undici": "^7.16.0",
|
||||||
"xml-js": "^1.6.11",
|
"xml-js": "^1.6.11",
|
||||||
"xregexp": "^5.1.2"
|
"xregexp": "^5.1.2"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,5 +7,4 @@ bb -i '(babashka.wait/wait-for-port "localhost" 9630)';
|
|||||||
bb -i '(babashka.wait/wait-for-path "target/app.js")';
|
bb -i '(babashka.wait/wait-for-path "target/app.js")';
|
||||||
sleep 2;
|
sleep 2;
|
||||||
|
|
||||||
export NODE_TLS_REJECT_UNAUTHORIZED=0
|
|
||||||
exec node target/app.js
|
exec node target/app.js
|
||||||
|
|||||||
@@ -107,12 +107,12 @@
|
|||||||
:on-progress on-progress)
|
:on-progress on-progress)
|
||||||
|
|
||||||
append (fn [{:keys [filename path] :as resource}]
|
append (fn [{:keys [filename path] :as resource}]
|
||||||
(rsc/add-to-zip! zip path (str/replace filename sanitize-file-regex "_")))
|
(rsc/add-to-zip zip path (str/replace filename sanitize-file-regex "_")))
|
||||||
|
|
||||||
proc (->> exports
|
proc (->> exports
|
||||||
(map (fn [export] (rd/render export append)))
|
(map (fn [export] (rd/render export append)))
|
||||||
(p/all)
|
(p/all)
|
||||||
(p/fnly (fn [_] (.finalize zip)))
|
(p/mcat (fn [_] (rsc/close-zip zip)))
|
||||||
(p/fmap (constantly resource))
|
(p/fmap (constantly resource))
|
||||||
(p/mcat (partial rsc/upload-resource auth-token))
|
(p/mcat (partial rsc/upload-resource auth-token))
|
||||||
(p/fmap (fn [resource]
|
(p/fmap (fn [resource]
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
["node:fs" :as fs]
|
["node:fs" :as fs]
|
||||||
["node:fs/promises" :as fsp]
|
["node:fs/promises" :as fsp]
|
||||||
["node:path" :as path]
|
["node:path" :as path]
|
||||||
|
["undici" :as http]
|
||||||
[app.common.exceptions :as ex]
|
[app.common.exceptions :as ex]
|
||||||
[app.common.transit :as t]
|
[app.common.transit :as t]
|
||||||
[app.common.uri :as u]
|
[app.common.uri :as u]
|
||||||
@@ -53,30 +54,40 @@
|
|||||||
(.pipe zip out)
|
(.pipe zip out)
|
||||||
zip))
|
zip))
|
||||||
|
|
||||||
(defn add-to-zip!
|
(defn add-to-zip
|
||||||
[zip path name]
|
[zip path name]
|
||||||
(.file ^js zip path #js {:name name}))
|
(.file ^js zip path #js {:name name}))
|
||||||
|
|
||||||
(defn close-zip!
|
(defn close-zip
|
||||||
[zip]
|
[zip]
|
||||||
(.finalize ^js zip))
|
(p/create (fn [resolve]
|
||||||
|
(.on ^js zip "close" resolve)
|
||||||
|
(.finalize ^js zip))))
|
||||||
|
|
||||||
(defn upload-resource
|
(defn upload-resource
|
||||||
[auth-token resource]
|
[auth-token resource]
|
||||||
(->> (fsp/readFile (:path resource))
|
(->> (fsp/readFile (:path resource))
|
||||||
(p/fmap (fn [buffer]
|
(p/fmap (fn [buffer]
|
||||||
|
(js/console.log buffer)
|
||||||
(new js/Blob #js [buffer] #js {:type (:mtype resource)})))
|
(new js/Blob #js [buffer] #js {:type (:mtype resource)})))
|
||||||
(p/mcat (fn [blob]
|
(p/mcat (fn [blob]
|
||||||
(let [fdata (new js/FormData)
|
(let [fdata (new http/FormData)
|
||||||
uri (-> (cf/get :public-uri)
|
agent (new http/Agent #js {:connect #js {:rejectUnauthorized false}})
|
||||||
(u/ensure-path-slash)
|
headers #js {"X-Shared-Key" cf/management-key
|
||||||
(u/join "api/management/methods/upload-tempfile")
|
"Authorization" (str "Bearer " auth-token)}
|
||||||
(str))]
|
|
||||||
|
request #js {:headers headers
|
||||||
|
:method "POST"
|
||||||
|
:body fdata
|
||||||
|
:dispatcher agent}
|
||||||
|
uri (-> (cf/get :public-uri)
|
||||||
|
(u/ensure-path-slash)
|
||||||
|
(u/join "api/management/methods/upload-tempfile")
|
||||||
|
(str))]
|
||||||
|
|
||||||
(.append fdata "content" blob (:filename resource))
|
(.append fdata "content" blob (:filename resource))
|
||||||
(js/fetch uri #js {:headers #js {"X-Shared-Key" cf/management-key
|
(http/fetch uri request))))
|
||||||
"Authorization" (str "Bearer " auth-token)}
|
|
||||||
:method "POST"
|
|
||||||
:body fdata}))))
|
|
||||||
(p/mcat (fn [response]
|
(p/mcat (fn [response]
|
||||||
(if (not= (.-status response) 200)
|
(if (not= (.-status response) 200)
|
||||||
(ex/raise :type :internal
|
(ex/raise :type :internal
|
||||||
|
|||||||
@@ -75,7 +75,8 @@
|
|||||||
[path]
|
[path]
|
||||||
(->> (.stat fs/promises path)
|
(->> (.stat fs/promises path)
|
||||||
(p/fmap (fn [data]
|
(p/fmap (fn [data]
|
||||||
{:created-at (inst-ms (.-ctime ^js data))
|
{:path path
|
||||||
|
:created-at (inst-ms (.-ctime ^js data))
|
||||||
:size (.-size data)}))
|
:size (.-size data)}))
|
||||||
(p/merr (fn [_cause]
|
(p/merr (fn [_cause]
|
||||||
(p/resolved nil)))))
|
(p/resolved nil)))))
|
||||||
|
|||||||
@@ -582,6 +582,7 @@ __metadata:
|
|||||||
raw-body: "npm:^3.0.1"
|
raw-body: "npm:^3.0.1"
|
||||||
source-map-support: "npm:^0.5.21"
|
source-map-support: "npm:^0.5.21"
|
||||||
svgo: "penpot/svgo#v3.1"
|
svgo: "penpot/svgo#v3.1"
|
||||||
|
undici: "npm:^7.16.0"
|
||||||
ws: "npm:^8.18.3"
|
ws: "npm:^8.18.3"
|
||||||
xml-js: "npm:^1.6.11"
|
xml-js: "npm:^1.6.11"
|
||||||
xregexp: "npm:^5.1.2"
|
xregexp: "npm:^5.1.2"
|
||||||
@@ -1513,6 +1514,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"undici@npm:^7.16.0":
|
||||||
|
version: 7.16.0
|
||||||
|
resolution: "undici@npm:7.16.0"
|
||||||
|
checksum: 10c0/efd867792e9f233facf9efa0a087e2d9c3e4415c0b234061b9b40307ca4fa01d945fee4d43c7b564e1b80e0d519bcc682f9f6e0de13c717146c00a80e2f1fb0f
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"unique-filename@npm:^4.0.0":
|
"unique-filename@npm:^4.0.0":
|
||||||
version: 4.0.0
|
version: 4.0.0
|
||||||
resolution: "unique-filename@npm:4.0.0"
|
resolution: "unique-filename@npm:4.0.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user