clojurescript 2025-03-27

After updating my ClojureScript project to support the gcp function runtime upgrade from Node.js 18 to 20, I have also updated cheerio to latest version ----- I'm encountering the following error. Any help would be appreciated! The required JS dependency "node:stream" is not available, it was required by "node_modules/parse5-parser-stream/dist/cjs/index.js". Dependency Trace: numbered_headings/ui/modules/global.cljs numbered_headings/ui/modules/global_config.cljs numbered_headings/ui/remote.cljs node_modules/cheerio/dist/commonjs/index.js node_modules/parse5-parser-stream/dist/cjs/index.js

this means that this library is trying to use the node built-in stream package. which isn't available when building for the browser

or which :target do you use? also which shadow-cljs version do you use?

:target :browser

"shadow-cljs": "2.16.12"

ok upgrade shadow-cljs and it should just work

2.28.22 is the latest

1

still getting the same issue - it exactly happened after upgrading firebase , firebase-admin and firebase-functions to latest version to upgrade node20 in gcp functions.

node_modules/cheerio/dist/commonjs/index.js this file should not be picked if you actually upgraded and restarted after

there is a node_modules/cheerio/dist/browser/index.js that should be used instead?

or is that being used and it still ends up with the node:stream dependency further down?

is that being used and it still ends up with the node:stream dependency further down

kinda don't believe that? that file has no node:stream require. so that would be weird?

or what is the entire new dependency trace?

[2025-03-27 16:10:42.900 - WARNING] TCP Port 9630 in use. shadow-cljs - server version: 2.16.12 running at https://localhost:9630 shadow-cljs - nREPL server started on port 54779 shadow-cljs - watching build :functions shadow-cljs - watching build :app [:functions] Configuring build. [:app] Configuring build. [:app] Compiling ... [:functions] Compiling ... [:app] Build failure: The required JS dependency "node:stream" is not available, it was required by "node_modules/parse5-parser-stream/dist/cjs/index.js". Dependency Trace: numbered_headings/ui/modules/global.cljs numbered_headings/ui/modules/global_config.cljs numbered_headings/ui/remote.cljs node_modules/cheerio/dist/commonjs/index.js node_modules/parse5-parser-stream/dist/cjs/index.js Searched for npm packages in: /Users/priyanka.gupta/sde/development/numbered-headings-cloud/node_modules

node_modules/cheerio/dist/commonjs/index.js

shadow-cljs - server version: 2.16.12

so you didn't upgrade

btw for multi line code

like
this
use three backticks

👍 1

