summaryrefslogtreecommitdiff
path: root/examples/scala-js/tools/js/src/main/scala/scala/scalajs/tools/classpath/builder/NodeFileSystem.scala
diff options
context:
space:
mode:
authorHaoyi Li <haoyi@haoyi-mbp.corp.dropbox.com>2014-11-26 00:45:31 -0800
committerHaoyi Li <haoyi@haoyi-mbp.corp.dropbox.com>2014-11-26 00:45:31 -0800
commit24f31e120f9537faede7a174bb09ee35f64e1ce4 (patch)
tree06ffc3ecc7847789008352b7e2b7c040dad48907 /examples/scala-js/tools/js/src/main/scala/scala/scalajs/tools/classpath/builder/NodeFileSystem.scala
parentb89ce9cbf79363f8cab09186a5d7ba94bc0af02a (diff)
parent2c4b142503bd2d871e6818b5cab8c38627d9e4a0 (diff)
downloadhands-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/tools/js/src/main/scala/scala/scalajs/tools/classpath/builder/NodeFileSystem.scala')
-rw-r--r--examples/scala-js/tools/js/src/main/scala/scala/scalajs/tools/classpath/builder/NodeFileSystem.scala67
1 files changed, 67 insertions, 0 deletions
diff --git a/examples/scala-js/tools/js/src/main/scala/scala/scalajs/tools/classpath/builder/NodeFileSystem.scala b/examples/scala-js/tools/js/src/main/scala/scala/scalajs/tools/classpath/builder/NodeFileSystem.scala
new file mode 100644
index 0000000..d1eee10
--- /dev/null
+++ b/examples/scala-js/tools/js/src/main/scala/scala/scalajs/tools/classpath/builder/NodeFileSystem.scala
@@ -0,0 +1,67 @@
+package scala.scalajs.tools.classpath.builder
+
+import scala.scalajs.tools.io._
+
+import scala.scalajs.js
+
+import scala.collection.immutable.Traversable
+
+import java.io._
+
+/** FileSystem implementation using Node.js */
+trait NodeFileSystem extends FileSystem {
+
+ import NodeFileSystem.fs
+
+ type File = String
+
+ private def stats(f: String) = fs.statSync(f)
+
+ val DummyVersion: String = "DUMMY_FILE"
+
+ def isDirectory(f: String): Boolean =
+ stats(f).isDirectory().asInstanceOf[Boolean]
+
+ def isFile(f: String): Boolean =
+ stats(f).isFile().asInstanceOf[Boolean]
+
+ def isJSFile(f: String): Boolean =
+ isFile(f) && f.endsWith(".js")
+
+ def isIRFile(f: String): Boolean =
+ isFile(f) && f.endsWith(".sjsir")
+
+ def isJARFile(f: String): Boolean =
+ isFile(f) && f.endsWith(".jar")
+
+ def exists(f: String): Boolean =
+ fs.existsSync(f).asInstanceOf[Boolean]
+
+ def getName(f: String): String =
+ VirtualFile.nameFromPath(f)
+
+ def getAbsolutePath(f: String): String =
+ fs.realpathSync(f).asInstanceOf[String]
+
+ def getVersion(f: String): String =
+ stats(f).mtime.asInstanceOf[js.Date].getTime.toString
+
+ def listFiles(d: String): Traversable[String] = {
+ require(isDirectory(d))
+ val prefix = if (d.endsWith("/")) d else d + "/"
+
+ fs.readdirSync(d).asInstanceOf[js.Array[String]].toList.map(prefix + _)
+ }
+
+ def toJSFile(f: String): VirtualJSFile = new NodeVirtualJSFile(f)
+ def toIRFile(f: String): VirtualScalaJSIRFile = new NodeVirtualScalaJSIRFile(f)
+ def toReader(f: String): Reader =
+ new NodeVirtualTextFile(f).reader
+ def toInputStream(f: String): InputStream =
+ new NodeVirtualBinaryFile(f).inputStream
+
+}
+
+private object NodeFileSystem {
+ private val fs = js.Dynamic.global.require("fs")
+}