Skip to content

Commit a7b9d59

Browse files
committed
Make injectin gpreloads optional and not the default
1 parent 9a91a72 commit a7b9d59

File tree

6 files changed

+55
-22
lines changed

6 files changed

+55
-22
lines changed

sjsls/src/buildSpaRoute.scala

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ import cats.effect.kernel.Ref
2020
* @param logger
2121
* @return
2222
*/
23-
def buildSpaRoute(indexOpts: Option[IndexHtmlConfig], modules: Ref[IO, Map[String, String]], zdt: ZonedDateTime)(
23+
def buildSpaRoute(
24+
indexOpts: Option[IndexHtmlConfig],
25+
modules: Ref[IO, Map[String, String]],
26+
zdt: ZonedDateTime,
27+
injectPreloads: Boolean
28+
)(
2429
logger: Scribe[IO]
2530
)(using
2631
Async[IO]
@@ -53,7 +58,7 @@ def buildSpaRoute(indexOpts: Option[IndexHtmlConfig], modules: Ref[IO, Map[Strin
5358
case Some(IndexHtmlConfig.IndexHtmlPath(dir)) =>
5459
StaticFileMiddleware(
5560
HttpRoutes.of[IO] {
56-
case req @ GET -> _ => serveIndexHtml(dir, modules)
61+
case req @ GET -> _ => serveIndexHtml(dir, modules, injectPreloads)
5762
},
5863
dir / "index.html"
5964
)(logger)

sjsls/src/live.server.scala

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,13 @@ object LiveServer extends IOApp:
127127
case "none" => None()
128128
}
129129

130+
val injectPreloadsOpt = Opts
131+
.flag(
132+
"inject-preloads",
133+
"Whether or not to attempt injecting module preloads into the index.html, potentially speeds up page load, but may not work with all servers and or cause instability in the refresh process."
134+
)
135+
.orFalse
136+
130137
val extraBuildArgsOpt: Opts[List[String]] = Opts
131138
.options[String](
132139
"extra-build-args",
@@ -189,7 +196,8 @@ object LiveServer extends IOApp:
189196
millModuleName: Option[String] = None,
190197
stylesDir: Option[String] = None,
191198
indexHtmlTemplate: Option[String] = None,
192-
buildToolInvocation: Option[String] = None
199+
buildToolInvocation: Option[String] = None,
200+
injectPreloads: Boolean = false
193201
)
194202

195203
def parseOpts = (
@@ -207,7 +215,8 @@ object LiveServer extends IOApp:
207215
millModuleNameOpt,
208216
stylesDirOpt,
209217
indexHtmlTemplateOpt,
210-
buildToolInvocation
218+
buildToolInvocation,
219+
injectPreloadsOpt
211220
).mapN(LiveServerConfig.apply)
212221

213222
def main(lsc: LiveServerConfig): Resource[IO, Server] =
@@ -275,7 +284,15 @@ object LiveServer extends IOApp:
275284
lsc.buildToolInvocation
276285
)(logger)
277286

278-
app <- routes(outDirString, refreshTopic, indexOpts, proxyRoutes, fileToHashRef, lsc.clientRoutingPrefix)(logger)
287+
app <- routes(
288+
outDirString,
289+
refreshTopic,
290+
indexOpts,
291+
proxyRoutes,
292+
fileToHashRef,
293+
lsc.clientRoutingPrefix,
294+
lsc.injectPreloads
295+
)(logger)
279296

280297
_ <- updateMapRef(outDirPath, fileToHashRef)(logger).toResource
281298
// _ <- stylesDir.fold(Resource.unit)(sd => seedMapOnStart(sd, mr))

sjsls/src/routes.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,16 @@ def routes[F[_]: Files: MonadThrow](
2525
indexOpts: Option[IndexHtmlConfig],
2626
proxyRoutes: HttpRoutes[IO],
2727
ref: Ref[IO, Map[String, String]],
28-
clientRoutingPrefix: Option[String]
28+
clientRoutingPrefix: Option[String],
29+
injectPreloads: Boolean
2930
)(logger: Scribe[IO]): Resource[IO, HttpRoutes[IO]] =
3031

3132
val traceLogger = traceLoggerMiddleware(logger)
3233
val zdt = ZonedDateTime.now()
3334

3435
val linkedAppWithCaching: HttpRoutes[IO] = ETagMiddleware(appRoute[IO](stringPath), ref)(logger)
35-
val spaRoutes = clientRoutingPrefix.map(s => (s, buildSpaRoute(indexOpts, ref, zdt)(logger)))
36-
val staticRoutes = Some(staticAssetRoutes(indexOpts, ref, zdt)(logger))
36+
val spaRoutes = clientRoutingPrefix.map(s => (s, buildSpaRoute(indexOpts, ref, zdt, injectPreloads)(logger)))
37+
val staticRoutes = Some(staticAssetRoutes(indexOpts, ref, zdt, injectPreloads)(logger))
3738

3839
val routes =
3940
frontendRoutes[IO](

sjsls/src/static.routes.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,16 @@ import cats.syntax.all.*
2424
def staticAssetRoutes(
2525
indexOpts: Option[IndexHtmlConfig],
2626
modules: Ref[IO, Map[String, String]],
27-
zdt: ZonedDateTime
27+
zdt: ZonedDateTime,
28+
injectPreloads: Boolean
2829
)(logger: Scribe[IO]): HttpRoutes[IO] =
2930
indexOpts match
3031
case None => generatedIndexHtml(injectStyles = false, modules, zdt)(logger)
3132

3233
case Some(IndexHtmlConfig.IndexHtmlPath(path)) =>
3334
HttpRoutes
3435
.of[IO] {
35-
case req @ GET -> Root => serveIndexHtml(path, modules)
36+
case req @ GET -> Root => serveIndexHtml(path, modules, injectPreloads)
3637

3738
}
3839
.combineK(
@@ -51,7 +52,7 @@ def staticAssetRoutes(
5152
)
5253
)(logger).combineK(generatedIndexHtml(injectStyles = true, modules, zdt)(logger))
5354

54-
def serveIndexHtml(from: fs2.io.file.Path, modules: Ref[IO, Map[String, String]]) = StaticFile
55+
def serveIndexHtml(from: fs2.io.file.Path, modules: Ref[IO, Map[String, String]], injectPreloads: Boolean) = StaticFile
5556
.fromPath[IO](from / "index.html")
5657
.getOrElseF(NotFound())
5758
.flatMap {
@@ -62,7 +63,7 @@ def serveIndexHtml(from: fs2.io.file.Path, modules: Ref[IO, Map[String, String]]
6263
.string
6364
.flatMap {
6465
body =>
65-
for str <- injectModulePreloads(modules, body)
66+
for str <- if injectPreloads then (injectModulePreloads(modules, body)) else IO.pure(body)
6667
yield
6768
val bytes = str.getBytes()
6869
f.withEntity(bytes)

sjsls/test/src/RoutesSpec.scala

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ class RoutesSuite extends CatsEffectSuite:
181181
None,
182182
HttpRoutes.empty[IO],
183183
fileToHashRef,
184-
Some("app")
184+
Some("app"),
185+
false
185186
)(logger)
186187
yield errorActionFor(theseRoutes, aLogger).orNotFound
187188

@@ -256,7 +257,8 @@ class RoutesSuite extends CatsEffectSuite:
256257
Some(IndexHtmlConfig.IndexHtmlPath(staticDir.toFs2)),
257258
HttpRoutes.empty[IO],
258259
fileToHashRef,
259-
None
260+
None,
261+
false
260262
)(logger)
261263
yield theseRoutes.orNotFound
262264

@@ -286,7 +288,8 @@ class RoutesSuite extends CatsEffectSuite:
286288
None,
287289
HttpRoutes.empty[IO],
288290
fileToHashRef,
289-
None
291+
None,
292+
false
290293
)(logger)
291294
yield theseRoutes.orNotFound
292295

@@ -317,7 +320,8 @@ class RoutesSuite extends CatsEffectSuite:
317320
Some(IndexHtmlConfig.StylesOnly(styleDir.toFs2)),
318321
HttpRoutes.empty[IO],
319322
fileToHashRef,
320-
None
323+
None,
324+
false
321325
)(logger)
322326
yield theseRoutes.orNotFound
323327

@@ -350,7 +354,8 @@ class RoutesSuite extends CatsEffectSuite:
350354
Some(IndexHtmlConfig.StylesOnly(styleDir.toFs2)),
351355
HttpRoutes.empty[IO],
352356
fileToHashRef,
353-
Some("app")
357+
Some("app"),
358+
false
354359
)(logger)
355360
yield theseRoutes.orNotFound
356361

@@ -383,7 +388,8 @@ class RoutesSuite extends CatsEffectSuite:
383388
Some(IndexHtmlConfig.IndexHtmlPath(staticDir.toFs2)),
384389
HttpRoutes.empty[IO],
385390
fileToHashRef,
386-
None
391+
None,
392+
false
387393
)(logger)
388394
yield (theseRoutes.orNotFound, logger, modifedAt)
389395

@@ -437,7 +443,8 @@ class RoutesSuite extends CatsEffectSuite:
437443
Some(IndexHtmlConfig.IndexHtmlPath(staticDir.toFs2)),
438444
HttpRoutes.empty[IO],
439445
fileToHashRef,
440-
Some("app")
446+
Some("app"),
447+
false
441448
)(logger)
442449
yield (theseRoutes.orNotFound, logger)
443450

