Fork me on GitHub
#shadow-cljs
<
2023-03-31
>
Jakub Šťastný03:03:54

[Reagent app, typical web stuff] How do I recognise whether I'm in dev or prod? I have code that I want to throw an exception in dev, whereas in prod I prefer it to fail silently.

(defn js!> [js-object & parts]
    (if PRODUCTION ; <---------------- ???
      ; Retrieve value under a key in production.
      (go/getValueByKeys js-object (clj->js parts))

      ; Retrieve value under a key in dev; fail if there ain't one.
      (or (go/getValueByKeys js-object (clj->js parts))
          (throw (ex-info (str "No such key: " (pr-str parts)) {})))))

hifumi12303:03:29

(def debug? ^boolean goog.DEBUG)

hifumi12303:03:29

Then throughout your code you can have

(when debug?
  (do stuff))
And the code will never appear in your production build.

hifumi12303:03:43

alternatively, you can just write

(when ^boolean goog.DEBUG
  (do stuff))
the reason for the type hint is so that the CLJS code compiles to something like
if (goog.DEBUG) {
  do {
    ...
  }
}
which google-closure is able to recognize and eliminate

thheller05:03:18

goog.DEBUG works too of course, thats one of the default closure-defines

fjsousa14:03:35

I'm trying to import https://www.npmjs.com/package/nostr-tools with

(:require ["nostr-tools" :as tools])
but get this compilation error
ExceptionInfo: failed to convert sources
	shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2077)
	shadow.build.closure/convert-sources-simple* (closure.clj:2064)
	shadow.build.closure/convert-sources-simple* (closure.clj:1928)
	shadow.build.closure/convert-sources-simple (closure.clj:2238)
	shadow.build.closure/convert-sources-simple (closure.clj:2188)
	shadow.build.compiler/maybe-closure-convert (compiler.clj:1244)
	shadow.build.compiler/maybe-closure-convert (compiler.clj:1237)
	shadow.build.compiler/compile-all (compiler.clj:1493)
	shadow.build.compiler/compile-all (compiler.clj:1356)
	shadow.build.api/compile-sources (api.clj:261)
	shadow.build.api/compile-sources (api.clj:253)
	shadow.build/compile (build.clj:512)
	shadow.build/compile (build.clj:493)
	shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368)
	shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349)
	shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448)
	shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437)
	clojure.lang.MultiFn.invoke (MultiFn.java:234)
	shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283)
	shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282)
	shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255)
	java.lang.Thread.run (Thread.java:1589)
Caused by:
RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.

Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null
  Node(SHEQ): node_modules/@noble/curves/abstract/weierstrass.js:916:25
    for (let o = q - 1n; o % 2n === 0n; o /= 2n)
  Parent(FOR): node_modules/@noble/curves/abstract/weierstrass.js:916:4
    for (let o = q - 1n; o % 2n === 0n; o /= 2n)

	com.google.javascript.jscomp.Compiler.throwInternalError (Compiler.java:3243)
	com.google.javascript.jscomp.NodeTraversal.throwUnexpectedException (NodeTraversal.java:509)
	com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:529)
	com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465)
	com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535)
	com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735)
	com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67)
	com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240)
	com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378)
	com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179)
	com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925)
	com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979)
	com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126)
	com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027)
	com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976)
	com.google.javascript.jscomp.Compiler.compile (Compiler.java:859)
	jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
	java.lang.reflect.Method.invoke (Method.java:578)
	clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167)
	clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102)
	shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067)
	shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065)
	shadow.build.closure/convert-sources-simple* (closure.clj:2064)
	shadow.build.closure/convert-sources-simple* (closure.clj:1928)
	shadow.build.closure/convert-sources-simple (closure.clj:2238)
	shadow.build.closure/convert-sources-simple (closure.clj:2188)
	shadow.build.compiler/maybe-closure-convert (compiler.clj:1244)
	shadow.build.compiler/maybe-closure-convert (compiler.clj:1237)
	shadow.build.compiler/compile-all (compiler.clj:1493)
	shadow.build.compiler/compile-all (compiler.clj:1356)
	shadow.build.api/compile-sources (api.clj:261)
	shadow.build.api/compile-sources (api.clj:253)
	shadow.build/compile (build.clj:512)
	shadow.build/compile (build.clj:493)
	shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368)
	shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349)
	shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448)
	shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437)
	clojure.lang.MultiFn.invoke (MultiFn.java:234)
	shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283)
	shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282)
	shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255)
	java.lang.Thread.run (Thread.java:1589)
