package com.lihaoyi.workbench import scala.concurrent.ExecutionContext.Implicits.global import sbt._ import sbt.Keys._ import autowire._ import org.scalajs.sbtplugin.ScalaJSPlugin import org.scalajs.core.tools.io._ import org.scalajs.sbtplugin.ScalaJSPluginInternal._ import org.scalajs.sbtplugin.Implicits._ object WorkbenchBasePlugin extends AutoPlugin { override def requires = ScalaJSPlugin object autoImport { val localUrl = settingKey[(String, Int)]("localUrl") } import autoImport._ import ScalaJSPlugin.AutoImport._ val server = settingKey[Server]("local websocket server") lazy val replHistory = collection.mutable.Buffer.empty[String] val workbenchSettings = Seq( localUrl := ("localhost", 12345), (extraLoggers in ThisBuild) := { val clientLogger = FullLogger{ new Logger { def log(level: Level.Value, message: => String) = if(level >= Level.Info) server.value.Wire[Api].print(level.toString, message).call() def success(message: => String) = server.value.Wire[Api].print("info", message).call() def trace(t: => Throwable) = server.value.Wire[Api].print("error", t.toString).call() } } clientLogger.setSuccessEnabled(true) val currentFunction = extraLoggers.value (key: ScopedKey[_]) => clientLogger +: currentFunction(key) }, server := new Server(localUrl.value._1, localUrl.value._2), (onUnload in Global) := { (onUnload in Global).value.compose{ state => server.value.kill() state }} ) override def projectSettings = workbenchSettings }