1const cacheName = 'sundancenow.com-site-cache'; 2const appName = 'sundance'; 3const assets = '^http?s:\/\/(local|dev|staging|pre-prod|www).sundancenow.com\/.*.(js|css|woff|woff2|otf|png|svg|jpg|jpeg)$'; 4const cachePatterns = [ 5// Google fonts CSS 6'http?s:\/\/fonts.googleapis.com/.*', 7// Google fonts static files 8'http?s:\/\/fonts.gstatic.com/.*', 9// Site assets 10assets, 11]; 12const isCachable = function (request) { 13for (let i = 0; i < cachePatterns.length; i++) { 14if ( 15(new RegExp(cachePatterns[i])).test(request.url) && 16request.method === 'GET' && 17request.url.indexOf('pixel') === -1 18) { 19return true; 20} 21} 22return false; 23}; 24self.skipWaiting().then(r => r); 25self.addEventListener('fetch', function (event) { 26if (isCachable(event.request)) { 27event.respondWith( 28caches.open(cacheName).then(function (cache) { 29return cache.match(event.request).then(function (response) { 30return response || fetch(event.request).then(function (response) { 31try { 32if(response.status === 200) { 33cache.put(event.request, response.clone()); 34} 35} catch (e) { 36clearCache(); 37} 38return response; 39}); 40}); 41}) 42); 43} 44}); 45self.addEventListener('activate', e => { 46e.waitUntil(clearCache()); 47e.waitUntil(updateFromManifest()); 48return self.clients.claim(); 49}); 50 51const updateFromManifest = () => { 52fetch( 53'/app/themes/rlje/subthemes/' + appName + '/src/manifest.json', 54{ 55method: 'GET', 56redirect: 'follow' 57} 58) 59.then(response => response.text()) 60.then(result => { 61fetchManifestFiles(result); 62}) 63.catch(error => { 64console.log('error', error); 65}); 66}; 67 68const fetchManifestFiles = (source) => { 69try { 70const data = JSON.parse(source); 71for (const property in data) { 72if (data.hasOwnProperty(property)) { 73let rewritten = () => { 74const exclusions = ['/favicon.ico', '/robots.txt', '/svg/svg-map.svg']; 75return exclusions.indexOf(data[property]) !== -1 || 76data[property].indexOf('fonts') !== -1; 77 78}; 79let url = rewritten() ? data[property] : '/app/themes/rlje/subthemes/' + appName + data[property]; 80fetch( 81url, 82{ 83method: 'GET', 84redirect: 'follow' 85} 86) 87.then(response => saveToCache(url, response)) 88.catch(error => console.log('error', error)); 89} 90} 91} catch (e) { 92console.log(e); 93} 94}; 95 96const saveToCache = (url, response) => { 97try { 98caches.open(cacheName).then(function (cache) { 99try { 100cache.put(url, response.clone()); 101} catch (e) { 102console.log(e); 103} 104}); 105} catch (e) { 106console.log(e); 107} 108}; 109 110const clearCache = () => { 111caches.keys().then(keyList => { 112return Promise.all(keyList.map(key => { 113if (key !== cacheName) { 114return caches.delete(key); 115} 116})); 117}); 118};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.