Caused by:
NullPointerException: Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null
	com.google.javascript.jscomp.PeepholeFoldConstants.tryStrictEqualityComparison (PeepholeFoldConstants.java:1394)
	com.google.javascript.jscomp.PeepholeFoldConstants.evaluateComparison (PeepholeFoldConstants.java:1423)
	com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldComparison (PeepholeFoldConstants.java:1167)
	com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldBinaryOperator (PeepholeFoldConstants.java:188)
	com.google.javascript.jscomp.PeepholeFoldConstants.optimizeSubtree (PeepholeFoldConstants.java:104)
	com.google.javascript.jscomp.PeepholeOptimizationsPass$PeepCallback.visit (PeepholeOptimizationsPass.java:82)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:963)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953)
	com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008)
	com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953)
	com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008)
	com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953)
	com.google.javascript.jscomp.NodeTraversal.traverseChildren (NodeTraversal.java:1131)
	com.google.javascript.jscomp.NodeTraversal.handleScript (NodeTraversal.java:847)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:902)
	com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953)
	com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:526)
	com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465)
	com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535)
	com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735)
	com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67)
	com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240)
	com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378)
	com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179)
	com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925)
	com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979)
	com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126)
	com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027)
	com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976)
	com.google.javascript.jscomp.Compiler.compile (Compiler.java:859)
	jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
	java.lang.reflect.Method.invoke (Method.java:578)
	clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167)
	clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102)
	shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067)
	shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065)
	shadow.build.closure/convert-sources-simple* (closure.clj:2064)
	shadow.build.closure/convert-sources-simple* (closure.clj:1928)
	shadow.build.closure/convert-sources-simple (closure.clj:2238)
	shadow.build.closure/convert-sources-simple (closure.clj:2188)
	shadow.build.compiler/maybe-closure-convert (compiler.clj:1244)
	shadow.build.compiler/maybe-closure-convert (compiler.clj:1237)
	shadow.build.compiler/compile-all (compiler.clj:1493)
	shadow.build.compiler/compile-all (compiler.clj:1356)
	shadow.build.api/compile-sources (api.clj:261)
	shadow.build.api/compile-sources (api.clj:253)
	shadow.build/compile (build.clj:512)
	shadow.build/compile (build.clj:493)
	shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368)
	shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349)
	shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448)
	shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437)
	clojure.lang.MultiFn.invoke (MultiFn.java:234)
	shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283)
	shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282)
	shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255)
	java.lang.Thread.run (Thread.java:1589)
no idea what I'm doing wrong. The bundled code does run in the browser.

thheller14:03:29

RuntimeException: INTERNAL COMPILER ERROR. is from the closure compiler. looks like there is a bit of code it doens't like

thheller14:03:31

which shadow-cljs version? in case you aren't on the newest maybe try bumping

thheller14:03:39

nvm. easy to reproduce with latest closure compiler

👍 2
fjsousa14:03:40

appreciate it

thheller15:03:16

you can use webpack or so, until the closure compiler sorts this out

fjsousa16:03:19

got it. thanks for you help

