Files
logseq/src/main/frontend/core.cljs
Gabriel Horner 7a40761eca refactor: organize worker namespaces and lint them
Organize them to live under src/main/frontend/worker and add a lint to ensure
that common code with frontend is only under frontend/common/.
Add a linter to ensure that worker doesn't depend on frontend.
Motivated to fix after recent worker breakage fixed by
75463c4df4
2024-08-08 23:01:57 -04:00

80 lines
2.5 KiB
Clojure

(ns frontend.core
"Entry ns for the mobile, browser and electron frontend apps"
{:dev/always true}
(:require [frontend.common-keywords]
[frontend.components.plugins :as plugins]
[frontend.config :as config]
[frontend.fs.sync :as sync]
[frontend.handler :as handler]
[frontend.handler.plugin :as plugin-handler]
[frontend.handler.route :as route-handler]
[frontend.log]
[frontend.page :as page]
[frontend.routes :as routes]
[frontend.common.schema-register :as sr]
[frontend.spec]
[logseq.api]
[malli.dev.cljs :as md]
[reitit.frontend :as rf]
[reitit.frontend.easy :as rfe]
[rum.core :as rum]))
(defn set-router!
[]
(rfe/start!
(rf/router (plugins/hook-custom-routes routes/routes) nil)
(fn [route]
(route-handler/set-route-match! route)
(plugin-handler/hook-plugin-app
:route-changed (select-keys route [:template :path :parameters])))
;; set to false to enable HistoryAPI
{:use-fragment true}))
(defn display-welcome-message
[]
(js/console.log
"
Welcome to Logseq!
If you encounter any problem, feel free to file an issue on GitHub (https://github.com/logseq/logseq)
or join our forum (https://discuss.logseq.com).
.____
| | ____ ____ ______ ____ ______
| | / _ \\ / ___\\/ ___// __ \\/ ____/
| |__( <_> ) /_/ >___ \\\\ ___< <_| |
|_______ \\____/\\___ /____ >\\___ >__ |
\\/ /_____/ \\/ \\/ |__|
"))
(defn ^:export start []
(when config/dev?
(md/start!))
(frontend.common.schema-register/init)
(when-let [node (.getElementById js/document "root")]
(set-router!)
(rum/mount (page/current-page) node)
(display-welcome-message)
;; NO repo state here, better not add init logic here
(when config/dev?
(js/setTimeout #(sync/<sync-start) 1000))))
(defn ^:export init []
;; init is called ONCE when the page loads
;; this is called in the index.html and must be exported
;; so it is available even in :advanced release builds
(plugin-handler/setup!
#(handler/start! start)))
(defn ^:export stop []
;; stop is called before any code is reloaded
;; this is controlled by :before-load in the config
(handler/stop!)
(when config/dev?
(sync/<sync-stop))
(js/console.log "stop"))
(defn ^:export delay-remount
[delay]
(js/setTimeout #(start) delay))