@@ -28,13 +28,29 @@ const otherManifest = [
2828const EXCLUDED_PRECACHE_URLS = new Set ( [
2929 new URL ( "/icon_512x512.png" , self . location ) . href ,
3030] ) ;
31- const manifestURLs = [ ...manifest , ...otherManifest ]
32- . map ( ( entry ) => new URL ( entry . url , self . location ) . href )
33- . filter ( ( href ) => ! EXCLUDED_PRECACHE_URLS . has ( href ) ) ;
31+
32+ const allManifestURLs = [ ...manifest , ...otherManifest ] . map (
33+ ( entry ) => new URL ( entry . url , self . location ) . href ,
34+ ) ;
35+ const requiredManifestURLs = allManifestURLs . filter (
36+ ( href ) => ! EXCLUDED_PRECACHE_URLS . has ( href ) ,
37+ ) ;
38+
39+ const optionalManifestURLs = [ ...EXCLUDED_PRECACHE_URLS ] ;
3440
3541self . addEventListener ( "install" , ( event ) => {
3642 event . waitUntil (
37- caches . open ( cacheName ) . then ( ( cache ) => cache . addAll ( manifestURLs ) ) ,
43+ ( async ( ) => {
44+ const cache = await caches . open ( cacheName ) ;
45+
46+ // Fail install only if "required" assets fail
47+ await cache . addAll ( requiredManifestURLs ) ;
48+
49+ // Optional assets: don't fail SW install if these fail
50+ await Promise . allSettled (
51+ optionalManifestURLs . map ( ( url ) => cache . add ( url ) ) ,
52+ ) ;
53+ } ) ( ) ,
3854 ) ;
3955} ) ;
4056self . addEventListener ( "activate" , ( event ) => {
@@ -44,15 +60,15 @@ self.addEventListener("activate", (event) => {
4460 // clean up those who are not listed in manifestURLs
4561 const keys = await cache . keys ( ) ;
4662 for ( const request of keys ) {
47- if ( ! manifestURLs . includes ( request . url ) ) {
63+ if ( ! requiredManifestURLs . includes ( request . url ) ) {
4864 await cache . delete ( request ) ;
4965 }
5066 }
5167 } ) ( ) ,
5268 ) ;
5369} ) ;
5470registerRoute (
55- ( { url } ) => manifestURLs . includes ( url . href ) ,
71+ ( { url } ) => requiredManifestURLs . includes ( url . href ) ,
5672 new NetworkFirst ( {
5773 cacheName,
5874 } ) ,
0 commit comments