From 9fec5cd3f1a0518aa11db18c75e0f11798cb847d Mon Sep 17 00:00:00 2001 From: Naftoli Gugenheim <98384+nafg@users.noreply.github.com> Date: Mon, 10 Jan 2022 23:55:41 -0500 Subject: [PATCH 1/4] build.sbt: moduleConfig doesn't need to add scalajs-react extra module It is a transitive dependency via simpleFacade anyway --- build.sbt | 1 - 1 file changed, 1 deletion(-) diff --git a/build.sbt b/build.sbt index aced115..f908c73 100644 --- a/build.sbt +++ b/build.sbt @@ -79,7 +79,6 @@ def moduleConfig(npmName: String, npmVersion: String): Project => Project = useYarn := true, sonatypeProfileName := "io.github.nafg", Compile / npmDependencies += npmName -> npmVersion, - libraryDependencies += "com.github.japgolly.scalajs-react" %%% "extra" % "1.7.7", scalacOptions ++= (if (scalaJSVersion.startsWith("0.6.")) Seq("-P:scalajs:sjsDefinedByDefault") else Nil) ) From 9356482644176a1e3f2fc44a54ecbc21479f9e02 Mon Sep 17 00:00:00 2001 From: Naftoli Gugenheim <98384+nafg@users.noreply.github.com> Date: Tue, 11 Jan 2022 00:34:07 -0500 Subject: [PATCH 2/4] .gitignore: Add *.semanticdb and /*/yarn.lock --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index fc93437..09198a4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ target/ .bsp/ .vscode/ metals.sbt +*.semanticdb +/*/yarn.lock From d046f6a17c82e6c0fb434555381faaefa13b6bb5 Mon Sep 17 00:00:00 2001 From: Naftoli Gugenheim <98384+nafg@users.noreply.github.com> Date: Tue, 11 Jan 2022 00:32:51 -0500 Subject: [PATCH 3/4] Use scalac-options library --- build.sbt | 37 ++++++++++++++++++++----------------- project/build-build.sbt | 1 + 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/build.sbt b/build.sbt index f908c73..f687a53 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,25 @@ +import _root_.io.github.nafg.scalacoptions._ import sbtdynver.GitDirtySuffix +def myScalacOptions(version: String) = + ScalacOptions.all(version)( + (opts: options.Common) => + opts.deprecation ++ + opts.unchecked ++ + opts.feature, + (_: options.V2).explaintypes, + (opts: options.V2_12) => + opts.language("higherKinds") ++ opts.Xfuture ++ opts.YpartialUnification, + (_: options.V2_13).Xlint("_"), + (opts: options.V2_13_6_+) => + opts.WdeadCode ++ + opts.WextraImplicit ++ + opts.WnumericWiden ++ + opts.XlintUnused ++ + opts.WvalueDiscard, + ) + inThisBuild(List( organization := "io.github.nafg.scalajs-facades", homepage := Some(url("https://github.com/nafg/scalajs-facades")), @@ -10,23 +29,7 @@ inThisBuild(List( ), crossScalaVersions := Seq("2.12.15", "2.13.7"), scalaVersion := (ThisBuild / crossScalaVersions).value.last, - scalacOptions ++= Seq( - "-deprecation", - "-feature", - "-unchecked", - "-explaintypes", - "-Xlint:_", - "-Ywarn-dead-code", - "-Ywarn-extra-implicit", - "-Ywarn-numeric-widen", - "-Ywarn-unused:_", - "-Ywarn-value-discard" - ), - scalacOptions ++= - (if (scalaVersion.value.startsWith("2.12.")) - List("-language:higherKinds", "-Xfuture", "-Ypartial-unification") - else - Nil), + scalacOptions ++= myScalacOptions(scalaVersion.value), dynverGitDescribeOutput ~= (_.map(o => o.copy(dirtySuffix = GitDirtySuffix("")))), dynverSonatypeSnapshots := true, githubWorkflowJobSetup += diff --git a/project/build-build.sbt b/project/build-build.sbt index e23ce3e..b78497e 100644 --- a/project/build-build.sbt +++ b/project/build-build.sbt @@ -1,2 +1,3 @@ libraryDependencies += "com.lihaoyi" %% "os-lib" % "0.8.0" libraryDependencies += "com.lihaoyi" %% "ujson" % "1.4.4" +libraryDependencies += "io.github.nafg.scalac-options" %% "scalac-options" % "0.1.9" From 671eb6ab36670134afae6bb0d39bc0a2fcc49696 Mon Sep 17 00:00:00 2001 From: Naftoli Gugenheim <98384+nafg@users.noreply.github.com> Date: Tue, 11 Jan 2022 01:02:21 -0500 Subject: [PATCH 4/4] scalajs-react 2.0.0, add Scala 3 and drop 2.12 --- build.sbt | 10 +++++----- project/FacadeGenerator.scala | 2 +- .../reactphonenumberinput/ReactPhoneNumberInput.scala | 2 +- .../nafg/scalajs/facades/reactselect/OptGroup.scala | 5 +++++ .../nafg/scalajs/facades/reactselect/package.scala | 6 +----- .../scala/io/github/nafg/simplefacade/Implicits.scala | 4 ++-- .../scala/io/github/nafg/simplefacade/PropTypes.scala | 3 ++- 7 files changed, 17 insertions(+), 15 deletions(-) diff --git a/build.sbt b/build.sbt index f687a53..a5383bb 100644 --- a/build.sbt +++ b/build.sbt @@ -9,15 +9,14 @@ def myScalacOptions(version: String) = opts.unchecked ++ opts.feature, (_: options.V2).explaintypes, - (opts: options.V2_12) => - opts.language("higherKinds") ++ opts.Xfuture ++ opts.YpartialUnification, (_: options.V2_13).Xlint("_"), (opts: options.V2_13_6_+) => opts.WdeadCode ++ opts.WextraImplicit ++ opts.WnumericWiden ++ opts.XlintUnused ++ - opts.WvalueDiscard, + opts.WvalueDiscard ++ + opts.Xsource("3") ) inThisBuild(List( @@ -27,7 +26,7 @@ inThisBuild(List( developers := List( Developer("nafg", "Naftoli Gugenheim", "98384+nafg@users.noreply.github.com", url("https://github.com/nafg")) ), - crossScalaVersions := Seq("2.12.15", "2.13.7"), + crossScalaVersions := Seq("2.13.7", "3.0.2"), scalaVersion := (ThisBuild / crossScalaVersions).value.last, scalacOptions ++= myScalacOptions(scalaVersion.value), dynverGitDescribeOutput ~= (_.map(o => o.copy(dirtySuffix = GitDirtySuffix("")))), @@ -63,7 +62,8 @@ lazy val simpleFacade = sjsCrossTarget, sonatypeProfileName := "io.github.nafg", libraryDependencies ++= Seq( - "com.github.japgolly.scalajs-react" %%% "extra" % "1.7.7", + "com.github.japgolly.scalajs-react" %%% "core" % "2.0.0", + "com.github.japgolly.scalajs-react" %%% "extra" % "2.0.0", "me.shadaj" %%% "slinky-readwrite" % "0.7.0", "org.scalameta" %%% "munit" % "0.7.29" % Test ) diff --git a/project/FacadeGenerator.scala b/project/FacadeGenerator.scala index a8da471..e19d31d 100644 --- a/project/FacadeGenerator.scala +++ b/project/FacadeGenerator.scala @@ -127,7 +127,7 @@ object FacadeGenerator { |${imports.map("import " + _).mkString("\n")} |import scala.scalajs.js |import scala.scalajs.js.annotation.JSImport - |import japgolly.scalajs.react.raw.React.ElementType + |import japgolly.scalajs.react.facade.React.ElementType |import io.github.nafg.simplefacade.{FacadeModule, ${if (factoryMethods.isEmpty || info.maybeChildrenProp.isDefined) "" else "Factory, "}PropTypes} | | diff --git a/reactPhoneNumberInput/src/main/scala/io/github/nafg/scalajs/facades/reactphonenumberinput/ReactPhoneNumberInput.scala b/reactPhoneNumberInput/src/main/scala/io/github/nafg/scalajs/facades/reactphonenumberinput/ReactPhoneNumberInput.scala index 4afb4dd..d5307c0 100644 --- a/reactPhoneNumberInput/src/main/scala/io/github/nafg/scalajs/facades/reactphonenumberinput/ReactPhoneNumberInput.scala +++ b/reactPhoneNumberInput/src/main/scala/io/github/nafg/scalajs/facades/reactphonenumberinput/ReactPhoneNumberInput.scala @@ -4,7 +4,7 @@ import scala.scalajs.js import scala.scalajs.js.annotation.JSImport import japgolly.scalajs.react.Callback -import japgolly.scalajs.react.raw.React.ElementType +import japgolly.scalajs.react.facade.React.ElementType import io.github.nafg.simplefacade.Implicits.{callbackToWriter, elementTypeWriter} import io.github.nafg.simplefacade.{FacadeModule, PropTypes} diff --git a/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/OptGroup.scala b/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/OptGroup.scala index 3204ce0..e2903e2 100644 --- a/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/OptGroup.scala +++ b/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/OptGroup.scala @@ -1,6 +1,11 @@ package io.github.nafg.scalajs.facades.reactselect import scala.scalajs.js +import scala.scalajs.js.JSConverters._ class OptGroup[A](val label: String, val options: js.Array[A]) extends js.Object +object OptGroup { + def apply[A](label: String)(options: Seq[A]): Opt[A] = + new OptGroup[A](label, options.toJSArray) +} diff --git a/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/package.scala b/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/package.scala index eaa6ba7..145e75e 100644 --- a/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/package.scala +++ b/reactSelect/src/main/scala/io/github/nafg/scalajs/facades/reactselect/package.scala @@ -3,7 +3,6 @@ package io.github.nafg.scalajs.facades import scala.concurrent.Future import scala.language.implicitConversions import scala.scalajs.js -import scala.scalajs.js.JSConverters._ import scala.scalajs.js.| import slinky.readwrite.{Reader, Writer} @@ -14,14 +13,11 @@ package object reactselect { implicit def readOptA[A]: Reader[Opt[A]] = _.asInstanceOf[Opt[A]] implicit def writeOptA[A]: Writer[Opt[A]] = _.asInstanceOf[js.Object] - def OptGroup[A](label: String)(options: Seq[A]): Opt[A] = - new OptGroup[A](label, options.toJSArray) - def Opt[A](value: A): Opt[A] = value implicit class Opt_fold[A](self: Opt[A]) { def foldRaw[R](groupF: OptGroup[A] => R, optionF: A => R): R = - if (self.isInstanceOf[OptGroup[_]]) + if ((self: Any).isInstanceOf[OptGroup[_]]) groupF(self.asInstanceOf[OptGroup[A]]) else optionF(self.asInstanceOf[A]) diff --git a/simpleFacade/src/main/scala/io/github/nafg/simplefacade/Implicits.scala b/simpleFacade/src/main/scala/io/github/nafg/simplefacade/Implicits.scala index 2c65fc8..09a7f8e 100644 --- a/simpleFacade/src/main/scala/io/github/nafg/simplefacade/Implicits.scala +++ b/simpleFacade/src/main/scala/io/github/nafg/simplefacade/Implicits.scala @@ -3,8 +3,8 @@ package io.github.nafg.simplefacade import scala.scalajs.js import japgolly.scalajs.react.CallbackTo -import japgolly.scalajs.react.raw.React -import japgolly.scalajs.react.raw.React.ElementType +import japgolly.scalajs.react.facade.React +import japgolly.scalajs.react.facade.React.ElementType import japgolly.scalajs.react.vdom.VdomElement import japgolly.scalajs.react.vdom.html_<^.VdomNode diff --git a/simpleFacade/src/main/scala/io/github/nafg/simplefacade/PropTypes.scala b/simpleFacade/src/main/scala/io/github/nafg/simplefacade/PropTypes.scala index edb93db..f31036f 100644 --- a/simpleFacade/src/main/scala/io/github/nafg/simplefacade/PropTypes.scala +++ b/simpleFacade/src/main/scala/io/github/nafg/simplefacade/PropTypes.scala @@ -37,7 +37,8 @@ object PropTypes { raw.addClassNameToProps() new Multiple( raw.nonEmptyChildren.toList.map(new Single("children", _)) :+ - new Multiple(raw.props.asInstanceOf[AnyDict].map { case (k, v) => new Single(k, v) }) + // see https://github.com/lampepfl/dotty/issues/14244 + new Multiple(raw.props.asInstanceOf[AnyDict].toIterable.map { case (k, v) => new Single(k, v) }) ) }