diff --git a/app/javascript/lib/ServiceWorker.js b/app/javascript/lib/ServiceWorker.js index b17b44f..792e754 100644 --- a/app/javascript/lib/ServiceWorker.js +++ b/app/javascript/lib/ServiceWorker.js @@ -1,49 +1,60 @@ function trackInstall(worker, cb) { - worker.addEventListener('statechange', function() { - //If the worker is now installed, let the user know that there is an update ready - if (worker.state == 'installed') { - cb(); - } - }); + // worker.addEventListener('statechange', function() { + // //If the worker is now installed, let the user know that there is an update ready + // if (worker.state == 'installed') { + // cb(); + // } + // }); } export function swUpdate() { - navigator.serviceWorker.getRegistration().then(reg => { - if (reg && reg.waiting) { - reg.waiting.postMessage("skipWaiting"); - window.location.reload(true); - } - }); + // navigator.serviceWorker.getRegistration().then(reg => { + // if (reg && reg.waiting) { + // reg.waiting.postMessage("skipWaiting"); + // window.location.reload(true); + // } + // }); } export function swInit(store) { - const updateReady = () => store.commit("setUpdateAvailable", true); - if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('/sw.js') - .then(function (reg) { - console.log('Registration succeeded. Scope is ' + reg.scope); - - if (reg.waiting) { - updateReady(); - } - - // If there's an updated worker installing, track its progress. If it becomes "installed", call - // indexController._updateReady() - if (reg.installing) { - trackInstall(reg.installing, updateReady); - } - - reg.addEventListener('updatefound', function () { - trackInstall(reg.installing, updateReady); - }); - - }).catch(function (error) { - console.log('Registration failed with ' + error); + window.addEventListener('load', () => { + navigator.serviceWorker.register('/packs/sw.js').then(registration => { + console.log('SW registered: ', registration); + }).catch(registrationError => { + console.log('SW registration failed: ', registrationError); }); + }); } + // const updateReady = () => store.commit("setUpdateAvailable", true); + // + // if ('serviceWorker' in navigator) { + // navigator.serviceWorker.register('/sw.js') + // .then(function (reg) { + // console.log('Registration succeeded. Scope is ' + reg.scope); + // + // if (reg.waiting) { + // updateReady(); + // } + // + // // If there's an updated worker installing, track its progress. If it becomes "installed", call + // // indexController._updateReady() + // if (reg.installing) { + // trackInstall(reg.installing, updateReady); + // } + // + // reg.addEventListener('updatefound', function () { + // trackInstall(reg.installing, updateReady); + // }); + // + // }).catch(function (error) { + // console.log('Registration failed with ' + error); + // }); + // } + + } \ No newline at end of file diff --git a/app/javascript/service_worker/sw.js b/app/javascript/service_worker/sw.js new file mode 100644 index 0000000..0ebd59b --- /dev/null +++ b/app/javascript/service_worker/sw.js @@ -0,0 +1,5 @@ + +workbox.skipWaiting(); +workbox.clientsClaim(); + +workbox.precaching.precacheAndRoute(self.__precacheManifest); \ No newline at end of file diff --git a/config/webpack/environment.js b/config/webpack/environment.js index 841c7df..bd8ab8f 100644 --- a/config/webpack/environment.js +++ b/config/webpack/environment.js @@ -1,6 +1,7 @@ const { environment } = require('@rails/webpacker'); const vue = require('./loaders/vue'); const svg = require('./loaders/svg'); +const workbox = require('./plugins/workbox'); environment.loaders.append('vue', vue); environment.loaders.append('svg', svg); @@ -8,4 +9,6 @@ environment.loaders.append('svg', svg); const fileLoader = environment.loaders.get('file'); fileLoader.exclude = /\.(svg)$/i; +environment.plugins.append('workbox', workbox); + module.exports = environment; diff --git a/config/webpack/plugins/workbox.js b/config/webpack/plugins/workbox.js new file mode 100644 index 0000000..b02374e --- /dev/null +++ b/config/webpack/plugins/workbox.js @@ -0,0 +1,10 @@ +const { config } = require('@rails/webpacker') +const path = require('path'); +const workboxPlugin = require('workbox-webpack-plugin'); + +module.exports = new workboxPlugin.InjectManifest({ + swSrc: path.join(config.source_path, 'service_worker/sw.js'), + swDest: 'sw.js', + importsDirectory: 'sw', + importWorkboxFrom: 'local' +}); diff --git a/docker-compose-rlyeh.yml b/docker-compose-rlyeh.yml index b5a3a89..c5df7d8 100644 --- a/docker-compose-rlyeh.yml +++ b/docker-compose-rlyeh.yml @@ -7,8 +7,6 @@ services: web: image: danelbert/parsley:production - ports: - - "7000:80" environment: - RAILS_USE_MEMCACHE=true - PASSENGER_APP_ENV=production diff --git a/package.json b/package.json index 826bd8d..93011ba 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "vue-template-compiler": "^2.5.16", "vuex": "^3.0.1", "vuex-router-sync": "^5.0.0", - "webpack": "^3.11.0" + "webpack": "^3.11.0", + "workbox-webpack-plugin": "^3.4.1" }, "devDependencies": { "webpack-dev-server": "^2.11.2" diff --git a/yarn.lock b/yarn.lock index 8ff5715..c88b0b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1312,6 +1312,10 @@ commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +common-tags@^1.4.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2277,6 +2281,14 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -2556,6 +2568,10 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -3005,6 +3021,12 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isemail@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.2.tgz#937cf919002077999a73ea8b1951d590e84e01dd" + dependencies: + punycode "2.x.x" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -3027,6 +3049,14 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +joi@^11.1.1: + version "11.4.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-11.4.0.tgz#f674897537b625e9ac3d0b7e1604c828ad913ccb" + dependencies: + hoek "4.x.x" + isemail "3.x.x" + topo "2.x.x" + js-base64@^2.1.8, js-base64@^2.1.9: version "2.4.5" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92" @@ -3097,6 +3127,12 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -3220,7 +3256,7 @@ lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" -lodash.template@^4.2.4: +lodash.template@^4.2.4, lodash.template@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" dependencies: @@ -4541,6 +4577,10 @@ prettier@^1.7.0: version "1.13.5" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.5.tgz#7ae2076998c8edce79d63834e9b7b09fead6bfd0" +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -4601,14 +4641,14 @@ punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" +punycode@2.x.x, punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -5578,6 +5618,12 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +topo@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" + dependencies: + hoek "4.x.x" + tough-cookie@~2.3.0: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" @@ -5704,6 +5750,10 @@ units-css@^0.4.0: isnumeric "^0.2.0" viewport-dimensions "^0.2.0" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -6006,6 +6056,115 @@ wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +workbox-background-sync@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-3.4.1.tgz#6957a0ff622ee08b7af958d561cf2d4821edb640" + dependencies: + workbox-core "^3.4.1" + +workbox-broadcast-cache-update@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.4.1.tgz#9861cd2b6d874d41be26a34bc5bdd7a794d3badf" + dependencies: + workbox-core "^3.4.1" + +workbox-build@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-3.4.1.tgz#65af4c81b05dac6a1819c88b8a2a944ddf5cec04" + dependencies: + babel-runtime "^6.26.0" + common-tags "^1.4.0" + fs-extra "^4.0.2" + glob "^7.1.2" + joi "^11.1.1" + lodash.template "^4.4.0" + pretty-bytes "^4.0.2" + workbox-background-sync "^3.4.1" + workbox-broadcast-cache-update "^3.4.1" + workbox-cache-expiration "^3.4.1" + workbox-cacheable-response "^3.4.1" + workbox-core "^3.4.1" + workbox-google-analytics "^3.4.1" + workbox-navigation-preload "^3.4.1" + workbox-precaching "^3.4.1" + workbox-range-requests "^3.4.1" + workbox-routing "^3.4.1" + workbox-strategies "^3.4.1" + workbox-streams "^3.4.1" + workbox-sw "^3.4.1" + +workbox-cache-expiration@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-cache-expiration/-/workbox-cache-expiration-3.4.1.tgz#6c92317ca43be7e3030662ffbb3fd413c1689f18" + dependencies: + workbox-core "^3.4.1" + +workbox-cacheable-response@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-3.4.1.tgz#5517b4d5a86c2ad5d48000109335c5af23f47e40" + dependencies: + workbox-core "^3.4.1" + +workbox-core@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-3.4.1.tgz#dd6d8ad7398a0e6224c04b079841045af0c62e1f" + +workbox-google-analytics@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-3.4.1.tgz#98f407b7d157be68087e0f3edb432cba291fd614" + dependencies: + workbox-background-sync "^3.4.1" + workbox-core "^3.4.1" + workbox-routing "^3.4.1" + workbox-strategies "^3.4.1" + +workbox-navigation-preload@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-3.4.1.tgz#d3eb75239cc4eed9314b25e233da2ba282dcc84d" + dependencies: + workbox-core "^3.4.1" + +workbox-precaching@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-3.4.1.tgz#2d4a3f6ae8d825e17ef51dddc51aae5ef2876fb5" + dependencies: + workbox-core "^3.4.1" + +workbox-range-requests@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-3.4.1.tgz#098474efecce49148ba925c75753e0ac96a8dd9a" + dependencies: + workbox-core "^3.4.1" + +workbox-routing@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-3.4.1.tgz#c5ac213480869da29a91a88db57b679ba7ddf58a" + dependencies: + workbox-core "^3.4.1" + +workbox-strategies@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-3.4.1.tgz#96f7947a9611ea599fcb71d44a5abab503fbe288" + dependencies: + workbox-core "^3.4.1" + +workbox-streams@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-3.4.1.tgz#b639843431ea38825909a557e54108fdc469f0eb" + dependencies: + workbox-core "^3.4.1" + +workbox-sw@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-3.4.1.tgz#7b51fc14c44b4e880c369f97681472cf6e117113" + +workbox-webpack-plugin@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-3.4.1.tgz#e91a4ab1e427b7d46afb7c185e99ca172e306d26" + dependencies: + json-stable-stringify "^1.0.1" + workbox-build "^3.4.1" + worker-farm@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"