//| 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: 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", "daisyui@5.1.12") def bundleFlags = super.bundleFlags() ++ Map("minify" -> ujson.Bool(false)) end example