@@ -40,14 +40,18 @@ class EdenOffline extends Events {
4040
4141 // build routes
4242 this . _routes = [ ] ;
43+ this . _installing = false ;
4344
4445 // loop routes
45- for ( const route of self . config . routes ) {
46+ for ( const route of self . config . routes || [ ] ) {
4647 // test route
47- route . test = toRegex ( route . route ) ;
48+ const test = toRegex ( route ) ;
4849
4950 // push route
50- this . _routes . push ( route ) ;
51+ this . _routes . push ( {
52+ route,
53+ test,
54+ } ) ;
5155 }
5256
5357 // Adding `install` event listener
@@ -65,11 +69,14 @@ class EdenOffline extends Events {
6569 // Adding `fetch` event listener
6670 self . addEventListener ( 'fetch' , ( event ) => {
6771 // await install
68- event . respondWith ( this . fetch ( event ) ) ;
72+ if ( ! this . _installing ) event . respondWith ( this . fetch ( event ) ) ;
6973 } ) ;
7074
7175 // install offline cache
7276 this . eden . log ( 'info' , 'enabled offline' ) ;
77+
78+ // install
79+ this . install ( ) ;
7380 }
7481
7582 /**
@@ -82,8 +89,9 @@ class EdenOffline extends Events {
8289 async fetch ( event ) {
8390 // get request
8491 const { request } = event ;
92+
8593 // eslint-disable-next-line max-len
86- const path = request . url . includes ( self . config . domain ) ? request . url . split ( self . config . domain ) . pop ( ) : null ;
94+ const path = request . url . includes ( self . config . domain ) ? request . url . split ( self . config . domain ) . pop ( ) : request . url ;
8795
8896 // match cache
8997 let response = await caches . match ( request ) ;
@@ -96,7 +104,7 @@ class EdenOffline extends Events {
96104 // find offline route
97105 const offline = this . _routes . find ( ( route ) => {
98106 // test route
99- return route . test . test ( path ) ;
107+ return route . route === path ? true : route . test . test ( path ) ;
100108 } ) ;
101109
102110 // create offline response
@@ -105,7 +113,7 @@ class EdenOffline extends Events {
105113 url : path ,
106114 page : offline ? offline . view : 'offline-page' ,
107115 path : offline ? offline . path : path ,
108- layout : ` ${ ( offline || { } ) . layout || 'main' } -layout` ,
116+ layout : 'main-layout' ,
109117 } ,
110118 page : {
111119 title : offline ? offline . title : 'Offline' ,
@@ -136,27 +144,36 @@ class EdenOffline extends Events {
136144 * @param {Event } event
137145 */
138146 async install ( ) {
139- // install offline cache
140- this . eden . log ( 'info' , 'installing offline cache' ) ;
147+ // check installing
148+ if ( this . _installing ) return ;
141149
142- // open cache
143- const cache = await caches . open ( self . config . version ) ;
144- const files = self . config . offline . files || [ ] ;
150+ // installing
151+ this . _installing = true ;
145152
146- // unshift files
147- files . unshift ( '/' ) ;
148- files . unshift ( '/offline' ) ;
149- files . unshift ( `/public/js/app.min.js?v=${ self . config . version } ` ) ;
150- files . unshift ( `/public/css/app.min.css?v=${ self . config . version } ` ) ;
153+ // try/catch
154+ try {
155+ // skip waiting
156+ self . skipWaiting ( ) ;
151157
152- // add all
153- await cache . addAll ( files ) ;
158+ // config
159+ const config = await this . eden . config ( true ) ;
154160
155- // skip waiting
156- self . skipWaiting ( ) ;
161+ // install offline cache
162+ this . eden . log ( 'info' , 'installing offline cache' ) ;
157163
158- // install offline cache
159- this . eden . log ( 'info' , 'installed offline cache' ) ;
164+ // open cache
165+ const cache = await caches . open ( config . version ) ;
166+ const files = config . routes || [ ] ;
167+
168+ // add all
169+ await cache . addAll ( files ) ;
170+
171+ // install offline cache
172+ this . eden . log ( 'info' , 'installed offline cache' ) ;
173+ } catch ( e ) { }
174+
175+ // installing
176+ this . _installing = false ;
160177 }
161178
162179 /**
@@ -167,20 +184,50 @@ class EdenOffline extends Events {
167184 * @return {Promise }
168185 */
169186 async activate ( ) {
187+ // config
188+ const config = await this . eden . config ( true ) ;
189+
190+ // build routes
191+ this . _routes = [ ] ;
192+
193+ // loop routes
194+ for ( const route of self . config . routes || [ ] ) {
195+ // test route
196+ const test = toRegex ( route ) ;
197+
198+ // push route
199+ this . _routes . push ( {
200+ route,
201+ test,
202+ } ) ;
203+ }
204+
205+ // install
206+ await this . install ( ) ;
207+
170208 // install offline cache
171- this . eden . log ( 'info' , 'removing depricated offline cache' ) ;
209+ this . eden . log ( 'info' , 'checking offline cache' ) ;
172210
173211 // get cache keys
174212 const keys = await caches . keys ( ) ;
175213
176214 // loop keys
177215 for ( const key of keys ) {
178216 // delete cache
179- if ( key !== self . config . version ) await caches . delete ( key ) ;
217+ if ( key !== config . version ) {
218+ // install offline cache
219+ this . eden . log ( 'info' , `removing offline cache ${ key } ` ) ;
220+
221+ // delete
222+ await caches . delete ( key ) ;
223+
224+ // install offline cache
225+ this . eden . log ( 'info' , `removed offline cache ${ key } ` ) ;
226+ }
180227 }
181228
182229 // install offline cache
183- this . eden . log ( 'info' , 'removed depricated offline cache' ) ;
230+ this . eden . log ( 'info' , 'checked offline cache' ) ;
184231
185232 // claim clients
186233 self . clients . claim ( ) ;
0 commit comments