Skip to content

Commit ec70d3c

Browse files
authored
Merge pull request #13 from catap/modules-support
Introduced support of modules
2 parents fa0810b + 796f6e0 commit ec70d3c

File tree

4 files changed

+45
-1
lines changed

4 files changed

+45
-1
lines changed

build.sbt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,6 @@ lazy val `test-project`: Project = project.
8585
enablePlugins(ScalaJSJUnitPlugin).
8686
settings(
8787
scalaJSUseMainModuleInitializer := true,
88+
scalaJSLinkerConfig ~= (_.withModuleKind(ModuleKind.CommonJSModule)),
8889
jsEnv := new net.exoego.jsenv.jsdomnodejs.JSDOMNodeJSEnv()
8990
)

jsdom-nodejs-env/src/main/scala/net/exoego/jsenv/jsdomnodejs/JSDOMNodeJSEnv.scala

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88

99
package net.exoego.jsenv.jsdomnodejs
1010

11+
import com.google.common.io.ByteStreams
12+
1113
import scala.util.control.NonFatal
1214

1315
import java.io._
1416
import java.nio.charset.StandardCharsets
15-
import java.nio.file.{Files, Path, StandardCopyOption}
17+
import java.nio.file.{Files, Path, StandardCopyOption, StandardOpenOption}
1618
import java.net.URI
1719

1820
import com.google.common.jimfs.Jimfs
@@ -52,6 +54,9 @@ class JSDOMNodeJSEnv(config: JSDOMNodeJSEnv.Config) extends JSEnv {
5254
case Input.Script(script) =>
5355
script
5456

57+
case Input.CommonJSModule(module) =>
58+
JSDOMNodeJSEnv.wrapAsFunctionCallThis(module)
59+
5560
case _ =>
5661
throw new UnsupportedInputException(input)
5762
}.toList
@@ -194,6 +199,30 @@ object JSDOMNodeJSEnv {
194199
}
195200
}
196201

202+
/*
203+
* The reason to add this hack is performance degradation.
204+
* Details:
205+
* - https://github.com/scala-js/scala-js/issues/4489
206+
* - https://github.com/jsdom/jsdom/issues/3193
207+
*/
208+
private def wrapAsFunctionCallThis(path: Path): Path = {
209+
val suffix = tmpSuffixRE.findFirstIn(path.getFileName.toString).orNull
210+
211+
val f = File.createTempFile("tmp-", suffix)
212+
f.deleteOnExit()
213+
val w = f.toPath
214+
val out = Files.newOutputStream(w, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING)
215+
val writer = new BufferedWriter(new OutputStreamWriter(out))
216+
writer.write("(function(){")
217+
writer.newLine()
218+
writer.flush()
219+
ByteStreams.copy(Files.newInputStream(path), out)
220+
writer.write("}).call(this);")
221+
writer.newLine()
222+
writer.close()
223+
w
224+
}
225+
197226
private def materialize(path: Path): URI = {
198227
try {
199228
path.toFile.toURI
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package testproject
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSImport
5+
6+
@JSImport("os", "arch")
7+
@js.native
8+
object OsArch extends js.Object {
9+
def apply(): String = js.native
10+
}

test-project/src/test/scala/testproject/LibTest.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,8 @@ class LibTest {
1111
Lib.appendDocument("foo")
1212
assertEquals(1, count - oldCount)
1313
}
14+
15+
@Test def osArch_should_works(): Unit = {
16+
assertNotNull(OsArch())
17+
}
1418
}

0 commit comments

Comments
 (0)