From 068c94da4e2f257c3f6bf6827ce810f1ee9bbf69 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 31 May 2021 09:20:44 +0200 Subject: [PATCH] :recycle: Replace frontend transit ns usage with common transit. --- frontend/src/app/main/data/comments.cljs | 1 - frontend/src/app/main/data/workspace.cljs | 8 +- .../main/data/workspace/notifications.cljs | 4 +- .../app/main/data/workspace/persistence.cljs | 1 - frontend/src/app/main/repo.cljs | 1 - frontend/src/app/main/ui/hooks.cljs | 1 - frontend/src/app/util/dom/dnd.cljs | 8 +- frontend/src/app/util/http.cljs | 6 +- frontend/src/app/util/i18n.cljs | 3 +- frontend/src/app/util/storage.cljs | 15 +-- frontend/src/app/util/text_editor.cljs | 1 - frontend/src/app/util/theme.cljs | 1 - frontend/src/app/util/transit.cljs | 127 ------------------ frontend/src/app/util/webapi.cljs | 1 - frontend/src/app/util/websockets.cljs | 4 +- frontend/src/app/util/worker.cljs | 10 +- frontend/src/app/worker.cljs | 24 ++-- frontend/src/app/worker/impl.cljs | 6 +- 18 files changed, 43 insertions(+), 179 deletions(-) delete mode 100644 frontend/src/app/util/transit.cljs diff --git a/frontend/src/app/main/data/comments.cljs b/frontend/src/app/main/data/comments.cljs index aeda98fdc..034921fda 100644 --- a/frontend/src/app/main/data/comments.cljs +++ b/frontend/src/app/main/data/comments.cljs @@ -24,7 +24,6 @@ [app.main.worker :as uw] [app.util.router :as rt] [app.util.timers :as ts] - [app.util.transit :as t] [app.util.webapi :as wapi] [beicon.core :as rx] [cljs.spec.alpha :as s] diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 39f452e49..f7017f541 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -16,6 +16,7 @@ [app.common.pages :as cp] [app.common.pages.helpers :as cph] [app.common.spec :as us] + [app.common.transit :as t] [app.common.uuid :as uuid] [app.config :as cfg] [app.main.data.messages :as dm] @@ -39,7 +40,6 @@ [app.util.i18n :as i18n] [app.util.logging :as log] [app.util.router :as rt] - [app.util.transit :as t] [app.util.webapi :as wapi] [beicon.core :as rx] [cljs.spec.alpha :as s] @@ -1400,7 +1400,7 @@ (rx/merge-map (partial prepare-object objects selected)) (rx/reduce collect-data initial) (rx/mapcat (partial sort-selected state)) - (rx/map t/encode) + (rx/map t/encode-str) (rx/map wapi/write-to-clipboard) (rx/catch on-copy-error) (rx/ignore))))))) @@ -1420,7 +1420,7 @@ paste-transit-str (->> clipboard-str (rx/filter t/transit?) - (rx/map t/decode) + (rx/map t/decode-str) (rx/filter #(= :copied-shapes (:type %))) (rx/map #(select-keys % [:selected :objects])) (rx/map paste-shape)) @@ -1459,7 +1459,7 @@ image-data (wapi/extract-images paste-data) text-data (wapi/extract-text paste-data) decoded-data (and (t/transit? text-data) - (t/decode text-data)) + (t/decode-str text-data)) edit-id (get-in state [:workspace-local :edition]) is-editing-text? (and edit-id (= :text (get-in objects [edit-id :type])))] diff --git a/frontend/src/app/main/data/workspace/notifications.cljs b/frontend/src/app/main/data/workspace/notifications.cljs index 95afceb6d..49c7d1387 100644 --- a/frontend/src/app/main/data/workspace/notifications.cljs +++ b/frontend/src/app/main/data/workspace/notifications.cljs @@ -10,6 +10,7 @@ [app.common.geom.point :as gpt] [app.common.pages :as cp] [app.common.spec :as us] + [app.common.transit :as t] [app.common.uri :as u] [app.config :as cf] [app.main.data.workspace.changes :as dch] @@ -21,7 +22,6 @@ [app.util.avatars :as avatars] [app.util.i18n :as i18n :refer [tr]] [app.util.time :as dt] - [app.util.transit :as t] [app.util.websockets :as ws] [beicon.core :as rx] [cljs.spec.alpha :as s] @@ -74,7 +74,7 @@ ;; Process all incoming messages. (->> (ws/-stream wsession) (rx/filter ws/message?) - (rx/map (comp t/decode :payload)) + (rx/map (comp t/decode-str :payload)) (rx/filter #(s/valid? ::message %)) (rx/map process-message)) diff --git a/frontend/src/app/main/data/workspace/persistence.cljs b/frontend/src/app/main/data/workspace/persistence.cljs index 3228e0e5e..2f668f7e1 100644 --- a/frontend/src/app/main/data/workspace/persistence.cljs +++ b/frontend/src/app/main/data/workspace/persistence.cljs @@ -32,7 +32,6 @@ [app.util.object :as obj] [app.util.router :as rt] [app.util.time :as dt] - [app.util.transit :as t] [app.util.uri :as uu] [beicon.core :as rx] [cljs.spec.alpha :as s] diff --git a/frontend/src/app/main/repo.cljs b/frontend/src/app/main/repo.cljs index 36d935ffb..bb3531d5c 100644 --- a/frontend/src/app/main/repo.cljs +++ b/frontend/src/app/main/repo.cljs @@ -11,7 +11,6 @@ [app.config :as cfg] [app.util.http :as http] [app.util.time :as dt] - [app.util.transit :as t] [beicon.core :as rx] [cuerdas.core :as str])) diff --git a/frontend/src/app/main/ui/hooks.cljs b/frontend/src/app/main/ui/hooks.cljs index 789b5ab8f..830906bc1 100644 --- a/frontend/src/app/main/ui/hooks.cljs +++ b/frontend/src/app/main/ui/hooks.cljs @@ -15,7 +15,6 @@ [app.util.logging :as log] [app.util.object :as obj] [app.util.timers :as ts] - [app.util.transit :as t] [app.util.webapi :as wapi] [beicon.core :as rx] [cljs.spec.alpha :as s] diff --git a/frontend/src/app/util/dom/dnd.cljs b/frontend/src/app/util/dom/dnd.cljs index c6cf9c6a2..3f681b99b 100644 --- a/frontend/src/app/util/dom/dnd.cljs +++ b/frontend/src/app/util/dom/dnd.cljs @@ -7,9 +7,9 @@ (ns app.util.dom.dnd "Drag & Drop interop helpers." (:require - [cuerdas.core :as str] + [app.common.transit :as t] [app.util.data :refer (read-string)] - [app.util.transit :as t])) + [cuerdas.core :as str])) ;; This is the official documentation for the dnd API: ;; https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API @@ -59,7 +59,7 @@ (let [dt (.-dataTransfer e)] (if (or (str/starts-with? data-type "application") (str/starts-with? data-type "penpot")) - (.setData dt data-type (t/encode data)) + (.setData dt data-type (t/encode-str data)) (.setData dt data-type data)) e))) @@ -112,7 +112,7 @@ (let [dt (.-dataTransfer e)] (if (or (str/starts-with? data-type "penpot") (= data-type "application/json")) - (t/decode (.getData dt data-type)) + (t/decode-str (.getData dt data-type)) (.getData dt data-type))))) (defn get-files diff --git a/frontend/src/app/util/http.cljs b/frontend/src/app/util/http.cljs index cba405237..b1213bd1c 100644 --- a/frontend/src/app/util/http.cljs +++ b/frontend/src/app/util/http.cljs @@ -8,13 +8,13 @@ "A http client with rx streams interface." (:require [app.common.data :as d] + [app.common.transit :as t] [app.common.uri :as u] [app.config :as cfg] [app.util.cache :as c] [app.util.globals :as globals] [app.util.object :as obj] [app.util.time :as dt] - [app.util.transit :as t] [app.util.webapi :as wapi] [beicon.core :as rx] [cuerdas.core :as str] @@ -129,7 +129,7 @@ (defn transit-data [data] (reify IBodyData - (-get-body-data [_] (t/encode data)) + (-get-body-data [_] (t/encode-str data)) (-update-headers [_ headers] (assoc headers "content-type" "application/transit+json")))) @@ -138,7 +138,7 @@ (let [contentype (get headers "content-type")] (if (and (str/starts-with? contentype "application/transit+json") (pos? (count body))) - (assoc response :body (t/decode body)) + (assoc response :body (t/decode-str body)) response))) (defn success? diff --git a/frontend/src/app/util/i18n.cljs b/frontend/src/app/util/i18n.cljs index 6bc479f80..870467abd 100644 --- a/frontend/src/app/util/i18n.cljs +++ b/frontend/src/app/util/i18n.cljs @@ -9,9 +9,8 @@ (:require [app.config :as cfg] [app.util.globals :as globals] - [app.util.storage :refer [storage]] [app.util.object :as obj] - [app.util.transit :as t] + [app.util.storage :refer [storage]] [beicon.core :as rx] [cuerdas.core :as str] [goog.object :as gobj] diff --git a/frontend/src/app/util/storage.cljs b/frontend/src/app/util/storage.cljs index aecd1f03a..2f2e5e9cb 100644 --- a/frontend/src/app/util/storage.cljs +++ b/frontend/src/app/util/storage.cljs @@ -6,10 +6,10 @@ (ns app.util.storage (:require - [app.util.transit :as t] - [app.util.timers :as tm] + [app.common.exceptions :as ex] + [app.common.transit :as t] [app.util.globals :as g] - [app.common.exceptions :as ex])) + [app.util.timers :as tm])) (defn- ^boolean is-worker? [] @@ -18,8 +18,7 @@ (defn- decode [v] - (ex/ignoring (t/decode v))) - + (ex/ignoring (t/decode-str v))) (defn- persist [storage prev curr] @@ -29,8 +28,8 @@ (when (not= curr* prev*) (tm/schedule-on-idle #(if (some? curr*) - (.setItem ^js storage (t/encode key) (t/encode curr*)) - (.removeItem ^js storage (t/encode key))))))) + (.setItem ^js storage (t/encode-str key) (t/encode-str curr*)) + (.removeItem ^js storage (t/encode-str key))))))) (into #{} (concat (keys curr) (keys prev))))) @@ -43,7 +42,7 @@ (let [key (.key ^js storage index) val (.getItem ^js storage key)] (try - (assoc res (t/decode key) (t/decode val)) + (assoc res (t/decode-str key) (t/decode-str val)) (catch :default e res)))) {} diff --git a/frontend/src/app/util/text_editor.cljs b/frontend/src/app/util/text_editor.cljs index 869e929c1..ccd7fd8dc 100644 --- a/frontend/src/app/util/text_editor.cljs +++ b/frontend/src/app/util/text_editor.cljs @@ -15,7 +15,6 @@ [app.common.uuid :as uuid] [app.util.array :as arr] [app.util.object :as obj] - [app.util.transit :as t] [clojure.walk :as walk] [cuerdas.core :as str])) diff --git a/frontend/src/app/util/theme.cljs b/frontend/src/app/util/theme.cljs index deed7644a..ae446f5bf 100644 --- a/frontend/src/app/util/theme.cljs +++ b/frontend/src/app/util/theme.cljs @@ -14,7 +14,6 @@ [goog.object :as gobj] [app.config :as cfg] [app.util.dom :as dom] - [app.util.transit :as t] [app.util.storage :refer [storage]])) (defonce theme (get @storage ::theme cfg/default-theme)) diff --git a/frontend/src/app/util/transit.cljs b/frontend/src/app/util/transit.cljs deleted file mode 100644 index 24d385176..000000000 --- a/frontend/src/app/util/transit.cljs +++ /dev/null @@ -1,127 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) UXBOX Labs SL - -(ns app.util.transit - "A lightweight abstraction for transit serialization." - (:require - [cognitect.transit :as t] - [linked.core :as lk] - [linked.set :as lks] - [app.common.data :as d] - [app.common.geom.point :as gpt] - [app.common.geom.matrix :as gmt] - [app.util.time :as dt])) - -(deftype Blob [content] - IDeref - (-deref [_] content)) - -(defn blob? - [v] - (instance? Blob v)) - -(def blob-write-handler - (t/write-handler - (constantly "jsonblob") - (fn [v] (js/JSON.stringify @v)))) - -(def blob-read-handler - (t/read-handler - (fn [value] - (->Blob (js/JSON.parse value))))) - -;; --- Transit adapters - -(def bigint-read-handler - (t/read-handler - (fn [value] - (js/parseInt value 10)))) - -(def point-write-handler - (t/write-handler - (constantly "point") - (fn [v] (into {} v)))) - -(def point-read-handler - (t/read-handler - (fn [value] - (gpt/map->Point value)))) - -(def matrix-write-handler - (t/write-handler - (constantly "matrix") - (fn [v] (into {} v)))) - -(def matrix-read-handler - (t/read-handler - (fn [value] - (gmt/map->Matrix value)))) - -(def ordered-set-write-handler - (t/write-handler - (constantly "ordered-set") - (fn [v] (vec v)))) - -(def ordered-set-read-handler - (t/read-handler #(into (lk/set) %))) - -(def date-read-handler - (t/read-handler (fn [value] (-> value (js/parseInt 10) (dt/datetime))))) - -(def duration-read-handler - (t/read-handler (fn [value] (dt/duration value)))) - -(def date-write-handler - (t/write-handler - (constantly "m") - (fn [v] (str (inst-ms v))))) - -(def duration-write-handler - (t/write-handler - (constantly "duration") - (fn [v] (inst-ms v)))) - -;; --- Transit Handlers - -(def ^:privare +read-handlers+ - {"u" uuid - "n" bigint-read-handler - "ordered-set" ordered-set-read-handler - "jsonblob" blob-read-handler - "matrix" matrix-read-handler - "m" date-read-handler - "duration" duration-read-handler - "point" point-read-handler}) - -(def ^:privare +write-handlers+ - {gmt/Matrix matrix-write-handler - Blob blob-write-handler - dt/DateTime date-write-handler - dt/Duration duration-write-handler - lks/LinkedSet ordered-set-write-handler - gpt/Point point-write-handler}) - -;; --- Public Api - -(defn decode - [data] - (let [r (t/reader :json {:handlers +read-handlers+})] - (t/read r data))) - -(defn encode - [data] - (try - (let [w (t/writer :json-verbose {:handlers +write-handlers+})] - (t/write w data)) - (catch :default e - (throw e)))) - -(defn transit? - "Checks if a string can be decoded with transit" - [str] - (try - (-> str decode nil? not) - (catch js/SyntaxError e false))) diff --git a/frontend/src/app/util/webapi.cljs b/frontend/src/app/util/webapi.cljs index 0da4d753a..ef77aaafc 100644 --- a/frontend/src/app/util/webapi.cljs +++ b/frontend/src/app/util/webapi.cljs @@ -10,7 +10,6 @@ [app.common.data :as d] [app.common.exceptions :as ex] [app.util.object :as obj] - [app.util.transit :as t] [beicon.core :as rx] [cuerdas.core :as str] [promesa.core :as p])) diff --git a/frontend/src/app/util/websockets.cljs b/frontend/src/app/util/websockets.cljs index 61e06baba..969011020 100644 --- a/frontend/src/app/util/websockets.cljs +++ b/frontend/src/app/util/websockets.cljs @@ -7,9 +7,9 @@ (ns app.util.websockets "A interface to webworkers exposed functionality." (:require + [app.common.transit :as t] [app.common.uri :as u] [app.config :as cfg] - [app.util.transit :as t] [beicon.core :as rx] [goog.events :as ev] [potok.core :as ptk]) @@ -55,4 +55,4 @@ (defn send! [ws msg] - (-send ws (t/encode msg))) + (-send ws (t/encode-str msg))) diff --git a/frontend/src/app/util/worker.cljs b/frontend/src/app/util/worker.cljs index 8e9943e4f..19d4b3df4 100644 --- a/frontend/src/app/util/worker.cljs +++ b/frontend/src/app/util/worker.cljs @@ -7,9 +7,9 @@ (ns app.util.worker "A lightweight layer on top of webworkers api." (:require - [beicon.core :as rx] + [app.common.transit :as t] [app.common.uuid :as uuid] - [app.util.transit :as t])) + [beicon.core :as rx])) (declare handle-response) (defrecord Worker [instance stream]) @@ -25,7 +25,7 @@ (rx/take-while #(not (:completed %)) ob) (rx/take 1 ob))) - data (t/encode message) + data (t/encode-str message) instance (:instance worker)] (.postMessage instance data) @@ -67,7 +67,7 @@ handle-message (fn [event] (let [data (.-data event) - data (t/decode data)] + data (t/decode-str data)] (if (:error data) (on-error (:error data)) (rx/push! bus data)))) @@ -75,7 +75,7 @@ handle-error (fn [error] (on-error worker (.-data error)))] - + (.addEventListener instance "message" handle-message) (.addEventListener instance "error" handle-error) diff --git a/frontend/src/app/worker.cljs b/frontend/src/app/worker.cljs index 38b68a57d..05d9ffc51 100644 --- a/frontend/src/app/worker.cljs +++ b/frontend/src/app/worker.cljs @@ -6,20 +6,20 @@ (ns app.worker (:require - [cljs.spec.alpha :as s] - [promesa.core :as p] - [beicon.core :as rx] - [cuerdas.core :as str] [app.common.exceptions :as ex] [app.common.spec :as us] + [app.common.transit :as t] [app.common.uuid :as uuid] + [app.util.object :as obj] + [app.util.worker :as w] [app.worker.impl :as impl] [app.worker.selection] - [app.worker.thumbnails] [app.worker.snaps] - [app.util.object :as obj] - [app.util.transit :as t] - [app.util.worker :as w])) + [app.worker.thumbnails] + [beicon.core :as rx] + [cljs.spec.alpha :as s] + [cuerdas.core :as str] + [promesa.core :as p])) ;; --- Messages Handling @@ -44,7 +44,7 @@ [{:keys [sender-id payload] :as message}] (us/assert ::message message) (letfn [(post [msg] - (let [msg (-> msg (assoc :reply-to sender-id) (t/encode))] + (let [msg (-> msg (assoc :reply-to sender-id) (t/encode-str))] (.postMessage js/self msg))) (reply [result] @@ -84,8 +84,8 @@ "Sends to the client a notifiction that its messages have been dropped" [{:keys [sender-id payload] :as message}] (us/assert ::message message) - (.postMessage js/self (t/encode {:reply-to sender-id - :dropped true}))) + (.postMessage js/self (t/encode-str {:reply-to sender-id + :dropped true}))) (defn subscribe-buffer-messages "Creates a subscription to process the buffer messages" @@ -143,7 +143,7 @@ [event] (when (nil? (.-source event)) (let [message (.-data event) - message (t/decode message)] + message (t/decode-str message)] (if (:buffer? message) (rx/push! buffer message) (handle-message message))))) diff --git a/frontend/src/app/worker/impl.cljs b/frontend/src/app/worker/impl.cljs index 77032133a..cfa69ac23 100644 --- a/frontend/src/app/worker/impl.cljs +++ b/frontend/src/app/worker/impl.cljs @@ -6,9 +6,9 @@ (ns app.worker.impl (:require - [okulary.core :as l] - [app.util.transit :as t] - [app.common.pages.changes :as ch])) + [app.common.pages.changes :as ch] + [app.common.transit :as t] + [okulary.core :as l])) (enable-console-print!)