as per suggestion after upgrating the shawdow-cljs to 2.28.22 the issue "node:stream" is not available resolved -- but i am getting below issue now - shadow-cljs - config: /Users/priyanka.gupta/sde/development/numbered-headings-cloud/shadow-cljs.edn shadow-cljs - starting via "clojure" [2025-03-27 22:57:38.174 - WARNING] TCP Port 9630 in use. shadow-cljs - server version: *2.28.22* running at shadow-cljs - nREPL server started on port 65325 shadow-cljs - watching build :functions shadow-cljs - watching build :app [:functions] Configuring build. [:app] Configuring build. [:app] Compiling ... [:functions] Compiling ... WARNING: abs already refers to: #'clojure.core/abs in namespace: taoensso.encore, being replaced by: #'taoensso.encore/abs [:app] Build failure: package firebase-functions had exports, but could not resolve ./lib/logger {:package #object[java.io.File 0x3da41d65 "/Users/priyanka.gupta/sde/development/numbered-headings-cloud/node_modules/firebase-functions"], :require-from nil, :rel-require "./lib/logger"} ExceptionInfo: package firebase-functions had exports, but could not resolve ./lib/logger shadow.build.npm/find-resource-in-package (npm.clj:835) shadow.build.npm/find-resource-in-package (npm.clj:813) shadow.build.npm/find-resource (npm.clj:987) shadow.build.npm/find-resource (npm.clj:879) shadow.build.resolve/find-npm-resource (resolve.clj:123) shadow.build.resolve/find-npm-resource (resolve.clj:94) shadow.build.resolve/eval13071/fn--13074 (resolve.clj:266) clojure.lang.MultiFn.invoke (MultiFn.java:244) shadow.build.resolve/find-resource-for-string (resolve.clj:81) shadow.build.resolve/find-resource-for-string (resolve.clj:70) shadow.build.resolve/resolve-string-require (resolve.clj:466) shadow.build.resolve/resolve-string-require (resolve.clj:449) shadow.build.resolve/resolve-require (resolve.clj:702) shadow.build.resolve/resolve-require (resolve.clj:695) shadow.build.resolve/resolve-deps/fn--13020 (resolve.clj:52) clojure.lang.PersistentVector.reduce (PersistentVector.java:343) clojure.core/reduce (core.clj:6886) clojure.core/reduce (core.clj:6869) shadow.cljs.util/reduce-> (util.clj:42) shadow.cljs.util/reduce-> (util.clj:41) shadow.build.resolve/resolve-deps (resolve.clj:50) shadow.build.resolve/resolve-deps (resolve.clj:34) shadow.build.resolve/resolve-symbol-require (resolve.clj:689) shadow.build.resolve/resolve-symbol-require (resolve.clj:649) shadow.build.resolve/resolve-require (resolve.clj:699) shadow.build.resolve/resolve-require (resolve.clj:695) shadow.build.resolve/resolve-deps/fn--13020 (resolve.clj:52) clojure.lang.PersistentVector.reduce (PersistentVector.java:343) clojure.core/reduce (core.clj:6886) clojure.core/reduce (core.clj:6869) shadow.cljs.util/reduce-> (util.clj:42) shadow.cljs.util/reduce-> (util.clj:41) shadow.build.resolve/resolve-deps (resolve.clj:50) shadow.build.resolve/resolve-deps (resolve.clj:34) shadow.build.resolve/resolve-symbol-require (resolve.clj:689) shadow.build.resolve/resolve-symbol-require (resolve.clj:649) shadow.build.resolve/resolve-require (resolve.clj:699) shadow.build.resolve/resolve-require (resolve.clj:695) shadow.build.resolve/resolve-deps/fn--13020 (resolve.clj:52) clojure.lang.PersistentVector.reduce (PersistentVector.java:343) clojure.core/reduce (core.clj:6886) clojure.core/reduce (core.clj:6869) shadow.cljs.util/reduce-> (util.clj:42) shadow.cljs.util/reduce-> (util.clj:41) shadow.build.resolve/resolve-deps (resolve.clj:50) shadow.build.resolve/resolve-deps (resolve.clj:34) shadow.build.resolve/resolve-symbol-require (resolve.clj:689) shadow.build.resolve/resolve-symbol-require (resolve.clj:649) shadow.build.resolve/resolve-require (resolve.clj:699) shadow.build.resolve/resolve-require (resolve.clj:695) shadow.build.resolve/resolve-entry (resolve.clj:709) shadow.build.resolve/resolve-entry (resolve.clj:708) clojure.lang.PersistentVector.reduce (PersistentVector.java:343) clojure.core/reduce (core.clj:6886) clojure.core/reduce (core.clj:6869) shadow.cljs.util/reduce-> (util.clj:42) shadow.cljs.util/reduce-> (util.clj:41) shadow.build.resolve/resolve-entries (resolve.clj:723) shadow.build.resolve/resolve-entries (resolve.clj:714) shadow.build.modules/resolve-module/fn--15935 (modules.clj:252) shadow.build.modules/resolve-module (modules.clj:248) shadow.build.modules/resolve-module (modules.clj:238) clojure.lang.PersistentVector.reduce (PersistentVector.java:343) clojure.core/reduce (core.clj:6886) clojure.core/reduce (core.clj:6869) shadow.build.modules/resolve-modules (modules.clj:258) shadow.build.modules/resolve-modules (modules.clj:257) shadow.build.modules/analyze (modules.clj:312) shadow.build.modules/analyze (modules.clj:303) shadow.build/resolve (build.clj:459) shadow.build/resolve (build.clj:453) shadow.build/compile (build.clj:509) 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/eval17760/fn--17762 (impl.clj:448) clojure.lang.MultiFn.invoke (MultiFn.java:234) shadow.cljs.devtools.server.util/server-thread/fn--17513/fn--17514/fn--17522 (util.clj:283) shadow.cljs.devtools.server.util/server-thread/fn--17513/fn--17514 (util.clj:282) shadow.cljs.devtools.server.util/server-thread/fn--17513 (util.clj:255) WARNING: update-keys already refers to: #'clojure.core/update-keys in namespace: io.aviso.exception, being replaced by: #'io.aviso.exception/update-keys [:functions] Build completed. (268 files, 3 compiled, 1 warnings, 16.94s) `------ WARNING #1 - :redef -----------------------------------------------------` Resource: taoensso/encore.cljs:964:1 -------------------------------------------------------------------------------- 961 | ) 962 | 963 | (defn pow [n exp] (Math/pow n exp)) `964 | (defn abs [n] (if (neg? n) (- n) n)) ; #+clj (Math/abs n) reflects` -------^------------------------------------------------------------------------ `abs already refers to: cljs.core/abs being replaced by: taoensso.encore/abs` -------------------------------------------------------------------------------- 965 | (defn round* ; round 966 | ([ n] (round* :round nil n)) 967 | ([type n] (round* type nil n)) 968 | ([type nplaces n] -------------------------------------------------------------------------------- ^Cmake: *** [watch] Interrupt: 2

