UNPKG

qcobjects-cli

Version:

qcobjects cli command line tool

113 lines (96 loc) 3.39 kB
/** * QCObjects Framework * ____________________________________ * * Author: Jean Machuca <correojean@gmail.com> * * Cross Browser Javascript Framework for MVC Patterns * QuickCorp/QCObjects is licensed under the * GNU Lesser General Public License v3.0 * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt) * * Permissions of this copyleft license are conditioned on making available * complete source code of licensed works and modifications under the same * license or the GNU GPLv3. Copyright and license notices must be preserved. * Contributors provide an express grant of patent rights. However, a larger * work using the licensed work through interfaces provided by the licensed * work may be distributed under different terms and without source code for * the larger work. * * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com> * * Everyone is permitted to copy and distribute verbatim copies of this * license document, but changing it is not allowed. */ "use strict"; // eslint-disable-next-line no-undef /* eslint-disable no-undef */ // This is the service worker with the combined offline experience (Offline page + Offline copy of pages) const CACHE = "{{appName}}-offline-page"; importScripts("https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js"); const offlineFallbackPage = "index-fallback.html"; self.addEventListener("message", (event) => { if (event.data && event.data.type === "SKIP_WAITING") { self.skipWaiting(); } }); self.addEventListener("install", async (event) => { event.waitUntil( caches.open(CACHE) .then((cache) => cache.add(offlineFallbackPage)) ); }); if (workbox.navigationPreload.isSupported()) { workbox.navigationPreload.enable(); } workbox.routing.registerRoute( // eslint-disable-next-line prefer-regex-literals new RegExp("/*"), new workbox.strategies.StaleWhileRevalidate({ cacheName: CACHE }) ); self.addEventListener("fetch", (event) => { if (event.request.mode === "navigate") { event.respondWith((async () => { try { const preloadResp = await event.preloadResponse; if (preloadResp) { return preloadResp; } const networkResp = await fetch(event.request); return networkResp; } catch (error) { const cache = await caches.open(CACHE); const cachedResp = await cache.match(offlineFallbackPage); return cachedResp; } })()); } }); const version = "{{appVersion}}"; const appName = "{{appName}}"; const cacheSufix = (Math.round(Date.now()/(1000*3600))).toString(); // 1 hour const cacheName = `qcobjects-app-${appName}-${version}-${cacheSufix}`; const startUrl = "/?homescreen=1"; caches.delete(cacheName); // force to reload cache for the first time the sw is loaded self.addEventListener("install", e => { e.waitUntil( caches.open(cacheName).then(cache => { return cache.addAll([`${startUrl}`,{{filelist}}]) .then(() => self.skipWaiting()); }) ); }); self.addEventListener("activate", event => { event.waitUntil(self.clients.claim()); }); self.addEventListener("fetch", event => { event.respondWith( caches.open(cacheName) .then(cache => cache.match(event.request, { ignoreSearch: true })) .then(response => { return response || fetch(event.request); }) ); });