From be66b5e6c04bad6b246f95a4c018ad783b10befb Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 22 Apr 2025 09:56:45 +0800 Subject: [PATCH 1/8] chore: bump datascript --- deps.edn | 2 +- deps/db/deps.edn | 2 +- deps/db/src/logseq/db/common/sqlite.cljs | 1 - deps/outliner/deps.edn | 2 +- src/main/frontend/components/block.cljs | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/deps.edn b/deps.edn index abf602cee0..6c4adf5f78 100644 --- a/deps.edn +++ b/deps.edn @@ -5,7 +5,7 @@ :sha "5d672bf84ed944414b9f61eeb83808ead7be9127"} datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork - :sha "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"} + :sha "cd9d12f4dd7b3c291132e8f05515e88178a75b7a"} datascript-transit/datascript-transit {:mvn/version "0.3.0"} borkdude/rewrite-edn {:mvn/version "0.4.7"} diff --git a/deps/db/deps.edn b/deps/db/deps.edn index 41cb0c98c1..d37fa98623 100644 --- a/deps/db/deps.edn +++ b/deps/db/deps.edn @@ -1,7 +1,7 @@ {:deps ;; These deps are kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork - :sha "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"} + :sha "cd9d12f4dd7b3c291132e8f05515e88178a75b7a"} datascript-transit/datascript-transit {:mvn/version "0.3.0" :exclusions [datascript/datascript]} cljs-bean/cljs-bean {:mvn/version "1.5.0"} diff --git a/deps/db/src/logseq/db/common/sqlite.cljs b/deps/db/src/logseq/db/common/sqlite.cljs index 34fc2afade..7c695d3d33 100644 --- a/deps/db/src/logseq/db/common/sqlite.cljs +++ b/deps/db/src/logseq/db/common/sqlite.cljs @@ -286,7 +286,6 @@ (defn get-recent-updated-pages [db] (->> (d/datoms db :avet :block/updated-at) - vec rseq (keep (fn [datom] (let [e (d/entity db (:e datom))] diff --git a/deps/outliner/deps.edn b/deps/outliner/deps.edn index 627f606ccf..6ae7c86ffd 100644 --- a/deps/outliner/deps.edn +++ b/deps/outliner/deps.edn @@ -1,7 +1,7 @@ {:deps ;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork - :sha "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"} + :sha "cd9d12f4dd7b3c291132e8f05515e88178a75b7a"} logseq/db {:local/root "../db"} logseq/graph-parser {:local/root "../db"} com.cognitect/transit-cljs {:mvn/version "0.8.280"} diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 2b1b68bbe3..028b59f5f7 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -2365,7 +2365,7 @@ query (:logseq.property/query block) advanced-query? (and query? (= :code (:logseq.property.node/display-type query))) show-query? (and *show-query? @*show-query?)] - [:div + [:div.w-full {:class (if (and query? blank?) "inline-flex" "inline") From 18c0762f6e29b3d8fe93976f163e367a3e296098 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 22 Apr 2025 16:29:27 +0800 Subject: [PATCH 2/8] chore: bump datascript --- deps.edn | 2 +- deps/db/deps.edn | 2 +- deps/outliner/deps.edn | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deps.edn b/deps.edn index 6c4adf5f78..48026c66b6 100644 --- a/deps.edn +++ b/deps.edn @@ -5,7 +5,7 @@ :sha "5d672bf84ed944414b9f61eeb83808ead7be9127"} datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork - :sha "cd9d12f4dd7b3c291132e8f05515e88178a75b7a"} + :sha "4b1f15f05a6b4a718a62c247956206480e361ea6"} datascript-transit/datascript-transit {:mvn/version "0.3.0"} borkdude/rewrite-edn {:mvn/version "0.4.7"} diff --git a/deps/db/deps.edn b/deps/db/deps.edn index d37fa98623..f266b0e115 100644 --- a/deps/db/deps.edn +++ b/deps/db/deps.edn @@ -1,7 +1,7 @@ {:deps ;; These deps are kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork - :sha "cd9d12f4dd7b3c291132e8f05515e88178a75b7a"} + :sha "4b1f15f05a6b4a718a62c247956206480e361ea6"} datascript-transit/datascript-transit {:mvn/version "0.3.0" :exclusions [datascript/datascript]} cljs-bean/cljs-bean {:mvn/version "1.5.0"} diff --git a/deps/outliner/deps.edn b/deps/outliner/deps.edn index 6ae7c86ffd..a1579edb84 100644 --- a/deps/outliner/deps.edn +++ b/deps/outliner/deps.edn @@ -1,7 +1,7 @@ {:deps ;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork - :sha "cd9d12f4dd7b3c291132e8f05515e88178a75b7a"} + :sha "4b1f15f05a6b4a718a62c247956206480e361ea6"} logseq/db {:local/root "../db"} logseq/graph-parser {:local/root "../db"} com.cognitect/transit-cljs {:mvn/version "0.8.280"} From c6560231d3c7e9e09b612d44ffe4ba5170ef926c Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 22 Apr 2025 18:59:37 +0800 Subject: [PATCH 3/8] fix: cardinality one property get multiple values in db The bug was introduced by https://github.com/logseq/datascript/commit/3a41bbcdbe66b328bff36d9efd7548bad47f55b6 --- deps/db/src/logseq/db/frontend/schema.cljs | 2 +- src/main/frontend/worker/db/migrate.cljs | 26 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/deps/db/src/logseq/db/frontend/schema.cljs b/deps/db/src/logseq/db/frontend/schema.cljs index 3e353e917d..f9cbc16f90 100644 --- a/deps/db/src/logseq/db/frontend/schema.cljs +++ b/deps/db/src/logseq/db/frontend/schema.cljs @@ -37,7 +37,7 @@ (map (juxt :major :minor) [(parse-schema-version x) (parse-schema-version y)]))) -(def version (parse-schema-version "64.5")) +(def version (parse-schema-version "64.6")) (defn major-version "Return a number. diff --git a/src/main/frontend/worker/db/migrate.cljs b/src/main/frontend/worker/db/migrate.cljs index 0532d8e63e..88fadaa074 100644 --- a/src/main/frontend/worker/db/migrate.cljs +++ b/src/main/frontend/worker/db/migrate.cljs @@ -661,6 +661,29 @@ [:db/add (:e view-datom) :logseq.property.view/group-by-property block-page-prop-id]) list-views))) +(defn- cardinality-one-multiple-values + [conn _search-db] + (let [db @conn + attrs (keep (fn [[k v]] + (when (and (keyword? k) + (not= :db.cardinality/many (:db/cardinality v)) + (not= :db.cardinality/many (:db/cardinality (d/entity db k))) + (or (get db-schema/schema k) + (ldb/property? (d/entity db k)))) + k)) (:schema db)) + block-ids (map :e (d/datoms db :avet :block/uuid))] + (->> + (mapcat + (fn [id] + (mapcat (fn [attr] + (let [datoms (d/datoms db :eavt id attr)] + (when (> (count datoms) 1) + (map (fn [datom] + [:db/retract (:e datom) (:a datom) (:v datom)]) + (butlast datoms))))) attrs)) + block-ids) + (remove nil?)))) + (def ^:large-vars/cleanup-todo schema-version->updates "A vec of tuples defining datascript migrations. Each tuple consists of the schema version integer and a migration map. A migration map can have keys of :properties, :classes @@ -769,7 +792,8 @@ ["64.3" {:properties [:logseq.property/used-template :logseq.property/template-applied-to] :classes [:logseq.class/Template]}] ["64.4" {:properties [:logseq.property/created-by-ref]}] - ["64.5" {:fix add-group-by-property-for-list-views}]]) + ["64.5" {:fix add-group-by-property-for-list-views}] + ["64.6" {:fix cardinality-one-multiple-values}]]) (let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first) schema-version->updates))) From 7f9517c7d8260a3e80f1d66a558af4f68659d1ee Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 22 Apr 2025 19:02:28 +0800 Subject: [PATCH 4/8] fix: (rseq nil) throws error --- deps/db/src/logseq/db/common/sqlite.cljs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/deps/db/src/logseq/db/common/sqlite.cljs b/deps/db/src/logseq/db/common/sqlite.cljs index 7c695d3d33..0df7d0ade7 100644 --- a/deps/db/src/logseq/db/common/sqlite.cljs +++ b/deps/db/src/logseq/db/common/sqlite.cljs @@ -285,13 +285,14 @@ (defn get-recent-updated-pages [db] - (->> (d/datoms db :avet :block/updated-at) - rseq - (keep (fn [datom] - (let [e (d/entity db (:e datom))] - (when (and (common-entity-util/page? e) (not (entity-util/hidden? e))) - e)))) - (take 30))) + (some->> + (d/datoms db :avet :block/updated-at) + rseq + (keep (fn [datom] + (let [e (d/entity db (:e datom))] + (when (and (common-entity-util/page? e) (not (entity-util/hidden? e))) + e)))) + (take 30))) (defn get-initial-data "Returns current database schema and initial data. From 5685fe5540ee037e580fde6b4ef2e5f09b7453b0 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Fri, 18 Apr 2025 15:47:22 -0400 Subject: [PATCH 5/8] enhance: enable basic markdown export Dont include built-in entities which are a lot in db graph, except for user facing ones like Contents --- src/main/frontend/components/export.cljs | 2 +- src/main/frontend/worker/export.cljs | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/frontend/components/export.cljs b/src/main/frontend/components/export.cljs index 5ad9e26ff9..9cc96fc527 100644 --- a/src/main/frontend/components/export.cljs +++ b/src/main/frontend/components/export.cljs @@ -117,7 +117,7 @@ [:div [:a.font-medium {:on-click #(export/download-repo-as-html! current-repo)} (t :export-public-pages)]]) - (when-not (or (mobile-util/native-platform?) db-based?) + (when-not (mobile-util/native-platform?) [:div [:a.font-medium {:on-click #(export-text/export-repo-as-markdown! current-repo)} (t :export-markdown)]]) diff --git a/src/main/frontend/worker/export.cljs b/src/main/frontend/worker/export.cljs index 39018c5f96..f874359d36 100644 --- a/src/main/frontend/worker/export.cljs +++ b/src/main/frontend/worker/export.cljs @@ -6,7 +6,8 @@ [logseq.db :as ldb] [logseq.db.sqlite.util :as sqlite-util] [logseq.graph-parser.property :as gp-property] - [logseq.outliner.tree :as otree])) + [logseq.outliner.tree :as otree] + [logseq.db.sqlite.create-graph :as sqlite-create-graph])) (defn- safe-keywordize [block] @@ -46,9 +47,15 @@ (defn get-all-page->content [repo db] - (->> (d/datoms db :avet :block/name) - (map (fn [d] - (let [e (d/entity db (:e d))] + (let [filter-fn (if (ldb/db-based-graph? db) + (fn [ent] + (or (not (:logseq.property/built-in? ent)) + (contains? sqlite-create-graph/built-in-pages-names (:block/title ent)))) + (constantly true))] + (->> (d/datoms db :avet :block/name) + (map #(d/entity db (:e %))) + (filter filter-fn) + (map (fn [e] [(:block/title e) (common-file/block->content repo db (:block/uuid e) {} {})]))))) From 954ec0c72151e8a0d6697332f00467a697b13e57 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Mon, 21 Apr 2025 16:29:42 -0400 Subject: [PATCH 6/8] fix: graph md exports have no indent Affected both graph types --- src/main/frontend/handler/export/common.cljs | 7 ++++--- src/main/frontend/handler/export/text.cljs | 7 +++---- src/main/frontend/worker/db_worker.cljs | 4 ++-- src/main/frontend/worker/export.cljs | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/frontend/handler/export/common.cljs b/src/main/frontend/handler/export/common.cljs index 8d29cc3319..2ead1c4947 100644 --- a/src/main/frontend/handler/export/common.cljs +++ b/src/main/frontend/handler/export/common.cljs @@ -195,12 +195,13 @@ (state/content - [repo] - (state/content repo)) + [repo options] + (state/content repo options)) (defn content (content repo)] + (p/let [page->content (content repo + {:export-bullet-indentation (state/get-export-bullet-indentation)})] (clojure.core/map (fn [[page-title content]] {:path (str page-title "." suffix) :content content diff --git a/src/main/frontend/handler/export/text.cljs b/src/main/frontend/handler/export/text.cljs index 1c3864a90c..53347b2119 100644 --- a/src/main/frontend/handler/export/text.cljs +++ b/src/main/frontend/handler/export/text.cljs @@ -1,6 +1,5 @@ (ns frontend.handler.export.text "export blocks/pages as text" - (:refer-clojure :exclude [map filter mapcat concat remove newline]) (:require [clojure.string :as string] [frontend.config :as config] [frontend.db :as db] @@ -545,9 +544,9 @@ (defn export-repo-as-markdown! "TODO: indent-style and remove-options" [repo] - (p/let [files (util/profile :get-file-content (common/content - [repo] + [repo options] (when-let [conn (worker-state/get-datascript-conn repo)] - (worker-export/get-all-page->content repo @conn))) + (worker-export/get-all-page->content repo @conn options))) (def-thread-api :thread-api/undo [repo _page-block-uuid-str] diff --git a/src/main/frontend/worker/export.cljs b/src/main/frontend/worker/export.cljs index f874359d36..3e263f8da9 100644 --- a/src/main/frontend/worker/export.cljs +++ b/src/main/frontend/worker/export.cljs @@ -46,7 +46,7 @@ (assoc page' :block/children children)))))) (defn get-all-page->content - [repo db] + [repo db options] (let [filter-fn (if (ldb/db-based-graph? db) (fn [ent] (or (not (:logseq.property/built-in? ent)) @@ -57,7 +57,7 @@ (filter filter-fn) (map (fn [e] [(:block/title e) - (common-file/block->content repo db (:block/uuid e) {} {})]))))) + (common-file/block->content repo db (:block/uuid e) {} options)]))))) (defn get-debug-datoms [conn ^Object db] From 4c74d254907499edc97a206695d2e3e8ac05f67c Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 22 Apr 2025 20:56:29 +0800 Subject: [PATCH 7/8] enhance: put markdown export next to edn --- src/main/frontend/components/export.cljs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/frontend/components/export.cljs b/src/main/frontend/components/export.cljs index 9cc96fc527..b439005cd9 100644 --- a/src/main/frontend/components/export.cljs +++ b/src/main/frontend/components/export.cljs @@ -103,24 +103,22 @@ [:div [:a.font-medium {:on-click #(export/export-repo-as-zip! current-repo)} (t :export-zip)]]) + (when db-based? [:div [:a.font-medium {:on-click #(db-export-handler/export-repo-as-db-edn! current-repo)} (t :export-db-edn)]]) - (when db-based? + + (when-not (mobile-util/native-platform?) [:div - [:a.font-medium {:on-click #(export/export-repo-as-debug-transit! current-repo)} - "Export debug transit file"] - [:p.text-sm.opacity-70 "Any sensitive data will be removed in the exported transit file, you can send it to us for debugging."]]) + [:a.font-medium {:on-click #(export-text/export-repo-as-markdown! current-repo)} + (t :export-markdown)]]) (when (util/electron?) [:div [:a.font-medium {:on-click #(export/download-repo-as-html! current-repo)} (t :export-public-pages)]]) - (when-not (mobile-util/native-platform?) - [:div - [:a.font-medium {:on-click #(export-text/export-repo-as-markdown! current-repo)} - (t :export-markdown)]]) + (when-not (or (mobile-util/native-platform?) db-based?) [:div [:a.font-medium {:on-click #(export-opml/export-repo-as-opml! current-repo)} @@ -129,6 +127,11 @@ [:div [:a.font-medium {:on-click #(export/export-repo-as-roam-json! current-repo)} (t :export-roam-json)]]) + (when db-based? + [:div + [:a.font-medium {:on-click #(export/export-repo-as-debug-transit! current-repo)} + "Export debug transit file"] + [:p.text-sm.opacity-70.mb-0 "Any sensitive data will be removed in the exported transit file, you can send it to us for debugging."]]) (when (and db-based? util/web-platform? (utils/nfsSupported)) [:div From 8cb5fecb9182cb3b5b474dc0a244b96ba6d0cd81 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Tue, 22 Apr 2025 09:44:28 -0400 Subject: [PATCH 8/8] fix: user can't reverse a class parent decision Class parent defaults to Root but user can't select it later. This should be reversible, especially given how much functionality this affects. Fixes #256 --- deps/db/src/logseq/db/frontend/class.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/db/src/logseq/db/frontend/class.cljs b/deps/db/src/logseq/db/frontend/class.cljs index 9e06fd7342..a6589cd5a7 100644 --- a/deps/db/src/logseq/db/frontend/class.cljs +++ b/deps/db/src/logseq/db/frontend/class.cljs @@ -110,7 +110,7 @@ (def private-tags "Built-in classes that are private and should not be used by a user directly. These used to be in block/type" - (set/union internal-tags + (set/union (disj internal-tags :logseq.class/Root) #{:logseq.class/Journal :logseq.class/Whiteboard})) (def hidden-tags