Skip to content

Commit 21ee699

Browse files
committed
Implement pnpm, fix tests
1 parent 8f5ec3c commit 21ee699

File tree

19 files changed

+103
-23
lines changed

19 files changed

+103
-23
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ jobs:
1515
with:
1616
java-version: "[email protected]"
1717
- uses: coursier/cache-action@v5
18+
- uses: actions/setup-node@v3
19+
with:
20+
node-version: 16.14.2
21+
- name: Setup yarn
22+
run: npm install -g [email protected]
1823
- name: Unit tests
1924
run: sbt test
2025
- name: Scripted tests

sbt-scalajs-bundler/src/main/scala/scalajsbundler/PackageManager.scala

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ import sbt._
66
import scalajsbundler.util.Commands
77
import scalajsbundler.util.JSON
88

9-
/**
10-
* Attempts to smoothen platform-specific differences when invoking commands.
11-
*
12-
* @param name Name of the command to run
13-
*/
14-
abstract class PackageManager(val name: String, val installCommand: String, val installArgs: Seq[String]) {
9+
abstract class PackageManager {
10+
11+
val name: String
12+
val installCommand: String
13+
val installArgs: Seq[String]
1514

1615
/**
1716
* Runs the command `cmd`
@@ -118,29 +117,47 @@ trait LockFileSupport {
118117
}
119118

120119
case class Npm(
120+
name: String = "npm",
121121
lockFileName: String = "package-lock.json",
122-
override val installCommand: String = "install",
123-
override val installArgs: Seq[String] = Seq.empty,
122+
installCommand: String = "install",
123+
installArgs: Seq[String] = Seq.empty,
124124
addPackagesCommand: String = "install",
125-
override val addPackagesArgs: Seq[String] = Seq.empty,
126-
) extends PackageManager("npm", "install", installArgs)
125+
addPackagesArgs: Seq[String] = Seq.empty,
126+
) extends PackageManager
127127
with LockFileSupport
128128
with AddPackagesSupport {
129129
override val packageJsonContents: Map[String, JSON] = Map.empty
130130
}
131131

132132
case class Yarn(
133-
version: String,
133+
name: String = "yarn",
134+
version: Option[String] = None,
134135
lockFileName: String = "yarn.lock",
135136
override val installCommand: String = "install",
136137
override val installArgs: Seq[String] = Yarn.DefaultArgs,
137138
addPackagesCommand: String = "add",
138139
override val addPackagesArgs: Seq[String] = Yarn.DefaultArgs
139-
) extends PackageManager("yarn", "install", installArgs)
140+
) extends PackageManager
140141
with LockFileSupport
141142
with AddPackagesSupport {
142-
override val packageJsonContents: Map[String, JSON] = Map("packageManager" -> JSON.str(s"yarn@$version"))
143+
override val packageJsonContents: Map[String, JSON] =
144+
version.map(v => Map("packageManager" -> JSON.str(s"$name@$v"))).getOrElse(Map.empty)
143145
}
144146
object Yarn {
145147
val DefaultArgs: Seq[String] = Seq("--non-interactive", "--mutex", "network")
146148
}
149+
150+
case class Pnpm(
151+
name: String = "pnpm",
152+
version: Option[String] = None,
153+
lockFileName: String = "pnpm-lock.yaml",
154+
override val installCommand: String = "install",
155+
override val installArgs: Seq[String] = Seq.empty,
156+
addPackagesCommand: String = "add",
157+
override val addPackagesArgs: Seq[String] = Seq.empty
158+
) extends PackageManager
159+
with LockFileSupport
160+
with AddPackagesSupport {
161+
override val packageJsonContents: Map[String, JSON] =
162+
version.map(v => Map("packageManager" -> JSON.str(s"$name@$v"))).getOrElse(Map.empty)
163+
}

sbt-scalajs-bundler/src/main/scala/scalajsbundler/sbtplugin/PackageJsonTasks.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ object PackageJsonTasks {
4343
fullClasspath.map(_.data.name).toString,
4444
webpackVersion,
4545
webpackDevServerVersion,
46-
webpackCliVersion
46+
webpackCliVersion,
47+
packageManager.toString
4748
).mkString(",")
4849

4950
val packageJsonFile = targetDir / "package.json"

sbt-scalajs-bundler/src/sbt-test/sbt-scalajs-bundler/custom-test-config/build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ requireJsDomEnv in Test := true
2525

2626
webpackBundlingMode := BundlingMode.LibraryAndApplication()
2727

28-
useYarn := true
28+
packageManager := scalajsbundler.Yarn()
2929

3030
npmDependencies in Compile ++= Seq(
3131
"react" -> reactJS,

sbt-scalajs-bundler/src/sbt-test/sbt-scalajs-bundler/global-namespace-with-jsdom-unit-testing/build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ requireJsDomEnv in Test := true
2828

2929
version in installJsdom := "12.0.0"
3030

31-
useYarn := true
31+
packageManager := scalajsbundler.Yarn()
3232

3333
ivyLoggingLevel in ThisBuild := UpdateLogging.Quiet
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
scalaVersion := "2.12.8"
2+
3+
packageManager := scalajsbundler.Npm()
4+
5+
scalaJSUseMainModuleInitializer := true
6+
7+
npmDependencies in Compile += "neat" -> "2.1.0"
8+
9+
enablePlugins(ScalaJSBundlerPlugin)
10+
11+
ivyLoggingLevel in ThisBuild := UpdateLogging.Quiet
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
val scalaJSVersion = sys.props.getOrElse("scalajs.version", sys.error("'scalajs.version' environment variable is not defined"))
2+
val scalaJSBundlerVersion = sys.props.getOrElse("plugin.version", sys.error("'plugin.version' environment variable is not set"))
3+
4+
addSbtPlugin("org.scala-js" % "sbt-scalajs" % scalaJSVersion)
5+
6+
addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % scalaJSBundlerVersion)
7+
8+
ivyLoggingLevel in ThisBuild := UpdateLogging.Quiet
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package example
2+
3+
object Main {
4+
def main(args: Array[String]): Unit = {
5+
println("npm main")
6+
}
7+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
> fastOptJS::webpack
2+
$ exists package-lock.json
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
scalaVersion := "2.12.8"
2+
3+
packageManager := scalajsbundler.Pnpm(version = Some("7.0.1"))
4+
5+
scalaJSUseMainModuleInitializer := true
6+
7+
npmDependencies in Compile += "neat" -> "2.1.0"
8+
9+
enablePlugins(ScalaJSBundlerPlugin)
10+
11+
ivyLoggingLevel in ThisBuild := UpdateLogging.Quiet

0 commit comments

Comments
 (0)