diff --git a/project.clj b/project.clj
index b047610..964bf09 100644
--- a/project.clj
+++ b/project.clj
@@ -1,5 +1,8 @@
-(defproject page-renderer "0.4.7"
- :description "Clojure PWA made easy. An HTML renderer ready for social networks and PWA"
+(defproject page-renderer "0.4.8"
+ :description
+ "A holistic approach for rendering a modern HTML web app frame.
+ Has bindings for common page meta, PWA, and social meta tags."
+
:url "https://github.com/spacegangster/page-renderer"
:license {:name "The MIT License"
:url "http://opensource.org/licenses/MIT"}
diff --git a/src/page_renderer/api.clj b/src/page_renderer/api.clj
index 391ed80..a7cc843 100644
--- a/src/page_renderer/api.clj
+++ b/src/page_renderer/api.clj
@@ -1,7 +1,7 @@
(ns page-renderer.api
(:gen-class)
(:require [page-renderer.core :as core]
- [page-renderer.service-worker-generator :as swg]
+ [page-renderer.service-worker-generator :as swg-v6]
[page-renderer.cachebusting :as fu])
(:import (java.util Map)))
@@ -89,11 +89,11 @@
See render-page for docs on renderable."
^String [^Map renderable]
- (swg/generate-script renderable))
+ (swg-v6/generate-script renderable))
(defn respond-service-worker
"Generates a Ring response map containing a service worker script as a body.
See generate-service-worker for more docs"
^Map [^Map renderable]
- (swg/generate-ring-response renderable))
+ (swg-v6/generate-ring-response renderable))
diff --git a/src/page_renderer/core.clj b/src/page_renderer/core.clj
index 3042b75..2389528 100644
--- a/src/page_renderer/core.clj
+++ b/src/page_renderer/core.clj
@@ -203,7 +203,7 @@
(on-dom-interactive-fragment on-dom-interactive-js))
(if service-worker
- (swl/sw-script2 service-worker))
+ (swl/sw-script-v6 service-worker))
(seq head-tags)
;
diff --git a/src/page_renderer/service_worker_generator.clj b/src/page_renderer/service_worker_generator.clj
index af2d698..dbaae96 100644
--- a/src/page_renderer/service_worker_generator.clj
+++ b/src/page_renderer/service_worker_generator.clj
@@ -5,17 +5,30 @@
(:import (java.util Map)))
(def ^:private template
- "importScripts('https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js')
+ "importScripts('https://storage.googleapis.com/workbox-cdn/releases/6.5.4/workbox-sw.js')
+
+console.log('Service Worker: ', self);
workbox.precaching.precacheAndRoute([
${precache-assets}
-], { ignoreURLParametersMatching: [/hash/] })
+], { ignoreURLParametersMatching: [/hash/] });
-workbox.routing.registerNavigationRoute(
- workbox.precaching.getCacheKeyForURL('${default-url}'), {
- whitelist: [ /${whitelist-regex}/ ],
- blacklist: [ /${blacklist-regex}/ ]
- }
+
+// default handler
+const defaultHandler = new workbox.strategies.CacheFirst({
+ cacheName: 'default-handler-cache',
+});
+
+
+// routing
+workbox.routing.registerRoute(
+ new workbox.routing.NavigationRoute(
+ defaultHandler,
+ workbox.precaching.getCacheKeyForURL('${default-url}'), {
+ whitelist: [ /${whitelist-regex}/ ],
+ blacklist: [ /${blacklist-regex}/ ]
+ }
+ )
)
workbox.routing.setCatchHandler(({event}) => {
diff --git a/src/page_renderer/service_worker_lifecycle.clj b/src/page_renderer/service_worker_lifecycle.clj
index 93f9292..960ccb9 100644
--- a/src/page_renderer/service_worker_lifecycle.clj
+++ b/src/page_renderer/service_worker_lifecycle.clj
@@ -1,37 +1,86 @@
(ns page-renderer.service-worker-lifecycle
- (:require [page-renderer.cachebusting :as fu]
- [page-renderer.util :as u]))
+ (:require [page-renderer.util :as u]))
-(defn sw-script2 [script-url]
+(defn sw-script [script-url]
(u/compile-template
""
+ {:service-worker-url script-url}))
+
+
+(defn sw-script-v6 [script-url]
+ (u/compile-template
+""
{:service-worker-url script-url}))
+
+
+
diff --git a/test/page_renderer/core_test.clj b/test/page_renderer/core_test.clj
index 83ec41c..c7d2606 100644
--- a/test/page_renderer/core_test.clj
+++ b/test/page_renderer/core_test.clj
@@ -64,38 +64,46 @@ document.head.appendChild(link);
(def ethalon-page-4
"
Pagea page
")
+
(def ethalon-page-5
"Pagea page
")
+
(deftest sanity
(testing "Sanity test"
(is (= ethalon-page
diff --git a/test/page_renderer/ethalon-sw-2.js b/test/page_renderer/ethalon-sw-2.js
index 019f300..3bf3126 100644
--- a/test/page_renderer/ethalon-sw-2.js
+++ b/test/page_renderer/ethalon-sw-2.js
@@ -1,17 +1,30 @@
-importScripts('https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js')
+importScripts('https://storage.googleapis.com/workbox-cdn/releases/6.5.4/workbox-sw.js')
+
+console.log('Service Worker: ', self);
workbox.precaching.precacheAndRoute([
{ url: '/', revision: 'file-hash' },
{ url: '/fonts/icomoon.woff', revision: 'file-hash' },
{ url: '/lightpad/compiled/app.js', revision: 'file-hash' },
{ url: '/favicon.png', revision: 'file-hash' }
-], { ignoreURLParametersMatching: [/hash/] })
+], { ignoreURLParametersMatching: [/hash/] });
-workbox.routing.registerNavigationRoute(
- workbox.precaching.getCacheKeyForURL('/'), {
- whitelist: [ /^\// ],
- blacklist: [ /^\/service-worker\.js/ ]
- }
+
+// default handler
+const defaultHandler = new workbox.strategies.CacheFirst({
+ cacheName: 'default-handler-cache',
+});
+
+
+// routing
+workbox.routing.registerRoute(
+ new workbox.routing.NavigationRoute(
+ defaultHandler,
+ workbox.precaching.getCacheKeyForURL('/'), {
+ whitelist: [ /^\// ],
+ blacklist: [ /^\/service-worker\.js/ ]
+ }
+ )
)
workbox.routing.setCatchHandler(({event}) => {
diff --git a/test/page_renderer/ethalon-sw.js b/test/page_renderer/ethalon-sw.js
index d564d71..30a8d13 100644
--- a/test/page_renderer/ethalon-sw.js
+++ b/test/page_renderer/ethalon-sw.js
@@ -1,4 +1,6 @@
-importScripts('https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js')
+importScripts('https://storage.googleapis.com/workbox-cdn/releases/6.5.4/workbox-sw.js')
+
+console.log('Service Worker: ', self);
workbox.precaching.precacheAndRoute([
{ url: '/heavy-stuff.css', revision: 'file-hash' },
@@ -6,13 +8,24 @@ workbox.precaching.precacheAndRoute([
{ url: '/lightpad/compiled/app.js', revision: 'file-hash' },
{ url: '/favicon.png', revision: 'file-hash' },
{ url: '/app', revision: 'file-hash' }
-], { ignoreURLParametersMatching: [/hash/] })
+], { ignoreURLParametersMatching: [/hash/] });
-workbox.routing.registerNavigationRoute(
- workbox.precaching.getCacheKeyForURL('/app'), {
- whitelist: [ /^\/app/ ],
- blacklist: [ /^\/app\/service-worker\.js/ ]
- }
+
+// default handler
+const defaultHandler = new workbox.strategies.CacheFirst({
+ cacheName: 'default-handler-cache',
+});
+
+
+// routing
+workbox.routing.registerRoute(
+ new workbox.routing.NavigationRoute(
+ defaultHandler,
+ workbox.precaching.getCacheKeyForURL('/app'), {
+ whitelist: [ /^\/app/ ],
+ blacklist: [ /^\/app\/service-worker\.js/ ]
+ }
+ )
)
workbox.routing.setCatchHandler(({event}) => {
diff --git a/test/page_renderer/service_worker_generator_test.clj b/test/page_renderer/service_worker_generator_test.clj
index 3339875..b1bd675 100644
--- a/test/page_renderer/service_worker_generator_test.clj
+++ b/test/page_renderer/service_worker_generator_test.clj
@@ -5,32 +5,32 @@
(def sw-params
- {:sw-default-url "/app"
- :sw-add-assets ["/fonts/icomoon.woff"]
+ {:sw-default-url "/app"
+ :sw-add-assets ["/fonts/icomoon.woff"]
:stylesheet-async "/heavy-stuff.css"
- :script "/lightpad/compiled/app.js"})
+ :script "/lightpad/compiled/app.js"})
(def sw-params-2
{:sw-default-url "/"
- :sw-add-assets ["/fonts/icomoon.woff"]
- :script "/lightpad/compiled/app.js"})
+ :sw-add-assets ["/fonts/icomoon.woff"]
+ :script "/lightpad/compiled/app.js"})
(defn- slash-revision [script-str]
(s/replace script-str #"revision: '[a-z\d]+'" "revision: 'file-hash'"))
-(def ethalon-src "test/page_renderer/ethalon-sw.js")
-(def ethalon-2-src "test/page_renderer/ethalon-sw-2.js")
+(def expected-src "test/page_renderer/ethalon-sw.js")
+(def expected-2-src "test/page_renderer/ethalon-sw-2.js")
-(def ethalon (slurp ethalon-src))
-(def ethalon-2 (slurp ethalon-2-src))
+(def expected-str (slurp expected-src))
+(def expected-str-2 (slurp expected-2-src))
(deftest test-service-worker-generator
(testing "Sanity test"
- (is (= ethalon (slash-revision (swg/generate-script sw-params)))))
+ (is (= expected-str (slash-revision (swg/generate-script sw-params)))))
(testing "Sanity test for root url"
- (is (= ethalon-2 (slash-revision (swg/generate-script sw-params-2))))))
+ (is (= expected-str-2 (slash-revision (swg/generate-script sw-params-2))))))
(comment
(run-tests 'page-renderer.service-worker-generator-test)
-
- (spit ethalon-src (slash-revision (swg/generate-script sw-params))))
+ (spit expected-src (slash-revision (swg/generate-script sw-params)))
+ (spit expected-2-src (slash-revision (swg/generate-script sw-params-2))))