storage.cljs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. (ns frontend.storage
  2. "Provides fns for most common operations with localStorage. Assumes
  3. localStorage values are edn"
  4. (:refer-clojure :exclude [get set remove])
  5. (:require [cljs.reader :as reader]
  6. [frontend.spec.storage :as storage-spec]
  7. [cljs.spec.alpha :as s]
  8. [frontend.util :as util]))
  9. ;; TODO: refactor: separate side effects
  10. (defn get
  11. [key]
  12. (when-not util/node-test?
  13. (reader/read-string ^js (.getItem js/localStorage (name key)))))
  14. (defn set
  15. [key value]
  16. ;; Prevent invalid data from being saved into storage
  17. (s/assert ::storage-spec/local-storage
  18. ;; Translate key to keyword for spec as not all keys are keywords
  19. {(keyword key) value})
  20. (when-not util/node-test?
  21. (.setItem ^js js/localStorage (name key) (pr-str value))))
  22. (comment
  23. (defn get-transit
  24. [key]
  25. (when-not util/node-test?
  26. (dt/read-transit-str ^js (.getItem js/localStorage (name key))))))
  27. (defn remove
  28. [key]
  29. (when-not util/node-test?
  30. (.removeItem ^js js/localStorage (name key))))
  31. (comment
  32. (defn clear
  33. []
  34. (when-not util/node-test?
  35. (.clear ^js js/localStorage))))