mirror of
https://github.com/logseq/logseq.git
synced 2026-04-30 00:46:23 +00:00
Useful for graphs with existing ontologies to avoid noisy and needless exporting. Also update related scripts and noted that create script has always been able to also update
64 lines
2.4 KiB
Clojure
64 lines
2.4 KiB
Clojure
(ns export-graph
|
|
"A script that exports a graph to a sqlite.build EDN file"
|
|
(:require ["fs" :as fs]
|
|
["os" :as os]
|
|
["path" :as node-path]
|
|
[babashka.cli :as cli]
|
|
[clojure.edn :as edn]
|
|
[clojure.pprint :as pprint]
|
|
[clojure.string :as string]
|
|
#_:clj-kondo/ignore
|
|
[logseq.db.sqlite.cli :as sqlite-cli]
|
|
[logseq.db.sqlite.export :as sqlite-export]
|
|
[nbb.core :as nbb]))
|
|
|
|
(defn- resolve-path
|
|
"If relative path, resolve with $ORIGINAL_PWD"
|
|
[path]
|
|
(if (node-path/isAbsolute path)
|
|
path
|
|
(node-path/join (or js/process.env.ORIGINAL_PWD ".") path)))
|
|
|
|
(defn- get-dir-and-db-name
|
|
"Gets dir and db name for use with open-db!"
|
|
[graph-dir]
|
|
(if (string/includes? graph-dir "/")
|
|
(let [graph-dir'
|
|
(node-path/join (or js/process.env.ORIGINAL_PWD ".") graph-dir)]
|
|
((juxt node-path/dirname node-path/basename) graph-dir'))
|
|
[(node-path/join (os/homedir) "logseq" "graphs") graph-dir]))
|
|
|
|
(def spec
|
|
"Options spec"
|
|
{:help {:alias :h
|
|
:desc "Print help"}
|
|
:include-timestamps? {:alias :t
|
|
:desc "Include timestamps in export"}
|
|
:file {:alias :f
|
|
:desc "Saves edn to file"}
|
|
:exclude-namespaces {:alias :e
|
|
:coerce #{}
|
|
:desc "Namespaces to exclude from properties and classes"}
|
|
:export-options {:alias :E
|
|
:desc "Raw options map to pass to export"}})
|
|
|
|
(defn -main [args]
|
|
(let [{options :opts args' :args} (cli/parse-args args {:spec spec})
|
|
graph-dir (first args')
|
|
_ (when (or (nil? graph-dir) (:help options))
|
|
(println (str "Usage: $0 GRAPH-NAME [& ARGS] [OPTIONS]\nOptions:\n"
|
|
(cli/format-opts {:spec spec})))
|
|
(js/process.exit 1))
|
|
[dir db-name] (get-dir-and-db-name graph-dir)
|
|
conn (sqlite-cli/open-db! dir db-name)
|
|
export-options (merge (select-keys options [:include-timestamps? :exclude-namespaces])
|
|
(edn/read-string (:export-options options)))
|
|
export-map (sqlite-export/build-export @conn {:export-type :graph :graph-options export-options})]
|
|
(when (:file options)
|
|
(fs/writeFileSync (resolve-path (:file options))
|
|
(with-out-str (pprint/pprint export-map))))
|
|
(pprint/pprint export-map)))
|
|
|
|
(when (= nbb/*file* (nbb/invoked-file))
|
|
(-main *command-line-args*))
|