-
Notifications
You must be signed in to change notification settings - Fork 21
/
local_storage.cljs
61 lines (46 loc) · 1.29 KB
/
local_storage.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(ns nubank.workspaces.lib.local-storage
(:refer-clojure :exclude [get set!])
(:require [cljs.reader :refer [read-string]]
[cognitect.transit :as t]))
(def local-storage (.-localStorage js/window))
;; edn
(defn get
([key] (get key nil))
([key default]
(if-let [value (.getItem local-storage (pr-str key))]
(read-string value)
default)))
(defn set! [key value]
(.setItem local-storage (pr-str key) (pr-str value)))
(defn update! [key f & args]
(.setItem local-storage (pr-str key) (pr-str (apply f (get key) args))))
(defn remove! [key]
(.removeItem local-storage key))
;; transit
(defn read-transit [s]
(let [reader (t/reader :json)]
(t/read reader s)))
(defn write-transit [x]
(let [writer (t/writer :json)]
(t/write writer x)))
(defn tget
([key] (tget key nil))
([key default]
(if-let [value (.getItem local-storage (pr-str key))]
(read-transit value)
default)))
(defn tset! [key value]
(.setItem local-storage (pr-str key) (write-transit value)))
(defn tupdate! [key f & args]
(.setItem local-storage (pr-str key) (write-transit (apply f (tget key) args))))
(comment
(-> `(:hello {})
type)
(-> `(:hello {})
(write-transit)
(read-transit)
type)
(-> `(:hello {})
(pr-str)
(read-string)
type))