;; shadow-cljs configuration {:source-paths ["src" "test/cljs"] :dependencies [[reagent "1.2.0"] [re-frame "1.4.3"] [binaryage/oops "0.7.2"] [com.andrewmcveigh/cljs-time "0.5.2"] [com.taoensso/timbre "6.3.1"] [cljs-bean "1.9.0"] [com.cognitect/transit-cljs "0.8.280"] [camel-snake-kebab "0.4.3"] [metosin/malli "0.13.0"] [funcool/promesa "11.0.678"] ;; Dev dependencies [com.github.jpmonettas/flow-storm-inst "3.7.5"] [refactor-nrepl "3.9.1"] [cider/cider-nrepl "0.31.0"] [cider/piggieback "0.4.1"] [org.slf4j/slf4j-nop "2.0.9"] [re-frisk-remote "1.6.0"] [nubank/matcher-combinators "3.9.1"] ;; Use the same version specified in the Nix dependency. [clj-kondo/clj-kondo "2024.03.13"] ;; Routing [bidi "2.1.6"] ;; Test dependencies [day8.re-frame/test "0.1.5"] [com.taoensso/tufte "2.6.3"]] ;; 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 #{legacy.status-im.utils.js-resources legacy.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-im.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-im.setup.hot-reload/before-reload :after-load-async status-im.setup.hot-reload/reload :build-notify status-im.setup.hot-reload/build-notify :preloads [;; The official recommendation is to ;; load the debugger preload first. flow-storm.api re-frisk-remote.preload status-im.setup.schema-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-im.config/POKT_TOKEN #shadow/env "POKT_TOKEN" status-im.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN" status-im.config/STATUS_BUILD_PROXY_USER #shadow/env "STATUS_BUILD_PROXY_USER" status-im.config/STATUS_BUILD_PROXY_PASSWORD #shadow/env "STATUS_BUILD_PROXY_PASSWORD" status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID" status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN" status-im.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY" status-im.config/RARIBLE_MAINNET_API_KEY #shadow/env "RARIBLE_MAINNET_API_KEY" status-im.config/RARIBLE_TESTNET_API_KEY #shadow/env "RARIBLE_TESTNET_API_KEY" status-im.config/ALCHEMY_ETHEREUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ETHEREUM_MAINNET_TOKEN" status-im.config/ALCHEMY_ETHEREUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ETHEREUM_GOERLI_TOKEN" status-im.config/ALCHEMY_ETHEREUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ETHEREUM_SEPOLIA_TOKEN" status-im.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN" status-im.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN" status-im.config/ALCHEMY_ARBITRUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ARBITRUM_SEPOLIA_TOKEN" status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN" status-im.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN" status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"} :compiler-options {:output-feature-set :es5 ;; We disable `:fn-deprecated` warnings because we ;; are managing deprecation via clj-kondo and we ;; don't want the terminal output to be littered ;; with warnings on every code reload. :warnings {:fn-deprecated false} :closure-defines {re-frame.trace/trace-enabled? true} :source-map false ;; This seems to be necessary while using the REPL, ;; otherwise sometimes you'll get weird errors when ;; instrumenting functions. :static-fns false :infer-externs true :reader-features #{:mobile}} ;; 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 legacy.status-im.fleet.default-fleet/default-fleets} :release {:closure-defines {status-im.config/POKT_TOKEN #shadow/env "POKT_TOKEN" status-im.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN" status-im.config/STATUS_BUILD_PROXY_USER #shadow/env "STATUS_BUILD_PROXY_USER" status-im.config/STATUS_BUILD_PROXY_PASSWORD #shadow/env "STATUS_BUILD_PROXY_PASSWORD" status-im.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY" status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID" status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN" status-im.config/RARIBLE_MAINNET_API_KEY #shadow/env "RARIBLE_MAINNET_API_KEY" status-im.config/RARIBLE_TESTNET_API_KEY #shadow/env "RARIBLE_TESTNET_API_KEY" status-im.config/ALCHEMY_ETHEREUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ETHEREUM_MAINNET_TOKEN" status-im.config/ALCHEMY_ETHEREUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ETHEREUM_GOERLI_TOKEN" status-im.config/ALCHEMY_ETHEREUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ETHEREUM_SEPOLIA_TOKEN" status-im.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN" status-im.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN" status-im.config/ALCHEMY_ARBITRUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ARBITRUM_SEPOLIA_TOKEN" status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN" status-im.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN" status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_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} :reader-features #{:mobile}}}} ;; 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 #shadow/env "SHADOW_OUTPUT_TO" :output-dir "target/test" :optimizations :simple :target :node-test :dev {:devtools {:preloads [status-im.setup.schema-preload status-im.setup.test-preload]}} ;; Uncomment line below to `make test-watch` a specific file :ns-regexp #shadow/env "SHADOW_NS_REGEXP" :main legacy.status-im.test-runner/main ;; set :ui-driven to true to let shadow-cljs inject node-repl :ui-driven true :closure-defines {schema.core/throw-on-error? true status-im.config/POKT_TOKEN #shadow/env "POKT_TOKEN" status-im.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN" status-im.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY" status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID" status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN" status-im.config/RARIBLE_MAINNET_API_KEY #shadow/env "RARIBLE_MAINNET_API_KEY" status-im.config/RARIBLE_TESTNET_API_KEY #shadow/env "RARIBLE_TESTNET_API_KEY" status-im.config/ALCHEMY_ETHEREUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ETHEREUM_MAINNET_TOKEN" status-im.config/ALCHEMY_ETHEREUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ETHEREUM_GOERLI_TOKEN" status-im.config/ALCHEMY_ETHEREUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ETHEREUM_SEPOLIA_TOKEN" status-im.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN" status-im.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN" status-im.config/ALCHEMY_ARBITRUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ARBITRUM_SEPOLIA_TOKEN" status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN" status-im.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN" status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN" status-im.config/WALLET_CONNECT_PROJECT_ID #shadow/env "WALLET_CONNECT_PROJECT_ID"} :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 :warnings {:fn-deprecated false} :infer-externs true :reader-features #{:mobile}}} ;; 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 [;; We need to tell shadow-cljs to compile ;; the preloads namespaces because they ;; will be used directly by Jest in the ;; option setupFilesAfterEnv. test-helpers.component-tests-preload status-im.setup.schema-preload quo.core-spec status-im.core-spec] :ns-regexp "component-spec$" :output-dir "component-spec" :closure-defines {schema.core/throw-on-error? true} :compiler-options {:warnings-as-errors false :warnings {:fn-deprecated false} :static-fns false :infer-externs true}}}}