fjsousa14:03:26
replied to a thread:I'm trying to import https://www.npmjs.com/package/nostr-tools with (:require ["nostr-tools" :as tools]) but get this compilation error ExceptionInfo: failed to convert sources shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2077) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) Caused by: RuntimeException: INTERNAL COMPILER ERROR. Please report this problem. Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null Node(SHEQ): node_modules/@noble/curves/abstract/weierstrass.js:916:25 for (let o = q - 1n; o % 2n === 0n; o /= 2n) Parent(FOR): node_modules/@noble/curves/abstract/weierstrass.js:916:4 for (let o = q - 1n; o % 2n === 0n; o /= 2n) com.google.javascript.jscomp.Compiler.throwInternalError (Compiler.java:3243) com.google.javascript.jscomp.NodeTraversal.throwUnexpectedException (NodeTraversal.java:509) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:529) com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535) com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735) com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67) com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240) com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378) com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179) com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925) com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979) com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126) com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027) com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976) com.google.javascript.jscomp.Compiler.compile (Compiler.java:859) jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104) java.lang.reflect.Method.invoke (Method.java:578) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067) shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) Caused by: NullPointerException: Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null com.google.javascript.jscomp.PeepholeFoldConstants.tryStrictEqualityComparison (PeepholeFoldConstants.java:1394) com.google.javascript.jscomp.PeepholeFoldConstants.evaluateComparison (PeepholeFoldConstants.java:1423) com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldComparison (PeepholeFoldConstants.java:1167) com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldBinaryOperator (PeepholeFoldConstants.java:188) com.google.javascript.jscomp.PeepholeFoldConstants.optimizeSubtree (PeepholeFoldConstants.java:104) com.google.javascript.jscomp.PeepholeOptimizationsPass$PeepCallback.visit (PeepholeOptimizationsPass.java:82) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:963) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008) com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008) com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseChildren (NodeTraversal.java:1131) com.google.javascript.jscomp.NodeTraversal.handleScript (NodeTraversal.java:847) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:902) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:526) com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535) com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735) com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67) com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240) com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378) com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179) com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925) com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979) com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126) com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027) com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976) com.google.javascript.jscomp.Compiler.compile (Compiler.java:859) jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104) java.lang.reflect.Method.invoke (Method.java:578) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067) shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) no idea what I'm doing wrong. The bundled code does run in the browser.

thanks

Tomáš Baránek15:03:32

Dear Clojurians, what is the simplest way for web app to send simple e-mail notifications? My config is: shadow-cljs/reagent/firebase realtime database/firebase google auth. I would like to send notifications to users (which subscribed to receiving them) on some changes that happen in the realtime database – changes are always caused by other app users. How to implement this? Thank you very much.

thheller15:03:03

please ask in #C03S1L9DN or so. this really isn't a shadow-cljs question, it won't be involved in any of that beyond building the code

fjsousa16:03:19
replied to a thread:I'm trying to import https://www.npmjs.com/package/nostr-tools with (:require ["nostr-tools" :as tools]) but get this compilation error ExceptionInfo: failed to convert sources shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2077) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) Caused by: RuntimeException: INTERNAL COMPILER ERROR. Please report this problem. Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null Node(SHEQ): node_modules/@noble/curves/abstract/weierstrass.js:916:25 for (let o = q - 1n; o % 2n === 0n; o /= 2n) Parent(FOR): node_modules/@noble/curves/abstract/weierstrass.js:916:4 for (let o = q - 1n; o % 2n === 0n; o /= 2n) com.google.javascript.jscomp.Compiler.throwInternalError (Compiler.java:3243) com.google.javascript.jscomp.NodeTraversal.throwUnexpectedException (NodeTraversal.java:509) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:529) com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535) com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735) com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67) com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240) com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378) com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179) com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925) com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979) com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126) com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027) com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976) com.google.javascript.jscomp.Compiler.compile (Compiler.java:859) jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104) java.lang.reflect.Method.invoke (Method.java:578) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067) shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) Caused by: NullPointerException: Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null com.google.javascript.jscomp.PeepholeFoldConstants.tryStrictEqualityComparison (PeepholeFoldConstants.java:1394) com.google.javascript.jscomp.PeepholeFoldConstants.evaluateComparison (PeepholeFoldConstants.java:1423) com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldComparison (PeepholeFoldConstants.java:1167) com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldBinaryOperator (PeepholeFoldConstants.java:188) com.google.javascript.jscomp.PeepholeFoldConstants.optimizeSubtree (PeepholeFoldConstants.java:104) com.google.javascript.jscomp.PeepholeOptimizationsPass$PeepCallback.visit (PeepholeOptimizationsPass.java:82) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:963) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008) com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008) com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseChildren (NodeTraversal.java:1131) com.google.javascript.jscomp.NodeTraversal.handleScript (NodeTraversal.java:847) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:902) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:526) com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535) com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735) com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67) com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240) com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378) com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179) com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925) com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979) com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126) com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027) com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976) com.google.javascript.jscomp.Compiler.compile (Compiler.java:859) jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104) java.lang.reflect.Method.invoke (Method.java:578) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067) shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) no idea what I'm doing wrong. The bundled code does run in the browser.

got it. thanks for you help

