From 2dbc451d596805dc8999e9cdf98141647a351575 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Thu, 13 Jun 2019 12:36:51 +0200 Subject: . --- build.sc | 4 +- .../bloop/src/mill.contrib.bloop/BloopImpl.scala | 2 +- scalajslib/api/src/ScalaJSWorkerApi.scala | 33 ++++++++++++----- scalajslib/src/ScalaJSModule.scala | 6 +-- scalajslib/src/ScalaJSWorkerApi.scala | 4 +- scalajslib/test/src/NodeJSConfigTests.scala | 4 +- scalajslib/worker/0.6/src/ScalaJSWorkerImpl.scala | 43 +++++++++++++++------- scalajslib/worker/1.0/src/ScalaJSWorkerImpl.scala | 42 +++++++++++++++------ 8 files changed, 95 insertions(+), 43 deletions(-) diff --git a/build.sc b/build.sc index 10d3d051..54c916a3 100755 --- a/build.sc +++ b/build.sc @@ -230,7 +230,9 @@ object scalajslib extends MillModule { Agg( ivy"org.scala-js::scalajs-tools:1.0.0-M2", ivy"org.scala-js::scalajs-sbt-test-adapter:1.0.0-M2", - ivy"org.scala-js::scalajs-env-nodejs:1.0.0-M2" + ivy"org.scala-js::scalajs-env-nodejs:1.0.0-M2", + ivy"org.scala-js::scalajs-env-jsdom-nodejs:1.0.0-M2", + ivy"org.scala-js::scalajs-env-phantomjs:1.0.0-M2" ) } } diff --git a/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala b/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala index 0db3b7dc..89b47752 100644 --- a/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala +++ b/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala @@ -226,7 +226,7 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => case ModuleKind.CommonJSModule => Config.ModuleKindJS.CommonJSModule }, - emitSourceMaps = m.nodeJSConfig().sourceMap, + emitSourceMaps = m.jsEnvConfig().sourceMap, jsdom = Some(false), ), mainClass = module.mainClass() diff --git a/scalajslib/api/src/ScalaJSWorkerApi.scala b/scalajslib/api/src/ScalaJSWorkerApi.scala index 4e44a8df..6d06be6e 100644 --- a/scalajslib/api/src/ScalaJSWorkerApi.scala +++ b/scalajslib/api/src/ScalaJSWorkerApi.scala @@ -9,9 +9,9 @@ trait ScalaJSWorkerApi { fullOpt: Boolean, moduleKind: ModuleKind): Result[File] - def run(config: NodeJSConfig, linkedFile: File): Unit + def run(config: JsEnvConfig, linkedFile: File): Unit - def getFramework(config: NodeJSConfig, + def getFramework(config: JsEnvConfig, frameworkName: String, linkedFile: File): (() => Unit, sbt.testing.Framework) @@ -30,12 +30,27 @@ object ModuleKind{ } -object NodeJSConfig { +sealed trait JsEnvConfig +object JsEnvConfig{ + + import upickle.default.{ReadWriter => RW, macroRW} - implicit def rw: RW[NodeJSConfig] = macroRW + implicit def rwNodeJs: RW[NodeJs] = macroRW + implicit def rwJsDom: RW[JsDom] = macroRW + implicit def rwPhantom: RW[Phantom] = macroRW + implicit def rw: RW[JsEnvConfig] = macroRW + + final case class NodeJs(executable: String = "node", + args: List[String] = Nil, + env: Map[String, String] = Map.empty, + sourceMap: Boolean = true) extends JsEnvConfig + + final case class JsDom(executable: String = "node", + args: List[String] = Nil, + env: Map[String, String] = Map.empty) extends JsEnvConfig + + final case class Phantom(executable: String, + args: List[String], + env: Map[String, String], + autoExit: Boolean) extends JsEnvConfig } - -final case class NodeJSConfig(executable: String = "node", - args: List[String] = Nil, - env: Map[String, String] = Map.empty, - sourceMap: Boolean = true) diff --git a/scalajslib/src/ScalaJSModule.scala b/scalajslib/src/ScalaJSModule.scala index 51b04e6a..93fe2637 100644 --- a/scalajslib/src/ScalaJSModule.scala +++ b/scalajslib/src/ScalaJSModule.scala @@ -84,7 +84,7 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => case Right(_) => ScalaJSWorkerApi.scalaJSWorker().run( toolsClasspath().map(_.path), - nodeJSConfig(), + jsEnvConfig(), fastOpt().path.toIO ) Result.Success(()) @@ -147,7 +147,7 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => override def platformSuffix = s"_sjs${artifactScalaJSVersion()}" - def nodeJSConfig = T { NodeJSConfig() } + def jsEnvConfig = T { JsEnvConfig.NodeJs() } def moduleKind: T[ModuleKind] = T { ModuleKind.NoModule } } @@ -178,7 +178,7 @@ trait TestScalaJSModule extends ScalaJSModule with TestModule { override def test(args: String*) = T.command { val (close, framework) = mill.scalajslib.ScalaJSWorkerApi.scalaJSWorker().getFramework( toolsClasspath().map(_.path), - nodeJSConfig(), + jsEnvConfig(), testFrameworks().head, fastOptTest().path.toIO ) diff --git a/scalajslib/src/ScalaJSWorkerApi.scala b/scalajslib/src/ScalaJSWorkerApi.scala index bcaeb2d3..c67ea7ea 100644 --- a/scalajslib/src/ScalaJSWorkerApi.scala +++ b/scalajslib/src/ScalaJSWorkerApi.scala @@ -50,13 +50,13 @@ class ScalaJSWorker { ).map(os.Path(_)) } - def run(toolsClasspath: Agg[os.Path], config: NodeJSConfig, linkedFile: File) + def run(toolsClasspath: Agg[os.Path], config: JsEnvConfig, linkedFile: File) (implicit ctx: Ctx.Home): Unit = { bridge(toolsClasspath).run(config, linkedFile) } def getFramework(toolsClasspath: Agg[os.Path], - config: NodeJSConfig, + config: JsEnvConfig, frameworkName: String, linkedFile: File) (implicit ctx: Ctx.Home): (() => Unit, sbt.testing.Framework) = { diff --git a/scalajslib/test/src/NodeJSConfigTests.scala b/scalajslib/test/src/NodeJSConfigTests.scala index d9e6b45b..25b5face 100644 --- a/scalajslib/test/src/NodeJSConfigTests.scala +++ b/scalajslib/test/src/NodeJSConfigTests.scala @@ -33,7 +33,7 @@ object NodeJSConfigTests extends TestSuite { class BuildModule(val crossScalaVersion: String, nodeArgs: List[String]) extends HelloJSWorldModule { override def artifactName = "hello-js-world" def scalaJSVersion = NodeJSConfigTests.scalaJSVersion - override def nodeJSConfig = T { NodeJSConfig(args = nodeArgs) } + override def jsEnvConfig = T { JsEnvConfig.NodeJs(args = nodeArgs) } } object buildUTest extends Cross[BuildModuleUtest](matrix:_*) @@ -45,7 +45,7 @@ object NodeJSConfigTests extends TestSuite { override def ivyDeps = Agg( ivy"com.lihaoyi::utest::$utestVersion" ) - override def nodeJSConfig = T { NodeJSConfig(args = nodeArgs) } + override def jsEnvConfig = T { JsEnvConfig.NodeJs(args = nodeArgs) } } } diff --git a/scalajslib/worker/0.6/src/ScalaJSWorkerImpl.scala b/scalajslib/worker/0.6/src/ScalaJSWorkerImpl.scala index 64b668e5..9e49ef15 100644 --- a/scalajslib/worker/0.6/src/ScalaJSWorkerImpl.scala +++ b/scalajslib/worker/0.6/src/ScalaJSWorkerImpl.scala @@ -11,9 +11,8 @@ import org.scalajs.core.tools.jsdep.ResolvedJSDependency import org.scalajs.core.tools.linker.{ModuleInitializer, StandardLinker, Semantics, ModuleKind => ScalaJSModuleKind} import org.scalajs.core.tools.logging.ScalaConsoleLogger import org.scalajs.jsenv._ -import org.scalajs.jsenv.nodejs._ import org.scalajs.testadapter.TestAdapter -import mill.scalajslib.api.{ModuleKind, NodeJSConfig} +import mill.scalajslib.api.{ModuleKind, JsEnvConfig} class ScalaJSWorkerImpl extends mill.scalajslib.api.ScalaJSWorkerApi { def link(sources: Array[File], libraries: Array[File], @@ -49,16 +48,16 @@ class ScalaJSWorkerImpl extends mill.scalajslib.api.ScalaJSWorkerApi { } } - def run(config: NodeJSConfig, linkedFile: File): Unit = { - nodeJSEnv(config) + def run(config: JsEnvConfig, linkedFile: File): Unit = { + jsEnv(config) .jsRunner(FileVirtualJSFile(linkedFile)) .run(new ScalaConsoleLogger, ConsoleJSConsole) } - def getFramework(config: NodeJSConfig, + def getFramework(config: JsEnvConfig, frameworkName: String, linkedFile: File): (() => Unit, sbt.testing.Framework) = { - val env = nodeJSEnv(config).loadLibs( + val env = jsEnv(config).loadLibs( Seq(ResolvedJSDependency.minimal(new FileVirtualJSFile(linkedFile))) ) @@ -76,12 +75,30 @@ class ScalaJSWorkerImpl extends mill.scalajslib.api.ScalaJSWorkerApi { ) } - def nodeJSEnv(config: NodeJSConfig): NodeJSEnv = { - new NodeJSEnv( - NodeJSEnv.Config() - .withExecutable(config.executable) - .withArgs(config.args) - .withEnv(config.env) - .withSourceMap(config.sourceMap)) + def jsEnv(config: JsEnvConfig): ComJSEnv = config match{ + case config: JsEnvConfig.NodeJs => + new org.scalajs.jsenv.nodejs.NodeJSEnv( + org.scalajs.jsenv.nodejs.NodeJSEnv.Config() + .withExecutable(config.executable) + .withArgs(config.args) + .withEnv(config.env) + .withSourceMap(config.sourceMap) + ) + + case config: JsEnvConfig.JsDom => + new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv( + org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv.Config() + .withExecutable(config.executable) + .withArgs(config.args) + .withEnv(config.env) + ) + case config: JsEnvConfig.Phantom => + new org.scalajs.jsenv.phantomjs.PhantomJSEnv( + org.scalajs.jsenv.phantomjs.PhantomJSEnv.Config() + .withExecutable(config.executable) + .withArgs(config.args) + .withEnv(config.env) + .withAutoExit(config.autoExit) + ) } } diff --git a/scalajslib/worker/1.0/src/ScalaJSWorkerImpl.scala b/scalajslib/worker/1.0/src/ScalaJSWorkerImpl.scala index f40f7a6b..efff38a2 100644 --- a/scalajslib/worker/1.0/src/ScalaJSWorkerImpl.scala +++ b/scalajslib/worker/1.0/src/ScalaJSWorkerImpl.scala @@ -3,7 +3,7 @@ package scalajslib package worker import java.io.File -import mill.scalajslib.api.{ModuleKind, NodeJSConfig} +import mill.scalajslib.api.{ModuleKind, JsEnvConfig} import mill.api.Result import org.scalajs.core.tools.io._ import org.scalajs.core.tools.linker.{ModuleInitializer, Semantics, StandardLinker, ModuleKind => ScalaJSModuleKind} @@ -49,16 +49,16 @@ class ScalaJSWorkerImpl extends mill.scalajslib.api.ScalaJSWorkerApi { } } - def run(config: NodeJSConfig, linkedFile: File): Unit = { - nodeJSEnv(config) + def run(config: JsEnvConfig, linkedFile: File): Unit = { + jsEnv(config) .jsRunner(Seq(FileVirtualJSFile(linkedFile))) .run(new ScalaConsoleLogger, ConsoleJSConsole) } - def getFramework(config: NodeJSConfig, + def getFramework(config: JsEnvConfig, frameworkName: String, linkedFile: File): (() => Unit, sbt.testing.Framework) = { - val env = nodeJSEnv(config) + val env = jsEnv(config) val tconfig = TestAdapter.Config().withLogger(new ScalaConsoleLogger) val adapter = @@ -74,12 +74,30 @@ class ScalaJSWorkerImpl extends mill.scalajslib.api.ScalaJSWorkerApi { ) } - def nodeJSEnv(config: NodeJSConfig): NodeJSEnv = { - new NodeJSEnv( - NodeJSEnv.Config() - .withExecutable(config.executable) - .withArgs(config.args) - .withEnv(config.env) - .withSourceMap(config.sourceMap)) + def jsEnv(config: JsEnvConfig): org.scalajs.jsenv.ComJSEnv = config match{ + case config: JsEnvConfig.NodeJs => + new org.scalajs.jsenv.nodejs.NodeJSEnv( + org.scalajs.jsenv.nodejs.NodeJSEnv.Config() + .withExecutable(config.executable) + .withArgs(config.args) + .withEnv(config.env) + .withSourceMap(config.sourceMap) + ) + + case config: JsEnvConfig.JsDom => + new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv( + org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv.Config() + .withExecutable(config.executable) + .withArgs(config.args) + .withEnv(config.env) + ) + case config: JsEnvConfig.Phantom => + new org.scalajs.jsenv.phantomjs.PhantomJSEnv( + org.scalajs.jsenv.phantomjs.PhantomJSEnv.Config() + .withExecutable(config.executable) + .withArgs(config.args) + .withEnv(config.env) + .withAutoExit(config.autoExit) + ) } } -- cgit v1.2.3