0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-04-13 07:21:40 -05:00

🐛 Fix incompatibility of binfile exportation with offload feature

This commit is contained in:
Andrey Antukh 2025-01-14 12:37:39 +01:00 committed by Andrés Moya
parent 5793c526c0
commit f62aecb383
3 changed files with 44 additions and 13 deletions

View file

@ -52,6 +52,15 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def file-attrs
#{:id
:name
:features
:project-id
:is-shared
:version
:data})
(def xf-map-id
(map :id))
@ -129,10 +138,11 @@
(binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg file-id)]
(when-let [file (db/get* conn :file {:id file-id}
{::db/remove-deleted false})]
(-> file
(decode-row)
(update :data feat.fdata/process-pointers deref)
(update :data feat.fdata/process-objects (partial into {}))))))))
(let [file (feat.fdata/resolve-file-data cfg file)]
(-> file
(decode-row)
(update :data feat.fdata/process-pointers deref)
(update :data feat.fdata/process-objects (partial into {})))))))))
(defn clean-file-features
[file]

View file

@ -56,7 +56,6 @@
[:map
[:id ::sm/uuid]
[:name :string]
[:project-id ::sm/uuid]
[:features ::cfeat/features]]]]
[:relations {:optional true}
@ -79,10 +78,15 @@
[:tag :string]
[:media-id ::sm/uuid]])
(def ^:private schema:file
[:merge
ctf/schema:file
[:map [:options {:optional true} ctf/schema:options]]])
;; --- ENCODERS
(def encode-file
(sm/encoder ::ctf/file sm/json-transformer))
(sm/encoder schema:file sm/json-transformer))
(def encode-page
(sm/encoder ::ctp/page sm/json-transformer))
@ -126,7 +130,7 @@
(sm/decoder ::ctcl/color sm/json-transformer))
(def decode-file
(sm/decoder ::ctf/file sm/json-transformer))
(sm/decoder schema:file sm/json-transformer))
(def decode-page
(sm/decoder ::ctp/page sm/json-transformer))
@ -198,8 +202,9 @@
(throw (IllegalArgumentException.
"the `include-libraries` and `embed-assets` are mutally excluding options")))
(let [detach? (and (not embed-assets) (not include-libraries))]
(cond-> (bfc/get-file cfg file-id)
(let [detach? (and (not embed-assets) (not include-libraries))
file (bfc/get-file cfg file-id)]
(cond-> file
detach?
(-> (ctf/detach-external-references file-id)
(dissoc :libraries))
@ -263,13 +268,16 @@
(vswap! bfc/*state* update :files assoc file-id
{:id file-id
:project-id (:project-id file)
:name (:name file)
:features (:features file)})
(let [file (cond-> (dissoc file :data)
(let [file (cond-> (select-keys file bfc/file-attrs)
(:options data)
(assoc :options (:options data))
:always
(dissoc :data)
:always
(encode-file))
path (str "files/" file-id ".json")]
@ -623,7 +631,7 @@
(not-empty)))
(defn- read-file-data
[{:keys [] :as cfg}]
[cfg]
(let [colors (read-file-colors cfg)
typographies (read-file-typographies cfg)
components (read-file-components cfg)
@ -678,7 +686,7 @@
(cond-> (:options file)
(assoc :options (:options file))))
file (-> file
file (-> (select-keys file bfc/file-attrs)
(assoc :id file-id')
(assoc :data data)
(assoc :name file-name)

View file

@ -63,10 +63,15 @@
(def schema:pages-index
[:map-of {:gen/max 5} ::sm/uuid ::ctp/page])
(def schema:options
[:map {:title "FileOptions"}
[:components-v2 {:optional true} ::sm/boolean]])
(def schema:data
[:map {:title "FileData"}
[:pages [:vector ::sm/uuid]]
[:pages-index schema:pages-index]
[:options {:optional true} schema:options]
[:colors {:optional true} schema:colors]
[:components {:optional true} schema:components]
[:typographies {:optional true} schema:typographies]
@ -78,7 +83,15 @@
because sometimes we want to validate file without the data."
[:map {:title "file"}
[:id ::sm/uuid]
[:revn {:optional true} :int]
[:vern {:optional true} :int]
[:created-at {:optional true} ::sm/inst]
[:modified-at {:optional true} ::sm/inst]
[:deleted-at {:optional true} ::sm/inst]
[:project-id {:optional true} ::sm/uuid]
[:is-shared {:optional true} ::sm/boolean]
[:data {:optional true} schema:data]
[:version :int]
[:features ::cfeat/features]])
(sm/register! ::data schema:data)