diff options
author | lihaoyi <haoyi.sg@gmail.com> | 2013-11-13 04:14:07 -0800 |
---|---|---|
committer | lihaoyi <haoyi.sg@gmail.com> | 2013-11-13 04:14:07 -0800 |
commit | 12d6290b225dbec02bc04b13d14a2a29132e7da2 (patch) | |
tree | 07aff99746a75fd8b69c2b244dae33a6511a98c5 /plugin/src | |
parent | 332e7cde8d103b791e5017b202cd325bcd7d7a1f (diff) | |
download | workbench-12d6290b225dbec02bc04b13d14a2a29132e7da2.tar.gz workbench-12d6290b225dbec02bc04b13d14a2a29132e7da2.tar.bz2 workbench-12d6290b225dbec02bc04b13d14a2a29132e7da2.zip |
added readme, caching to prevent unnecessary work, copy-js-to-target behavior
Diffstat (limited to 'plugin/src')
-rw-r--r-- | plugin/src/main/scala/scala/js/resource/Plugin.scala | 35 | ||||
-rw-r--r-- | plugin/src/main/scala/scala/scalajs/js/resource/Plugin.scala | 54 |
2 files changed, 54 insertions, 35 deletions
diff --git a/plugin/src/main/scala/scala/js/resource/Plugin.scala b/plugin/src/main/scala/scala/js/resource/Plugin.scala deleted file mode 100644 index f7af5e7..0000000 --- a/plugin/src/main/scala/scala/js/resource/Plugin.scala +++ /dev/null @@ -1,35 +0,0 @@ -package scala.js.resource - -import sbt._ -import Keys._ -import scala.scalajs.sbtplugin.ScalaJSPlugin.ScalaJSKeys._ -import org.apache.commons.codec.binary.Base64 - - -object Plugin extends sbt.Plugin { - - val resourceSettings = Seq( - watchSources := { - watchSources.value ++ (resources in Compile).value - }, - packageJS := { - - val fileData = for{ - resourceRoot <- (resources in Compile).value - (file, path) <- Path.allSubpaths(resourceRoot) - } yield { - val b64 = Base64.encodeBase64String(IO.readBytes(file)) - path -> b64 - } - - val bundle = crossTarget.value / "resources.js" - val fileLines = for((path, data) <- fileData) yield { - " \"" + path + "\": \"" + data + "\"" - } - - IO.write(bundle, "\nScalaJS.resources = {\n" + fileLines.mkString(",\n") + "\n}" ) - - (packageJS in Compile).value :+ bundle - } - ) -} diff --git a/plugin/src/main/scala/scala/scalajs/js/resource/Plugin.scala b/plugin/src/main/scala/scala/scalajs/js/resource/Plugin.scala new file mode 100644 index 0000000..c8960c8 --- /dev/null +++ b/plugin/src/main/scala/scala/scalajs/js/resource/Plugin.scala @@ -0,0 +1,54 @@ +package scala.scalajs.js.resource + +import sbt._ +import Keys._ +import scala.scalajs.sbtplugin.ScalaJSPlugin.ScalaJSKeys._ +import org.apache.commons.codec.binary.Base64 + + +object Plugin extends sbt.Plugin { + + val resourceSettings = Seq( + watchSources := { + watchSources.value ++ (resources in Compile).value ++ Path.allSubpaths((sourceDirectory in Compile).value / "js").map(_._1).toSeq + }, + packageJS := { + val bundledJSResults: Set[sbt.File] = FileFunction.cached( + cacheDirectory.value, + FilesInfo.lastModified, + FilesInfo.exists + ){(inFiles: Set[File]) => + val pathMap = Path.relativeTo((resources in Compile).value) + val bundle = crossTarget.value / "resources.js" + val fileLines = for(file <- inFiles) yield { + val b64 = Base64.encodeBase64String(IO.readBytes(file)) + " \"" + pathMap(file).get + "\": \"" + b64 + "\"" + } + IO.write(bundle, "\nScalaJS.resources = {\n" + fileLines.mkString(",\n") + "\n}" ) + Set(bundle) + }( + for{ + (resourceRoot: File) <- (resources in Compile).value.toSet + (file, path) <- Path.allSubpaths(resourceRoot) + } yield file + ) + + val copiedJSFiles = FileFunction.cached( + cacheDirectory.value, + FilesInfo.lastModified, + FilesInfo.exists + ){(inFiles: Set[File]) => + val pathMap = Path.relativeTo((sourceDirectory in Compile).value / "js") + IO.copy(inFiles.map{f => f -> crossTarget.value / pathMap(f).get}) + }( + for{ + (file, path) <- Path.allSubpaths((sourceDirectory in Compile).value / "js").toSet + } yield file + + ) + val normalResults: Seq[sbt.File] = (packageJS in Compile).value + + normalResults ++ bundledJSResults ++ copiedJSFiles + } + ) +} |