package works.iterative.sbt import sbt._ import sbt.Keys._ import org.portablescala.sbtplatformdeps.PlatformDepsPlugin.autoImport._ import _root_.io.gitub.sbt.tzdb.TzdbPlugin import _root_.io.gitub.sbt.tzdb.TzdbPlugin.autoImport._ import locales.LocalesPlugin import locales.LocalesPlugin.autoImport._ object IWMaterialsPlugin extends AutoPlugin { override def trigger: PluginTrigger = allRequirements object autoImport { val IWVersions = IWMaterialsVersions val IWDeps = IWMaterialsDeps } } object IWMaterialsVersions { val akka = "2.6.14" val akkaHttp = "10.2.4" val elastic4s = "7.12.2" val play = "2.8.8" val playJson = "2.9.2" val scalaTest = "3.2.9" val zio = "2.0.0-RC2" val zioConfig = "1.0.10" val zioJson = "0.3.0-RC3" val zioLogging = "0.5.11" val zioPrelude = "1.0.0-RC8" val zioZMX = "0.0.11" val laminar = "0.14.2" } object IWMaterialsDeps { import works.iterative.sbt.{IWMaterialsVersions => V} val zioOrg = "dev.zio" def zioLib( name: String, version: String, configurations: Option[String] ): Def.Setting[_] = libraryDependencies += (zioOrg %%% s"zio-$name" % version) .withConfigurations(configurations) def zioLib( name: String, version: String, config: Configuration* ): Def.Setting[_] = zioLib( name, version, if (config.isEmpty) None else Some(config.map(_.name).mkString(",")) ) val zio: Def.Setting[_] = libraryDependencies += zioOrg %%% "zio" % V.zio def zioTest(c: Configuration*): Def.Setting[_] = zioLib("test", V.zio, c: _*) def zioTestSbt(c: Configuration*): Def.Setting[_] = zioLib("test-sbt", V.zio, c: _*) val zioConfig: Def.Setting[_] = zioLib("config", V.zioConfig) val zioConfigTypesafe: Def.Setting[_] = zioLib("config-typesafe", V.zioConfig) val zioConfigMagnolia: Def.Setting[_] = zioLib("config-magnolia", V.zioConfig) val zioJson: Def.Setting[_] = zioLib("json", V.zioJson) val zioLogging: Def.Setting[_] = zioLib("logging", V.zioLogging) val zioPrelude: Def.Setting[_] = zioLib("prelude", V.zioPrelude) val zioStreams: Def.Setting[_] = zioLib("streams", V.zio) val zioZMX: Def.Setting[_] = zioLib("zmx", V.zioZMX) def useZIO(testConf: Configuration*): Seq[Def.Setting[_]] = Seq( zio, zioTest(testConf: _*), zioTestSbt(testConf: _*), testFrameworks += new TestFramework("zio.test.sbt.ZTestFramework") ) def useZIOAll(testConf: Configuration*): Seq[Def.Setting[_]] = useZIO(testConf: _*) ++ Seq( zioStreams, zioConfig, zioConfigTypesafe, zioConfigMagnolia, zioJson, zioZMX, zioLogging, zioPrelude ) private val akkaOrg = "com.typesafe.akka" val akkaActor: Def.Setting[_] = libraryDependencies += akkaOrg %% "akka-actor" % V.akka val akkaActorTyped: Def.Setting[_] = libraryDependencies += akkaOrg %% "akka-actor-typed" % V.akka val akkaHttp: Def.Setting[_] = libraryDependencies += akkaOrg %% "akka-http" % V.akkaHttp val akkaHttpSprayJson: Def.Setting[_] = libraryDependencies += akkaOrg %% "akka-http-spray-json" % V.akkaHttp val akkaStream: Def.Setting[_] = libraryDependencies += akkaOrg %% "akka-stream" % V.akka val akkaPersistenceTestKit: Def.Setting[_] = libraryDependencies += akkaOrg %% "akka-persistence-testkit" % V.akka val scalaTest: Def.Setting[_] = libraryDependencies += "org.scalatest" %%% "scalatest" % V.scalaTest val scalaTestPlusScalacheck: Def.Setting[_] = libraryDependencies += "org.scalatestplus" %% "scalacheck-1-15" % "3.2.9.0" val playScalaTest: Def.Setting[_] = libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "5.1.0" private val playOrg = "com.typesafe.play" val playMailer: Def.Setting[_] = libraryDependencies += playOrg %% "play-mailer" % "8.0.1" val playServer: Def.Setting[_] = libraryDependencies += playOrg %% "play-server" % V.play val playAkkaServer: Def.Setting[_] = libraryDependencies += playOrg %% "play-akka-http-server" % V.play val play: Def.Setting[_] = libraryDependencies += playOrg %% "play" % V.play val playAhcWs: Def.Setting[_] = libraryDependencies += playOrg %% "play-ahc-ws" % V.play val playJson: Def.Setting[_] = libraryDependencies += playOrg %%% "play-json" % V.playJson private val elastic4sOrg = "com.sksamuel.elastic4s" val useElastic4S: Def.Setting[_] = libraryDependencies ++= Seq( elastic4sOrg %% "elastic4s-core" % V.elastic4s, elastic4sOrg %% "elastic4s-client-akka" % V.elastic4s, elastic4sOrg %% "elastic4s-http-streams" % V.elastic4s, elastic4sOrg %% "elastic4s-json-play" % V.elastic4s ) val laminar: Def.Setting[_] = libraryDependencies += "com.raquo" %%% "laminar" % V.laminar val laminextTailwind: Def.Setting[_] = libraryDependencies += "io.laminext" %%% "tailwind" % "0.13.10" val laminextFetch: Def.Setting[_] = libraryDependencies += "io.laminext" %%% "fetch" % "0.13.10" val addScalaJavaTime: Def.Setting[_] = libraryDependencies += "io.github.cquiroz" %%% "scala-java-time" % "2.3.0" val addScalaJavaLocales: Def.Setting[_] = libraryDependencies += "io.github.cquiroz" %%% "scala-java-locales" % "1.2.1" def useScalaJavaTimeAndLocales(proj: Project): Project = proj .enablePlugins(TzdbPlugin, LocalesPlugin) .settings( addScalaJavaTime, addScalaJavaLocales, localesFilter := locales.LocalesFilter .Selection("en-US", "en", "cs-CZ", "cs"), currencyFilter := locales.CurrencyFilter.Selection( "AUD", "BGN", "CAD", "CNY", "CZK", "DKK", "EUR", "GBP", "HKD", "HRK", "HUF", "CHF", "ILS", "JPY", "KRW", "NOK", "NZD", "PLN", "RON", "RUB", "SEK", "TRY", "USD" ), supportISOCodes := false, supportNumberFormats := true, zonesFilter := { (z: String) => z == "Europe/Prague" || z == "CET" || z == "Etc/UTC" || z == "UTC" } ) }