fjsousa16:03:16
replied to a thread:I'm trying to import https://www.npmjs.com/package/nostr-tools with (:require ["nostr-tools" :as tools]) but get this compilation error ExceptionInfo: failed to convert sources shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2077) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) Caused by: RuntimeException: INTERNAL COMPILER ERROR. Please report this problem. Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null Node(SHEQ): node_modules/@noble/curves/abstract/weierstrass.js:916:25 for (let o = q - 1n; o % 2n === 0n; o /= 2n) Parent(FOR): node_modules/@noble/curves/abstract/weierstrass.js:916:4 for (let o = q - 1n; o % 2n === 0n; o /= 2n) com.google.javascript.jscomp.Compiler.throwInternalError (Compiler.java:3243) com.google.javascript.jscomp.NodeTraversal.throwUnexpectedException (NodeTraversal.java:509) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:529) com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535) com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735) com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67) com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240) com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378) com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179) com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925) com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979) com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126) com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027) com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976) com.google.javascript.jscomp.Compiler.compile (Compiler.java:859) jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104) java.lang.reflect.Method.invoke (Method.java:578) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067) shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) Caused by: NullPointerException: Cannot invoke "java.math.BigInteger.equals(Object)" because "lv" is null com.google.javascript.jscomp.PeepholeFoldConstants.tryStrictEqualityComparison (PeepholeFoldConstants.java:1394) com.google.javascript.jscomp.PeepholeFoldConstants.evaluateComparison (PeepholeFoldConstants.java:1423) com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldComparison (PeepholeFoldConstants.java:1167) com.google.javascript.jscomp.PeepholeFoldConstants.tryFoldBinaryOperator (PeepholeFoldConstants.java:188) com.google.javascript.jscomp.PeepholeFoldConstants.optimizeSubtree (PeepholeFoldConstants.java:104) com.google.javascript.jscomp.PeepholeOptimizationsPass$PeepCallback.visit (PeepholeOptimizationsPass.java:82) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:963) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008) com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseFunction (NodeTraversal.java:1008) com.google.javascript.jscomp.NodeTraversal.handleFunction (NodeTraversal.java:859) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:905) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverseChildren (NodeTraversal.java:1131) com.google.javascript.jscomp.NodeTraversal.handleScript (NodeTraversal.java:847) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:902) com.google.javascript.jscomp.NodeTraversal.traverseBranch (NodeTraversal.java:953) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:526) com.google.javascript.jscomp.NodeTraversal$Builder.traverse (NodeTraversal.java:465) com.google.javascript.jscomp.NodeTraversal.traverse (NodeTraversal.java:535) com.google.javascript.jscomp.NodeTraversal.traverseScopeRoots (NodeTraversal.java:735) com.google.javascript.jscomp.PeepholeOptimizationsPass.process (PeepholeOptimizationsPass.java:67) com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:240) com.google.javascript.jscomp.PhaseOptimizer$Loop.process (PhaseOptimizer.java:378) com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:179) com.google.javascript.jscomp.Compiler.performTranspilationAndOptimizations (Compiler.java:2925) com.google.javascript.jscomp.Compiler.lambda$stage2Passes$6 (Compiler.java:979) com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:126) com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:1027) com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:976) com.google.javascript.jscomp.Compiler.compile (Compiler.java:859) jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104) java.lang.reflect.Method.invoke (Method.java:578) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) shadow.build.closure/convert-sources-simple*/fn--13035/fn--13036 (closure.clj:2067) shadow.build.closure/convert-sources-simple*/fn--13035 (closure.clj:2065) shadow.build.closure/convert-sources-simple* (closure.clj:2064) shadow.build.closure/convert-sources-simple* (closure.clj:1928) shadow.build.closure/convert-sources-simple (closure.clj:2238) shadow.build.closure/convert-sources-simple (closure.clj:2188) shadow.build.compiler/maybe-closure-convert (compiler.clj:1244) shadow.build.compiler/maybe-closure-convert (compiler.clj:1237) shadow.build.compiler/compile-all (compiler.clj:1493) shadow.build.compiler/compile-all (compiler.clj:1356) shadow.build.api/compile-sources (api.clj:261) shadow.build.api/compile-sources (api.clj:253) shadow.build/compile (build.clj:512) shadow.build/compile (build.clj:493) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368) shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:448) shadow.cljs.devtools.server.worker.impl/fn--15470 (impl.clj:437) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244/fn--15252 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--15243/fn--15244 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--15243 (util.clj:255) java.lang.Thread.run (Thread.java:1589) no idea what I'm doing wrong. The bundled code does run in the browser.

👍 2