fix: edn export

This commit is contained in:
Tienson Qin
2026-05-27 08:23:17 +08:00
parent d21906dd88
commit cbf160656e
2 changed files with 59 additions and 1 deletions

View File

@@ -39,6 +39,27 @@
(or (block-title pvalue)
(:logseq.property/value pvalue)))
(defn- referenced-property-value-contents
[db property]
(->> (d/datoms db :avet (:db/ident property))
(keep (fn [datom]
(some->> (:v datom)
(d/entity db)
property-value-content)))
set))
(defn- closed-values-for-export
[db property]
(let [referenced-contents (referenced-property-value-contents db property)]
(->> (concat (entity-plus/lookup-kv-then-entity property :property/closed-values)
(filter #(contains? referenced-contents (property-value-content %))
(:block/_closed-value-property property)))
(reduce (fn [closed-values value]
(assoc closed-values (:db/id value) value))
{})
vals
(sort-by :block/order))))
(defn- shallow-copy-page
"Given a page or journal entity, shallow copies it e.g. no properties or tags info included.
Pages that are shallow copied are at the edges of export and help keep the export size reasonable and
@@ -147,7 +168,7 @@
(->> user-property-idents
(map (fn [ident]
(let [property (d/entity db ident)
closed-values (entity-plus/lookup-kv-then-entity property :property/closed-values)]
closed-values (closed-values-for-export db property)]
[property
(cond-> (select-keys property
(-> (disj db-property/schema-properties :logseq.property/classes)

View File

@@ -553,6 +553,43 @@
(get-in export-edn [:classes :user.class/MyClass :build/class-properties])))
(is (not (contains? (:properties export-edn) legacy-property)))))
(deftest graph-export-omits-legacy-plugin-property-schema-attrs
(let [plugin-property :plugin.property.degrande-colors/mugpet_degrande_colors_controls
conn (db-test/create-conn-with-import-map
{:properties {plugin-property {:logseq.property/type :json}}
:pages-and-blocks [{:page {:block/title "page1"}
:blocks [{:block/title "b1"}]}]})
plugin-property-ent (d/entity @conn plugin-property)
_ (d/transact! conn [{:db/id (:db/id plugin-property-ent)
:hide? true
:public? false}])
export-edn (sqlite-export/build-export @conn {:export-type :graph})
validation (sqlite-export/validate-export export-edn)]
(is (nil? (:error validation)))
(is (= {:logseq.property/type :json
:db/cardinality :db.cardinality/one
:block/title "mugpet_degrande_colors_controls"}
(get-in export-edn [:properties plugin-property])))))
(deftest graph-export-keeps-referenced-recycled-closed-value-config
(let [property-id :plugin.property.degrande-colors/tldraw
closed-value-uuid (random-uuid)
conn (db-test/create-conn-with-import-map
{:properties {property-id {:logseq.property/type :default
:build/closed-values [{:value "tldraw"
:uuid closed-value-uuid}]}}
:pages-and-blocks [{:page {:block/title "page1"}
:blocks [{:block/title "b1"
:build/properties {property-id [:block/uuid closed-value-uuid]}}]}]})
closed-value (d/entity @conn [:block/uuid closed-value-uuid])
_ (d/transact! conn [{:db/id (:db/id closed-value)
:logseq.property/deleted-at 1}])
export-edn (sqlite-export/build-export @conn {:export-type :graph})
validation (sqlite-export/validate-export export-edn)]
(is (nil? (:error validation)))
(is (= [{:value "tldraw" :uuid closed-value-uuid}]
(get-in export-edn [:properties property-id :build/closed-values])))))
(deftest import-view-blocks
(let [original-data
;; Test a mix of page and block types