Skip to content
Snippets Groups Projects
sw.js 3.71 KiB
Newer Older
Jean-Baptiste Pasquier's avatar
Jean-Baptiste Pasquier committed
const CACHE_NAME = 'hubl-store-cnt82i';
self.addEventListener('install', function (e) {
Jean-Baptiste Pasquier's avatar
Jean-Baptiste Pasquier committed
  self.skipWaiting();
    caches.open(CACHE_NAME).then(function (cache) {
      return cache.addAll([
Jean-Baptiste Pasquier's avatar
Jean-Baptiste Pasquier committed
        '/locales/es.json',
        '/locales/fr.json',
        '/scripts/index.js',
        '/syles/index.css',
        '/index.html',
        '/'
      ]);
Jean-Baptiste Pasquier's avatar
Jean-Baptiste Pasquier committed
    })
self.addEventListener('activate', function (e) {
  // invalidate older versions
  e.waitUntil(
    caches.keys()
    .then(function (keyList) {
      return Promise.all(keyList.map(function (key) {
        if (key !== CACHE_NAME && key !== (CACHE_NAME + "-cdn") && key !== (CACHE_NAME + "-api")) {
          return caches.delete(key);
        }
      }));
    }));
  self.clients.claim();
});

if(process.env.NODE_ENV === 'production'){
  self.addEventListener('fetch', function (event) {
    let requestURL = new URL(event.request.url);
    if (requestURL.origin == location.origin) {
      // Static asset, cache then network
      event.respondWith(
        caches.open(CACHE_NAME).then(function (cache) {
          return cache.match(event.request).then(function (response) {
            var fetchPromise = fetch(event.request).then(function (networkResponse) {
              cache.put(event.request, networkResponse.clone());
              return networkResponse;
            });
            return response || fetchPromise;
        event.request.method == 'POST' ||
        event.request.method == 'PUT'
      ) {
        // disabled: lead to cors errors
        // // POST/PUT to api, rewrite the cache
        // event.respondWith(
        //   caches.open(CACHE_NAME + '-api').then(function (cache) {
        //     return fetch(event.request).then(function (response) {
        //       cache.put(event.request, response.clone());
        //       return response;
        // api: no cache
        event.respondWith(fetch(event.request));
      } else if (
        /matomo/.test(requestURL.origin) ||
        /sentry/.test(requestURL.origin) ||
        /jabber/.test(requestURL.origin) ||
        /xmpp/.test(requestURL.origin)
      ) {
        // analytics, always distant
        event.respondWith(fetch(event.request));
      } else {
        if (
          /unpkg/.test(requestURL.origin) ||
          /skypack/.test(requestURL.origin) ||
          /jspm/.test(requestURL.origin) ||
          /jsdeliver/.test(requestURL.origin) ||
          /cdn/.test(requestURL.origin) ||
          /googleapis/.test(requestURL.origin)
        ) {
          // cdn: cache then network
          event.respondWith(
            caches.open(CACHE_NAME + '-cdn').then(function (cache) {
              return cache.match(event.request).then(function (response) {
                var fetchPromise = fetch(event.request).then(function (networkResponse) {
                  cache.put(event.request, networkResponse.clone());
                  return networkResponse;
                });
                return response || fetchPromise;
              });
            }),
          );
        } else {
          // disabled: lead to cors errors
          // // api: distant then cache
          // event.respondWith(
          //   fetch(event.request)
          //   .then((response) => {
          //     caches.open(CACHE_NAME + '-api').then(function (cache) {
          //       cache.put(event.request, response.clone());
          //       return response;
          //     });
          //   })
          //   .catch(() => {
          //     return caches.match(event.request);
          //   })
          // );
          // api: no cache
          event.respondWith(fetch(event.request));
        }