1234567891011121314151617181920212223242526272829303132 |
- /* global self, zip, importScripts, Response */
- "use strict";
- importScripts("./../../dist/zip-full.js");
- zip.configure({ useWebWorkers: false });
- self.addEventListener("fetch", event => {
- const matchZipEntry = event.request.url.match(/.zip#(.+)$/i);
- if (matchZipEntry) {
- event.respondWith(getFileEntry(event.request.url, matchZipEntry[1])
- .then(body => new Response(body)));
- }
- });
- async function getFileEntry(url, filenameEntry) {
- let zipReader, entries;
- try {
- zipReader = new zip.ZipReader(new zip.HttpRangeReader(url));
- entries = await zipReader.getEntries();
- } catch (error) {
- if (error.message == zip.ERR_HTTP_RANGE) {
- zipReader = new zip.ZipReader(new zip.HttpReader(url));
- entries = await zipReader.getEntries();
- } else {
- throw error;
- }
- }
- const fileEntry = entries.find(entry => entry.filename == filenameEntry);
- const data = await fileEntry.getData(new zip.BlobWriter());
- await zipReader.close();
- return data;
- }
|