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( 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 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"