Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 08959ed

Browse files
authored
Merge pull request #103 from exoego/fs-enhancement
Fs enhancement
2 parents 9f26aee + 1bb37f0 commit 08959ed

File tree

4 files changed

+93
-3
lines changed

4 files changed

+93
-3
lines changed

app/current/src/main/scala/io/scalajs/nodejs/fs/Fs.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,9 +1288,9 @@ class StatOptions(val bigint: js.UndefOr[Boolean] = js.undefined) extends js.Obj
12881288
class MkdirOptions(val recursive: js.UndefOr[Boolean] = js.undefined, val mode: js.UndefOr[FileMode] = js.undefined)
12891289
extends js.Object
12901290

1291-
class RmdirOptions(val emfileWait: js.UndefOr[Int] = js.undefined,
1292-
val maxBusyTries: js.UndefOr[Int] = js.undefined,
1293-
val recursive: js.UndefOr[Boolean] = js.undefined)
1291+
class RmdirOptions(var emfileWait: js.UndefOr[Int] = 1000,
1292+
var maxBusyTries: js.UndefOr[Int] = 3,
1293+
var recursive: js.UndefOr[Boolean] = js.undefined)
12941294
extends js.Object
12951295

12961296
@js.native

app/current/src/main/scala/io/scalajs/nodejs/fs/package.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ package object fs {
9898
promiseWithError0[FileIOError](fs.mkdir(path, _))
9999
}
100100

101+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs10)
102+
@inline
103+
def mkdirFuture(path: Buffer | String, options: MkdirOptions): Future[Unit] = {
104+
promiseWithError0[FileIOError](fs.mkdir(path, options, _))
105+
}
106+
101107
@inline
102108
def openFuture(path: Buffer | String, flags: Flags, mode: FileMode): Future[FileDescriptor] = {
103109
promiseWithError1[FileIOError, FileDescriptor](fs.open(path, flags, mode, _))
@@ -168,6 +174,11 @@ package object fs {
168174
@inline
169175
def rmdirFuture(path: Buffer | String): Future[Unit] = promiseWithError0[FileIOError](fs.rmdir(path, _))
170176

177+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs12)
178+
@inline
179+
def rmdirFuture(path: Buffer | String, options: RmdirOptions): Future[Unit] =
180+
promiseWithError0[FileIOError](fs.rmdir(path, options, _))
181+
171182
@inline
172183
def statFuture(path: String): Future[Stats] = promiseWithError1[FileIOError, Stats](fs.stat(path, _))
173184

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package io.scalajs.nodejs.fs
2+
3+
import org.scalatest.{AsyncFunSpec, BeforeAndAfterEach}
4+
5+
import scala.concurrent.ExecutionContext
6+
7+
class FsAsyncTest extends AsyncFunSpec with BeforeAndAfterEach {
8+
override implicit val executionContext = ExecutionContext.Implicits.global
9+
10+
private val dir = "x.v12/x.FsAsyncTest/foo/bar"
11+
12+
override def afterEach(): Unit = {
13+
Seq(
14+
"x.v12/x.FsAsyncTest/foo/bar",
15+
"x.v12/x.FsAsyncTest/foo",
16+
"x.v12/x.FsAsyncTest",
17+
"x.v12"
18+
).foreach { d =>
19+
if (Fs.existsSync(d)) Fs.rmdirSync(d)
20+
}
21+
}
22+
23+
describe("Fs") {
24+
it("should support recursive-rmdir") {
25+
for {
26+
dirExistsBeforeMkdir <- Fs.existsFuture(dir)
27+
_ <- Fs.mkdirFuture(dir, new MkdirOptions(recursive = true))
28+
_ <- Fs.writeFileFuture("x.v12/hoge.txt", "foo")
29+
fileStat <- Fs.statFuture("x.v12/hoge.txt")
30+
dirStat <- Fs.statFuture(dir)
31+
dirExistsAfterMkdir <- Fs.existsFuture(dir)
32+
_ <- Fs.rmdirFuture("x.v12", new RmdirOptions(recursive = true))
33+
dirExistsAfterRmdir <- Fs.existsFuture("x.v12")
34+
} yield {
35+
assert(!dirExistsBeforeMkdir)
36+
assert(fileStat.isFile())
37+
assert(dirStat.isDirectory())
38+
assert(dirExistsAfterMkdir)
39+
assert(!dirExistsAfterRmdir)
40+
}
41+
}
42+
}
43+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.scalajs.nodejs.fs
2+
3+
import org.scalatest.{ AsyncFunSpec, BeforeAndAfterEach }
4+
5+
import scala.concurrent.ExecutionContext
6+
7+
class FsAsyncTest extends AsyncFunSpec with BeforeAndAfterEach {
8+
override implicit val executionContext = ExecutionContext.Implicits.global
9+
10+
private val dir = "x.FsAsyncTest/foo/bar"
11+
12+
override def afterEach(): Unit = {
13+
Seq(
14+
"x.FsAsyncTest/foo/bar",
15+
"x.FsAsyncTest/foo",
16+
"x.FsAsyncTest"
17+
).foreach { d =>
18+
if (Fs.existsSync(d)) Fs.rmdirSync(d)
19+
}
20+
}
21+
22+
describe("Fs") {
23+
it("should support recursive-mkdir") {
24+
for {
25+
dirExistsBeforeMkdir <- Fs.existsFuture(dir)
26+
_ <- Fs.mkdirFuture(dir, new MkdirOptions(recursive = true))
27+
dirStat <- Fs.statFuture(dir)
28+
dirExistsAfterMkdir <- Fs.existsFuture(dir)
29+
} yield {
30+
assert(!dirExistsBeforeMkdir)
31+
assert(dirStat.isDirectory())
32+
assert(dirExistsAfterMkdir)
33+
}
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)