1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
package mill
package playlib
import coursier.{Cache, MavenRepository}
import mill.eval.PathRef
import mill.playlib.api.RouteCompilerType
import mill.scalalib.Lib.resolveDependencies
import mill.scalalib._
import mill.scalalib.api._
trait RouterModule extends ScalaModule with Version {
def routes: T[Seq[PathRef]] = T.sources { millSourcePath / 'routes }
private def routeFiles = T {
val paths = routes().flatMap(file => os.walk(file.path))
val routeFiles=paths.filter(_.ext=="routes") ++ paths.filter(_.last == "routes")
routeFiles.map(f=>PathRef(f))
}
/**
* A [[Seq]] of additional imports to be added to the routes file.
* Defaults to :
*
* - controllers.Assets.Asset
* - play.libs.F
*/
def routesAdditionalImport: Seq[String] = Seq(
"controllers.Assets.Asset",
"play.libs.F"
)
def generateForwardsRouter: Boolean = true
def generateReverseRouter: Boolean = true
def namespaceReverseRouter: Boolean = false
/**
* The routes compiler type to be used.
*
* Can only be one of:
*
* - [[RouteCompilerType.InjectedGenerator]]
* - [[RouteCompilerType.StaticGenerator]]
*/
def generatorType: RouteCompilerType = RouteCompilerType.InjectedGenerator
def routerClasspath: T[Agg[PathRef]] = T {
resolveDependencies(
Seq(
Cache.ivy2Local,
MavenRepository("https://repo1.maven.org/maven2")
),
Lib.depToDependency(_, scalaVersion()),
Seq(
ivy"com.typesafe.play::routes-compiler:${playVersion()}"
)
)
}
final def compileRouter: T[CompilationResult] = T.persistent {
T.ctx().log.debug(s"compiling play routes with ${playVersion()} worker")
RouteCompilerWorkerModule.routeCompilerWorker().compile(
toolsClasspath().map(_.path),
routeFiles().map(_.path),
routesAdditionalImport,
generateForwardsRouter,
generateReverseRouter,
namespaceReverseRouter,
generatorType,
T.ctx().dest)
}
private def playRouteCompilerWorkerClasspath = T {
val workerKey = "MILL_CONTRIB_PLAYLIB_ROUTECOMPILER_WORKER_" + playMinorVersion().replace(".", "_")
//While the following seems to work (tests pass), I am not completely
//confident that the strings I used for artifact and resolveFilter are
//actually correct
mill.modules.Util.millProjectModule(
workerKey,
s"mill-contrib-playlib-worker-${playMinorVersion()}",
repositories,
resolveFilter = _.toString.contains("mill-contrib-playlib-worker")
)
}
private def toolsClasspath = T {
playRouteCompilerWorkerClasspath() ++ routerClasspath()
}
def routerClasses = T{
Seq(compileRouter().classes)
}
override def generatedSources = T {
super.generatedSources() ++ routerClasses()
}
}
|