enhance: start CLI dep and implement list command

Also move common db graph list to shared ns and move common prefix
constants to common-config
This commit is contained in:
Gabriel Horner
2025-07-18 14:08:46 -04:00
committed by Gabriel Horner
parent 12e1f35cc4
commit 887d91d2ac
14 changed files with 438 additions and 44 deletions

13
deps/cli/cli.mjs vendored Normal file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/env node
import { loadFile, addClassPath } from '@logseq/nbb-logseq'
import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';
const __dirname = fileURLToPath(dirname(import.meta.url));
addClassPath(resolve(__dirname, 'src'));
const { main } = await loadFile(resolve(__dirname, 'src/logseq/cli.cljs'));
// Expects to be called as node X.js ...
const args = process.argv.slice(2)
main.apply(null, args);

6
deps/cli/nbb.edn vendored Normal file
View File

@@ -0,0 +1,6 @@
{:paths ["src"]
:deps
{logseq/outliner
{:local/root "../outliner"}
io.github.nextjournal/nbb-test-runner
{:git/sha "b379325cfa5a3306180649da5de3bf5166414e71"}}}

14
deps/cli/package.json vendored Normal file
View File

@@ -0,0 +1,14 @@
{
"name": "@logseq/cli",
"version": "0.1.0",
"description": "Logseq CLI",
"bin": {
"logseq": "cli.mjs"
},
"license": "MIT",
"dependencies": {
"@logseq/nbb-logseq": "logseq/nbb-logseq#feat-db-v24",
"better-sqlite3": "11.10.0",
"fs-extra": "^11.3.0"
}
}

31
deps/cli/src/logseq/cli.cljs vendored Normal file
View File

@@ -0,0 +1,31 @@
(ns logseq.cli
"Main ns for Logseq CLI"
(:require [babashka.cli :as cli]
[clojure.string :as string]
[logseq.cli.commands.graph :as cli-graph]))
;; TODO
(defn- query [m]
(prn (assoc m :fn :query)))
(defn- format-commands [{:keys [table]}]
(let [table (mapv (fn [{:keys [cmds desc]}]
(cond-> [(string/join " " cmds)]
desc (conj desc)))
(filter (comp seq :cmds) table))]
(cli/format-table {:rows table})))
(declare table)
(defn- help [_m]
(println "Usage: logseq [command] [options]\n\nCommands:")
(println (format-commands {:table table})))
(def table
[{:cmds ["list"] :fn cli-graph/list-graphs :desc "List graphs"}
{:cmds ["query"] :fn query :args->opts [:graph] :desc "Query graph"}
{:cmds [] :fn help}])
(defn -main [& args]
(cli/dispatch table args {:coerce {:depth :long}}))
#js {:main -main}

View File

