scalive/build.mill
2025-09-12 17:35:11 +02:00

80 lines
2 KiB
Text

//| mvnDeps : ["com.raquo::domtypes:18.1.0"]
package build
import mill.*, scalalib.*, javascriptlib.*
import mill.api.Task.Simple
import java.net.URI
import java.nio.file.*
import java.nio.file.attribute.BasicFileAttributes
import java.util
trait ScalaCommon extends ScalaModule:
def scalaVersion = "3.7.2"
def scalacOptions = Seq(
"-Wunused:all",
"-preview",
"-feature",
"-language:implicitConversions",
"-Wvalue-discard",
"-Wnonunit-statement"
)
object core extends ScalaCommon:
// TODO Replace with ujson, core shouldn't depend on ZIO
def mvnDeps = Seq(mvn"dev.zio::zio-json:0.7.44")
def generatedSources = Task {
new DomDefsGenerator((Task.dest / "core/src/scalive").toString).generate()
super.generatedSources() ++ Seq(PathRef(Task.dest))
}
object test extends ScalaTests with scalalib.TestModule.Utest:
def utestVersion = "0.9.0"
object zio extends ScalaCommon:
def mvnDeps = Seq(mvn"dev.zio::zio-http:3.4.0")
def moduleDeps = Seq(core)
object example extends ScalaCommon:
def moduleDeps = Seq(zio)
def mvnDeps = Seq(mvn"dev.optics::monocle-core:3.1.0", mvn"dev.zio::zio-logging:2.5.1")
def scaliveBundle = Task {
os.copy(
from = example.js.bundle().path,
to = Task.dest / "public" / "app.js",
createFolders = true
)
PathRef(Task.dest)
}
def tailwindConfig = Task.Source(moduleDir / "tailwind.css")
def generateCss = Task {
sources()
os.proc(
"tailwindcss",
"--minify",
"--input",
tailwindConfig().path
).call().out.text()
}
def cssResources = Task {
os.write(
target = Task.dest / "public" / "app.css",
data = generateCss(),
createFolders = true
)
PathRef(Task.dest)
}
def resources = Task {
super.resources() :+ scaliveBundle() :+ cssResources()
}
object js extends TypeScriptModule:
def mainFileName = "app.js"
def npmDeps = Seq("phoenix@1.7.21", "phoenix_live_view@1.1.8", "topbar@3.0.0")
end example