{"id":13724865,"url":"https://github.com/ziyang0116/service-worker-node","last_synced_at":"2025-05-07T19:31:06.991Z","repository":{"id":225848484,"uuid":"257199855","full_name":"ziyang0116/service-worker-node","owner":"ziyang0116","description":"service-worker-node provides service worker environment inside nodejs.","archived":false,"fork":false,"pushed_at":"2024-03-04T15:17:15.000Z","size":8,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-05-01T22:37:00.576Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ziyang0116.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-04-20T07:08:05.000Z","updated_at":"2024-03-04T15:12:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"bb324cf3-13b3-4480-9cb5-28c6c00ef9c1","html_url":"https://github.com/ziyang0116/service-worker-node","commit_stats":null,"previous_names":["ziyang0116/service-worker-node"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyang0116%2Fservice-worker-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyang0116%2Fservice-worker-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyang0116%2Fservice-worker-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyang0116%2Fservice-worker-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ziyang0116","download_url":"https://codeload.github.com/ziyang0116/service-worker-node/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252943658,"owners_count":21829285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T01:02:04.760Z","updated_at":"2025-05-07T19:31:01.981Z","avatar_url":"https://github.com/ziyang0116.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# service-worker-node\n\n`service-worker-node` provides a Service Worker environment inside nodejs. We can execute Service Worker JS in server side, fetch PWA  precached resource list.\n\n`service-worker-node` and [node-service-worker](https://github.com/gdnmobilelab/node-service-worker) are similar.\n\nCompared with [node-service-worker](https://github.com/gdnmobilelab/node-service-worker), `service-worker-node`  implements more features:\n\n- supports `importScript`\n\n- can execute google PWA lib [Workbox](https://developers.google.com/web/tools/workbox)\n\n## How to use\n\n```shell\nnpm install service-worker-node\n```\n\nAt first, creat a ServiceWorker:\n\n```js\n\n  const sw = new ServiceWorker({\n            scriptContent: content,\n            scope: \"https://mdn.github.io/pwa-examples/js13kpwa/\",\n            // interceptFetch: (args) =\u003e {\n            //     return Promise.resolve(new Response());\n            // },\n            importScript: (url) =\u003e {\n                var res = syncRequest('GET', url);\n                return res.getBody('utf8');\n            }\n        });\n```\n\n### trigger event\n\nInstall event and Active event:\n\n```js\n\n    sw.addEventListener(\"install\", () =\u003e {\n        //do something when service worker has already installed. \n        sw.triggerActiveEvent();\n    });\n    sw.addEventListener(\"active\", ()=\u003e{\n        //do something when service worker has already actived.\n    })\n    sw.triggerInstallEvent();\n\n```\n\nFetch event:\n\n```js\n\n    sw.addEventListener(\"fetch\", (response)=\u003e{\n        console.log(response);\n    })\n\n    sw.triggerFetchEvent(\"https://mdn.github.io/pwa-examples/js13kpwa/data/img/emma-3d.jpg\");\n\n```\n\n### Fetch precached resource\n\n```js\n\n    sw.addEventListener(\"install\", () =\u003e {\n            sw.caches.keys()\n                .then((keys) =\u003e {\n                    console.log(keys);\n                    let openPromises = keys.map((key) =\u003e sw.caches.open(key));\n                    return Promise.all(openPromises);\n                })\n                .then((cacheObjects) =\u003e {\n                    let keysPromises = cacheObjects.map((c) =\u003e c.keys());\n                    return Promise.all(keysPromises);\n                })\n                .then((cacheEntryArrays) =\u003e {\n                    let allEntries = Array.prototype.concat.apply([], cacheEntryArrays);\n                    allEntries = allEntries.map(item =\u003e {\n                        if (typeof item === 'object') {\n                            return item.url;\n                        } else {\n                            return item;\n                        }\n                    });\n                    console.log(allEntries)\n                })\n        });\n\n```\n\n### Demo\n\n[Demo](./test/worker.js)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziyang0116%2Fservice-worker-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fziyang0116%2Fservice-worker-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziyang0116%2Fservice-worker-node/lists"}