looks like you have a (:require ["firebase-functions/lib/logger" ...]) in your code somewhere? but the library doesn't want you to do that

possibly because you upgraded that dependency?

(:require ["firebase-functions/logger" ...]) is what you are supposed to be doing when looking at the package.json of that package

fixed the above issue by replacing the proper import -- now getting new issue while building the app - shadow-cljs - starting via "clojure" [2025-03-27 23:42:33.672 - WARNING] TCP Port 9630 in use. shadow-cljs - server version: 2.28.22 running at shadow-cljs - nREPL server started on port 50790 shadow-cljs - watching build :functions shadow-cljs - watching build :app [:functions] Configuring build. [:app] Configuring build. [:app] Compiling ... [:functions] Compiling ... [:app] Build failure: The required JS dependency "async_hooks" is not available, it was required by "node_modules/firebase-functions/lib/common/trace.js". Dependency Trace: numbered_headings/ui/modules/page_hidden.cljs numbered_headings/update.cljs numbered_headings/server/log.cljs node_modules/firebase-functions/lib/logger/index.js node_modules/firebase-functions/lib/common/trace.js Searched for npm packages in: /Users/priyanka.gupta/sde/development/numbered-headings-cloud/node_modules See:

that is also a node only dependency not available in the browser

are you actually running in the browser? seems like you use a lot of packages intended for node?

