From cd40ba80f7c3b98a8cc2c3a756f7a1f508260dc4 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Tue, 27 Dec 2022 22:16:55 +0000 Subject: [PATCH 1/3] Use Node.js 18 in CI --- .github/workflows/ci.yml | 4 ++-- build.sbt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0aded0c..3089e86 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,11 +66,11 @@ jobs: ~/Library/Caches/Coursier/v1 key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} - - name: Setup NodeJS v16 LTS + - name: Setup NodeJS v18 LTS if: matrix.ci == 'ciNode' || matrix.ci == 'ciJSDOMNodeJS' uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18 cache: npm - name: Install jsdom diff --git a/build.sbt b/build.sbt index 54af0d0..d2c54c3 100644 --- a/build.sbt +++ b/build.sbt @@ -47,8 +47,8 @@ ThisBuild / crossScalaVersions := Seq("2.11.12", "2.12.16", "2.13.7", "3.1.3") ThisBuild / githubWorkflowBuildPreamble ++= Seq( WorkflowStep.Use( UseRef.Public("actions", "setup-node", "v3"), - name = Some("Setup NodeJS v16 LTS"), - params = Map("node-version" -> "16", "cache" -> "npm"), + name = Some("Setup NodeJS v18 LTS"), + params = Map("node-version" -> "18", "cache" -> "npm"), cond = Some("matrix.ci == 'ciNode' || matrix.ci == 'ciJSDOMNodeJS'"), ), WorkflowStep.Run( From 920f082e79f6e8c233d10e17f285037810b249ea Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Tue, 27 Dec 2022 22:24:07 +0000 Subject: [PATCH 2/3] Bump to latest `scalajs-env-nodejs` --- project/plugins.sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/project/plugins.sbt b/project/plugins.sbt index d5d4f32..4821fc4 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,3 +1,4 @@ +libraryDependencies += "org.scala-js" %% "scalajs-env-nodejs" % "1.4.0" libraryDependencies += "org.scala-js" %% "scalajs-env-selenium" % "1.1.1" libraryDependencies += "org.scala-js" %% "scalajs-env-jsdom-nodejs" % "1.1.0" From 32bb479a987e33b6ed8bf78e4f13a3c46500120d Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Tue, 27 Dec 2022 22:48:47 +0000 Subject: [PATCH 3/3] Check for JSDOM first. Fixes https://github.com/scala-js/scala-js-macrotask-executor/issues/74 --- .../macrotaskexecutor/MacrotaskExecutor.scala | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala b/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala index c70cacd..db40e23 100644 --- a/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala +++ b/core/src/main/scala/org/scalajs/macrotaskexecutor/MacrotaskExecutor.scala @@ -84,7 +84,21 @@ object MacrotaskExecutor extends ExecutionContextExecutor { () } - if (canUsePostMessage()) { + if ( + js.typeOf( + js.Dynamic.global.navigator + ) != Undefined && js.Dynamic.global.navigator.userAgent + .asInstanceOf[js.UndefOr[String]] + .exists(_.contains("jsdom")) + ) { + val setImmediate = + js.Dynamic.global.Node.constructor("return setImmediate")() + + { k => + setImmediate(k) + () + } + } else if (canUsePostMessage()) { // postMessage is what we use for most modern browsers (when not in a webworker) // generate a unique messagePrefix for everything we do @@ -134,20 +148,6 @@ object MacrotaskExecutor extends ExecutionContextExecutor { channel.port2.postMessage(handle) () } - } else if ( - js.typeOf( - js.Dynamic.global.navigator - ) != Undefined && js.Dynamic.global.navigator.userAgent - .asInstanceOf[js.UndefOr[String]] - .exists(_.contains("jsdom")) - ) { - val setImmediate = - js.Dynamic.global.Node.constructor("return setImmediate")() - - { k => - setImmediate(k) - () - } } else { // we don't try to look for process.nextTick since scalajs doesn't support old node // we're also not going to bother fast-pathing for IE6; just fall through