;; shadow-cljs configuration {:source-paths ["src" "test/cljs"] :dependencies [[reagent "1.2.0"] [re-frame "1.3.0"] [binaryage/oops "0.7.2"] [com.andrewmcveigh/cljs-time "0.5.2"] [status-im/timbre "4.10.0-2-status"] [hickory "0.7.1"] [cljs-bean "1.3.0"] [com.cognitect/transit-cljs "0.8.248"] [mvxcvi/alphabase "1.0.0"] [camel-snake-kebab "0.4.3"] ;; Dev dependencies [refactor-nrepl "2.5.0"] [cider/cider-nrepl "0.25.3"] [cider/piggieback "0.4.1"] [re-frisk-remote "1.6.0"] ;; We don't use the encore library, but re-frisk requires re-frisk/sente (fork of ;; com.taoensso/sente), which in turn requires encore. We need to bump encore to ;; 3.21.0+ to remove a warning displayed while shadow-cljs starts (commit ;; https://github.com/ptaoussanis/encore/commit/f7a21567b9611a63999609ca183c7fb175034bd6). [com.taoensso/encore "3.21.0"] ;; Routing [bidi "2.1.6"] ;; Test dependencies [day8.re-frame/test "0.1.5"] [com.taoensso/tufte "2.1.0"]] ;; port and middleware for repl in development :nrepl {:port 7888 :middleware [cider.piggieback/wrap-cljs-repl refactor-nrepl.middleware/wrap-refactor]} ;; shadow-cljs web interface :http {:port 3449 :host "0.0.0.0"} :cache-blockers #{status-im.utils.js-resources status-im.ui.components.icons.icons} :builds {:mobile {:target :react-native ;; To match the folder created by Nix build of JSBundle. :output-dir "result" :init-fn status-im2.core/init ;; When false, the Shadow-CLJS watcher won't automatically refresh ;; the target files (a.k.a hot reload). When false, you can manually ;; reload by calling `shadow.cljs.devtools.api/watch-compile-all!`. :devtools {:autobuild #shadow/env ["SHADOW_AUTOBUILD_ENABLED" :default true :as :bool]} :dev {:devtools {:before-load-async status-im2.setup.hot-reload/before-reload :after-load-async status-im2.setup.hot-reload/reload :build-notify status-im2.setup.hot-reload/build-notify :preloads [re-frisk-remote.preload ;; In order to use component test helpers in the REPL we ;; need to preload namespaces that are not normally required ;; by production code, such as ;; @testing-library/react-native. test-helpers.component]} :closure-defines {status-im2.config/POKT_TOKEN #shadow/env "POKT_TOKEN" status-im2.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN" status-im2.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY" status-im2.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN" status-im2.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN" status-im2.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN" status-im2.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN"} :compiler-options {:output-feature-set :es5 :closure-defines {re-frame.trace/trace-enabled? true} :source-map false :infer-externs true} ;; if you want to use a real device, set your local ip ;; in the SHADOW_HOST env variable to make sure that ;; it will use the right interface :local-ip #shadow/env "SHADOW_HOST"} :chunks {:fleets status-im.fleet.default-fleet/default-fleets} :release {:closure-defines {status-im2.config/POKT_TOKEN #shadow/env "POKT_TOKEN" status-im2.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN" status-im2.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY" status-im2.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN" status-im2.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN" status-im2.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN" status-im2.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN"} :compiler-options {:output-feature-set :es6 ;;disable for android build as there ;;is an intermittent warning with deftype :warnings-as-errors false :infer-externs :auto :static-fns true :fn-invoke-direct true :optimizations :advanced :js-options {:js-provider :closure}}}} ;; the tests are ran with node, react-native dependencies are mocked ;; by using node --require override.js, which uses the node-library ;; produced by the target :mocks below and redefines node require ;; function to use the mocks instead of the rn libraries :test {:output-to "target/test/test.js" :output-dir "target/test" :optimizations :simple :target :node-test ;; Uncomment line below to `make test-watch` a specific file ;; :ns-regexp "status-im2.subs.chat.messages-test$" :main status-im.test-runner/main ;; set :ui-driven to true to let shadow-cljs inject node-repl :ui-driven true :closure-defines {status-im2.config/POKT_TOKEN #shadow/env "POKT_TOKEN" status-im2.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN" status-im2.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY" status-im2.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN" status-im2.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN" status-im2.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN" status-im2.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN"} :compiler-options {;; needed because we override require and it ;; messes with source-map which reports callstack ;; exceeded exceptions instead of real issues :source-map false ;; needed because we use deref in tests :static-fns false :optimizations :simple :infer-externs true}} ;; mock.js-dependencies is mocking the react-native libraries ;; we build it as a node library so that it can be required by ;; override.js :mocks {:target :node-library :exports {:mocks mocks.js-dependencies/mock} :output-to "target/mocks/mocks.js" :output-dir "target/mocks" :compiler-options {:optimizations :simple :source-map false}} :component-test {:target :npm-module :entries [quo2.core-spec status-im2.core-spec] :ns-regexp "component-spec$" :output-dir "component-spec" :compiler-options {:warnings-as-errors false :static-fns false :infer-externs true}}}}