mirror of
https://github.com/status-im/status-react.git
synced 2025-01-11 11:34:45 +00:00
7f960f9be5
This commit adds a custom linter to verify i18n/label is called with a qualified keyword, like :t/foo. More sophisticated linters are possible too. We also set the stage for other developers to consider more lint automation instead of manually reviewing conventions in PRs. If you want to understand how to write custom linters, check out https://github.com/clj-kondo/clj-kondo/blob/master/doc/hooks.md. You can fire the Clojure JVM REPL in status-mobile and play with the clj-kondo hook too, it works beautifully. Why do we care? By making sure all translation keywords are qualified with "t", it is trivial to grep or replace them because they're unique in the repo, and can't be confused with other words if you search by ":t/<something>". Note: It's a best practice to commit clj-kondo configuration from external libraries in the .clj-kondo directory. The directory .clj-kondo/babashka is auto-generated, that's why it was added.
157 lines
8.0 KiB
Clojure
157 lines
8.0 KiB
Clojure
;; 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"]
|
|
|
|
;; Use the same version specified in the Nix dependency.
|
|
[clj-kondo/clj-kondo "2023.09.07"]
|
|
|
|
;; 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
|
|
;; 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
|
|
: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
|
|
:warnings {:fn-deprecated false}
|
|
: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}}}}
|