diff --git a/.cljfmt.edn b/.cljfmt.edn index a32163e909..fc0b474b80 100644 --- a/.cljfmt.edn +++ b/.cljfmt.edn @@ -1,4 +1,5 @@ {:extra-indents {missionary.core/sp [[:block 0]] missionary.core/ap [[:block 0]] + frontend.util/profile [[:inner 0]] frontend.common.missionary/run-task [[:inner 0]]} :sort-ns-references? true} diff --git a/.github/workflows/clj-e2e.yml b/.github/workflows/clj-e2e.yml index 4b66342063..7c4ac906f4 100644 --- a/.github/workflows/clj-e2e.yml +++ b/.github/workflows/clj-e2e.yml @@ -78,7 +78,7 @@ jobs: # NOTE: require the app to be build with DEV-RELEASE flag - name: Prepare E2E test build run: | - yarn gulp:build && clojure -M:cljs release app --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug + yarn gulp:build && clojure -M:cljs release app workers --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug && yarn webpack-app-build - name: Run e2e tests run: cd clj-e2e && timeout 30m bb dev diff --git a/.github/workflows/clj-rtc-e2e.yml b/.github/workflows/clj-rtc-e2e.yml index 2e1d195270..06cba77607 100644 --- a/.github/workflows/clj-rtc-e2e.yml +++ b/.github/workflows/clj-rtc-e2e.yml @@ -79,7 +79,7 @@ jobs: # NOTE: require the app to be build with DEV-RELEASE flag - name: Prepare E2E test build run: | - yarn gulp:build && clojure -M:cljs release app --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug + yarn gulp:build && clojure -M:cljs release app workers --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug && yarn webpack-app-build rsync -avz --exclude node_modules --exclude android --exclude ios ./static/ ./public/ ls -lR ./public diff --git a/.github/workflows/deploy-db-test-pages.yml b/.github/workflows/deploy-db-test-pages.yml index 00e74dbffe..fa90c768bc 100644 --- a/.github/workflows/deploy-db-test-pages.yml +++ b/.github/workflows/deploy-db-test-pages.yml @@ -42,7 +42,7 @@ jobs: - name: Build Released-Web run: | - yarn gulp:build && clojure -M:cljs release app --config-merge '{:compiler-options {:source-map true :source-map-include-sources-content true :source-map-detail-level :symbols}}' + yarn gulp:build && clojure -M:cljs release app workers --config-merge '{:compiler-options {:source-map true :source-map-include-sources-content true :source-map-detail-level :symbols}}' && yarn webpack-app-build rsync -avz --exclude node_modules --exclude android --exclude ios ./static/ ./public/ ls -lR ./public && mkdir r2 && mv ./public/js/main.js.map ./r2/db-test.main.js.map sed -i 's/=main.js.map/=https:\/\/assets.logseq.io\/db-test.main.js.map/g' ./public/js/main.js diff --git a/clj-e2e/src/logseq/e2e/page.clj b/clj-e2e/src/logseq/e2e/page.clj index e48aa0a36a..cf9e274f96 100644 --- a/clj-e2e/src/logseq/e2e/page.clj +++ b/clj-e2e/src/logseq/e2e/page.clj @@ -1,9 +1,9 @@ (ns logseq.e2e.page - (:require [logseq.e2e.keyboard :as k] + (:require [logseq.e2e.block :as b] + [logseq.e2e.keyboard :as k] [logseq.e2e.util :as util] [wally.main :as w] - [wally.selectors :as ws] - [logseq.e2e.block :as b]) + [wally.selectors :as ws]) (:import (com.microsoft.playwright TimeoutError))) (defn goto-page diff --git a/clj-e2e/test/logseq/e2e/plugins_basic_test.clj b/clj-e2e/test/logseq/e2e/plugins_basic_test.clj index 6eaeff8fdd..3b1fac5fa2 100644 --- a/clj-e2e/test/logseq/e2e/plugins_basic_test.clj +++ b/clj-e2e/test/logseq/e2e/plugins_basic_test.clj @@ -25,14 +25,14 @@ (when (string? s) (-> s ;; Normalize input: replace hyphens/spaces with underscores, collapse multiple underscores - (clojure.string/replace #"[-\s]+" "_") + (clojure.string/replace #"[-\s]+" "_") ;; Split on uppercase letters (except at start) and join with underscore - (clojure.string/replace #"(? (ls-api-call! :editor.insertBlock uuid' "insert-0") - (assert-api-ls-block!)) + (assert-api-ls-block!)) (ls-api-call! :editor.updateBlock uuid' "append-but-updated-0") (k/esc) (w/wait-for ".block-title-wrap:text('append-but-updated-0')") diff --git a/deps.edn b/deps.edn index cf32722fc9..ac22ad20b0 100644 --- a/deps.edn +++ b/deps.edn @@ -53,16 +53,14 @@ :git/sha "d61ce7e29186de021a2a453a8cee68efb5a88440"}} :aliases {:cljs {:extra-paths ["src/dev-cljs/" "src/test/" "src/electron/"] - :extra-deps {org.clojure/clojurescript {:mvn/version "1.11.132"} - org.clojure/tools.namespace {:mvn/version "0.2.11"} + :extra-deps {org.clojure/tools.namespace {:mvn/version "0.2.11"} cider/cider-nrepl {:mvn/version "0.55.1"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} tortue/spy {:mvn/version "2.14.0"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :test {:extra-paths ["src/test/"] - :extra-deps {org.clojure/clojurescript {:mvn/version "1.11.132"} - org.clojure/test.check {:mvn/version "1.1.1"} + :extra-deps {org.clojure/test.check {:mvn/version "1.1.1"} pjstadig/humane-test-output {:mvn/version "0.11.0"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} tortue/spy {:mvn/version "2.14.0"} @@ -70,8 +68,7 @@ :main-opts ["-m" "shadow.cljs.devtools.cli"]} :rtc-e2e-test {:extra-paths ["src/rtc_e2e_test"] - :extra-deps {org.clojure/clojurescript {:mvn/version "1.11.132"} - cider/cider-nrepl {:mvn/version "0.50.2"}} + :extra-deps {cider/cider-nrepl {:mvn/version "0.50.2"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :bench {:extra-paths ["src/bench/"] diff --git a/deps/common/src/logseq/common/path.cljs b/deps/common/src/logseq/common/path.cljs index d78f81b8f8..e722f0e5a2 100644 --- a/deps/common/src/logseq/common/path.cljs +++ b/deps/common/src/logseq/common/path.cljs @@ -148,7 +148,7 @@ scheme (.-protocol url) path (.-pathname url) domain (or (not-empty (.-host url)) - (if (string/starts-with? path "/") "" "/")) + (if (string/starts-with? path "/") "" "/")) encoded-new-path (apply uri-path-join-internal path segments)] (str scheme "//" domain encoded-new-path))) diff --git a/deps/db/src/logseq/db/common/delete_blocks.cljs b/deps/db/src/logseq/db/common/delete_blocks.cljs index ef2ea8b5b9..eccfb479a4 100644 --- a/deps/db/src/logseq/db/common/delete_blocks.cljs +++ b/deps/db/src/logseq/db/common/delete_blocks.cljs @@ -5,8 +5,8 @@ [logseq.common.util :as common-util] [logseq.common.util.block-ref :as block-ref] [logseq.common.util.page-ref :as page-ref] - [logseq.db.common.entity-util :as common-entity-util] [logseq.db.common.entity-plus :as entity-plus] + [logseq.db.common.entity-util :as common-entity-util] [logseq.db.frontend.entity-util :as entity-util])) (defn- replace-ref-with-deleted-block-title diff --git a/deps/db/src/logseq/db/common/entity_plus.cljc b/deps/db/src/logseq/db/common/entity_plus.cljc index 4a1d0bbc58..4f33540a74 100644 --- a/deps/db/src/logseq/db/common/entity_plus.cljc +++ b/deps/db/src/logseq/db/common/entity_plus.cljc @@ -95,8 +95,8 @@ (get (.-kv e) k) (if db-based? (let [result (lookup-entity e k default-value) - ;; Replace title for pages only, otherwise it'll recursively - ;; replace block id refs if there're cycle references of blocks + ;; Replace title for pages only, otherwise it'll recursively + ;; replace block id refs if there're cycle references of blocks refs (:block/refs e) result' (if (and (string? result) refs) (db-content/id-ref->title-ref result refs diff --git a/deps/db/src/logseq/db/common/initial_data.cljs b/deps/db/src/logseq/db/common/initial_data.cljs index a0aeefae34..c61f221513 100644 --- a/deps/db/src/logseq/db/common/initial_data.cljs +++ b/deps/db/src/logseq/db/common/initial_data.cljs @@ -344,6 +344,7 @@ :logseq.kv/graph-uuid :logseq.kv/latest-code-lang :logseq.kv/graph-backup-folder + :logseq.kv/graph-text-embedding-model-name :logseq.property/empty-placeholder]) favorites (when db-graph? (get-favorites db)) views (when db-graph? (get-views-data db)) diff --git a/deps/db/src/logseq/db/file_based/schema.cljs b/deps/db/src/logseq/db/file_based/schema.cljs index 32da7a81a5..b00c15c473 100644 --- a/deps/db/src/logseq/db/file_based/schema.cljs +++ b/deps/db/src/logseq/db/file_based/schema.cljs @@ -32,8 +32,8 @@ :block/path-refs {:db/valueType :db.type/ref :db/cardinality :db.cardinality/many} - :block/tags {:db/valueType :db.type/ref - :db/cardinality :db.cardinality/many} + :block/tags {:db/valueType :db.type/ref + :db/cardinality :db.cardinality/many} ;; which block this block links to, used for tag, embeds :block/link {:db/valueType :db.type/ref diff --git a/deps/db/src/logseq/db/frontend/db_ident.cljc b/deps/db/src/logseq/db/frontend/db_ident.cljc index ac05c1aba4..462487eb41 100644 --- a/deps/db/src/logseq/db/frontend/db_ident.cljc +++ b/deps/db/src/logseq/db/frontend/db_ident.cljc @@ -68,24 +68,24 @@ ([user-namespace name-string random-suffix?] {:pre [(or (keyword? user-namespace) (string? user-namespace)) (string? name-string) (boolean? random-suffix?)]} (assert (not (re-find #"^(logseq|block)(\.|$)" (name user-namespace))) - "New ident is not allowed to use an internal namespace") + "New ident is not allowed to use an internal namespace") (if #?(:org.babashka/nbb true :cljs (or (false? random-suffix?) - (and (exists? js/process) - (or js/process.env.REPEATABLE_IDENTS js/process.env.DB_GRAPH))) + (and (exists? js/process) + (or js/process.env.REPEATABLE_IDENTS js/process.env.DB_GRAPH))) :default false) ;; Used for contexts where we want repeatable idents e.g. tests and CLIs (keyword user-namespace - (->> (string/replace-first name-string #"^(\d)" "NUM-$1") + (->> (string/replace-first name-string #"^(\d)" "NUM-$1") ;; '-' must go last in char class - (filter #(re-find #"[0-9a-zA-Z*+!_'?<>=-]{1}" %)) - (apply str))) + (filter #(re-find #"[0-9a-zA-Z*+!_'?<>=-]{1}" %)) + (apply str))) (keyword user-namespace - (str - (->> (string/replace-first name-string #"^(\d)" "NUM-$1") + (str + (->> (string/replace-first name-string #"^(\d)" "NUM-$1") ;; '-' must go last in char class - (filter #(re-find #"[0-9a-zA-Z*+!_'?<>=-]{1}" %)) - (apply str)) - "-" - (rand-nth non-int-char-range) - (nano-id 7)))))) + (filter #(re-find #"[0-9a-zA-Z*+!_'?<>=-]{1}" %)) + (apply str)) + "-" + (rand-nth non-int-char-range) + (nano-id 7)))))) diff --git a/deps/db/src/logseq/db/frontend/kv_entity.cljs b/deps/db/src/logseq/db/frontend/kv_entity.cljs index 404b373e4a..89bea4c40a 100644 --- a/deps/db/src/logseq/db/frontend/kv_entity.cljs +++ b/deps/db/src/logseq/db/frontend/kv_entity.cljs @@ -26,6 +26,11 @@ RTC won't start when major-schema-versions don't match" :rtc {:rtc/ignore-entity-when-init-upload true :rtc/ignore-entity-when-init-download true}} :logseq.kv/graph-initial-schema-version {:doc "Graph's schema version when created"} + :logseq.kv/graph-last-gc-at {:doc "Last time graph gc at" :rtc {:rtc/ignore-entity-when-init-upload true - :rtc/ignore-entity-when-init-download true}}) + :rtc/ignore-entity-when-init-download true}} + + :logseq.kv/graph-text-embedding-model-name {:doc "Graph's text-embedding model name" + :rtc {:rtc/ignore-entity-when-init-upload true + :rtc/ignore-entity-when-init-download true}}) diff --git a/deps/db/src/logseq/db/frontend/property.cljs b/deps/db/src/logseq/db/frontend/property.cljs index de3be077c0..08194764ef 100644 --- a/deps/db/src/logseq/db/frontend/property.cljs +++ b/deps/db/src/logseq/db/frontend/property.cljs @@ -559,7 +559,14 @@ :schema {:type :class :cardinality :many :public? true} - :queryable? true}))) + :queryable? true} + :logseq.property.embedding/hnsw-label-updated-at {:title "HNSW label updated-at" + :schema {:type :datetime + :public? false + :hide? true} + :rtc {:rtc/ignore-attr-when-init-upload true + :rtc/ignore-attr-when-init-download true + :rtc/ignore-attr-when-syncing true}}))) (def db-attribute-properties "Internal properties that are also db schema attributes" @@ -611,7 +618,7 @@ "logseq.property.linked-references" "logseq.property.asset" "logseq.property.table" "logseq.property.node" "logseq.property.code" "logseq.property.repeat" "logseq.property.journal" "logseq.property.class" "logseq.property.view" - "logseq.property.user" "logseq.property.history"}) + "logseq.property.user" "logseq.property.history" "logseq.property.embedding"}) (defn logseq-property? "Determines if keyword is a logseq property" diff --git a/deps/db/src/logseq/db/frontend/schema.cljs b/deps/db/src/logseq/db/frontend/schema.cljs index 3970d568ca..99279b7017 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 "65.8")) +(def version (parse-schema-version "65.9")) (defn major-version "Return a number. diff --git a/deps/db/test/logseq/db/common/initial_data_test.cljs b/deps/db/test/logseq/db/common/initial_data_test.cljs index ff7230083f..eae8818106 100644 --- a/deps/db/test/logseq/db/common/initial_data_test.cljs +++ b/deps/db/test/logseq/db/common/initial_data_test.cljs @@ -6,8 +6,8 @@ [cljs.test :refer [deftest async use-fixtures is testing]] [datascript.core :as d] [logseq.db.common.initial-data :as common-initial-data] - [logseq.db.sqlite.build :as sqlite-build] [logseq.db.common.sqlite-cli :as sqlite-cli] + [logseq.db.sqlite.build :as sqlite-build] [logseq.db.sqlite.create-graph :as sqlite-create-graph] [logseq.db.test.helper :as db-test])) diff --git a/deps/db/test/logseq/db/sqlite/build_test.cljs b/deps/db/test/logseq/db/sqlite/build_test.cljs index e1e21ecff1..01fffe8a82 100644 --- a/deps/db/test/logseq/db/sqlite/build_test.cljs +++ b/deps/db/test/logseq/db/sqlite/build_test.cljs @@ -3,10 +3,10 @@ [datascript.core :as d] [logseq.common.util.page-ref :as page-ref] [logseq.db :as ldb] + [logseq.db.frontend.entity-util :as entity-util] [logseq.db.frontend.property :as db-property] [logseq.db.sqlite.build :as sqlite-build] - [logseq.db.test.helper :as db-test] - [logseq.db.frontend.entity-util :as entity-util])) + [logseq.db.test.helper :as db-test])) (deftest build-tags (let [conn (db-test/create-conn) diff --git a/deps/outliner/src/logseq/outliner/core.cljs b/deps/outliner/src/logseq/outliner/core.cljs index 8893abd98d..b78afb9caa 100644 --- a/deps/outliner/src/logseq/outliner/core.cljs +++ b/deps/outliner/src/logseq/outliner/core.cljs @@ -251,7 +251,7 @@ collapse-or-expand? (= outliner-op :collapse-expand-blocks) m* (cond-> (-> data' - (dissoc :block/children :block/meta :block/unordered + (dissoc :block/children :block/meta :block/unordered :block/path-refs :block.temp/ast-title :block.temp/ast-body :block/level :block.temp/load-status :block.temp/has-children?) common-util/remove-nils diff --git a/deps/outliner/src/logseq/outliner/pipeline.cljs b/deps/outliner/src/logseq/outliner/pipeline.cljs index 9dbb1f80ee..a232d245e2 100644 --- a/deps/outliner/src/logseq/outliner/pipeline.cljs +++ b/deps/outliner/src/logseq/outliner/pipeline.cljs @@ -50,7 +50,7 @@ (recur (into parent-refs (:block-ref-ids parent)) (:parent-id parent)) ;; exits when top-level parent is reached - parent-refs)))}) + (remove nil? parent-refs))))}) children-maps)] children-refs)) @@ -87,10 +87,13 @@ old-refs (if db-before (set (map :db/id (:block/path-refs (d/entity db-before (:db/id block))))) #{}) - new-refs (set (concat - (some-> (:db/id (:block/page block)) vector) - (map :db/id (:block/refs block)) - parents-refs)) + new-refs (->> + (concat + (some-> (:db/id (:block/page block)) vector) + (map :db/id (:block/refs block)) + parents-refs) + (remove nil?) + set) refs-changed? (not= old-refs new-refs) children (when refs-changed? (when-not page? diff --git a/deps/publishing/src/logseq/publishing/export.cljs b/deps/publishing/src/logseq/publishing/export.cljs index 44a0d53537..d764f3da14 100644 --- a/deps/publishing/src/logseq/publishing/export.cljs +++ b/deps/publishing/src/logseq/publishing/export.cljs @@ -1,14 +1,14 @@ (ns ^:node-only logseq.publishing.export "This electron only ns (for the main process) exports files from multiple locations to provide a complete publishing app" - (:require ["fs-extra" :as fse] + (:require ["fs" :as fs] + ["fs-extra" :as fse] ["path" :as node-path] - ["fs" :as fs] [promesa.core :as p])) (def ^:api js-files "js files from publishing release build" - (->> ["shared.js" "main.js" "code-editor.js" "excalidraw.js" "tldraw.js" "db-worker.js"] + (->> ["main.js" "code-editor.js" "excalidraw.js" "tldraw.js"] ;; Add source maps for all js files as it doesn't affect initial load time (mapcat #(vector % (str % ".map"))) vec)) diff --git a/deps/publishing/src/logseq/publishing/html.cljs b/deps/publishing/src/logseq/publishing/html.cljs index c45755f1d6..26df77563a 100644 --- a/deps/publishing/src/logseq/publishing/html.cljs +++ b/deps/publishing/src/logseq/publishing/html.cljs @@ -124,7 +124,7 @@ necessary db filtering" [:script {:src "static/js/react.production.min.js"}] [:script {:src "static/js/react-dom.production.min.js"}] [:script {:src "static/js/ui.js"}] - [:script {:src "static/js/shared.js"}] + [:script {:src "static/js/main-bundle.js"}] [:script {:src "static/js/main.js"}] ;; Deferring scripts above results in errors [:script {:defer true :src "static/js/interact.min.js"}] diff --git a/deps/shui/src/logseq/shui/util.cljs b/deps/shui/src/logseq/shui/util.cljs index 6ca81d2904..9e451a34fb 100644 --- a/deps/shui/src/logseq/shui/util.cljs +++ b/deps/shui/src/logseq/shui/util.cljs @@ -1,13 +1,13 @@ (ns logseq.shui.util (:require - [clojure.string :as s] - [rum.core :refer [use-state use-effect!] :as rum] - [logseq.shui.rum :as shui-rum] - [goog.object :refer [getValueByKeys] :as gobj] - [clojure.set :refer [rename-keys]] - [clojure.walk :as w] [cljs-bean.core :as bean] - [goog.dom :as gdom])) + [clojure.set :refer [rename-keys]] + [clojure.string :as s] + [clojure.walk :as w] + [goog.dom :as gdom] + [goog.object :refer [getValueByKeys] :as gobj] + [logseq.shui.rum :as shui-rum] + [rum.core :refer [use-state use-effect!] :as rum])) (goog-define NODETEST false) @@ -16,7 +16,7 @@ [input] (let [words (s/split input #"-") capitalize (->> (rest words) - (map #(apply str (s/upper-case (first %)) (rest %))))] + (map #(apply str (s/upper-case (first %)) (rest %))))] (apply str (first words) capitalize))) (defn map-keys->camel-case @@ -28,7 +28,7 @@ (let [convert-to-camel (fn [[key value]] (let [k (name key)] [(if-not (or (s/starts-with? k "data-") - (s/starts-with? k "aria-")) + (s/starts-with? k "aria-")) (kebab-case->camel-case k) k) value]))] (w/postwalk (fn [x] (if (map? x) @@ -37,7 +37,7 @@ x)] (into {} (map convert-to-camel new-map))) x)) - data))) + data))) (defn $LSUtils [] (aget js/window "LSUtils")) (def dev? (some-> ($LSUtils) (aget "isDev"))) @@ -45,11 +45,11 @@ (defn uuid-color [uuid-str] (some-> ($LSUtils) (aget "uniqolor") - (apply [uuid-str - #js {:saturation #js [55, 70], - :lightness 70, - :differencePoint 60}]) - (aget "color"))) + (apply [uuid-str + #js {:saturation #js [55, 70], + :lightness 70, + :differencePoint 60}]) + (aget "color"))) (defn get-path "Returns the component path." @@ -67,10 +67,10 @@ ;; we have to make sure to check if the children is sequential ;; as a list can be returned, eg: from a (for) new-children (if (and (not (nil? children#)) - (not (empty? children)) - (or (not (array? children#)) + (not (empty? children)) + (or (not (array? children#)) ;; maybe list children - (not (vector? type#)))) + (not (vector? type#)))) [children#] children#) ;; convert any options key value to a React element, if @@ -83,22 +83,22 @@ react-class (if dev? (react-class) react-class)] (apply js/React.createElement react-class ;; sablono html-to-dom-attrs does not work for nested hash-maps - (bean/->js (map-keys->camel-case new-options :html-props true)) - new-children))) + (bean/->js (map-keys->camel-case new-options :html-props true)) + new-children))) (defn use-atom-fn [a getter-fn setter-fn] (let [[val set-val] (use-state (getter-fn @a))] (use-effect! - (fn [] - (let [id (str (random-uuid))] - (add-watch a id (fn [_ _ prev-state next-state] - (let [prev-value (getter-fn prev-state) - next-value (getter-fn next-state)] - (when-not (= prev-value next-value) - (set-val next-value))))) - #(remove-watch a id))) - []) + (fn [] + (let [id (str (random-uuid))] + (add-watch a id (fn [_ _ prev-state next-state] + (let [prev-value (getter-fn prev-state) + next-value (getter-fn next-state)] + (when-not (= prev-value next-value) + (set-val next-value))))) + #(remove-watch a id))) + []) [val #(swap! a setter-fn %)])) (defn use-atom @@ -110,10 +110,10 @@ [] (let [*mounted (rum/use-ref false)] (use-effect! - (fn [] - (rum/set-ref! *mounted true) - #(rum/set-ref! *mounted false)) - []) + (fn [] + (rum/set-ref! *mounted true) + #(rum/set-ref! *mounted false)) + []) #(rum/deref *mounted))) (defn react->rum [c static?] diff --git a/externs/app.txt b/externs/app.txt new file mode 100644 index 0000000000..3591345ce0 --- /dev/null +++ b/externs/app.txt @@ -0,0 +1,86 @@ +require +DEBUG +convertFileSrc +getPlatform +handleError +isLoggingEnabled +isNative +isNativePlatform +isPluginAvailable +platform +pluginMethodNoop +registerPlugin +registerHelper +Pass +showHint +createRef +call +setState +forceUpdate +memo +createElement +render +unmount +createContext +createPortal +createRef +createElement +ref +path +current +useState +useReducer +useEffect +useLayoutEffect +useCallback +useMemo +useRef +renderToString +idb-keyval +newStore +isError +value +CodeMirror +over +forEachNode +on +getTextArea +setUser +nativeEvent +which +multipliedBy +minus +plus +isInteger +isPositive +isLessThan +toNumber +modulo +exponentiatedBy +dividedBy +multipliedBy +negated +isZero +isGreaterThanOrEqualTo +isLessThan +shiftedBy +s +dividedToIntegerBy +abs +toFraction +e +getCursor +getLineTokens +getTokenAt +getValue +completionActive +state +mime +getWrapperElement +doc +lastLine +getLine +setOption +string +dispose +path diff --git a/externs/mobile.txt b/externs/mobile.txt new file mode 100644 index 0000000000..c26926d170 --- /dev/null +++ b/externs/mobile.txt @@ -0,0 +1,87 @@ +require +DEBUG +convertFileSrc +getPlatform +handleError +isLoggingEnabled +isNative +isNativePlatform +isPluginAvailable +platform +pluginMethodNoop +registerPlugin +registerHelper +Pass +showHint +createRef +call +setState +forceUpdate +memo +createElement +render +unmount +createContext +createPortal +createRef +createElement +ref +path +current +useState +useReducer +useEffect +useLayoutEffect +useCallback +useMemo +useRef +renderToString +idb-keyval +newStore +isError +value +CodeMirror +over +forEachNode +on +getTextArea +setUser +nativeEvent +which +multipliedBy +minus +plus +isInteger +isPositive +isLessThan +toNumber +modulo +exponentiatedBy +dividedBy +multipliedBy +negated +isZero +isGreaterThanOrEqualTo +isLessThan +shiftedBy +s +dividedToIntegerBy +abs +toFraction +e +getCursor +getLineTokens +getTokenAt +getValue +completionActive +state +mime +getWrapperElement +doc +lastLine +getLine +setOption +string +dispose +path +base64String diff --git a/gulpfile.js b/gulpfile.js index 4fed6854f5..d1b72420fa 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -78,7 +78,7 @@ const common = { 'node_modules/@isomorphic-git/lightning-fs/dist/lightning-fs.min.js', 'packages/amplify/dist/amplify.js', 'packages/ui/dist/ui/ui.js', - 'node_modules/@logseq/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', + 'node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', 'node_modules/react/umd/react.production.min.js', 'node_modules/react/umd/react.development.js', 'node_modules/react-dom/umd/react-dom.production.min.js', @@ -129,7 +129,7 @@ const common = { 'node_modules/photoswipe/dist/umd/*.js', 'packages/amplify/dist/amplify.js', 'packages/ui/dist/ui/ui.js', - 'node_modules/@logseq/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', + 'node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', ]).pipe(gulp.dest(path.join(outputPath, 'mobile', 'js'))), () => gulp.src([ 'packages/ui/dist/ionic/*.js', diff --git a/package.json b/package.json index 97814c2cee..e5ea189bde 100644 --- a/package.json +++ b/package.json @@ -36,27 +36,36 @@ "postcss-import": "15.0.0", "postcss-import-ext-glob": "2.0.1", "postcss-nested": "6.0.0", + "process": "^0.11.10", "purgecss": "4.0.2", "semver": "7.5.2", - "shadow-cljs": "2.26.0", + "shadow-cljs": "2.28.23", "stylelint": "^13.8.0", "stylelint-config-standard": "^20.0.0", "tailwindcss": "3.3.5", "tailwindcss-animate": "^1.0.7", - "typescript": "^4.4.3" + "typescript": "^4.4.3", + "webpack": "^5.98.0", + "webpack-cli": "^6.0.1" }, "scripts": { - "watch": "run-p gulp:watch cljs:watch", - "electron-watch": "run-p gulp:watch cljs:electron-watch", - "app-watch": "run-p gulp:watch cljs:app-watch", - "dev": "run-p gulp:watch gulp:mobile-watch cljs:dev-watch", - "release": "run-s gulp:build cljs:release", - "release-app": "run-s gulp:build cljs:release-app", - "release-mobile": "run-s gulp:buildMobile cljs:release-mobile", - "dev-release-app": "run-s gulp:build cljs:dev-release-app", + "watch": "run-p gulp:watch cljs:watch webpack-app-watch", + "electron-watch": "run-p gulp:watch cljs:electron-watch webpack-app-watch", + "app-watch": "run-p gulp:watch cljs:app-watch webpack-app-watch", + "mobile-watch": "run-p gulp:mobile-watch cljs:mobile-watch webpack-mobile-watch", + "dev": "run-p gulp:watch gulp:mobile-watch cljs:dev-watch webpack", + "release": "run-s gulp:build cljs:release webpack-app-build", + "release-app": "run-s gulp:build cljs:release-app webpack-app-build", + "release-mobile": "run-s gulp:buildMobile cljs:release-mobile webpack-mobile-build", + "dev-release-app": "run-s gulp:build cljs:dev-release-app webpack-app-build", "dev-electron-app": "gulp electron", - "release-electron": "run-s gulp:build && gulp electronMaker", + "release-electron": "run-s gulp:build && gulp electronMaker webpack-app-build", "debug-electron": "cd static/ && yarn electron:debug", + "webpack": "webpack --watch", + "webpack-app-watch": "npx webpack --watch --config-name app", + "webpack-mobile-watch": "npx webpack --watch --config-name mobile", + "webpack-app-build": "npx webpack build --config-name app", + "webpack-mobile-build": "npx webpack build --config-name mobile", "sync-android-release": "yarn clean && yarn release-mobile && rm -rf ./static/mobile/**/*.map && npx cap sync android", "sync-ios-release": "yarn clean && yarn release-mobile && rm -rf ./static/mobile/**/*.map && npx cap sync ios", "clean": "gulp clean", @@ -68,27 +77,27 @@ "gulp:buildMobile": "cross-env NODE_ENV=production gulp buildMobile", "css:build": "postcss tailwind.all.css -o static/css/style.css --verbose --env production", "css:watch": "cross-env TAILWIND_MODE=watch postcss tailwind.all.css -o static/css/style.css --verbose --watch", - "cljs:watch": "clojure -M:cljs watch app electron", + "cljs:watch": "clojure -M:cljs watch app workers electron", "cljs:storybook-watch": "clojure -M:cljs watch stories-dev", "gulp:mobile-watch": "gulp watchMobile", "css:mobile-build": "postcss tailwind.mobile.css -o static/mobile/style.css --verbose --env production", "css:mobile-watch": "cross-env TAILWIND_MODE=watch postcss tailwind.mobile.css -o static/mobile/style.css --verbose --watch", - "cljs:mobile-watch": "clojure -M:cljs watch mobile", - "cljs:release-mobile": "clojure -M:cljs release mobile", - "cljs:dev-watch": "clojure -M:cljs watch app electron mobile", - "cljs:app-watch": "clojure -M:cljs watch app", - "cljs:electron-watch": "clojure -M:cljs watch app electron --config-merge \"{:asset-path \\\"./js\\\"}\"", - "cljs:release": "clojure -M:cljs release app publishing electron", - "cljs:release-electron": "clojure -M:cljs release app electron --debug && clojure -M:cljs release publishing", - "cljs:release-app": "clojure -M:cljs release app", - "cljs:release-publishing": "clojure -M:cljs release publishing", + "cljs:mobile-watch": "clojure -M:cljs watch mobile workers --config-merge \"{:output-dir \\\"./static/mobile/js\\\" :asset-path \\\"/static/mobile/js\\\" :release {:asset-path \\\"http://localhost\\\"}}\"", + "cljs:release-mobile": "clojure -M:cljs release mobile workers --config-merge \"{:output-dir \\\"./static/mobile/js\\\" :asset-path \\\"/static/mobile/js\\\" :release {:asset-path \\\"http://localhost\\\"}}\"", + "cljs:dev-watch": "clojure -M:cljs watch app workers electron mobile", + "cljs:app-watch": "clojure -M:cljs watch app workers", + "cljs:electron-watch": "clojure -M:cljs watch app workers electron --config-merge \"{:asset-path \\\"./js\\\"}\"", + "cljs:release": "clojure -M:cljs release app workers publishing electron", + "cljs:release-electron": "clojure -M:cljs release app workers electron --debug && clojure -M:cljs release publishing", + "cljs:release-app": "clojure -M:cljs release app workers", + "cljs:release-publishing": "clojure -M:cljs release app publishing", "cljs:test": "clojure -M:test compile test", "cljs:run-test": "node static/tests.js", - "cljs:dev-release-app": "clojure -M:cljs release app --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\"", - "cljs:dev-release-electron": "clojure -M:cljs release app electron --debug --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\" && clojure -M:cljs release publishing", - "cljs:debug": "clojure -M:cljs release app --debug", - "cljs:report": "clojure -M:cljs run shadow.cljs.build-report app report.html", - "cljs:build-electron": "clojure -A:cljs compile app electron", + "cljs:dev-release-app": "clojure -M:cljs release app workers --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\"", + "cljs:dev-release-electron": "clojure -M:cljs release app workers electron --debug --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\" && clojure -M:cljs release publishing", + "cljs:debug": "clojure -M:cljs release app workers --debug", + "cljs:report": "clojure -M:cljs run shadow.cljs.build-report app workers report.html", + "cljs:build-electron": "clojure -A:cljs compile app workers electron", "cljs:lint": "clojure -M:clj-kondo --parallel --lint src --cache false", "ios:dev": "cross-env PLATFORM=ios gulp cap", "android:dev": "cross-env PLATFORM=android gulp cap", @@ -121,6 +130,7 @@ "@excalidraw/excalidraw": "0.16.1", "@glidejs/glide": "^3.6.0", "@highlightjs/cdn-assets": "10.4.1", + "@huggingface/transformers": "^3.6.3", "@ionic/core": "^8.5.4", "@ionic/react": "^8.5.4", "@isomorphic-git/lightning-fs": "^4.6.0", @@ -129,10 +139,10 @@ "@js-joda/timezone": "2.5.0", "@logseq/diff-merge": "^0.2.2", "@logseq/react-tweet-embed": "1.3.1-1", - "@logseq/sqlite-wasm": "=0.1.0", "@radix-ui/colors": "^0.1.8", "@sentry/react": "^6.18.2", "@sentry/tracing": "^6.18.2", + "@sqlite.org/sqlite-wasm": "^3.50.3-build1", "@tabler/icons-react": "^2.47.0", "@tabler/icons-webfont": "^2.47.0", "@tippyjs/react": "4.2.5", @@ -154,6 +164,7 @@ "fuse.js": "6.4.6", "grapheme-splitter": "1.0.4", "graphology": "0.20.0", + "hnswlib-wasm": "^0.8.2", "html2canvas": "^1.4.1", "ignore": "5.1.8", "inter-ui": "^3.19.3", @@ -174,7 +185,6 @@ "react-dom": "18.3.1", "react-grid-layout": "0.16.6", "react-intersection-observer": "^9.3.5", - "react-resize-context": "3.0.0", "react-textarea-autosize": "8.3.3", "react-transition-group": "4.3.0", "react-virtuoso": "4.12.5", @@ -185,6 +195,7 @@ "tailwind-capitalize-first-letter": "^1.0.4", "threads": "1.6.5", "url": "^0.11.0", + "util": "^0.12.5", "yargs-parser": "20.2.4" }, "resolutions": { diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000000..73d3015898 --- /dev/null +++ b/public/index.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Logseq: "A privacy-first platform for knowledge management and collaboration." + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/index.html b/resources/index.html index 3ca6e1f172..67e94ede31 100644 --- a/resources/index.html +++ b/resources/index.html @@ -58,8 +58,8 @@ const portal = new MagicPortal(worker); + - diff --git a/resources/mobile/index.html b/resources/mobile/index.html index 78543706d3..b175f4782b 100644 --- a/resources/mobile/index.html +++ b/resources/mobile/index.html @@ -36,7 +36,7 @@ const portal = new MagicPortal(worker); - +