This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-12-03
Channels
- # adventofcode (107)
- # announcements (1)
- # asami (14)
- # babashka (67)
- # beginners (89)
- # calva (34)
- # cider (17)
- # clj-kondo (5)
- # cljs-dev (2)
- # clojure (57)
- # clojure-europe (52)
- # clojure-india (1)
- # clojure-italy (1)
- # clojure-losangeles (2)
- # clojure-nl (6)
- # clojure-uk (39)
- # clojurescript (40)
- # community-development (3)
- # conjure (3)
- # cursive (17)
- # datomic (11)
- # docker (13)
- # events (3)
- # figwheel-main (3)
- # fulcro (12)
- # graalvm (7)
- # holy-lambda (7)
- # honeysql (9)
- # introduce-yourself (5)
- # malli (9)
- # minecraft (3)
- # missionary (21)
- # nextjournal (7)
- # off-topic (52)
- # pathom (3)
- # polylith (11)
- # portal (3)
- # re-frame (21)
- # reagent (34)
- # reclojure (7)
- # reitit (1)
- # reveal (11)
- # shadow-cljs (68)
- # tools-build (12)
- # tools-deps (5)
- # vim (4)
- # xtdb (9)
Hey all, in the Stripe API it has a section on pagination and it says this:
> To use the auto-pagination feature in Node 10+, simply iterate over a "list" call with the parameters you need in a for await
loop.
With this code example:
// In Node 10+:
for await (const customer of stripe.customers.list({limit: 3})) {
// Do something with customer
}
I'm bamboozled as to how to accomplish this with cljs. Any pointers?@chris358 try cljs.core/es6-iterator-seq
. in clojure terms its just a lazy seq of promises
Thanks, will give it a try. 🙏
In Node, I was hoping to read EDN from STDIN using tools.reader 1.3.6
. Am I missing some steps?
(edn/read (reader-types/node-readable-push-back-reader js/process.stdin))
ERROR [salus.client.cli:35] - #error {:message "Argument to char must be a character or number", :data {:type :reader-exception}, :cause #object[Error Error: Argument to char must be a character or number]}
Error: Argument to char must be a character or number
at new cljs$core$ExceptionInfo (/home/adam/projects/bevuta/cljs-client/.shadow-cljs/builds/cli/dev/out/cljs-runtime/cljs/core.cljs:11472:11)
at Function.cljs$core$IFn$_invoke$arity$3 (/home/adam/projects/bevuta/cljs-client/.shadow-cljs/builds/cli/dev/out/cljs-runtime/cljs/core.cljs:11499:1)
at Function.cljs$core$IFn$_invoke$arity$4 (/home/adam/projects/bevuta/cljs-client/.shadow-cljs/builds/cli/dev/out/cljs-runtime/cljs/tools/reader/edn.cljs:427:19)
at Function.cljs$core$IFn$_invoke$arity$2 (/home/adam/projects/bevuta/cljs-client/.shadow-cljs/builds/cli/dev/out/cljs-runtime/cljs/tools/reader/edn.cljs:398:9)
at Function.cljs$core$IFn$_invoke$arity$1 (/home/adam/projects/bevuta/cljs-client/.shadow-cljs/builds/cli/dev/out/cljs-runtime/cljs/tools/reader/edn.cljs:395:14)
JS/node doesn't have blocking IO so process.stdin is not a regular inputstream that tools.reader can use
Hello, I follow the guide from https://clojurescript.org/guides/quick-start, using the latest release ClojureScript JAR (1.10.891) and I got an error, am I missing something?
PS D:\Rasyid\Coding\clojurescript\quick-start> java -cp ".\cljs.jar;src" cljs.main -co .\build.edn -r
Exception in thread "main" clojure.lang.ExceptionInfo: Unexpected error during REPL initialization {:cljs.repl/error :init-failed}
at cljs.repl$repl_STAR_.invokeStatic(repl.cljc:1220)
at cljs.repl$repl_STAR_.invoke(repl.cljc:1033)
at cljs.cli$repl_opt.invokeStatic(cli.clj:325)
at cljs.cli$repl_opt.invoke(cli.clj:312)
at cljs.cli$main.invokeStatic(cli.clj:703)
at cljs.cli$main.doInvoke(cli.clj:692)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$apply.invoke(core.clj:660)
at cljs.main$_main.invokeStatic(main.clj:65)
at cljs.main$_main.doInvoke(main.clj:56)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at cljs.main.main(Unknown Source)
Caused by: clojure.lang.ExceptionInfo: null {:clojure.error/source nil, :clojure.error/line nil, :clojure.error/column nil, :clojure.error/phase :compilation}
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:4269)
at cljs.analyzer$analyze.invoke(analyzer.cljc:4255)
at cljs.analyzer$analyze_file$fn__3374.invoke(analyzer.cljc:4773)
at cljs.analyzer$analyze_file.invokeStatic(analyzer.cljc:4768)
at cljs.analyzer$analyze_file.invoke(analyzer.cljc:4726)
at cljs.analyzer$analyze_file.invokeStatic(analyzer.cljc:4790)
at cljs.analyzer$analyze_file.invoke(analyzer.cljc:4726)
at cljs.analyzer$analyze_file.invokeStatic(analyzer.cljc:4740)
at cljs.analyzer$analyze_file.invoke(analyzer.cljc:4726)
at cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1473)
at cljs.compiler$with_core_cljs.invoke(compiler.cljc:1463)
at cljs.repl$repl_STAR_.invokeStatic(repl.cljc:1121)
... 12 more
Caused by: clojure.lang.ExceptionInfo: Illegal char <:> at index 4: file:\D:\Rasyid\Coding\clojurescript\quick-start\cljs.jar!\goog\math\long.js in file file:/D:/Rasyid/Coding/clojurescript/quick-start/cljs.jar!/cljs/core.cljs {:tag :cljs/analysis-error}
at cljs.analyzer$error.invokeStatic(analyzer.cljc:719)
at cljs.analyzer$error.invoke(analyzer.cljc:715)
... 24 more
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 4: file:\D:\Rasyid\Coding\clojurescript\quick-start\cljs.jar!\goog\math\long.js
at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
at java.base/java.io.File.toPath(File.java:2329)
at cljs.externs$resource__GT_source_file.invokeStatic(externs.clj:293)
at cljs.externs$resource__GT_source_file.invoke(externs.clj:290)
at cljs.externs$analyze_goog_file.invokeStatic(externs.clj:307)
at cljs.externs$analyze_goog_file.invoke(externs.clj:297)
at cljs.analyzer$analyze_deps.invokeStatic(analyzer.cljc:2640)
at cljs.analyzer$analyze_deps.invoke(analyzer.cljc:2612)
at cljs.analyzer$ns_side_effects.invokeStatic(analyzer.cljc:4131)
at cljs.analyzer$ns_side_effects.invoke(analyzer.cljc:4126)
at cljs.analyzer$analyze_STAR_$fn__3248.invoke(analyzer.cljc:4253)
at clojure.lang.PersistentVector.reduce(PersistentVector.java:343)
at clojure.core$reduce.invokeStatic(core.clj:6827)
at clojure.core$reduce.invoke(core.clj:6810)
at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:4253)
at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:4244)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:4272)
... 23 more
build.edn
is supposed to be a namespace, not a file. So, it shouldn't start with .\
and instead there should be a .\src\build\edn.cljs
file with a top (ns build.edn)
form.
Notice how in the guide they specify --compile hello-world.core
and have the file at src/hello_world/core.cljs
.
Also, I think you don't have to use a JAR file even on Windows - clj
CLI is available there as well, although it seems to be in its alpha state: https://github.com/clojure/tools.deps.alpha/wiki/clj-on-Windows
@ahmadrasyidsalim bug that's since been fixed
This one has me stumped. From the code for a browser-based PDF viewer that gets the PDF file data as a Base64 string from a remote server:
(let [image-string (:imageString image-data)
image-blob (when-not (empty? image-string)
(js/Blob. #js [(js/atob image-string)] #js {:type "application/pdf"}))]
(cljs.pprint/pprint {:string-size (when image-string (count image-string))
:bytes--size (when image-blob (.-size image-blob))}))
==> {:string-size 5509500, :bytes--size 6223041}
How is the Base64-encoded string SMALLER than the binary it decodes to??It’s Base64 though--all plain vanilla ASCII.
I've never actually looked at the details of Base64 before -- perhaps it has some features for run-length encoding of a bunch of 0s in the binary data?
5509500 * 3/4 = 4132125 should be close to the expected decoded binary length. It seems suspicious that 6223041 is almost exactly 1.5 times larger than that.
Here’s what I get with a different PDF file: {:string-size 9833864, :bytes--size 11096841}
And another: {:string-size 8068844, :bytes--size 9116349}
Ok, that last one I tracked down the original file, and the actual file size is 6,051,632 bytes. Definitely something funk-ish happening here.
Aha, solved the problem: you have to copy the individual bytes of the atob result into a Uint8Array, and use the Uint8Array in the constructor for the Blob.
The decoded Base64 value was indeed smaller than the encoded value, as it should be. The problem was that it was being inflated by the Blob constructor somehow, probably related to character encoding. Putting a Uint8Array in the middle kept it the right size.
I am trying to call this function: openImageDialog
. I have an instance of Reader react component but (.openImageDialog reader)
doesn’t work. I also tried to call it on the class itself and it says it’s not a function. https://github.com/JodusNodus/react-qr-reader/blob/master/src/index.js#L61
What do you mean by "doesn't work"? And what do you mean by "call it on the class itself"?
I have imported this as QrReader symbol in my ns
I instantiate this react component into reader
variable
Then I tried:
(.openImageDialog reader)
which results in camera.cljs:68 Uncaught TypeError: reader.openImageDialog is not a function
I tried (.openImageDialog QrReader)
and I get `camera.cljs:68
Uncaught TypeError: module$node_modules$react_qr_reader_rokl$lib$index.openImageDialog is not a function`
reader.openImageDialog is not a function
most likely means that reader
is not what you think it is. Try logging the value and comparing the result to your expectations.
core.cljs:200 #js {$$typeof #object[Symbol(react.element)], :type #object[Reader], :key nil, :ref nil, :props #js {:delay 300, :style #js {:width 100%}, :resolution 1000, :onScan #object[Function], :onError #object[Function], :characterSet ISO-8859-2, :facingMode user, :showViewFinder true, :constraints nil}, :_owner #object[FiberNode [object Object]], :_store #js {}}
that’s what println for reader prints
seems like an instance of react element
Instantiated by js/React.createElement
An element is not an instance of the component's class. You have to use a ref to get the underlying instance.
hm seems like ref is nil
Also, you probably don't need to use js/React.createElement
directly - but that depends on the UI library/framework that you're using on top of React, if any.
If the ref is nil then you're either not setting it right, or you're looking at it at the wrong time, or you're setting it for some wrapper that doesn't support refs.
Aha, solved the problem: you have to copy the individual bytes of the atob result into a Uint8Array, and use the Uint8Array in the constructor for the Blob.