test-sw-worker.js 957 B

1234567891011121314151617181920212223242526272829303132
  1. /* global self, zip, importScripts, Response */
  2. "use strict";
  3. importScripts("./../../dist/zip-full.js");
  4. zip.configure({ useWebWorkers: false });
  5. self.addEventListener("fetch", event => {
  6. const matchZipEntry = event.request.url.match(/.zip#(.+)$/i);
  7. if (matchZipEntry) {
  8. event.respondWith(getFileEntry(event.request.url, matchZipEntry[1])
  9. .then(body => new Response(body)));
  10. }
  11. });
  12. async function getFileEntry(url, filenameEntry) {
  13. let zipReader, entries;
  14. try {
  15. zipReader = new zip.ZipReader(new zip.HttpRangeReader(url));
  16. entries = await zipReader.getEntries();
  17. } catch (error) {
  18. if (error.message == zip.ERR_HTTP_RANGE) {
  19. zipReader = new zip.ZipReader(new zip.HttpReader(url));
  20. entries = await zipReader.getEntries();
  21. } else {
  22. throw error;
  23. }
  24. }
  25. const fileEntry = entries.find(entry => entry.filename == filenameEntry);
  26. const data = await fileEntry.getData(new zip.BlobWriter());
  27. await zipReader.close();
  28. return data;
  29. }