yes its on browser and also some part in BE - below is the shadow-cljs.edn -`{:deps true` :http {:host "localhost" :ssl-port 9630} :ssl {:keystore "ssl/keystore.jks" :password "changeit"} :builds {:functions {:target :node-library :output-to "functions/index.js" :exports-var numbered-headings.server/cloud-functions :closure-defines {numbered-headings.server.amplitude-helper/AMPLITUDE_KEY #shadow/env "AMPLITUDE_KEY" numbered-headings.server.handlers/LOGROCKET_KEY #shadow/env "LOGROCKET_KEY" numbered-headings.server.handlers/CSP_UNSAFE_EVAL #shadow/env "CSP_UNSAFE_EVAL" numbered-headings.server.launchdarkly-helper/LAUNCH_DARKLY_KEY #shadow/env "LAUNCH_DARKLY_KEY"}} :app {:target :browser :js-options {:resolve {"jquery" {:target :global :global "jQuery"} "jQuery" {:target :global :global "jQuery"}}} :compiler-options {:output-feature-set :es8} :output-dir "public/js" :asset-path "/js" :module-hash-names true :build-options {:manifest-name "../../functions/manifest.edn"} :devtools {:before-load numbered-headings.ui.current-app/stop :after-load numbered-headings.ui.current-app/start :devtools-url ""} :modules {:shared {:entries [] :init-fn numbered-headings.ui.amplitude-client/initialize} :main {:entries [numbered-headings.ui.modules.page] :init-fn numbered-headings.ui.modules.page/init :depends-on #{:shared}} :hidden {:entries [numbered-headings.ui.modules.page-hidden] :init-fn numbered-headings.ui.modules.page-hidden/init :depends-on #{:shared}} :legacy {:entries [numbered-headings.ui.modules.legacy] :init-fn numbered-headings.ui.modules.legacy/init :depends-on #{:shared}} :macro {:entries [numbered-headings.ui.modules.macro] :init-fn numbered-headings.ui.modules.macro/init :depends-on #{:shared}} :new-getting-started {:entries [numbered-headings.ui.pages.new-getting-started] :init-fn numbered-headings.ui.pages.new-getting-started/init :depends-on #{:shared}} :space-config {:entries [numbered-headings.ui.modules.space] :init-fn numbered-headings.ui.modules.space/init :depends-on #{:shared}} :global-config {:entries [numbered-headings.ui.modules.global] :init-fn numbered-headings.ui.modules.global/init :depends-on #{:shared}} :configure {:entries [numbered-headings.ui.pages.configure] :init-fn numbered-headings.ui.pages.configure/init :depends-on #{:shared}}} :closure-defines {numbered-headings.ui.amplitude-client/AMPLITUDE_KEY #shadow/env "AMPLITUDE_KEY" numbered-headings.ui.amplitude-client/FINGER_PRINT_KEY #shadow/env "FINGER_PRINT_KEY"}} :test {:target :node-test :output-to "target/node-tests.js" :ns-regexp "-test$" :autorun true} :cards {:target nubank.workspaces.shadow-cljs.target :ns-regexp "^numbered-headings\\.client.*-(test|cards)$" :output-dir "public/js/workspaces" :asset-path "/js/workspaces" :preloads [com.fulcrologic.fulcro.inspect.preload]}}}

ok, so I'm guessing this node part isn't actually supposed to be in the browser then? only in the :functions build?

numbered_headings/server/log.cljs this too sounds like its meant for the server, but is somewhere included by the :app build

Yes - This ClojureScript file is responsible for structured logging on the server-side (Node.js) using Firebase Functions' logging API. I

so then don't include it in the :app files and you should be good

numbered_headings/update.cljs required it, maybe accidentally

👀 1

:app {:target :browser :ns-exclude-regexp #"^numbered-headings\.server\..*" ;; <--- Exclude server code -- is this the correct syntax to exclude server folder?

that is not an option that exists or has ever existed

only the code that you require is actually included, so you need to remove that require in the namespace

if i remove the require namespaces like ["firebase-functions" :as functions] or ["firebase-functions/logger" :as logger] from server.cljs or update.cljs then GCP cloud function will stop working

that is not the require I'm talking about

Dependency Trace:
	numbered_headings/ui/modules/page_hidden.cljs
	numbered_headings/update.cljs
	numbered_headings/server/log.cljs
	node_modules/firebase-functions/lib/logger/index.js
	node_modules/firebase-functions/lib/common/trace.js

this is telling you that numbered_headings/update.cljs is requiring numbered_headings/server/log.cljs

I'm guessing that the server.log thing is intended only for the server

so in numbered_headings/update.cljs you remove the require to numbered-headings.server.log

I don't know what any of your code does, so this you have to figure out on your own

could be that numbered_headings/ui/modules/page_hidden.cljs isn't supposed to require the update ns, no clue

it is resolved now .. thanks a lot for helping.!!