jszip.js
let zip = new JSZip();
zip.file("file.txt", "Hello World\n");
let folder = zip.folder("folder");
folder.file("file.txt", "Hello World\n");
/* Get yourself a canvas, then: */
let dataUrl = canvas.toDataURL('image/png');
let b64Index = dataUrl.indexOf('base64,') + 'base64,'.length;
zip.file("file.png", dataUrl.substring(b64Index), { base64: true });
zip.generateAsync({ type: "blob" }).then(blob => {
let url = URL.createObjectURL(blob);
let a = document.createElement('a');
a.href = url;
a.click();
URL.revokeObjectURL(url);
});