Comparing version 1.1.0 to 1.5.0
@@ -7,5 +7,5 @@ 'use strict'; | ||
var BackgroundFetch = function () { | ||
function BackgroundFetch() { | ||
_classCallCheck(this, BackgroundFetch); | ||
var MoleFetch = function () { | ||
function MoleFetch() { | ||
_classCallCheck(this, MoleFetch); | ||
@@ -19,3 +19,3 @@ this.prefix = 'bgfetch-'; | ||
_createClass(BackgroundFetch, [{ | ||
_createClass(MoleFetch, [{ | ||
key: 'onResponse', | ||
@@ -34,2 +34,18 @@ value: function onResponse(taskName) { | ||
}, { | ||
key: 'initMole', | ||
value: function initMole(serviceWorkerFile) { | ||
if (!serviceWorkerFile) { | ||
serviceWorkerFile = 'node_modules/mole-fetch/dist/mole-fetch-worker.js'; | ||
} | ||
if ('serviceWorker' in navigator && 'SyncManager' in window) { | ||
navigator.serviceWorker.register().then(function (registration) { | ||
// Registration was successful | ||
console.log('ServiceWorker registration successful with scope: ', registration.scope); | ||
}).catch(function (err) { | ||
// registration failed :( | ||
console.log('ServiceWorker registration failed: ', err); | ||
}); | ||
} | ||
} | ||
}, { | ||
key: 'sendRequest', | ||
@@ -250,3 +266,3 @@ value: function sendRequest(taskName, url, data, method) { | ||
return BackgroundFetch; | ||
return MoleFetch; | ||
}(); |
@@ -1,1 +0,1 @@ | ||
"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),BackgroundFetch=function(){function e(){_classCallCheck(this,e),this.prefix="bgfetch-",this.debug=!0}return _createClass(e,[{key:"onResponse",value:function(e){return new Promise(function(t,n){navigator.serviceWorker.addEventListener("message",function(n){var r=JSON.parse(n.data);r.taskName===e&&t(r.result)})})}},{key:"sendRequest",value:function(e,t,n,r){var a=this;return navigator.serviceWorker.ready.then(function(u){a.logDebug("ServiceWorker is Ready");var o={url:t,method:r,body:n};a.logDebug("Save request to LocalForage ["+a.prefix+e+"]"),localforage.setItem(a.prefix+e,JSON.stringify(o)).then(function(){a.logDebug("Register sync ["+a.prefix+e+"]"),a.registerSync(e)})})}},{key:"registerSync",value:function(e){var t=this;return navigator.serviceWorker.ready.then(function(n){n.sync.register(t.prefix+e).then(function(){t.updateTaskStatus(e,"requested")})})}},{key:"getCacheResponse",value:function(e,t){var n=this;return new Promise(function(r,a){localforage||a("localForage is required.");var u=n.prefix+e+"-result";localforage.getItem(u).then(function(a){a?(localforage.removeItem(u),n.updateTaskStatus(e,"completed"),a.time<=t||!t?(n.logDebug("Found cache for ["+e+"]"),r(a.result)):(n.logDebug("Found cache but Expired ["+e+"]"),r(!1))):(n.logDebug("Not found cache ["+e+"]"),r(!1))})})}},{key:"initBackgroudfetch",value:function(e){var t=this;e.tag.indexOf(this.prefix)!==-1&&(this.logDebug("Found bgfetch request ["+e.tag+"]"),localforage.getItem(e.tag).then(function(n){var r=t.makeFetchConfig(n);t.logDebug("Begin fetch request ["+e.tag+"]");var a=e.tag.replace(t.prefix,"");t.updateTaskStatus(a,"fetching"),t.makeFetch(r,e.tag,a)}))}},{key:"makeFetch",value:function(e,t,n){var r=this;return fetch(e.url,e.config).then(function(e){return e.text()}).then(function(e){r.logDebug("Fetch is Completed ["+t+"]"),localforage.removeItem(t);var a=e.replace(/(\r\n|\n|\r)/gm,"");r.logDebug("Publish data to client ["+t+"]"),r.publishResult(n,a)})}},{key:"makeFetchConfig",value:function(e){var t=JSON.parse(e);if(t){var n=t.url;return t.mode="cors",t.cache="default",{url:n,config:t}}}},{key:"publishResult",value:function(e,t,n){var r=this;this.logDebug("List client ["+this.prefix+e+"]"),self.clients.matchAll({includeUncontrolled:!0}).then(function(a){if(0==a.length||n===!0)r.updateTaskStatus(e,"cached"),r.saveResultWhenOffline(e,t);else{r.updateTaskStatus(e,"completed");var u=!0,o=!1,i=void 0;try{for(var s,c=a[Symbol.iterator]();!(u=(s=c.next()).done);u=!0){var l=s.value;r.postResult(e,t,l)}}catch(e){o=!0,i=e}finally{try{!u&&c.return&&c.return()}finally{if(o)throw i}}}})}},{key:"saveResultWhenOffline",value:function(e,t){var n=this;return new Promise(function(r,a){n.logDebug("client is offline save to LocalForage ["+n.prefix+e+"]"),localforage.setItem(n.prefix+e+"-result",{result:t,time:(new Date).getTime()/1e3}).then(function(){r({status:"success"})})})}},{key:"postResult",value:function(e,t,n){this.logDebug("Push to client "+n.id+" ["+this.prefix+e+"]");var r={result:t,taskName:e};n.postMessage(JSON.stringify(r))}},{key:"updateTaskStatus",value:function(e,t){var n=this;return new Promise(function(r,a){"completed"!==t?(localforage.setItem(n.prefix+e+"-status",t),r({status:"success"})):(localforage.removeItem(n.prefix+e+"-status"),r({status:"success"}))})}},{key:"getTaskStatus",value:function(e){var t=this;return new Promise(function(n,r){localforage.getItem(t.prefix+e+"-status").then(function(e){n(e)})})}},{key:"logDebug",value:function(e){this.debug===!0&&console.log(e)}}]),e}(); | ||
"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),MoleFetch=function(){function e(){_classCallCheck(this,e),this.prefix="bgfetch-",this.debug=!0}return _createClass(e,[{key:"onResponse",value:function(e){return new Promise(function(t,r){navigator.serviceWorker.addEventListener("message",function(r){var n=JSON.parse(r.data);n.taskName===e&&t(n.result)})})}},{key:"initMole",value:function(e){e||(e="node_modules/mole-fetch/dist/mole-fetch-worker.js"),"serviceWorker"in navigator&&"SyncManager"in window&&navigator.serviceWorker.register().then(function(e){console.log("ServiceWorker registration successful with scope: ",e.scope)}).catch(function(e){console.log("ServiceWorker registration failed: ",e)})}},{key:"sendRequest",value:function(e,t,r,n){var a=this;return navigator.serviceWorker.ready.then(function(o){a.logDebug("ServiceWorker is Ready");var i={url:t,method:n,body:r};a.logDebug("Save request to LocalForage ["+a.prefix+e+"]"),localforage.setItem(a.prefix+e,JSON.stringify(i)).then(function(){a.logDebug("Register sync ["+a.prefix+e+"]"),a.registerSync(e)})})}},{key:"registerSync",value:function(e){var t=this;return navigator.serviceWorker.ready.then(function(r){r.sync.register(t.prefix+e).then(function(){t.updateTaskStatus(e,"requested")})})}},{key:"getCacheResponse",value:function(e,t){var r=this;return new Promise(function(n,a){localforage||a("localForage is required.");var o=r.prefix+e+"-result";localforage.getItem(o).then(function(a){a?(localforage.removeItem(o),r.updateTaskStatus(e,"completed"),a.time<=t||!t?(r.logDebug("Found cache for ["+e+"]"),n(a.result)):(r.logDebug("Found cache but Expired ["+e+"]"),n(!1))):(r.logDebug("Not found cache ["+e+"]"),n(!1))})})}},{key:"initBackgroudfetch",value:function(e){var t=this;e.tag.indexOf(this.prefix)!==-1&&(this.logDebug("Found bgfetch request ["+e.tag+"]"),localforage.getItem(e.tag).then(function(r){var n=t.makeFetchConfig(r);t.logDebug("Begin fetch request ["+e.tag+"]");var a=e.tag.replace(t.prefix,"");t.updateTaskStatus(a,"fetching"),t.makeFetch(n,e.tag,a)}))}},{key:"makeFetch",value:function(e,t,r){var n=this;return fetch(e.url,e.config).then(function(e){return e.text()}).then(function(e){n.logDebug("Fetch is Completed ["+t+"]"),localforage.removeItem(t);var a=e.replace(/(\r\n|\n|\r)/gm,"");n.logDebug("Publish data to client ["+t+"]"),n.publishResult(r,a)})}},{key:"makeFetchConfig",value:function(e){var t=JSON.parse(e);if(t){var r=t.url;return t.mode="cors",t.cache="default",{url:r,config:t}}}},{key:"publishResult",value:function(e,t,r){var n=this;this.logDebug("List client ["+this.prefix+e+"]"),self.clients.matchAll({includeUncontrolled:!0}).then(function(a){if(0==a.length||r===!0)n.updateTaskStatus(e,"cached"),n.saveResultWhenOffline(e,t);else{n.updateTaskStatus(e,"completed");var o=!0,i=!1,s=void 0;try{for(var u,c=a[Symbol.iterator]();!(o=(u=c.next()).done);o=!0){var l=u.value;n.postResult(e,t,l)}}catch(e){i=!0,s=e}finally{try{!o&&c.return&&c.return()}finally{if(i)throw s}}}})}},{key:"saveResultWhenOffline",value:function(e,t){var r=this;return new Promise(function(n,a){r.logDebug("client is offline save to LocalForage ["+r.prefix+e+"]"),localforage.setItem(r.prefix+e+"-result",{result:t,time:(new Date).getTime()/1e3}).then(function(){n({status:"success"})})})}},{key:"postResult",value:function(e,t,r){this.logDebug("Push to client "+r.id+" ["+this.prefix+e+"]");var n={result:t,taskName:e};r.postMessage(JSON.stringify(n))}},{key:"updateTaskStatus",value:function(e,t){var r=this;return new Promise(function(n,a){"completed"!==t?(localforage.setItem(r.prefix+e+"-status",t),n({status:"success"})):(localforage.removeItem(r.prefix+e+"-status"),n({status:"success"}))})}},{key:"getTaskStatus",value:function(e){var t=this;return new Promise(function(r,n){localforage.getItem(t.prefix+e+"-status").then(function(e){r(e)})})}},{key:"logDebug",value:function(e){this.debug===!0&&console.log(e)}}]),e}(); |
importScripts('node_modules/localforage/dist/localforage.min.js') | ||
importScripts('node_modules/mole-fetch/dist/mole-fetch.min.js') | ||
importScripts('node_modules/mole-fetch/dist/mole-fetch.js') | ||
@@ -13,3 +13,4 @@ self.addEventListener('install', (event) => { | ||
self.addEventListener('sync', (event) => { | ||
initBackgroudfetch() | ||
let moleFetch = new MoleFetch | ||
moleFetch.initBackgroudfetch(event) | ||
}) |
@@ -5,3 +5,3 @@ const gulp = require('gulp') | ||
gulp.task('default', ['compile', 'compress'], () => { | ||
gulp.task('default', ['compile', 'compress', 'complie-service-woker'], () => { | ||
return true | ||
@@ -31,1 +31,8 @@ }) | ||
}) | ||
gulp.task('complie-service-woker', () => { | ||
return gulp.src('src/mole-fetch-worker.js') | ||
.pipe(babel({ | ||
presets: ['es2015'] | ||
})).pipe(gulp.dest('dist')) | ||
}) |
{ | ||
"name": "mole-fetch", | ||
"version": "1.1.0", | ||
"version": "1.5.0", | ||
"main": "./dist/mole-fetch.js", | ||
@@ -5,0 +5,0 @@ "dependencies": { |
@@ -23,2 +23,17 @@ 'use strict' | ||
initMole (serviceWorkerFile) { | ||
if (!serviceWorkerFile) { | ||
serviceWorkerFile = 'node_modules/mole-fetch/dist/mole-fetch-worker.js' | ||
} | ||
if ('serviceWorker' in navigator && 'SyncManager' in window) { | ||
navigator.serviceWorker.register().then((registration) => { | ||
// Registration was successful | ||
console.log('ServiceWorker registration successful with scope: ', registration.scope) | ||
}).catch(function (err) { | ||
// registration failed :( | ||
console.log('ServiceWorker registration failed: ', err) | ||
}) | ||
} | ||
} | ||
sendRequest (taskName, url, data, method) { | ||
@@ -25,0 +40,0 @@ return navigator.serviceWorker.ready.then((registration) => { |
Sorry, the diff of this file is not supported yet
31830
19
644