diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..ce1d9a14a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,9 @@ +version: 2 +updates: + +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 + diff --git a/bin/ci b/bin/ci index 92692e5f3..90495b182 100755 --- a/bin/ci +++ b/bin/ci @@ -45,6 +45,7 @@ cmd=( ++$SCALA_VER 'set ThisBuild / parallelExecution := false' 'set Global / concurrentRestrictions += Tags.limit(ScalaJSTags.Link, 1)' + clean test # Test development-mode 'set ThisBuild / scalaJSStage := FullOptStage' test # Test production-mode publishLocal # For downstream tests diff --git a/build.sbt b/build.sbt index 3b3104d36..e92a77ebc 100644 --- a/build.sbt +++ b/build.sbt @@ -1,8 +1,9 @@ -ThisBuild / organization := "com.github.japgolly.scalajs-react" -ThisBuild / homepage := Some(url("https://github.com/japgolly/scalajs-react")) -ThisBuild / licenses := ("Apache-2.0", url("http://opensource.org/licenses/Apache-2.0")) :: Nil -ThisBuild / shellPrompt := ((s: State) => Project.extract(s).currentRef.project + "> ") -sonatypeProfileName := "com.github.japgolly" +ThisBuild / organization := "com.github.japgolly.scalajs-react" +ThisBuild / homepage := Some(url("https://github.com/japgolly/scalajs-react")) +ThisBuild / licenses := ("Apache-2.0", url("http://opensource.org/licenses/Apache-2.0")) :: Nil +ThisBuild / shellPrompt := ((s: State) => Project.extract(s).currentRef.project + "> ") +ThisBuild / versionScheme := Some("early-semver") +sonatypeProfileName := "com.github.japgolly" val callback = ScalaJsReact.callback val callbackExtCats = ScalaJsReact.callbackExtCats diff --git a/callback/src/main/scala-2/japgolly/scalajs/react/callback/CallbackTo.scala b/callback/src/main/scala-2/japgolly/scalajs/react/callback/CallbackTo.scala index 04bfd2ac8..b607bd63a 100644 --- a/callback/src/main/scala-2/japgolly/scalajs/react/callback/CallbackTo.scala +++ b/callback/src/main/scala-2/japgolly/scalajs/react/callback/CallbackTo.scala @@ -5,8 +5,7 @@ import japgolly.scalajs.react.util.Effect.Sync import japgolly.scalajs.react.util.JsUtil import japgolly.scalajs.react.util.Util.{catchAll, identityFn} import java.time.{Duration, Instant} -import org.scalajs.dom.raw.Window -import org.scalajs.dom.window +import org.scalajs.dom.{Window, window} import scala.annotation.tailrec import scala.collection.BuildFrom import scala.concurrent.duration.{FiniteDuration, MILLISECONDS} diff --git a/callback/src/main/scala-3/japgolly/scalajs/react/callback/CallbackTo.scala b/callback/src/main/scala-3/japgolly/scalajs/react/callback/CallbackTo.scala index 0204a2cec..1a80ef18c 100644 --- a/callback/src/main/scala-3/japgolly/scalajs/react/callback/CallbackTo.scala +++ b/callback/src/main/scala-3/japgolly/scalajs/react/callback/CallbackTo.scala @@ -5,7 +5,7 @@ import japgolly.scalajs.react.util.Effect.Sync import japgolly.scalajs.react.util.JsUtil import japgolly.scalajs.react.util.Util.{catchAll, identityFn} import java.time.{Duration, Instant} -import org.scalajs.dom.raw.Window +import org.scalajs.dom.Window import org.scalajs.dom.window import scala.annotation.tailrec import scala.collection.BuildFrom diff --git a/coreGeneric/src/main/scala/japgolly/scalajs/react/ComponentDom.scala b/coreGeneric/src/main/scala/japgolly/scalajs/react/ComponentDom.scala index 186070d66..45cbc8b01 100644 --- a/coreGeneric/src/main/scala/japgolly/scalajs/react/ComponentDom.scala +++ b/coreGeneric/src/main/scala/japgolly/scalajs/react/ComponentDom.scala @@ -67,7 +67,7 @@ object ComponentDom { } /** unsafe! may throw an exception */ - final def domCast[N <: dom.raw.Node]: N = + final def domCast[N <: dom.Node]: N = asElement().domCast[N] /** unsafe! may throw an exception */ diff --git a/doc/changelog/2.0.0.md b/doc/changelog/2.0.0.md index 245ac8d7a..b38c8e798 100644 --- a/doc/changelog/2.0.0.md +++ b/doc/changelog/2.0.0.md @@ -99,6 +99,8 @@ Contents: # Changes: Backwards-Incompatible +* scalajs-dom has been bumped to v2.0.0. This is backwards-incompatible with v1.x.y. + * If you used to just add the `extra` module to your sbt's `libraryDependencies` and rely on `core` being included as a transitive dependency, it will no longer work. Explicitly add the `core` to your `libraryDependencies`. @@ -360,6 +362,7 @@ You can run the script in the Migration section at the bottom of the page to aut * `ReactTestUtils` is now a `trait` as well as an `object` so that you can mix it into your own test utils collection * Upgrade deps * Cats-effect to 3.2.9 + * scalajs-dom 2.0.0-RC1 # Thanks diff --git a/downstream-tests/build.sbt b/downstream-tests/build.sbt index 52c1469ba..068184f66 100644 --- a/downstream-tests/build.sbt +++ b/downstream-tests/build.sbt @@ -55,13 +55,14 @@ def scalac3Flags = Seq( def commonSettings: Project => Project = _ .configure(preventPublication) .settings( - scalaVersion := Ver.scala3, - crossScalaVersions := Seq(Ver.scala2, Ver.scala3), - scalacOptions ++= scalacCommonFlags, - scalacOptions ++= byScalaVersion { - case (2, _) => scalac2Flags - case (3, _) => scalac3Flags - }.value, + scalaVersion := Ver.scala3, + crossScalaVersions := Seq(Ver.scala2, Ver.scala3), + scalacOptions ++= scalacCommonFlags, + scalacOptions ++= byScalaVersion { + case (2, _) => scalac2Flags + case (3, _) => scalac3Flags + }.value, + dependencyOverrides ++= globalDependencyOverrides.value, ) lazy val cleanTestAll = taskKey[Unit]("cleanTestAll") diff --git a/extra/src/main/scala/japgolly/scalajs/react/extra/DefaultReusabilityOverlay.scala b/extra/src/main/scala/japgolly/scalajs/react/extra/DefaultReusabilityOverlay.scala index 1b5d61ef6..0e648ae34 100644 --- a/extra/src/main/scala/japgolly/scalajs/react/extra/DefaultReusabilityOverlay.scala +++ b/extra/src/main/scala/japgolly/scalajs/react/extra/DefaultReusabilityOverlay.scala @@ -7,8 +7,7 @@ import japgolly.scalajs.react.util.DomUtil._ import japgolly.scalajs.react.util.Effect.Sync import japgolly.scalajs.react.vdom.html_<^._ import org.scalajs.dom.html.Element -import org.scalajs.dom.raw.{CSSStyleDeclaration, Node} -import org.scalajs.dom.{console, document, window} +import org.scalajs.dom.{CSSStyleDeclaration, Node, console, document, window} import scala.concurrent.duration._ object DefaultReusabilityOverlay { diff --git a/extra/src/main/scala/japgolly/scalajs/react/extra/EventListenerF.scala b/extra/src/main/scala/japgolly/scalajs/react/extra/EventListenerF.scala index c6bfe4b80..7292bdbe5 100644 --- a/extra/src/main/scala/japgolly/scalajs/react/extra/EventListenerF.scala +++ b/extra/src/main/scala/japgolly/scalajs/react/extra/EventListenerF.scala @@ -2,8 +2,7 @@ package japgolly.scalajs.react.extra import japgolly.scalajs.react._ import japgolly.scalajs.react.util.Effect.Dispatch -import org.scalajs.dom.Event -import org.scalajs.dom.raw.EventTarget +import org.scalajs.dom.{Event, EventTarget} import scala.scalajs.js class EventListenerF[F[_]] { diff --git a/extra/src/main/scala/japgolly/scalajs/react/extra/internal/AjaxF.scala b/extra/src/main/scala/japgolly/scalajs/react/extra/internal/AjaxF.scala index 62d64d324..462f9f47a 100644 --- a/extra/src/main/scala/japgolly/scalajs/react/extra/internal/AjaxF.scala +++ b/extra/src/main/scala/japgolly/scalajs/react/extra/internal/AjaxF.scala @@ -1,7 +1,6 @@ package japgolly.scalajs.react.extra.internal import japgolly.scalajs.react.util.Effect -import org.scalajs.dom.ext.AjaxException import org.scalajs.dom.{ProgressEvent, XMLHttpRequest} import scala.scalajs.js import scala.util.{Failure, Success} @@ -206,3 +205,7 @@ class AjaxF[F[_], Async[_]](implicit F: Effect.Sync[F], Async: Effect.Async[Asyn private val newXHR = F.delay(new XMLHttpRequest()) } + +final case class AjaxException(xhr: XMLHttpRequest) extends Exception { + def isTimeout = xhr.status == 0 && xhr.readyState == 4 +} diff --git a/facadeMain/src/main/scala/japgolly/scalajs/react/facade/ReactDOM.scala b/facadeMain/src/main/scala/japgolly/scalajs/react/facade/ReactDOM.scala index 5a1a39dc5..613674bfe 100644 --- a/facadeMain/src/main/scala/japgolly/scalajs/react/facade/ReactDOM.scala +++ b/facadeMain/src/main/scala/japgolly/scalajs/react/facade/ReactDOM.scala @@ -16,7 +16,7 @@ trait ReactDOM extends js.Object { val version: String = js.native - final type Container = dom.Element | dom.raw.Document + final type Container = dom.Element | dom.Document final def render(element : React.Node, container: Container, diff --git a/ghpages/src/main/scala/ghpages/examples/TouchExample.scala b/ghpages/src/main/scala/ghpages/examples/TouchExample.scala index 85b279e68..cdbd7531a 100644 --- a/ghpages/src/main/scala/ghpages/examples/TouchExample.scala +++ b/ghpages/src/main/scala/ghpages/examples/TouchExample.scala @@ -38,10 +38,7 @@ object TouchExample { ) private def formatTouches(touches: dom.TouchList) = - toSeq(touches).map(formatCoordinates).mkString(" | ") - - private def toSeq[A](list: dom.DOMList[A]) = - for(i <- 0 to list.length - 1) yield list.item(i) + touches.iterator.map(formatCoordinates).mkString(" | ") private def formatCoordinates(touch: dom.Touch) = s"${touch.screenX}x${touch.screenY}: ${touch.radiusX}x${touch.radiusY}" diff --git a/ghpages/src/main/scala/ghpages/examples/util/CodeSnippets.scala b/ghpages/src/main/scala/ghpages/examples/util/CodeSnippets.scala index 6fcbbcf2b..66e532ce5 100644 --- a/ghpages/src/main/scala/ghpages/examples/util/CodeSnippets.scala +++ b/ghpages/src/main/scala/ghpages/examples/util/CodeSnippets.scala @@ -3,7 +3,6 @@ package ghpages.examples.util import japgolly.scalajs.react._ import japgolly.scalajs.react.vdom.html_<^._ import org.scalajs.dom.Element -import org.scalajs.dom.ext.PimpedNodeList import scala.scalajs.js.Dynamic.global object CodeSnippets { diff --git a/project/Dependencies.scala b/project/Dependencies.scala index d07e2d3bb..103a22c9f 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -11,12 +11,12 @@ object Dependencies { // Externally observable val cats = "2.6.1" val catsEffect = "3.2.9" - val microlibs = "3.0.1" + val microlibs = "4.0.0-RC1" val monocle2 = "2.1.0" val monocle3 = "3.1.0" val scala2 = "2.13.6" val scala3 = "3.0.2" - val scalaJsDom = "1.2.0" + val scalaJsDom = "2.0.0-RC1" val sourcecode = "0.2.7" // Internal @@ -29,7 +29,7 @@ object Dependencies { val scalaJsJavaTime = "1.0.0" val scalaTest = "3.2.10" val sizzleJs = "2.3.0" - val univEq = "1.6.0" + val univEq = "2.0.0-RC1" val utest = "0.7.10" } @@ -50,7 +50,7 @@ object Dependencies { val nyayaProp = Def.setting("com.github.japgolly.nyaya" %%% "nyaya-prop" % Ver.nyaya) val nyayaTest = Def.setting("com.github.japgolly.nyaya" %%% "nyaya-test" % Ver.nyaya) val scalaCompiler = Def.setting("org.scala-lang" % "scala-compiler" % scalaVersion.value) - val scalaJsDom = Def.setting("org.scala-js" %%% "scalajs-dom" % Ver.scalaJsDom cross CrossVersion.for3Use2_13) + val scalaJsDom = Def.setting("org.scala-js" %%% "scalajs-dom" % Ver.scalaJsDom) val scalaJsJavaTime = Def.setting("org.scala-js" %%% "scalajs-java-time" % Ver.scalaJsJavaTime cross CrossVersion.for3Use2_13) val scalaReflect = Def.setting("org.scala-lang" % "scala-reflect" % scalaVersion.value) val scalaTest = Def.setting("org.scalatest" %%% "scalatest" % Ver.scalaTest) @@ -78,6 +78,7 @@ object Dependencies { } def globalDependencyOverrides = Def.setting(Seq( + Dep.scalaJsDom.value, Dep.univEq.value, Dep.univEqCats.value, )) diff --git a/testUtil/src/main/scala/japgolly/scalajs/react/test/ReactTestUtils.scala b/testUtil/src/main/scala/japgolly/scalajs/react/test/ReactTestUtils.scala index 847823841..8e9558a67 100644 --- a/testUtil/src/main/scala/japgolly/scalajs/react/test/ReactTestUtils.scala +++ b/testUtil/src/main/scala/japgolly/scalajs/react/test/ReactTestUtils.scala @@ -405,7 +405,7 @@ trait ReactTestUtils extends japgolly.scalajs.react.test.internal.ReactTestUtilE (c: GenericComponent[P, CtorType.Props, U], m: M)(f: P => P): M = { val container = m.getDOMNode.asMounted().node.parentNode val p2 = f(m.props) - act(c(p2).renderIntoDOM(container.domCast[org.scalajs.dom.raw.Element])) + act(c(p2).renderIntoDOM(container.domCast[org.scalajs.dom.Element])) } def replaceProps[P, U <: GenericComponent.Unmounted[P, M], M <: GenericComponent.MountedImpure[P, _]] diff --git a/tests/src/test/scala/japgolly/scalajs/react/MiscTest.scala b/tests/src/test/scala/japgolly/scalajs/react/MiscTest.scala index 25722a5f0..fbcbee5ad 100644 --- a/tests/src/test/scala/japgolly/scalajs/react/MiscTest.scala +++ b/tests/src/test/scala/japgolly/scalajs/react/MiscTest.scala @@ -161,7 +161,7 @@ object MiscTest extends TestSuite { } "domExt" - { - import org.scalajs.dom.raw._ + import org.scalajs.dom._ "domCast" - assertType[Node].map(_.domCast[HTMLInputElement]).is[HTMLInputElement] "domAsHtml" - assertType[Node].map(_.domAsHtml).is[HTMLElement] "domToHtml" - { diff --git a/tests/src/test/scala/japgolly/scalajs/react/extra/EventListenerTest.scala b/tests/src/test/scala/japgolly/scalajs/react/extra/EventListenerTest.scala index 3f9bcb056..0c183ec24 100644 --- a/tests/src/test/scala/japgolly/scalajs/react/extra/EventListenerTest.scala +++ b/tests/src/test/scala/japgolly/scalajs/react/extra/EventListenerTest.scala @@ -5,7 +5,6 @@ import japgolly.scalajs.react.test.ReactTestUtils import japgolly.scalajs.react.test.TestUtil._ import japgolly.scalajs.react.vdom.html_<^._ import org.scalajs.dom._ -import org.scalajs.dom.raw.EventInit import utest._ object EventListenerTest extends TestSuite { diff --git a/tests/src/test/scala/japgolly/scalajs/react/test/TestTest.scala b/tests/src/test/scala/japgolly/scalajs/react/test/TestTest.scala index dce3739f9..7c8d16eae 100644 --- a/tests/src/test/scala/japgolly/scalajs/react/test/TestTest.scala +++ b/tests/src/test/scala/japgolly/scalajs/react/test/TestTest.scala @@ -5,8 +5,7 @@ import japgolly.scalajs.react.facade.SyntheticEvent import japgolly.scalajs.react.test.TestUtil._ import japgolly.scalajs.react.vdom.html_<^._ import org.scalajs.dom -import org.scalajs.dom.document -import org.scalajs.dom.raw.{HTMLElement, HTMLInputElement} +import org.scalajs.dom.{HTMLElement, HTMLInputElement, document} import scala.annotation.nowarn import scala.concurrent.Promise import scala.scalajs.concurrent.JSExecutionContext.Implicits.queue diff --git a/util/src/main/scala/japgolly/scalajs/react/util/DomUtil.scala b/util/src/main/scala/japgolly/scalajs/react/util/DomUtil.scala index 3670ad039..38c827588 100644 --- a/util/src/main/scala/japgolly/scalajs/react/util/DomUtil.scala +++ b/util/src/main/scala/japgolly/scalajs/react/util/DomUtil.scala @@ -6,9 +6,9 @@ import org.scalajs.dom.html object DomUtil { /** Extensions to plain old DOM. */ - @inline implicit final class ReactExt_DomNode(private val n: dom.raw.Node) extends AnyVal { + @inline implicit final class ReactExt_DomNode(private val n: dom.Node) extends AnyVal { - @inline def domCast[N <: dom.raw.Node]: N = + @inline def domCast[N <: dom.Node]: N = n.asInstanceOf[N] @inline def domAsHtml: html.Element = @@ -26,6 +26,6 @@ object DomUtil { trait DomUtil { import DomUtil._ - @inline final implicit def ReactExt_DomNode(n: dom.raw.Node): ReactExt_DomNode = + @inline final implicit def ReactExt_DomNode(n: dom.Node): ReactExt_DomNode = new ReactExt_DomNode(n) }