浏览代码

fix(dev): import cljs runtime scripts for parser worker base on file://

charlie 4 年之前
父节点
当前提交
c4a92c2657
共有 5 个文件被更改,包括 84 次插入11 次删除
  1. 1 1
      package.json
  2. 61 0
      resources/index.html
  3. 15 9
      src/electron/electron/core.cljs
  4. 1 1
      src/main/frontend/util/pool.cljs
  5. 6 0
      templates/patch.parser.woker.js

+ 1 - 1
package.json

@@ -45,7 +45,7 @@
         "css:build": "postcss tailwind.all.css -o static/css/style.css --verbose --env production",
         "css:watch": "TAILWIND_MODE=watch postcss tailwind.all.css -o static/css/style.css --verbose --watch",
         "cljs:watch": "clojure -M:cljs watch parser-worker app electron",
-        "cljs:electron-watch": "clojure -M:cljs watch parser-worker app electron",
+        "cljs:electron-watch": "PWD=$(pwd) PATCH_PARSER_WORKER=$(cat \"./templates/patch.parser.woker.js\" | sed -e \"s#PWD_ROOT#${PWD}#g\") clojure -M:cljs watch parser-worker app electron",
         "cljs:release": "clojure -M:cljs release parser-worker app publishing electron",
         "cljs:test": "clojure -M:test compile test",
         "cljs:run-test": "node static/tests.js",

+ 61 - 0
resources/index.html

@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta content="minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no" name="viewport">
+  <link href="./css/style.css" rel="stylesheet" type="text/css">
+  <link href="./img/logo.png" rel="shortcut icon" type="image/png">
+  <link href="./img/logo.png" rel="shortcut icon" sizes="192x192">
+  <link href="./img/logo.png" rel="apple-touch-icon">
+  <meta content="Logseq" name="apple-mobile-web-app-title">
+  <meta content="yes" name="apple-mobile-web-app-capable">
+  <meta content="yes" name="apple-touch-fullscreen">
+  <meta content="black-translucent" name="apple-mobile-web-app-status-bar-style">
+  <meta content="yes" name="mobile-web-app-capable">
+  <meta content="summary" name="twitter:card">
+  <meta content="A privacy-first, open-source platform for knowledge management and collaboration." name="twitter:description">
+  <meta content="@logseq" name="twitter:site">
+  <meta content="A privacy-first, open-source platform for knowledge management and collaboration." name="twitter:title">
+  <meta content="https://asset.logseq.com/static/img/logo.png" name="twitter:image:src">
+  <meta content="A privacy-first, open-source platform for knowledge management and collaboration." name="twitter:image:alt">
+  <meta content="A privacy-first, open-source platform for knowledge management and collaboration." property="og:title">
+  <meta content="site" property="og:type">
+  <meta content="https://logseq.com" property="og:url">
+  <meta content="https://asset.logseq.com/static/img/logo.png" property="og:image">
+  <meta content="A privacy-first, open-source platform for knowledge management and collaboration." property="og:description">
+  <title>Logseq: A privacy-first platform for knowledge management and collaboration</title>
+  <meta content="logseq" property="og:site_name">
+  <meta content="A privacy-first, open-source platform for knowledge management and collaboration." name="description">
+</head>
+<body>
+<div id="root"></div>
+<script>window.__LSP__HOST__ = true</script>
+<script>window.user = null</script>
+<script>
+  window.EXCALIDRAW_ASSET_PATH = "./js/";
+</script>
+<script src="./js/magic_portal.js"></script>
+<script>let worker = new Worker('./js/worker.js')
+const portal = new MagicPortal(worker);
+(async () => {
+  const git = await portal.get('git')
+  window.git = git
+  const fs = await portal.get('fs')
+  window.fs = fs
+  const pfs = await portal.get('pfs')
+  window.pfs = pfs
+  const gitHttp = await portal.get('gitHttp')
+  window.gitHttp = gitHttp
+  const workerThread = await portal.get('workerThread')
+  window.workerThread = workerThread
+})()
+</script>
+<script defer src="./js/highlight.min.js"></script>
+<script defer src="./js/interact.min.js"></script>
+<script defer src="./js/lsplugin.core.js"></script>
+<script defer src="./js/main.js"></script>
+<script defer src="./js/code-editor.js"></script>
+<script defer src="./js/age-encryption.js"></script>
+<script defer src="./js/excalidraw.js"></script>
+</body>
+</html>

