diff --git a/build.sbt b/build.sbt index 07133f2..450162f 100644 --- a/build.sbt +++ b/build.sbt @@ -58,7 +58,8 @@ addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2"), addSbtPlugin("io.github.cquiroz" % "sbt-tzdb" % "4.3.0"), addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.4.0"), - addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.1") + addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.1"), + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") ) lazy val `iw-project-support` = (project in file(".")) diff --git a/build.sbt b/build.sbt index 07133f2..450162f 100644 --- a/build.sbt +++ b/build.sbt @@ -58,7 +58,8 @@ addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2"), addSbtPlugin("io.github.cquiroz" % "sbt-tzdb" % "4.3.0"), addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.4.0"), - addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.1") + addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.1"), + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") ) lazy val `iw-project-support` = (project in file(".")) diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala index 540932c..643b151 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala @@ -2,8 +2,8 @@ import sbt._ import Keys._ -// import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._ -// import org.scalajs.sbtplugin.ScalaJSPlugin +import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._ +import org.scalajs.sbtplugin.ScalaJSPlugin import scala.sys.process._ import sbt.nio.file.FileTreeView @@ -82,8 +82,7 @@ viteExtraEnv := Map.empty, startViteDev := { val workDir = baseDirectory.value - val extraEnv = - viteExtraEnv.value // + ("SCALAJS_OUTPUT" -> ((Compile / fastLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) + val extraEnv = (startViteDev / viteExtraEnv).value val prefixedEnv = extraEnv.map { case (k, v) => s"VITE_$k" -> v.toString }.toSeq @@ -102,27 +101,14 @@ FileTreeView.default.list( List(baseFiles("*.json"), baseFiles("*.js"), baseFiles("*.html")) ) - /* - val linkerDirectory = - (Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value - val viteInputs = FileTreeView.default.list( - linkerDirectory.toGlob / "*.js" - ) - */ - (viteConfigs /* ++ viteInputs*/ ).map(_._1.toFile) + viteConfigs.map(_._1.toFile) }, viteBuild := { val s = streams.value val dist = viteDist.value val base = viteBasePath.value val files = viteMonitoredFiles.value - val extraEnv = - viteExtraEnv.value /* + - ("SCALAJS_MAIN_JS" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value / "main.js").getAbsolutePath) + - ("SCALAJS_OUTPUT" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) - */ - // We depend on fullLinkJS - // val _ = (Compile / fullLinkJS).value + val extraEnv = (viteBuild / viteExtraEnv).value def doBuild() = Process( "yarn" :: "run" :: "vite" :: "build" :: "." :: "--outDir" :: dist.toString :: "--base" :: base :: Nil, baseDirectory.value, @@ -143,3 +129,26 @@ } ) } + +object ScalaJSVitePlugin extends AutoPlugin { + override lazy val requires = VitePlugin && ScalaJSPlugin + override lazy val trigger = allRequirements + + import VitePlugin.autoImport._ + + override def projectSettings = Seq( + startViteDev / viteExtraEnv += ("SCALAJS_OUTPUT" -> ((Compile / fastLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath), + viteMonitoredFiles ++= { + val linkerDirectory = (Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value + FileTreeView.default.list(linkerDirectory.toGlob / "*.js").map(_._1.toFile) + }, + viteBuild / viteExtraEnv ++= Map( + "SCALAJS_MAIN_JS" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value / "main.js").getAbsolutePath, + "SCALAJS_OUTPUT" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath + ), + viteBuild := { + val _ = (Compile / fullLinkJS).value + viteBuild.value + } + ) +}