Skip to content

Commit 3f47a17

Browse files
committed
rework apis
1 parent 9f2d86f commit 3f47a17

File tree

13 files changed

+161
-168
lines changed

13 files changed

+161
-168
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ libraryDependencies += "io.github.thijsbroersen" %% "scala-js-env-playwright" %
1414
```
1515
Add the following line to your `build.sbt`
1616
```scala
17-
Test / jsEnv := new PWEnv(
17+
Test / jsEnv := new PlaywrightJSEnv(
1818
browserName = "chrome",
1919
headless = true
2020
)
@@ -65,7 +65,7 @@ libraryDependencies += "com.google.guava" % "guava" % "33.0.0-jre"
6565

6666
## Default configuration
6767
```scala
68-
jsEnv := new jsenv.playwright.PWEnv(
68+
jsEnv := new jsenv.playwright.PlaywrightJSEnv(
6969
browserName = "chrome",
7070
headless = true,
7171
showLogs = false,
@@ -80,7 +80,7 @@ When not passing launchOptions, default launch options are as follows:
8080

8181
### Chrome/chromium
8282
```scala
83-
jsEnv := new jsenv.playwright.PWEnv(
83+
jsEnv := new jsenv.playwright.PlaywrightJSEnv(
8484
browserName = "chrome",
8585
launchOptions = List(
8686
"--disable-extensions",
@@ -95,7 +95,7 @@ jsEnv := new jsenv.playwright.PWEnv(
9595

9696
### Firefox
9797
```scala
98-
jsEnv := new jsenv.playwright.PWEnv(
98+
jsEnv := new jsenv.playwright.PlaywrightJSEnv(
9999
browserName = "firefox",
100100
launchOptions = List(
101101
"--disable-web-security"
@@ -105,7 +105,7 @@ jsEnv := new jsenv.playwright.PWEnv(
105105

106106
### Webkit
107107
```scala
108-
jsEnv := new jsenv.playwright.PWEnv(
108+
jsEnv := new jsenv.playwright.PlaywrightJSEnv(
109109
browserName = "webkit",
110110
launchOptions = List(
111111
"--disable-extensions",
@@ -122,9 +122,9 @@ It is work in progress.
122122
As a workaround introducing delay in the test cases may help to keep the browser alive.
123123

124124
## Debugging
125-
debug parameter can be passed to the PWEnv constructor to enable debugging. It will also display the version of the browser which is used.
125+
debug parameter can be passed to the PlaywrightJSEnv constructor to enable debugging. It will also display the version of the browser which is used.
126126
```scala
127-
Test / jsEnv := new PWEnv(
127+
Test / jsEnv := new PlaywrightJSEnv(
128128
browserName = "chrome",
129129
headless = true,
130130
showLogs = true,

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ ThisBuild / organizationName := "ThijsBroersen"
1414
ThisBuild / scalaVersion := "3.7.2"
1515
ThisBuild / sonatypeProfileName := "io.github.thijsbroersen"
1616
ThisBuild / versionScheme := Some("early-semver")
17-
ThisBuild / tlVersionIntroduced := Map("3.7" -> "0.1.21")
17+
ThisBuild / tlVersionIntroduced := Map("3.7" -> "0.2.3")
1818
ThisBuild / tlMimaPreviousVersions := Set.empty
1919
ThisBuild / licenses := Seq(
2020
"BSD-3-Clause" -> url("https://opensource.org/licenses/BSD-3-Clause")

src/main/scala/jsenv/playwright/CEComRun.scala

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.github.thijsbroersen.jsenv.playwright
22

3-
import io.github.thijsbroersen.jsenv.playwright.PWEnv.Config
4-
53
import org.scalajs.jsenv.Input
64
import org.scalajs.jsenv.JSComRun
75
import org.scalajs.jsenv.RunConfig
@@ -13,17 +11,13 @@ import scala.concurrent._
1311

1412
// browserName, headless, pwConfig, runConfig, input, onMessage
1513
class CEComRun(
16-
override val browserName: String,
17-
override val headless: Boolean,
18-
override val pwConfig: Config,
19-
override val runConfig: RunConfig,
14+
override val playwrightJsEnv: PlaywrightJSEnv,
2015
override val input: Seq[Input],
21-
override val launchOptions: List[String],
22-
override val additionalLaunchOptions: List[String],
16+
override val runConfig: RunConfig,
2317
onMessage: String => Unit
2418
) extends JSComRun
2519
with Runner {
26-
scribe.debug(s"Creating CEComRun for $browserName")
20+
scribe.debug(s"Creating CEComRun for ${playwrightJsEnv.capabilities.browserName}")
2721
// enableCom is false for CERun and true for CEComRun
2822
// send is called only from JSComRun
2923
override def send(msg: String): Unit = {
@@ -34,7 +28,7 @@ class CEComRun(
3428
override protected def receivedMessage(msg: String): Unit = onMessage(msg)
3529

3630
lazy val future: Future[Unit] =
37-
jsRunPrg(browserName, headless, isComEnabled = true, pwLaunchOptions).use_.unsafeToFuture()
31+
jsRunPrg(isComEnabled = true).use_.unsafeToFuture()
3832

3933
}
4034

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.github.thijsbroersen.jsenv.playwright
22

3-
import io.github.thijsbroersen.jsenv.playwright.PWEnv.Config
4-
53
import org.scalajs.jsenv.Input
64
import org.scalajs.jsenv.JSRun
75
import org.scalajs.jsenv.RunConfig
@@ -12,20 +10,15 @@ import cats.effect.IO
1210
import scala.concurrent._
1311

1412
class CERun(
15-
override val browserName: String,
16-
override val headless: Boolean,
17-
override val pwConfig: Config,
18-
override val runConfig: RunConfig,
13+
override val playwrightJsEnv: PlaywrightJSEnv,
1914
override val input: Seq[Input],
20-
override val launchOptions: List[String],
21-
override val additionalLaunchOptions: List[String]
15+
override val runConfig: RunConfig
2216
) extends JSRun
2317
with Runner {
24-
scribe.debug(s"Creating CERun for $browserName")
18+
scribe.debug(s"Creating CERun for ${playwrightJsEnv.capabilities.browserName}")
19+
2520
lazy val future: Future[Unit] =
26-
jsRunPrg(browserName, headless, isComEnabled = false, pwLaunchOptions)
27-
.use(_ => IO.unit)
28-
.unsafeToFuture()
21+
jsRunPrg(isComEnabled = false).use(_ => IO.unit).unsafeToFuture()
2922

3023
override protected def receivedMessage(msg: String): Unit = ()
3124
}

src/main/scala/jsenv/playwright/FileMaterializers.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,15 @@ abstract class FileMaterializer extends AutoCloseable {
4545
}
4646

4747
object FileMaterializer {
48-
import PWEnv.Config.Materialization
48+
import PlaywrightJSEnv.Config.Materialization
4949
def apply(m: Materialization): FileMaterializer = m match {
5050
case Materialization.Temp =>
5151
new TempDirFileMaterializer
5252

5353
case Materialization.Server(contentDir, webRoot) =>
5454
new ServerDirFileMaterializer(contentDir, webRoot)
5555
}
56+
5657
}
5758

5859
/**

src/main/scala/jsenv/playwright/PageFactory.scala

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package io.github.thijsbroersen.jsenv.playwright
22

33
import com.microsoft.playwright.Browser
44
import com.microsoft.playwright.BrowserType
5-
import com.microsoft.playwright.BrowserType.LaunchOptions
65
import com.microsoft.playwright.Page
76
import com.microsoft.playwright.Playwright
87

98
import cats.effect.IO
109
import cats.effect.Resource
1110

11+
import scala.jdk.CollectionConverters._
12+
1213
object PageFactory {
13-
def pageBuilder(browser: Browser): Resource[IO, Page] =
14+
private def pageBuilder(browser: Browser): Resource[IO, Page] =
1415
Resource.make(IO {
1516
val pg = browser.newContext().newPage()
1617
scribe.debug(s"Creating page ${pg.hashCode()} ")
@@ -22,22 +23,30 @@ object PageFactory {
2223

2324
private def browserBuilder(
2425
playwright: Playwright,
25-
browserName: String,
26-
headless: Boolean,
27-
launchOptions: LaunchOptions
26+
capabilities: PlaywrightJSEnv.Capabilities
2827
): Resource[IO, Browser] =
2928
Resource.make(IO {
3029

31-
val browserType: BrowserType = browserName.toLowerCase match {
32-
case "chromium" | "chrome" =>
30+
val launchOptions = new BrowserType.LaunchOptions()
31+
.setHeadless(capabilities.headless)
32+
.setArgs(capabilities.launchOptions.asJava)
33+
34+
val browserType: BrowserType = capabilities match
35+
case capabilities: PlaywrightJSEnv.ChromeOptions =>
3336
playwright.chromium()
34-
case "firefox" =>
37+
case capabilities: PlaywrightJSEnv.FirefoxOptions =>
38+
launchOptions.setFirefoxUserPrefs(
39+
capabilities
40+
.firefoxUserPrefs
41+
// .view
42+
// .mapValues(_.asInstanceOf[java.lang.Object])
43+
// .toMap
44+
.asJava)
3545
playwright.firefox()
36-
case "webkit" =>
46+
case capabilities: PlaywrightJSEnv.WebkitOptions =>
3747
playwright.webkit()
38-
case _ => throw new IllegalArgumentException("Invalid browser type")
39-
}
40-
val browser = browserType.launch(launchOptions.setHeadless(headless))
48+
49+
val browser = browserType.launch(launchOptions)
4150
scribe.info(
4251
s"Creating browser ${browser.browserType().name()} version ${browser.version()} with ${browser.hashCode()}"
4352
)
@@ -59,17 +68,13 @@ object PageFactory {
5968
})
6069

6170
def createPage(
62-
browserName: String,
63-
headless: Boolean,
64-
launchOptions: LaunchOptions
71+
capabilities: PlaywrightJSEnv.Capabilities
6572
): Resource[IO, Page] =
6673
for {
6774
playwright <- playWrightBuilder
6875
browser <- browserBuilder(
6976
playwright,
70-
browserName,
71-
headless,
72-
launchOptions
77+
capabilities
7378
)
7479
page <- pageBuilder(browser)
7580
} yield page

0 commit comments

Comments
 (0)