sjsls/test/src/spaRoutesSuite.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class SpaRoutesSuite extends CatsEffectSuite:
3636

3737
setupRef.test("spa routes have preloads injected for the easy case") {
3838
(logger, modules, _) =>
39-
val spaRoute = buildSpaRoute(None, modules, ZonedDateTime.now())(logger)
39+
val spaRoute = buildSpaRoute(None, modules, ZonedDateTime.now(), true)(logger)
4040
val resp = spaRoute(Request[IO](uri = uri"/anything")).getOrElse(fail("No response"))
4141
for
4242
body <- resp.map(_.bodyText.compile.string)
@@ -55,7 +55,8 @@ class SpaRoutesSuite extends CatsEffectSuite:
5555
val spaRoute = buildSpaRoute(
5656
Some(IndexHtmlConfig.StylesOnly(fs2.io.file.Path.apply("doestmatter"))),
5757
modules,
58-
ZonedDateTime.now()
58+
ZonedDateTime.now(),
59+
true
5960
)(logger)
6061
val resp = spaRoute(Request[IO](uri = uri"/anything")).getOrElse(fail("No response"))
6162
for
@@ -75,7 +76,8 @@ class SpaRoutesSuite extends CatsEffectSuite:
7576
val spaRoute = buildSpaRoute(
7677
Some(IndexHtmlConfig.StylesOnly(fs2.io.file.Path.apply(tempDir.toString))),
7778
modules,
78-
ZonedDateTime.now()
79+
ZonedDateTime.now(),
80+
injectPreloads = true
7981
)(logger)
8082
val resp = spaRoute(Request[IO](uri = uri"/anything")).getOrElse(fail("No response"))
8183
for

0 commit comments

Comments
 (0)