From 18354e3407a349cf1e2cb6e3ed69c9f162264b3d Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sat, 8 Aug 2020 09:25:33 +0200 Subject: [PATCH] custom play WIP --- build.sbt | 6 +- project/Dependencies.scala | 2 +- project/RoutesCompiler.scala | 205 ----------------------------------- project/plugins.sbt | 5 +- 4 files changed, 5 insertions(+), 213 deletions(-) delete mode 100644 project/RoutesCompiler.scala diff --git a/build.sbt b/build.sbt index 1ac1613b59..fa072ffe4d 100644 --- a/build.sbt +++ b/build.sbt @@ -25,8 +25,6 @@ PlayKeys.externalizeResources := false scriptClasspath := Seq("*") // give a fake assets dir to make sure they're not packaged resourceDirectory in Assets := baseDirectory.value / "public-nothanks" -// who needs JS routes right? -routesGenerator := LilaRoutesGenerator maintainer := "contact@lichess.org" // format: off @@ -149,7 +147,7 @@ lazy val db = smallModule("db", lazy val memo = smallModule("memo", Seq(common, db), - Seq(scaffeine, macwire.macros, autoconfig, scalatest, akka.testkit) ++ reactivemongo.bundle + Seq(scaffeine, macwire.macros, macwire.util, autoconfig, scalatest, akka.testkit) ++ reactivemongo.bundle ) lazy val search = smallModule("search", @@ -419,5 +417,5 @@ lazy val socket = module("socket", lazy val hub = smallModule("hub", Seq(common), - Seq(scaffeine) + Seq(scaffeine, macwire.util) ) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 8e6d806e81..d7dee3c54e 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -57,7 +57,7 @@ object Dependencies { } object play { - val version = "2.8.2-lila_0.1" + val version = "2.8.2-lila_0.2" val api = "com.typesafe.play" %% "play" % version val json = "com.typesafe.play" %% "play-json" % "2.9.0" } diff --git a/project/RoutesCompiler.scala b/project/RoutesCompiler.scala deleted file mode 100644 index 6875d15518..0000000000 --- a/project/RoutesCompiler.scala +++ /dev/null @@ -1,205 +0,0 @@ -import play.routes.compiler._ - -import java.io.File -import play.routes.compiler.RoutesCompiler.RoutesCompilerTask - -object LilaRoutesGenerator extends RoutesGenerator { - - val ForwardsRoutesFile = "Routes.scala" - val ReverseRoutesFile = "ReverseRoutes.scala" - val RoutesPrefixFile = "RoutesPrefix.scala" - val JavaWrapperFile = "routes.java" - - val id = "lila" - - import InjectedRoutesGenerator.Dependency - - def generate( - task: RoutesCompilerTask, - namespace: Option[String], - rules: List[Rule] - ): Seq[(String, String)] = { - val folder = namespace.map(_.replace('.', '/') + "/").getOrElse("") + "/" - - val sourceInfo = - RoutesSourceInfo(task.file.getCanonicalPath.replace(File.separator, "/"), new java.util.Date().toString) - val routes = rules.collect { case r: Route => r } - - val routesPrefixFiles = Seq(folder + RoutesPrefixFile -> generateRoutesPrefix(sourceInfo, namespace)) - - val forwardsRoutesFiles = if (task.forwardsRouter) { - Seq(folder + ForwardsRoutesFile -> generateRouter(sourceInfo, namespace, task.additionalImports, rules)) - } else { - Nil - } - - val reverseRoutesFiles = if (task.reverseRouter) { - generateReverseRouters( - sourceInfo, - namespace, - task.additionalImports, - routes, - task.namespaceReverseRouter - ) ++ - generateJavaWrappers(sourceInfo, namespace, rules, task.namespaceReverseRouter) - } else { - Nil - } - - routesPrefixFiles ++ forwardsRoutesFiles ++ reverseRoutesFiles - } - - private def generateRouter( - sourceInfo: RoutesSourceInfo, - namespace: Option[String], - additionalImports: Seq[String], - rules: List[Rule] - ) = { - @annotation.tailrec - def prepare( - rules: List[Rule], - includes: Seq[Include], - routes: Seq[Route] - ): (Seq[Include], Seq[Route]) = - rules match { - case (inc: Include) :: rs => - prepare(rs, inc +: includes, routes) - - case (rte: Route) :: rs => - prepare(rs, includes, rte +: routes) - - case _ => includes.reverse -> routes.reverse - } - - val (includes, routes) = prepare(rules, Seq.empty, Seq.empty) - - // Generate dependency descriptors for all includes - val includesDeps: Map[String, Dependency[Include]] = - includes - .groupBy(_.router) - .zipWithIndex - .flatMap { - case ((router, includes), index) => - includes.headOption.map { inc => - router -> Dependency(router.replace('.', '_') + "_" + index, router, inc) - } - } - .toMap - - // Generate dependency descriptors for all routes - val routesDeps: Map[(Option[String], String, Boolean), Dependency[Route]] = - routes - .groupBy { r => - (r.call.packageName, r.call.controller, r.call.instantiate) - } - .zipWithIndex - .flatMap { - case ((key @ (packageName, controller, instantiate), routes), index) => - routes.headOption.map { route => - val clazz = packageName.map(_ + ".").getOrElse("") + controller - // If it's using the @ syntax, we depend on the provider (ie, look it up each time) - val dep = if (instantiate) s"javax.inject.Provider[$clazz]" else clazz - val ident = controller + "_" + index - - key -> Dependency(ident, dep, route) - } - } - .toMap - - // Get the distinct dependency descriptors in the same order as defined in the routes file - val orderedDeps = rules.map { - case include: Include => - includesDeps(include.router) - case route: Route => - routesDeps((route.call.packageName, route.call.controller, route.call.instantiate)) - }.distinct - - // Map all the rules to dependency descriptors - val rulesWithDeps = rules.map { - case include: Include => - includesDeps(include.router).copy(rule = include) - case route: Route => - routesDeps((route.call.packageName, route.call.controller, route.call.instantiate)).copy(rule = route) - } - - inject.twirl - .forwardsRouter( - sourceInfo, - namespace, - additionalImports, - orderedDeps, - rulesWithDeps, - includesDeps.values.toSeq - ) - .body - .replace("""import _root_.controllers.Assets.Asset""", "") - } - - private def generateRoutesPrefix(sourceInfo: RoutesSourceInfo, namespace: Option[String]) = - static.twirl - .routesPrefix( - sourceInfo, - namespace, - _ => true - ) - .body - - private def generateReverseRouters( - sourceInfo: RoutesSourceInfo, - namespace: Option[String], - additionalImports: Seq[String], - routes: List[Route], - namespaceReverseRouter: Boolean - ) = { - routes.groupBy(_.call.packageName).map { - case (pn, routes) => - val packageName = namespace - .filter(_ => namespaceReverseRouter) - .map(_ + pn.map("." + _).getOrElse("")) - .orElse(pn.orElse(namespace)) - (packageName.map(_.replace(".", "/") + "/").getOrElse("") + ReverseRoutesFile) -> - static.twirl - .reverseRouter( - sourceInfo, - namespace, - additionalImports, - packageName, - routes, - namespaceReverseRouter, - _ => true - ) - .body - .replace("""import _root_.controllers.Assets.Asset""", "") - } - } - - private def generateJavaWrappers( - sourceInfo: RoutesSourceInfo, - namespace: Option[String], - rules: List[Rule], - namespaceReverseRouter: Boolean - ): Iterable[(String, String)] = - rules.collect { case r: Route => r }.groupBy(_.call.packageName).map { - case (pn, routes) => - val packageName = namespace - .filter(_ => namespaceReverseRouter) - .map(_ + pn.map("." + _).getOrElse("")) - .orElse(pn.orElse(namespace)) - val controllers = routes.groupBy(_.call.controller).keys.toSeq - (packageName.map(_.replace(".", "/") + "/").getOrElse("") + JavaWrapperFile) -> { - val pack = packageName getOrElse "controllers" - val ns = namespace getOrElse "routes" - s"""package $pack; - -import $ns.RoutesPrefix; - -public class routes { -""" + controllers.map { controller => - s"""public static final ${pack}.Reverse${controller} ${controller} = new ${pack}.Reverse${controller}(RoutesPrefix.byNamePrefix()); -""" - }.mkString + """ - -}""" - } - } -} diff --git a/project/plugins.sbt b/project/plugins.sbt index 9e1a28b86e..116a6182d7 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,3 @@ -resolvers += "lila-maven" at "https://raw.githubusercontent.com/ornicar/lila-maven/master" -addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.2-lila_0.1" from "https://raw.githubusercontent.com/ornicar/lila-maven/master/com.typesafe.play/scala_2.12/sbt_1.0/2.8.2-lila_0.1/jars/sbt-plugin.jar") +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.2-lila_0.2" from "https://raw.githubusercontent.com/ornicar/lila-maven/master/com.typesafe.play/sbt-plugin/scala_2.12/sbt_1.0/2.8.2-lila_0.2/jars/sbt-plugin.jar") +// addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.2-lila_0.1" from "file:///home/thib/.ivy2/local/com.typesafe.play/sbt-plugin/scala_2.12/sbt_1.0/2.8.2-lila_0.1/jars/sbt-plugin.jar") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2") -addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.3")