@@ -0,0 +1,22 @@
(ns logseq.cli.commands.graph
"Graph related commands"
(:require ["path" :as node-path]
[clojure.string :as string]
[logseq.cli.common.graph :as cli-common-graph]
[logseq.common.config :as common-config]))
(defn list-graphs
[]
(let [[db-graphs* file-graphs*] ((juxt filter remove) #(string/starts-with? % common-config/db-version-prefix)
(cli-common-graph/get-db-based-graphs))
db-graphs (->> db-graphs*
(map #(string/replace-first % common-config/db-version-prefix ""))
sort)
file-graphs (->> file-graphs*
(map #(string/replace-first % common-config/file-version-prefix ""))
(map node-path/basename)
sort)]
(println "DB Graphs:")
(println (string/join "\n" db-graphs))
(println "\nFile Graphs:")
(println (string/join "\n" file-graphs))))

View File

@@ -0,0 +1,32 @@
(ns logseq.cli.common.graph
"Graph related fns shared between CLI and electron"
(:require ["fs-extra" :as fs-extra]
["os" :as os]
["path" :as node-path]
[clojure.string :as string]
[logseq.common.config :as common-config]
[logseq.common.graph :as common-graph]))
(defn graph-name->path
[graph-name]
(when graph-name
(-> graph-name
(string/replace "+3A+" ":")
(string/replace "++" "/"))))
(defn- get-db-based-graphs-dir
[]
(let [dir (node-path/join (os/homedir) "logseq" "graphs")]
(fs-extra/ensureDirSync dir)
dir))
(defn get-db-based-graphs
[]
(let [dir (get-db-based-graphs-dir)]
(->> (common-graph/read-directories dir)
(remove (fn [s] (= s common-config/unlinked-graphs-dir)))
(map graph-name->path)
(map (fn [s]
(if (string/starts-with? s common-config/file-version-prefix)
s
(str common-config/db-version-prefix s)))))))

296
deps/cli/yarn.lock vendored Normal file
View File

@@ -0,0 +1,296 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@logseq/nbb-logseq@logseq/nbb-logseq#feat-db-v24":
version "1.2.173-feat-db-v24"
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/3d5b78b0382c7253bf9874c1f38586dd338434f4"
dependencies:
import-meta-resolve "^4.1.0"
base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
better-sqlite3@11.10.0:
version "11.10.0"
resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.10.0.tgz#2b1b14c5acd75a43fd84d12cc291ea98cef57d98"
integrity sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==
dependencies:
bindings "^1.5.0"
prebuild-install "^7.1.1"
bindings@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
dependencies:
file-uri-to-path "1.0.0"
bl@^4.0.3:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
dependencies:
buffer "^5.5.0"
inherits "^2.0.4"
readable-stream "^3.4.0"
buffer@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
dependencies:
base64-js "^1.3.1"
ieee754 "^1.1.13"
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
decompress-response@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
dependencies:
mimic-response "^3.1.0"
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
detect-libc@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8"
integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.5"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c"
integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==
dependencies:
once "^1.4.0"
expand-template@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
fs-extra@^11.3.0:
version "11.3.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d"
integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
github-from-package@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
import-meta-resolve@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706"
integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==
inherits@^2.0.3, inherits@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
dependencies:
universalify "^2.0.0"
optionalDependencies:
graceful-fs "^4.1.6"
mimic-response@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
minimist@^1.2.0, minimist@^1.2.3:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
napi-build-utils@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e"
integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==
node-abi@^3.3.0:
version "3.75.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.75.0.tgz#2f929a91a90a0d02b325c43731314802357ed764"
integrity sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==
dependencies:
semver "^7.3.5"
once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
dependencies:
wrappy "1"
prebuild-install@^7.1.1:
version "7.1.3"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec"
integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==
dependencies:
detect-libc "^2.0.0"
expand-template "^2.0.3"
github-from-package "0.0.0"
minimist "^1.2.3"
mkdirp-classic "^0.5.3"
napi-build-utils "^2.0.0"
node-abi "^3.3.0"
pump "^3.0.0"
rc "^1.2.7"
simple-get "^4.0.0"
tar-fs "^2.0.0"
tunnel-agent "^0.6.0"
pump@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d"
integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
rc@^1.2.7:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
dependencies:
deep-extend "^0.6.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
readable-stream@^3.1.1, readable-stream@^3.4.0:
version "3.6.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
safe-buffer@^5.0.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
semver@^7.3.5:
version "7.7.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
simple-concat@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
simple-get@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
dependencies:
decompress-response "^6.0.0"
once "^1.3.1"
simple-concat "^1.0.0"
string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
dependencies:
safe-buffer "~5.2.0"
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
tar-fs@^2.0.0:
version "2.1.3"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.3.tgz#fb3b8843a26b6f13a08e606f7922875eb1fbbf92"
integrity sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==
dependencies:
chownr "^1.1.1"
mkdirp-classic "^0.5.2"
pump "^3.0.0"
tar-stream "^2.1.4"
tar-stream@^2.1.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
dependencies:
bl "^4.0.3"
end-of-stream "^1.4.1"
fs-constants "^1.0.0"
inherits "^2.0.3"
readable-stream "^3.1.1"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
dependencies:
safe-buffer "^5.0.1"
universalify@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
util-deprecate@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==

View File

@@ -30,7 +30,11 @@
(defonce asset-protocol "assets://")
(defonce db-version-prefix "logseq_db_")
(defonce file-version-prefix "logseq_local_")
(defonce local-assets-dir "assets")
(defonce unlinked-graphs-dir "Unlinked graphs")
(defonce favorites-page-name "$$$favorites")
(defonce views-page-name "$$$views")

View File

@@ -4,7 +4,8 @@
(:require ["path" :as node-path]
[clojure.string :as string]
[datascript.core :as d]
[logseq.db.sqlite.util :as sqlite-util]))
[logseq.db.sqlite.util :as sqlite-util]
[logseq.common.config :as common-config]))
(defn create-kvs-table!
"Creates a sqlite table for use with datascript.storage if one doesn't exist"
@@ -17,16 +18,14 @@
(or (d/restore-conn storage)
(d/create-conn schema {:storage storage})))
(defonce file-version-prefix "logseq_local_")
(defn local-file-based-graph?
[s]
(and (string? s)
(string/starts-with? s file-version-prefix)))
(string/starts-with? s common-config/file-version-prefix)))
(defn sanitize-db-name
[db-name]
(if (string/starts-with? db-name file-version-prefix)
(if (string/starts-with? db-name common-config/file-version-prefix)
(-> db-name
(string/replace ":" "+3A+")
(string/replace "/" "++"))

View File

@@ -13,7 +13,7 @@
[logseq.db.frontend.property :as db-property]
[logseq.db.frontend.property.type :as db-property-type]))
(defonce db-version-prefix "logseq_db_")
(defonce db-version-prefix common-config/db-version-prefix)
(def ^:private write-handlers (cljs-bean.transit/writer-handlers))
(def ^:private read-handlers {})

View File

@@ -24,7 +24,7 @@
(defn kondo-git-changes
"Run clj-kondo across dirs and only for files that git diff detects as unstaged changes"
[]
(let [kondo-dirs ["src" "deps/common" "deps/db" "deps/graph-parser" "deps/outliner" "deps/publishing"]
(let [kondo-dirs ["src" "deps/common" "deps/db" "deps/graph-parser" "deps/outliner" "deps/publishing" "deps/cli"]
dir-regex (re-pattern (str "^(" (string/join "|" kondo-dirs) ")"))
dir-to-files (->> (shell {:out :string} "git diff --name-only")
:out

View File

@@ -3,6 +3,7 @@
(:require ["electron" :refer [app]]
["fs-extra" :as fs]
["path" :as node-path]
[logseq.common.config :as common-config]
[logseq.db.common.sqlite :as common-sqlite]))
(defn get-graphs-dir
@@ -33,13 +34,11 @@
(when (fs/existsSync db-path)
(fs/readFileSync db-path))))
(def unlinked-graphs-dir "Unlinked graphs")
(defn unlink-graph!
[repo]
(let [db-name (common-sqlite/sanitize-db-name repo)
path (node-path/join (get-graphs-dir) db-name)
unlinked (node-path/join (get-graphs-dir) unlinked-graphs-dir)
unlinked (node-path/join (get-graphs-dir) common-config/unlinked-graphs-dir)
new-path (node-path/join unlinked db-name)
new-path-exists? (fs/existsSync new-path)
new-path' (if new-path-exists?

View File

@@ -30,6 +30,7 @@
[electron.utils :as utils]
[electron.window :as win]
[goog.functions :refer [debounce]]
[logseq.cli.common.graph :as cli-common-graph]
[logseq.common.graph :as common-graph]
[logseq.db :as ldb]
[logseq.db.common.sqlite :as common-sqlite]
@@ -204,51 +205,28 @@
(bean/->js {:path path
:files files})))
(defn- graph-name->path
[graph-name]
(when graph-name
(-> graph-name
(string/replace "+3A+" ":")
(string/replace "++" "/"))))
(defn- get-graphs-dir
(defn- get-file-graphs-dir
"Get cache directory for file graphs"
[]
(let [dir (if utils/ci?
(.resolve node-path js/__dirname "../tmp/graphs")
(.join node-path (.homedir os) ".logseq" "graphs"))]
(node-path/join (os/homedir) ".logseq" "graphs"))]
(fs-extra/ensureDirSync dir)
dir))
(defn- get-db-based-graphs-dir
[]
(let [dir (.join node-path (.homedir os) "logseq" "graphs")]
(fs-extra/ensureDirSync dir)
dir))
(defn- get-file-based-graphs
(defn get-file-based-graphs
"Returns all graph names in the cache directory (starting with `logseq_local_`)"
[]
(let [dir (get-graphs-dir)]
(let [dir (get-file-graphs-dir)]
(->> (common-graph/readdir dir)
(remove #{dir})
(map #(node-path/basename % ".transit"))
(map graph-name->path))))
(map cli-common-graph/graph-name->path))))
(defn- get-db-based-graphs
[]
(let [dir (get-db-based-graphs-dir)]
(->> (common-graph/read-directories dir)
(remove (fn [s] (= s db/unlinked-graphs-dir)))
(map graph-name->path)
(map (fn [s]
(if (string/starts-with? s common-sqlite/file-version-prefix)
s
(str sqlite-util/db-version-prefix s)))))))
(defn- get-graphs
(defn get-graphs
"Returns all graph names"
[]
(let [db-graphs (get-db-based-graphs)
(let [db-graphs (cli-common-graph/get-db-based-graphs)
file-graphs (get-file-based-graphs)]
(distinct (concat db-graphs file-graphs))))
@@ -297,7 +275,7 @@
(defmethod handle :deleteGraph [_window [_ graph graph-name _db-based?]]
(when graph-name
(db/unlink-graph! graph)
(let [old-transit-path (node-path/join (get-graphs-dir) (str (common-sqlite/sanitize-db-name graph) ".transit"))]
(let [old-transit-path (node-path/join (get-file-graphs-dir) (str (common-sqlite/sanitize-db-name graph) ".transit"))]
(when (fs/existsSync old-transit-path)
(fs/unlinkSync old-transit-path)))))
@@ -314,7 +292,7 @@
(defn clear-cache!
[window]
(let [graphs-dir (get-graphs-dir)]
(let [graphs-dir (get-file-graphs-dir)]
(fs-extra/removeSync graphs-dir))
(let [path (.getPath ^object app "userData")]

View File

@@ -343,7 +343,7 @@
(defonce idb-db-prefix "logseq-db/")
(defonce local-db-prefix "logseq_local_")
(defonce local-handle "handle")
(defonce db-version-prefix sqlite-util/db-version-prefix)
(defonce db-version-prefix common-config/db-version-prefix)
(defn db-graph-name
[repo-with-prefix]