https://github.com/ziyang0116/service-worker-node
service-worker-node provides service worker environment inside nodejs.
https://github.com/ziyang0116/service-worker-node
Last synced: 8 months ago
JSON representation
service-worker-node provides service worker environment inside nodejs.
- Host: GitHub
- URL: https://github.com/ziyang0116/service-worker-node
- Owner: ziyang0116
- License: mit
- Created: 2020-04-20T07:08:05.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-03-04T15:17:15.000Z (almost 2 years ago)
- Last Synced: 2025-05-01T22:37:00.576Z (8 months ago)
- Language: JavaScript
- Homepage:
- Size: 7.81 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - service-worker-node - worker-node provides service worker environment inside nodejs. | ziyang0116 | 3 | (JavaScript)
README
# service-worker-node
`service-worker-node` provides a Service Worker environment inside nodejs. We can execute Service Worker JS in server side, fetch PWA precached resource list.
`service-worker-node` and [node-service-worker](https://github.com/gdnmobilelab/node-service-worker) are similar.
Compared with [node-service-worker](https://github.com/gdnmobilelab/node-service-worker), `service-worker-node` implements more features:
- supports `importScript`
- can execute google PWA lib [Workbox](https://developers.google.com/web/tools/workbox)
## How to use
```shell
npm install service-worker-node
```
At first, creat a ServiceWorker:
```js
const sw = new ServiceWorker({
scriptContent: content,
scope: "https://mdn.github.io/pwa-examples/js13kpwa/",
// interceptFetch: (args) => {
// return Promise.resolve(new Response());
// },
importScript: (url) => {
var res = syncRequest('GET', url);
return res.getBody('utf8');
}
});
```
### trigger event
Install event and Active event:
```js
sw.addEventListener("install", () => {
//do something when service worker has already installed.
sw.triggerActiveEvent();
});
sw.addEventListener("active", ()=>{
//do something when service worker has already actived.
})
sw.triggerInstallEvent();
```
Fetch event:
```js
sw.addEventListener("fetch", (response)=>{
console.log(response);
})
sw.triggerFetchEvent("https://mdn.github.io/pwa-examples/js13kpwa/data/img/emma-3d.jpg");
```
### Fetch precached resource
```js
sw.addEventListener("install", () => {
sw.caches.keys()
.then((keys) => {
console.log(keys);
let openPromises = keys.map((key) => sw.caches.open(key));
return Promise.all(openPromises);
})
.then((cacheObjects) => {
let keysPromises = cacheObjects.map((c) => c.keys());
return Promise.all(keysPromises);
})
.then((cacheEntryArrays) => {
let allEntries = Array.prototype.concat.apply([], cacheEntryArrays);
allEntries = allEntries.map(item => {
if (typeof item === 'object') {
return item.url;
} else {
return item;
}
});
console.log(allEntries)
})
});
```
### Demo
[Demo](./test/worker.js)