diff options
author | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
---|---|---|
committer | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
commit | 24f31e120f9537faede7a174bb09ee35f64e1ce4 (patch) | |
tree | 06ffc3ecc7847789008352b7e2b7c040dad48907 /examples/scala-js/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/AbstractJSDeps.scala | |
parent | b89ce9cbf79363f8cab09186a5d7ba94bc0af02a (diff) | |
parent | 2c4b142503bd2d871e6818b5cab8c38627d9e4a0 (diff) | |
download | hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.tar.gz hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.tar.bz2 hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.zip |
Merge commit '2c4b142503bd2d871e6818b5cab8c38627d9e4a0' as 'examples/scala-js'
Diffstat (limited to 'examples/scala-js/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/AbstractJSDeps.scala')
-rw-r--r-- | examples/scala-js/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/AbstractJSDeps.scala | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/examples/scala-js/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/AbstractJSDeps.scala b/examples/scala-js/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/AbstractJSDeps.scala new file mode 100644 index 0000000..9eb7f69 --- /dev/null +++ b/examples/scala-js/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/AbstractJSDeps.scala @@ -0,0 +1,81 @@ +package scala.scalajs.sbtplugin + +import sbt._ + +import StringUtilities.nonEmpty + +import scala.scalajs.tools.jsdep.JSDependency + +/** Something JavaScript related a project may depend on. Either a JavaScript + * module/library, or the DOM at runtime. */ +sealed trait AbstractJSDep { + def configurations: Option[String] + + protected def withConfigs(configs: Option[String]): AbstractJSDep + + def %(configurations: Configuration): AbstractJSDep = %(configurations.name) + def %(configurations: String): AbstractJSDep = { + require(this.configurations.isEmpty, + "Configurations already specified for jsModule " + this) + nonEmpty(configurations, "Configurations") + withConfigs(Some(configurations)) + } + +} + +/** A JavaScript module/library a Scala.js project may depend on */ +sealed trait JSModuleID extends AbstractJSDep { + def jsDep: JSDependency + + protected def withJSDep(jsDep: JSDependency): JSModuleID + + def commonJSName(name: String): JSModuleID = + withJSDep(jsDep = jsDep.commonJSName(name)) + + def dependsOn(names: String*): JSModuleID = + withJSDep(jsDep = jsDep.dependsOn(names: _*)) +} + +/** A JavaScript module that resides inside a jar (probably webjar) */ +final case class JarJSModuleID( + module: ModuleID, + jsDep: JSDependency) extends JSModuleID { + + def configurations: Option[String] = module.configurations + + protected def withConfigs(configs: Option[String]): JSModuleID = + copy(module = module.copy(configurations = configs)) + protected def withJSDep(jsDep: JSDependency): JSModuleID = + copy(jsDep = jsDep) +} + +object JarJSModuleID { + def apply(module: ModuleID, name: String): JarJSModuleID = + JarJSModuleID(module, new JSDependency(name, Nil)) +} + +/** A JavaScript module that we depend on, but is provided externally or + * by the project itself */ +final case class ProvidedJSModuleID( + jsDep: JSDependency, + configurations: Option[String]) extends JSModuleID { + + protected def withConfigs(configs: Option[String]): JSModuleID = + copy(configurations = configs) + protected def withJSDep(jsDep: JSDependency): JSModuleID = + copy(jsDep = jsDep) +} + +object ProvidedJSModuleID { + def apply(name: String, configurations: Option[String]): ProvidedJSModuleID = + ProvidedJSModuleID(new JSDependency(name, Nil), configurations) +} + +sealed case class RuntimeDOM( + configurations: Option[String]) extends AbstractJSDep { + + protected def withConfigs(configs: Option[String]): RuntimeDOM = + copy(configurations = configs) +} + +object RuntimeDOM extends RuntimeDOM(None) |