From 47c4e7daf7730e1939194b0f7bde8fb2c7b58a80 Mon Sep 17 00:00:00 2001 From: currentoor Date: Sat, 7 Dec 2019 16:43:21 -0800 Subject: [PATCH] [#357 #247] Fix for React Native (@currentoor) --- src/taoensso/sente.cljc | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/taoensso/sente.cljc b/src/taoensso/sente.cljc index 7ecb4a8..2ab754f 100644 --- a/src/taoensso/sente.cljc +++ b/src/taoensso/sente.cljc @@ -980,15 +980,28 @@ [1] Ref. https://www.npmjs.com/package/websocket [2] Ref. https://github.com/RyanMcG/lein-npm" - (delay ; Eager eval causes issues with React Native, Ref. #247, - (elide-require - (when (and node-target? (exists? js/require)) - (try - (js/require "websocket") - ;; In particular, catch 'UnableToResolveError' - (catch :default e - ;; (errorf e "Unable to load npm websocket lib") - nil))))))) + + ;; This `let` silliness intended to work around React Native's + ;; static analysis tool, to prevent it from detecting a + ;; missing package. + ;; + ;; Ref. https://github.com/ptaoussanis/sente/issues/247#issuecomment-555219121 + ;; + (let [make-package-name (fn [prefix] (str prefix "socket")) + require-fn + (if (exists? js/require) + js/require + (constantly :no-op))] + + (delay ; Eager eval causes issues with React Native, Ref. #247, + (elide-require ; TODO is this now safe to remove? + (when (and node-target? (exists? js/require)) + (try + (require-fn (make-package-name "web")) + ;; In particular, catch 'UnableToResolveError' + (catch :default e + ;; (errorf e "Unable to load npm websocket lib") + nil)))))))) #?(:cljs (defrecord ChWebSocket