+ 15 - 9
src/electron/electron/core.cljs

@@ -15,14 +15,16 @@
             [clojure.core.async :as async]
             [electron.state :as state]))
 
-(defonce PLUGIN_SCHEME "lsp")
-(defonce PLUGIN_PROTOCOL (str PLUGIN_SCHEME "://"))
-(defonce PLUGIN_URL (str PLUGIN_PROTOCOL "logseq.io/"))
+(defonce LSP_SCHEME "lsp")
+(defonce LSP_PROTOCOL (str LSP_SCHEME "://"))
+(defonce PLUGIN_URL (str LSP_PROTOCOL "logseq.io/"))
+(defonce STATIC_URL (str LSP_PROTOCOL "logseq.com/"))
 (defonce PLUGINS_ROOT (.join path (.homedir os) ".logseq/plugins"))
 
 (def ROOT_PATH (path/join js/__dirname ".."))
 (def MAIN_WINDOW_ENTRY (if dev?
-                         "http://localhost:3001"
+                         ;;"http://localhost:3001"
+                         (str "file://" (path/join js/__dirname "index.html"))
                          (str "file://" (path/join js/__dirname "electron.html"))))
 
 (defonce *setup-fn (volatile! nil))
@@ -78,17 +80,21 @@
         (callback #js {:path path}))))
 
   (.registerFileProtocol
-    protocol PLUGIN_SCHEME
+    protocol LSP_SCHEME
     (fn [^js request callback]
       (let [url (.-url request)
-            path' (string/replace url PLUGIN_URL "")
+            [URL ROOT] (if (string/starts-with? url PLUGIN_URL)
+                         [PLUGIN_URL PLUGINS_ROOT]
+                         [STATIC_URL js/__dirname])
+
+            path' (string/replace url URL "")
             path' (js/decodeURIComponent path')
-            path' (.join path PLUGINS_ROOT path')]
+            path' (.join path ROOT path')]
 
         (callback #js {:path path'}))))
 
   #(do
-     (.unregisterProtocol protocol PLUGIN_SCHEME)
+     (.unregisterProtocol protocol LSP_SCHEME)
      (.unregisterProtocol protocol "assets")))
 
 (defn- handle-export-publish-assets [_event html custom-css-path repo-path asset-filenames]
@@ -223,7 +229,7 @@
       (.quit app))
     (do
       (.registerSchemesAsPrivileged
-        protocol (bean/->js [{:scheme     PLUGIN_SCHEME
+        protocol (bean/->js [{:scheme     LSP_SCHEME
                               :privileges {:standard        true
                                            :secure          true
                                            :supportFetchAPI true}}]))

+ 1 - 1
src/main/frontend/util/pool.cljs

@@ -12,7 +12,7 @@
   ([]
    (create-parser-pool! 8))
   ([num]
-   (p/let [static-path (if (and (util/electron?) (not config/dev?))
+   (p/let [static-path (if (util/electron?)
                          (ipc/ipc :getDirname)
                          "/static")]
      (Pool.

+ 6 - 0
templates/patch.parser.woker.js

@@ -0,0 +1,6 @@
+const originImportScripts = globalThis.importScripts
+const importScripts = (url) => {
+  originImportScripts(
+    (location.href.startsWith('blob') ? 'file://PWD_ROOT/static/js/' : '') + url
+  )
+};;