Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,12 @@ val publishSettings = Seq(
)

val baseSettings = Seq(
scalaVersion := "2.13.5",
scalaVersion := "2.13.8",
scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature"),
libraryDependencies ++= Seq(
"org.scala-js" %%% "scalajs-dom" % "1.1.0",
"org.scalameta" %%% "munit" % "0.7.23" % Test,
"org.scala-js" %%% "scalajs-dom" % "2.2.0",
"org.scala-js" %%% "scalajs-java-securerandom" % "1.0.0",
"org.scalameta" %%% "munit" % "0.7.23" % Test,
),
testFrameworks += new TestFramework("munit.Framework"),
installJsdom / version.withRank(KeyRanks.Invisible) := "16.4.0",
Expand All @@ -61,10 +62,10 @@ val baseSettings = Seq(

lazy val anode = project
.in(file("."))
.aggregate(core,formable, diodeSupport, demo, demoModel, demoWorker)
.aggregate(core, formable, diodeSupport, demo, demoModel, demoWorker)
.settings(
publish / skip := true,
scalaVersion := "2.13.5",
scalaVersion := "2.13.8",
name := "anode",
publish := {},
publishLocal := {},
Expand All @@ -81,9 +82,9 @@ lazy val core = project
Compile / fastOptJS / webpackEmitSourceMaps := true,
Compile / fullOptJS / webpackEmitSourceMaps := false,
Compile / npmDependencies ++= Seq(
"preact" -> "10.5.10",
"autoprefixer" -> "10.2.3",
"postcss" -> "8.2.6",
"preact" -> "10.7.2",
"autoprefixer" -> "10.4.7",
"postcss" -> "8.4.14",
),
Test / webpackConfigFile := Some(
baseDirectory.value / "webpack" / "no-fs-config.js"
Expand All @@ -102,6 +103,7 @@ lazy val diodeSupport = project
Compile / fastOptJS / webpackEmitSourceMaps := true,
Compile / fullOptJS / webpackEmitSourceMaps := false,
)

lazy val formable = project
.in(file("formable"))
.dependsOn(core)
Expand All @@ -110,8 +112,8 @@ lazy val formable = project
baseSettings,
publishSettings,
name := "anode-formable",
libraryDependencies += "com.propensive" %%% "magnolia" % "0.17.0" ,
libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value,
libraryDependencies += "com.propensive" %%% "magnolia" % "0.17.0",
libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value,
Compile / fastOptJS / webpackEmitSourceMaps := true,
Compile / fullOptJS / webpackEmitSourceMaps := false,
)
Expand Down
1 change: 0 additions & 1 deletion core/src/main/scala/anode/dsl/Attributes.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package anode.dsl
import anode.{Attribute, Declaration}
import org.scalajs.dom
import org.scalajs.dom._
import org.scalajs.dom.raw.Event

import scala.language.implicitConversions
import scala.scalajs.js
Expand Down
7 changes: 3 additions & 4 deletions core/src/main/scala/anode/pwa/ProgressiveWebApp.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package anode.pwa

import org.scalajs.dom
import org.scalajs.dom.experimental.serviceworkers._
import org.scalajs.dom.raw.VisibilityState
import org.scalajs.dom._

import scala.scalajs.concurrent.JSExecutionContext.Implicits.queue
import scala.scalajs.js
Expand All @@ -14,7 +13,7 @@ trait ProgressiveWebApp { self =>
private var onlineState: Boolean = dom.window.navigator.onLine
private var timer: Option[SetIntervalHandle] = None

private val navigator: ServiceWorkerNavigator = dom.window.navigator
private val navigator: Navigator = dom.window.navigator

def shouldRegister: Boolean = !(location.protocol == "https:" && location.hostname == "localhost")

Expand All @@ -34,7 +33,7 @@ trait ProgressiveWebApp { self =>
.map { reg =>
serviceWorkerRegistered(reg)
}
.recover{case t:Throwable => handleRegistrationError(t)}
.recover { case t: Throwable => handleRegistrationError(t) }
}

if (shouldRegister) register()
Expand Down
2 changes: 1 addition & 1 deletion demo-app/src/main/scala/todo/Creator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package todo

import anode.S._
import anode._
import org.scalajs.dom.raw.HTMLInputElement
import org.scalajs.dom.HTMLInputElement
import todo.model.TodoList.actions.Add
import todo.model.{Todo, TodosCircuit}

Expand Down
2 changes: 1 addition & 1 deletion demo-app/src/main/scala/todo/Editor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package todo

import anode._
import anode.dsl.css.CssClass
import org.scalajs.dom.raw.HTMLInputElement
import org.scalajs.dom.HTMLInputElement
import todo.model.TodoList.actions.{CancelEditing, FinishEditing}
import todo.model.{Todo, TodosCircuit}

Expand Down
2 changes: 1 addition & 1 deletion demo-app/src/main/scala/todo/List.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package todo
import diode.ModelR
import anode._
import anode.dsl.css.CssClass
import org.scalajs.dom.raw.HTMLInputElement
import org.scalajs.dom.HTMLInputElement
import todo.model.TodoList.actions.SetAll
import todo.model.{Root, Todo, TodosCircuit}

Expand Down
5 changes: 2 additions & 3 deletions demo-app/src/main/scala/todo/Main.scala
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package todo

import anode._
import org.scalajs.dom.document
import org.scalajs.dom.{DocumentReadyState, Event, document}

import scala.scalajs.js.annotation.JSExportTopLevel

object Main {

@JSExportTopLevel("main")
def main(): Unit = {
if (document.readyState == "complete" || document.readyState == "interactive") {
if (document.readyState == DocumentReadyState.complete || document.readyState == DocumentReadyState.interactive) {
start
} else {
document.addEventListener(
Expand All @@ -25,4 +25,3 @@ object Main {
}
}
}

45 changes: 23 additions & 22 deletions demo-worker/src/main/scala/worker/ServiceWorker.scala
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package worker

import org.scalajs.dom.experimental.serviceworkers.ServiceWorkerGlobalScope.self
import org.scalajs.dom.experimental.serviceworkers.{ExtendableEvent, FetchEvent}
import org.scalajs.dom.experimental.{Fetch, RequestInfo, Response}
import org.scalajs.dom.ServiceWorkerGlobalScope.{self => worker}
import org.scalajs.dom.{ExtendableEvent, FetchEvent}
import org.scalajs.dom.{Fetch, RequestInfo, Response}

import scala.concurrent.Future
import scala.scalajs.concurrent.JSExecutionContext.Implicits.queue
import scala.scalajs.js
import scala.scalajs.js.JSConverters._
import scala.scalajs.js.{Promise, |}

Expand All @@ -19,37 +18,39 @@ object ServiceWorker {

def prepareCache: Future[Unit] = {
println("preparing caches")
self.caches

(for {
cacheStorage <- worker.caches.toOption
} yield cacheStorage
.delete(cacheKeys.App)
.toFuture
.map(_ =>
self.caches.open(cacheKeys.App).toFuture.flatMap { cache =>
.flatMap(_ =>
cacheStorage.open(cacheKeys.App).toFuture.flatMap { cache =>
cache.addAll(Details.cachedAssets.toJSArray.map(_.asInstanceOf[RequestInfo])).toFuture
}
)
)).getOrElse(Future.failed(new Exception("cache storage not available")))
}

def request(info: RequestInfo): js.Promise[Response] =
self.caches
.`match`(info)
.toFuture
.flatMap[Response] {
case r: Response =>
Future(r)
case _ =>
Fetch.fetch(info).toFuture
}
.toJSPromise
def request(info: RequestInfo): Future[Response] =
worker.caches
.map(
_.`match`(info).toFuture
.flatMap[Response] {
case r: Response => Future(r)
case _ => Fetch.fetch(info).toFuture
}
)
.getOrElse(Future.failed(new Exception("cache storage not available")))

def main(args: Array[String]): Unit = {

self.addEventListener(
worker.addEventListener(
"install",
(e: ExtendableEvent) => {
self.skipWaiting()
worker.skipWaiting()
e.waitUntil(prepareCache.toJSPromise)
},
)
self.addEventListener("fetch", (e: FetchEvent) => e.respondWith(request(e.request).asInstanceOf[Resp]))
worker.addEventListener("fetch", (e: FetchEvent) => e.respondWith(request(e.request).asInstanceOf[Resp]))
}
}
10 changes: 5 additions & 5 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.5.1")
addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % "0.20.0")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2")
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.0")
addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % "0.20.0")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2")
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2")