From e750c79e34e5d3cc06e7ddf6c9b66e60def60ad0 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Thu, 30 Apr 2026 01:00:51 +0800 Subject: [PATCH] chore: remove unused `node` persist-db impl --- .../task--db-worker-nodejs-compatible.md | 3 +- src/main/frontend/persist_db.cljs | 19 +- src/main/frontend/persist_db/node.cljs | 171 ------------------ 3 files changed, 2 insertions(+), 191 deletions(-) delete mode 100644 src/main/frontend/persist_db/node.cljs diff --git a/docs/agent-guide/task--db-worker-nodejs-compatible.md b/docs/agent-guide/task--db-worker-nodejs-compatible.md index 3057c4798b..614eefa149 100644 --- a/docs/agent-guide/task--db-worker-nodejs-compatible.md +++ b/docs/agent-guide/task--db-worker-nodejs-compatible.md @@ -36,7 +36,6 @@ Make `frontend.worker.db-worker` and its dependencies run in both browser and No - Browser: `js/WebSocket`. - Node: `ws` client with the same interface shape. 9. Update caller-side initialization. - - Add a Node-specific db worker client (e.g. `frontend.persist-db.node` or `frontend.persist-db.remote`) that talks to the HTTP daemon. - Keep browser `frontend.persist-db.browser` using WebWorker + Comlink. 10. Build config changes. - Add a Node build target in `shadow-cljs.edn` for db-worker (e.g. `:db-worker-node`). @@ -172,7 +171,7 @@ Event delivery options: - `BroadcastChannel` and `navigator.locks` are browser-only; Node should use a simpler single-client mode. - `Comlink` is browser-optimized; the Node daemon should use HTTP, not Comlink. - sqlite-wasm must remain browser-only; Node uses built-in `node:sqlite` directly. -- only db-graph supported in Node db-worker +- only db-graph supported in Node db-worker ## Success Criteria - Browser build continues to work with WebWorker + Comlink. diff --git a/src/main/frontend/persist_db.cljs b/src/main/frontend/persist_db.cljs index 2f2951ac47..cbc9e42634 100644 --- a/src/main/frontend/persist_db.cljs +++ b/src/main/frontend/persist_db.cljs @@ -4,7 +4,6 @@ [frontend.config :as config] [frontend.db.transact :as db-transact] [frontend.persist-db.browser :as browser] - [frontend.persist-db.node :as node] [frontend.persist-db.protocol :as protocol] [frontend.persist-db.remote :as remote] [frontend.handler.worker :as worker-handler] @@ -15,7 +14,6 @@ [promesa.core :as p])) (defonce opfs-db (browser/->InBrowser)) -(defonce node-db (atom nil)) (defonce remote-db (atom nil)) (defonce remote-repo (atom nil)) @@ -83,14 +81,6 @@ (defn {"Content-Type" "application/json" - "Accept" "application/json"} - (seq auth-token) - (assoc "Authorization" (str "Bearer " auth-token)))) - -(defn- js headers)} - (fn [^js res] - (let [chunks (array)] - (.on res "data" (fn [chunk] (.push chunks chunk))) - (.on res "end" (fn [] - (let [buf (js/Buffer.concat chunks)] - (resolve {:status (.-statusCode res) - :body (.toString buf "utf8")})))) - (.on res "error" reject))))] - (.on req "error" reject) - (when body - (.write req body)) - (.end req))))) - -(defn- js (if direct-pass? - {:method method - :directPass true - :args args} - {:method method - :directPass false - :argsTransit (ldb/write-transit-str args)})))] - (p/let [{:keys [status body]} (clj (js/JSON.parse body) :keywordize-keys true)] - (if direct-pass? - result - (ldb/read-transit-str resultTransit))) - (do - (log/error :db-worker-node-invoke-failed {:status status :body body}) - (throw (ex-info "db-worker-node invoke failed" {:status status :body body}))))))) - -(defn- connect-events! - [{:keys [base-url auth-token event-handler]} wrapped-worker] - (let [url (js/URL. (str (string/replace base-url #"/$" "") "/v1/events")) - headers (base-headers auth-token) - buffer (atom "") - handler (or event-handler (fn [_type _payload _wrapped-worker] nil))] - (let [^js req (.request - (request-module url) - #js {:method "GET" - :hostname (.-hostname url) - :port (or (.-port url) (if (= "https:" (.-protocol url)) 443 80)) - :path (str (.-pathname url) (.-search url)) - :headers (clj->js headers)} - (fn [^js res] - (.on res "data" - (fn [chunk] - (swap! buffer str (.toString chunk "utf8")) - (loop [] - (when-let [idx (string/index-of @buffer "\n\n")] - (let [event-text (subs @buffer 0 idx) - rest-text (subs @buffer (+ idx 2))] - (reset! buffer rest-text) - (when-let [line (some-> event-text - (string/split-lines) - (->> (some #(when (string/starts-with? % "data: ") - (subs % 6)))))] - (let [{:keys [type payload]} (js->clj (js/JSON.parse line) :keywordize-keys true) - decoded (when (some? payload) - (try - (ldb/read-transit-str payload) - (catch :default _ payload))) - [event-type event-payload] (if (and (vector? decoded) - (= 2 (count decoded)) - (keyword? (first decoded))) - [(first decoded) (second decoded)] - [(keyword type) decoded])] - (when (some? type) - (handler event-type event-payload wrapped-worker))))) - (recur))))) - (.on res "error" (fn [e] - (log/error :db-worker-node-events-error e)))))] - (.on req "error" (fn [e] - (log/error :db-worker-node-events-error e))) - (.end req)) - nil)) - -(defrecord InNode [client wrapped-worker] - protocol/PersistentDB - (InNode client wrapped-worker)))