blob: 6a0c3ee9a75d5a2a187fd8b81e7d7c922df96e5c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package scala.scalajs.tools.io
import scala.scalajs.js
import scala.scalajs.js.typedarray._
import java.io._
import java.net.URI
class NodeVirtualFile(override val path: String) extends VirtualFile {
import NodeFS.fs
override def version: Option[String] = {
val stat = fs.statSync(path)
if (js.isUndefined(stat.mtime))
None
else
Some(stat.mtime.asInstanceOf[js.Date].getTime.toString)
}
override def exists: Boolean =
fs.existsSync(path).asInstanceOf[Boolean]
override def toURI: URI = {
val abspath = fs.realpathSync(path).asInstanceOf[String]
new URI("file", abspath, null)
}
}
class NodeVirtualTextFile(p: String) extends NodeVirtualFile(p)
with VirtualTextFile {
import NodeFS.fs
override def content: String = {
val options = js.Dynamic.literal(encoding = "UTF-8")
fs.readFileSync(path, options).asInstanceOf[String]
}
}
class NodeVirtualBinaryFile(p: String) extends NodeVirtualFile(p)
with VirtualBinaryFile {
import NodeFS.fs
private def buf: ArrayBuffer =
new Uint8Array(fs.readFileSync(path).asInstanceOf[js.Array[Int]]).buffer
override def content: Array[Byte] = new Int8Array(buf).toArray
override def inputStream: InputStream = new ArrayBufferInputStream(buf)
}
class NodeVirtualJSFile(p: String) extends NodeVirtualTextFile(p)
with VirtualJSFile {
/** Always returns None. We can't read them on JS anyway */
override def sourceMap: Option[String] = None
}
class NodeVirtualScalaJSIRFile(p: String)
extends NodeVirtualBinaryFile(p) with VirtualSerializedScalaJSIRFile
private[io] object NodeFS {
val fs = js.Dynamic.global.require("fs")
}
|