diff --git a/build.sbt b/build.sbt index 1e84b19..ccc62f2 100644 --- a/build.sbt +++ b/build.sbt @@ -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", @@ -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 := {}, @@ -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" @@ -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) @@ -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, ) diff --git a/core/src/main/scala/anode/dsl/Attributes.scala b/core/src/main/scala/anode/dsl/Attributes.scala index c87e3f4..b2fcd5b 100644 --- a/core/src/main/scala/anode/dsl/Attributes.scala +++ b/core/src/main/scala/anode/dsl/Attributes.scala @@ -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 diff --git a/core/src/main/scala/anode/pwa/ProgressiveWebApp.scala b/core/src/main/scala/anode/pwa/ProgressiveWebApp.scala index 2d77400..f4f10b6 100644 --- a/core/src/main/scala/anode/pwa/ProgressiveWebApp.scala +++ b/core/src/main/scala/anode/pwa/ProgressiveWebApp.scala @@ -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 @@ -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") @@ -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() diff --git a/demo-app/src/main/scala/todo/Creator.scala b/demo-app/src/main/scala/todo/Creator.scala index a62d266..500e731 100644 --- a/demo-app/src/main/scala/todo/Creator.scala +++ b/demo-app/src/main/scala/todo/Creator.scala @@ -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} diff --git a/demo-app/src/main/scala/todo/Editor.scala b/demo-app/src/main/scala/todo/Editor.scala index 0c2c442..6de7d60 100644 --- a/demo-app/src/main/scala/todo/Editor.scala +++ b/demo-app/src/main/scala/todo/Editor.scala @@ -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} diff --git a/demo-app/src/main/scala/todo/List.scala b/demo-app/src/main/scala/todo/List.scala index 5fddae1..cfafc6f 100644 --- a/demo-app/src/main/scala/todo/List.scala +++ b/demo-app/src/main/scala/todo/List.scala @@ -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} diff --git a/demo-app/src/main/scala/todo/Main.scala b/demo-app/src/main/scala/todo/Main.scala index 0a4f111..e3ef2ca 100644 --- a/demo-app/src/main/scala/todo/Main.scala +++ b/demo-app/src/main/scala/todo/Main.scala @@ -1,7 +1,7 @@ package todo import anode._ -import org.scalajs.dom.document +import org.scalajs.dom.{DocumentReadyState, Event, document} import scala.scalajs.js.annotation.JSExportTopLevel @@ -9,7 +9,7 @@ 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( @@ -25,4 +25,3 @@ object Main { } } } - diff --git a/demo-worker/src/main/scala/worker/ServiceWorker.scala b/demo-worker/src/main/scala/worker/ServiceWorker.scala index b3a3ddf..db1bb2b 100644 --- a/demo-worker/src/main/scala/worker/ServiceWorker.scala +++ b/demo-worker/src/main/scala/worker/ServiceWorker.scala @@ -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, |} @@ -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])) } } diff --git a/project/plugins.sbt b/project/plugins.sbt index 4486c9b..2832910 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -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") \ No newline at end of file +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")