From 04360381b6300fcba7344bbf1455d1db0a304626 Mon Sep 17 00:00:00 2001 From: zadam Date: Fri, 20 Mar 2020 16:55:35 +0100 Subject: [PATCH] reimplement export with yazl --- package-lock.json | 584 ++++++++++++++++++++++++++++--------- package.json | 6 +- src/routes/api/export.js | 2 +- src/services/export/zip.js | 43 +-- 4 files changed, 456 insertions(+), 179 deletions(-) diff --git a/package-lock.json b/package-lock.json index be169470d..bd6c49ff8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,11 @@ "dev": true }, "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "@develar/schema-utils": { @@ -94,6 +94,17 @@ "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", "dev": true }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -167,30 +178,30 @@ } }, "@jimp/bmp": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.5.tgz", - "integrity": "sha512-2cYdgXaNykuPe9sjm11Jihp5VomyWTWziIuDDB7xnxQtEz2HUR0bjXm2MJJOfU0TL52H+LS2JIKtAxcLPzp28w==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.6.tgz", + "integrity": "sha512-T2Fh/k/eN6cDyOx0KQ4y56FMLo8+mKNhBh7GXMQXLK2NNZ0ckpFo3VHDBZ3HnaFeVTZXF/atLiR9CfnXH+rLxA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "bmp-js": "^0.1.0", "core-js": "^3.4.1" } }, "@jimp/core": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.5.tgz", - "integrity": "sha512-P1mlB9UOeI3IAQ4lGTmRBGw+F/mHWXd3tSyBskjL4E3YJ1eNK7WRrErUj/vUOvSBIryotu7nGo8vv8Q8JZ7/8w==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.6.tgz", + "integrity": "sha512-sQO04S+HZNid68a9ehb4BC2lmW6iZ5JgU9tC+thC2Lhix+N/XKDJcBJ6HevbLgeTzuIAw24C5EKuUeO3C+rE5w==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "any-base": "^1.1.0", "buffer": "^5.2.0", "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", + "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" @@ -204,251 +215,251 @@ } }, "@jimp/custom": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.5.tgz", - "integrity": "sha512-FaR7M0oxqbd7ujBL5ryyllS+mEuMKbKaDsdb8Cpu9SAo80DBiasUrYFFD/45/aRa95aM5o8t4C4Pna2bx8t3Tg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.6.tgz", + "integrity": "sha512-ZYKgrBZVoQwvIGlQSO7MFmn7Jn8a9X5g1g+KOTDO9Q0s4vnxdPTtr/qUjG9QYX6zW/6AK4LaIsDinDrrKDnOag==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.9.5", + "@jimp/core": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/gif": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.5.tgz", - "integrity": "sha512-QxjLl15nIz/QTeNgLFUJIOMLIceMO2B/xLUWF1/WqaP7Su6SGasRS6JY8OZ9QnqJLMWkodoEJmL6DxwtoOtqdg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.6.tgz", + "integrity": "sha512-Z2muC2On8KHEVrWKCCM0L2eua9kw4bQETzT7gmVsizc8MXAKdS8AyVV9T3ZrImiI0o5UkAN/u0cPi1U2pSiD8Q==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1", "omggif": "^1.0.9" } }, "@jimp/jpeg": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.5.tgz", - "integrity": "sha512-cBpXqmeegsLzf/mYk1WpYov2RH1W944re5P61/ag6AMWEMQ51BoBdgBy5JABZIELg2GQxpoG+g/KxUshRzeIAg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.6.tgz", + "integrity": "sha512-igSe0pIX3le/CKdvqW4vLXMxoFjTLjEaW6ZHt/h63OegaEa61TzJ2OM7j7DxrEHcMCMlkhUc9Bapk57MAefCTQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1", "jpeg-js": "^0.3.4" } }, "@jimp/plugin-blit": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.5.tgz", - "integrity": "sha512-VmV99HeCPOyliY/uEGOaKO9EcqDxSBzKDGC7emNCLFzlbK4uty4/cYMKGKTBiZR9AS1rEd63LxrDtbHKR8CsqQ==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.6.tgz", + "integrity": "sha512-zp7X6uDU1lCu44RaSY88aAvsSKbgqUrfDyWRX1wsamJvvZpRnp1WekWlGyydRtnlUBAGIpiHCHmyh/TJ2I4RWA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-blur": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.5.tgz", - "integrity": "sha512-FnAEhMW9ZK8D6qCLDeMAloi4h7TCch9ZWFdonj49gwllpvLksBpnL9PTft4dFXCwZgOAq2apYwW7cwTAIfAw4A==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.6.tgz", + "integrity": "sha512-xEi63hvzewUp7kzw+PI3f9CIrgZbphLI4TDDHWNYuS70RvhTuplbR6RMHD/zFhosrANCkJGr5OZJlrJnsCg6ug==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-color": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.5.tgz", - "integrity": "sha512-2aFE0tRdhAKCCgh+tFLsLPOSgrk3ttl2TtTP5FAXeKmzlLj7FZ/JKj0waaGWZKdJ+uDxsVpX3EhuK3CfukIyrg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.6.tgz", + "integrity": "sha512-o1HSoqBVUUAsWbqSXnpiHU0atKWy/Q1GUbZ3F5GWt/0OSDyl9RWM82V9axT2vePZHInKjIaimhnx1gGj8bfxkQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1", "tinycolor2": "^1.4.1" } }, "@jimp/plugin-contain": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.5.tgz", - "integrity": "sha512-zhaCJnUqd8hhD8IXxbRALU6ZzCWWbQDulc8Tn8Hxnub0si7dlq/DxBQT7og6kCxswBj2zPBtRAHONEwLdt7Nfw==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.6.tgz", + "integrity": "sha512-Xz467EN1I104yranET4ff1ViVKMtwKLg1uRe8j3b5VOrjtiXpDbjirNZjP3HTlv8IEUreWNz4BK7ZtfHSptufA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-cover": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.5.tgz", - "integrity": "sha512-rG7vtx7vV9mHCFR4YP9GzGEsaop0IkMidP3UFPULbDcBdEEkehEG7a0h2X4w/Nt07J3k8wVoXYTjrb/CXpWkaw==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.6.tgz", + "integrity": "sha512-Ocr27AvtvH4ZT/9EWZgT3+HQV9fG5njwh2CYMHbdpx09O62Asj6pZ4QI0kKzOcux1oLgv59l7a93pEfMOfkfwQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-crop": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.5.tgz", - "integrity": "sha512-yoScC43YhYlswTKyL4fmawGwF73HyuIRpp1R3mXa6qbMA9mjX9QiqNdAIMB3UMHeBcIgkOD/Zy1f90/skBMpxg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.6.tgz", + "integrity": "sha512-d9rNdmz3+eYLbSKcTyyp+b8Nmhf6HySnimDXlTej4UP6LDtkq2VAyVaJ12fz9x6dfd8qcXOBXMozSfNCcgpXYA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-displace": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.5.tgz", - "integrity": "sha512-nwfB72qNP8kNyBnlaY0vgJys7RUjvI61Qp3AMMbKKaRSsthCx7aeKU9Cyv+AHMfcVkkt3NdTmh7ScE+hkNFUhA==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.6.tgz", + "integrity": "sha512-SWpbrxiHmUYBVWtDDMjaG3eRDBASrTPaad7l07t73/+kmU6owAKWQW6KtVs05MYSJgXz7Ggdr0fhEn9AYLH1Rg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-dither": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.5.tgz", - "integrity": "sha512-Pp1ehm5Hon6LcttRG+d+x1UN1ww00P4cyBnMVRR3NMhIfgc0IjQgojik9ZXax3nVj7XkqXJJh8f5uxC1cvYUnA==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.6.tgz", + "integrity": "sha512-abm1GjfYK7ru/PoxH9fAUmhl+meHhGEClbVvjjMMe5g2S0BSTvMJl3SrkQD/FMkRLniaS/Qci6aQhIi+8rZmSw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-flip": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.5.tgz", - "integrity": "sha512-rKbg8c9ePst3w2t1kxQt2H05/rUR5/pjjafhZ97s01pxH/SOJudy5d76nJGzRBYoaRnxpvDzpN+2+iA08wDY5Q==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.6.tgz", + "integrity": "sha512-KFZTzAzQQ5bct3ii7gysOhWrTKVdUOghkkoSzLi+14nO3uS/dxiu8fPeH1m683ligbdnuM/b22OuLwEwrboTHA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-gaussian": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.5.tgz", - "integrity": "sha512-8HloHpVPgSsoWekslJ5uUPK2ddoLrGXQAVOyo3BT2pVgwbL317+r96NxPGKTxrY20fqex9SQrjx3kHeSWbysEA==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.6.tgz", + "integrity": "sha512-WXKLtJKWchXfWHT5HIOq1HkPKpbH7xBLWPgVRxw00NV/6I8v4xT63A7/Nag78m00JgjwwiE7eK2tLGDbbrPYig==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-invert": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.5.tgz", - "integrity": "sha512-tqfMqQqsU4ulaif0Kk/BydqmG5UbjT67dmMjwnDL7rke+ypJ8tzq7j9QeZ9SDFB+PxUQcy/kPEw/R2Ys7HHi8A==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.6.tgz", + "integrity": "sha512-Pab/cupZrYxeRp07N4L5a4C/3ksTN9k6Knm/o2G5C789OF0rYsGGLcnBR/6h69nPizRZHBYdXCEyXYgujlIFiw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-mask": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.5.tgz", - "integrity": "sha512-lIOrKb/VT1laDIA1H1nPOdtOB4TVhMRlxanXoEP8uKdE6a2goqZHXbKLn9itkm0MxtsTlT9KIXwzGxjCV38B3w==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.6.tgz", + "integrity": "sha512-ikypRoDJkbxXlo6gW+EZOcTiLDIt0DrPwOFMt1bvL8UV2QPgX+GJ685IYwhIfEhBf/GSNFgB/NYsVvuSufTGeg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-normalize": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.5.tgz", - "integrity": "sha512-gayxgPLDp2gynu2IacvdCtqw0bdcC2feUqYOBjTtCpAwIz1KP2Qd6qKjV1dAVGiLO9ESW5maMa0vIBiBkYOovg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.6.tgz", + "integrity": "sha512-V3GeuAJ1NeL7qsLoDjnypJq24RWDCwbXpKhtxB+Yg9zzgOCkmb041p7ysxbcpkuJsRpKLNABZeNCCqd83bRawA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-print": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.5.tgz", - "integrity": "sha512-/BUSyCfvVhuFdf+rBdH1wbuY8r9J0qhn4Icy7HqO58By7I+V7q7jayoeiLk+zEBsAXpCUbWiZG3KWNtZhLWeQg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.6.tgz", + "integrity": "sha512-gKkqZZPQtMSufHOL0mtJm5d/KI2O6+0kUpOBVSYdGedtPXA61kmVnsOd3wwajIMlXA3E0bDxLXLdAguWqjjGgw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1", "load-bmfont": "^1.4.0" } }, "@jimp/plugin-resize": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.5.tgz", - "integrity": "sha512-vIMleLPbEv0qTE1Mnc7mg5HSFc4l4FxlbDniVUvpi8ZMFa8IkigcTeAgXUKacevNL7uZ66MrnpQ49J3tNE28dQ==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.6.tgz", + "integrity": "sha512-r5wJcVII7ZWMuY2l6WSbHPG6gKMFemtCHmJRXGUu+/ZhPGBz3IFluycBpHkWW3OB+jfvuyv1EGQWHU50N1l8Og==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-rotate": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.5.tgz", - "integrity": "sha512-BHlhwUruHNQkOpsfzTE2uuSfmkj5eiIDRSAC8whupUGGXNgS67tZJB6u0qDRIeSP/gWV5tGGwXQNMn3AahwR1Q==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.6.tgz", + "integrity": "sha512-B2nm/eO2nbvn1DgmnzMd79yt3V6kffhRNrKoo2VKcKFiVze1vGP3MD3fVyw5U1PeqwAFu7oTICFnCf9wKDWSqg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugin-scale": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.5.tgz", - "integrity": "sha512-PDU8F77EPFTcLBVDcJtGUvPXA2acG4KqJMZauHwZLZxuiDEvt9qsDQm4aTKcN/ku8oWZjfGBSOamhx/QNUqV5Q==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.6.tgz", + "integrity": "sha512-DLsLB5S3mh9+TZY5ycwfLgOJvUcoS7bP0Mi3I8vE1J91qmA+TXoWFFgrIVgnEPw5jSKzNTt8WhykQ0x2lKXncw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1" } }, "@jimp/plugins": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.5.tgz", - "integrity": "sha512-3hvuXeRLj36ifpwE7I7g5Da9bKl/0y62t90ZN0hdQwhLBjRRF4u1e1JZpyu6EK98Bp+W/c8fJ2iuOsHadJOusg==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.6.tgz", + "integrity": "sha512-eQI29e+K+3L/fb5GbPgsBdoftvaYetSOO2RL5z+Gjk6R4EF4QFRo63YcFl+f72Kc1b0JTOoDxClvn/s5GMV0tg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.9.5", - "@jimp/plugin-blur": "^0.9.5", - "@jimp/plugin-color": "^0.9.5", - "@jimp/plugin-contain": "^0.9.5", - "@jimp/plugin-cover": "^0.9.5", - "@jimp/plugin-crop": "^0.9.5", - "@jimp/plugin-displace": "^0.9.5", - "@jimp/plugin-dither": "^0.9.5", - "@jimp/plugin-flip": "^0.9.5", - "@jimp/plugin-gaussian": "^0.9.5", - "@jimp/plugin-invert": "^0.9.5", - "@jimp/plugin-mask": "^0.9.5", - "@jimp/plugin-normalize": "^0.9.5", - "@jimp/plugin-print": "^0.9.5", - "@jimp/plugin-resize": "^0.9.5", - "@jimp/plugin-rotate": "^0.9.5", - "@jimp/plugin-scale": "^0.9.5", + "@jimp/plugin-blit": "^0.9.6", + "@jimp/plugin-blur": "^0.9.6", + "@jimp/plugin-color": "^0.9.6", + "@jimp/plugin-contain": "^0.9.6", + "@jimp/plugin-cover": "^0.9.6", + "@jimp/plugin-crop": "^0.9.6", + "@jimp/plugin-displace": "^0.9.6", + "@jimp/plugin-dither": "^0.9.6", + "@jimp/plugin-flip": "^0.9.6", + "@jimp/plugin-gaussian": "^0.9.6", + "@jimp/plugin-invert": "^0.9.6", + "@jimp/plugin-mask": "^0.9.6", + "@jimp/plugin-normalize": "^0.9.6", + "@jimp/plugin-print": "^0.9.6", + "@jimp/plugin-resize": "^0.9.6", + "@jimp/plugin-rotate": "^0.9.6", + "@jimp/plugin-scale": "^0.9.6", "core-js": "^3.4.1", "timm": "^1.6.1" } }, "@jimp/png": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.5.tgz", - "integrity": "sha512-0GPq/XixXcuWIA3gpMCUUj6rhxT78Hu9oDC9reaHUCcC/5cRTd5Eh7wLafZL8EfOZWV3mh2FZtWiY1xaNHHlBQ==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.6.tgz", + "integrity": "sha512-9vhOG2xylcDqPbBf4lzpa2Sa1WNJrEZNGvPvWcM+XVhqYa8+DJBLYkoBlpI/qWIYA+eVWDnLF3ygtGj8CElICw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.5", + "@jimp/utils": "^0.9.6", "core-js": "^3.4.1", "pngjs": "^3.3.3" } }, "@jimp/tiff": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.5.tgz", - "integrity": "sha512-EcRtiHsAQ9aygRRMWhGTVfitfHwllgt93GE1L8d/iwSlu3e3IIV38MDINdluQUQMU5jcFBcX6eyVVvsgCleGiQ==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.6.tgz", + "integrity": "sha512-pKKEMqPzX9ak8mek2iVVoW34+h/TSWUyI4NjbYWJMQ2WExfuvEJvLocy9Q9xi6HqRuJmUxgNIiC5iZM1PDEEfg==", "requires": { "@babel/runtime": "^7.7.2", "core-js": "^3.4.1", @@ -456,24 +467,24 @@ } }, "@jimp/types": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.5.tgz", - "integrity": "sha512-62inaxx8zy24WMP+bsg6ZmgsL49oyoGUIGcjDKzvyAY/O6opD+UMNlArhl0xvCCdzriQxbljtSv/8uyHxz4Xbw==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.6.tgz", + "integrity": "sha512-PSjdbLZ8d50En+Wf1XkWFfrXaf/GqyrxxgIwFWPbL+wrW4pmbYovfxSLCY61s8INsOFOft9dzzllhLBtg1aQ6A==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.9.5", - "@jimp/gif": "^0.9.5", - "@jimp/jpeg": "^0.9.5", - "@jimp/png": "^0.9.5", - "@jimp/tiff": "^0.9.5", + "@jimp/bmp": "^0.9.6", + "@jimp/gif": "^0.9.6", + "@jimp/jpeg": "^0.9.6", + "@jimp/png": "^0.9.6", + "@jimp/tiff": "^0.9.6", "core-js": "^3.4.1", "timm": "^1.6.1" } }, "@jimp/utils": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.5.tgz", - "integrity": "sha512-W9vse4/1AYmOjtIVACoBMdc/2te1zcPURhMYNEyiezCU7hWMdj/Z1mwiWFq3AYCgOG8GPVx0ZQzrgqUfUxfTHQ==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.6.tgz", + "integrity": "sha512-kzxcp0i4ecSdMXFEmtH+NYdBQysINEUTsrjm7v0zH8t/uwaEMOG46I16wo/iPBXJkUeNdL2rbXoGoxxoeSfrrA==", "requires": { "@babel/runtime": "^7.7.2", "core-js": "^3.4.1" @@ -762,6 +773,17 @@ "integrity": "sha512-cuIMtJwxvzumSAkqaaoGY/L6Fc/t6YvoP9/VIaK0V/CyqKLEQ8sqODmYfy/cjXEdZ9+OOL8TecbJu+1RsofGDw==", "dev": true }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "hosted-git-info": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", @@ -994,6 +1016,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, "author-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", @@ -1045,6 +1072,11 @@ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, "bin-build": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", @@ -1143,6 +1175,15 @@ "os-filter-obj": "^1.0.0" } }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -1392,6 +1433,11 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "buffer-indexof-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", + "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" + }, "buffer-to-vinyl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", @@ -1415,6 +1461,11 @@ } } }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, "builder-util": { "version": "22.4.1", "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.4.1.tgz", @@ -1472,6 +1523,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -1613,6 +1675,14 @@ } } }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -2498,6 +2568,17 @@ "sanitize-filename": "^1.6.3" }, "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "iconv-lite": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz", @@ -2741,6 +2822,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -2793,6 +2885,17 @@ "tmp-promise": "^2.0.1" }, "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "optional": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -2851,6 +2954,17 @@ "locate-path": "^3.0.0" } }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "optional": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -2947,6 +3061,19 @@ "requires": { "debug": "^4.1.1", "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "electron-osx-sign": { @@ -3008,6 +3135,17 @@ "yargs-parser": "^16.0.0" }, "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3067,6 +3205,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "mime": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", @@ -3122,6 +3271,17 @@ "locate-path": "^3.0.0" } }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -3868,13 +4028,30 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "dependencies": { + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + } } }, "fs-minipass": { @@ -3890,6 +4067,40 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, "galactus": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz", @@ -5265,14 +5476,14 @@ } }, "jimp": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.5.tgz", - "integrity": "sha512-gjrzz+lT4In7shmP4LV1o/dfL0btnh4W9F5jPCXA6Qw4uEAF8+8GDwAR69hbUQCZH7R5KoCtq81tpfzydoJtSQ==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.6.tgz", + "integrity": "sha512-DBDHYeNVqVpoPkcvo0PKTNGvD+i7NYvkKTsl0I3k7ql36uN8wGTptRg0HtgQyYE/bhGSLI6Lq5qLwewaOPXNfg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.9.5", - "@jimp/plugins": "^0.9.5", - "@jimp/types": "^0.9.5", + "@jimp/custom": "^0.9.6", + "@jimp/plugins": "^0.9.6", + "@jimp/types": "^0.9.6", "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" } @@ -5599,6 +5810,11 @@ "uc.micro": "^1.0.1" } }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, "load-bmfont": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", @@ -8351,6 +8567,19 @@ "js-yaml": "^3.13.1", "json5": "^2.1.1", "lazy-val": "^1.0.4" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "read-pkg": { @@ -8423,9 +8652,9 @@ "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regex-cache": { "version": "0.4.4", @@ -8870,6 +9099,16 @@ "write-file-atomic": "1.3.1" }, "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8887,6 +9126,11 @@ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -9307,6 +9551,19 @@ "requires": { "async-exit-hook": "^2.0.1", "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "tempfile": { @@ -9512,6 +9769,11 @@ "punycode": "^2.1.1" } }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -9715,6 +9977,30 @@ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" }, + "unzipper": { + "version": "0.10.10", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.10.tgz", + "integrity": "sha512-wEgtqtrnJ/9zIBsQb8UIxOhAH1eTHfi7D/xvmrUoMEePeI6u24nq1wigazbIFtHt6ANYXdEVTvc8XYNlTurs7A==", + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + } + } + }, "update-notifier": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", @@ -10420,6 +10706,14 @@ "fd-slicer": "~1.1.0" } }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "requires": { + "buffer-crc32": "~0.2.3" + } + }, "zip-stream": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", diff --git a/package.json b/package.json index 7a05a6064..6bff5ab3e 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "express": "4.17.1", "express-session": "1.17.0", "file-type": "14.1.4", - "fs-extra": "8.1.0", + "fs-extra": "9.0.0", "helmet": "3.21.3", "html": "1.0.0", "html2plaintext": "2.1.2", @@ -49,7 +49,7 @@ "imagemin-mozjpeg": "8.0.0", "imagemin-pngquant": "8.0.0", "ini": "1.3.5", - "jimp": "0.9.5", + "jimp": "0.9.6", "mime-types": "2.1.26", "multer": "1.4.2", "node-abi": "2.15.0", @@ -72,7 +72,7 @@ "turndown-plugin-gfm": "1.0.2", "unescape": "1.0.1", "ws": "7.2.3", - "zip-stream": "^2.1.3" + "yazl": "^2.5.1" }, "devDependencies": { "electron": "9.0.0-beta.9", diff --git a/src/routes/api/export.js b/src/routes/api/export.js index 0a42606dd..7464c793a 100644 --- a/src/routes/api/export.js +++ b/src/routes/api/export.js @@ -1,6 +1,6 @@ "use strict"; -const zipExportService = require('../../services/export/tar'); +const zipExportService = require('../../services/export/zip'); const singleExportService = require('../../services/export/single'); const opmlExportService = require('../../services/export/opml'); const repository = require("../../services/repository"); diff --git a/src/services/export/zip.js b/src/services/export/zip.js index 8107a1fe5..9673cf761 100644 --- a/src/services/export/zip.js +++ b/src/services/export/zip.js @@ -14,6 +14,8 @@ const sanitize = require("sanitize-filename"); const fs = require("fs"); const RESOURCE_DIR = require('../../services/resource_dir').RESOURCE_DIR; const ZipStream = require('zip-stream'); +const {Readable} = require('stream'); +const yazl = require("yazl"); /** * @param {TaskContext} taskContext @@ -21,22 +23,10 @@ const ZipStream = require('zip-stream'); * @param {string} format - 'html' or 'markdown' */ async function exportToZip(taskContext, branch, format, res) { - const packer = new ZipStream(); + const zipFile = new yazl.ZipFile(); const noteIdToMeta = {}; - async function addEntry(source, data) { - return new Promise((res, rej) => { - packer.entry(source, data, (err, entry) => { - if (err) { - rej(err); - } - - res(entry); - }) - }); - } - function getUniqueFilename(existingFileNames, fileName) { const lcFileName = fileName.toLowerCase(); @@ -278,7 +268,7 @@ ${content} content = prepareContent(noteMeta.title, content, noteMeta); - await addEntry(content, {name: filePathPrefix + noteMeta.dataFileName}); + zipFile.addBuffer(content, filePathPrefix + noteMeta.dataFileName); return; } @@ -290,10 +280,7 @@ ${content} if (noteMeta.dataFileName) { const content = prepareContent(noteMeta.title, await note.getContent(), noteMeta); - await addEntry(content, { - name: filePathPrefix + noteMeta.dataFileName, - date: dateUtils.parseDateTime(note.utcDateModified) - }); + zipFile.addBuffer(content, filePathPrefix + noteMeta.dataFileName, {mtime: dateUtils.parseDateTime(note.utcDateModified)}); } taskContext.increaseProgressCount(); @@ -301,11 +288,7 @@ ${content} if (noteMeta.children && noteMeta.children.length > 0) { const directoryPath = filePathPrefix + noteMeta.dirFileName; - await addEntry(null,{ - name: directoryPath, - type: 'directory', - date: dateUtils.parseDateTime(note.utcDateModified) - }); + zipFile.addEmptyDirectory(directoryPath, {mtime: dateUtils.parseDateTime(note.utcDateModified)}); for (const childMeta of noteMeta.children) { await saveNote(childMeta, directoryPath + '/'); @@ -352,7 +335,7 @@ ${content} `; const prettyHtml = html.prettyPrint(fullHtml, {indent_size: 2}); - await addEntry(prettyHtml, {name: navigationMeta.dataFileName}); + zipFile.addBuffer(prettyHtml, navigationMeta.dataFileName); } async function saveIndex(rootMeta, indexMeta) { @@ -383,13 +366,13 @@ ${content} `; - await addEntry(fullHtml, {name: indexMeta.dataFileName}); + zipFile.addBuffer(fullHtml, indexMeta.dataFileName); } async function saveCss(rootMeta, cssMeta) { const cssContent = fs.readFileSync(RESOURCE_DIR + '/libraries/ckeditor/ckeditor-content.css'); - await addEntry(cssContent, {name: cssMeta.dataFileName}); + zipFile.addBuffer(cssContent, cssMeta.dataFileName); } const existingFileNames = format === 'html' ? ['navigation', 'index'] : []; @@ -438,7 +421,7 @@ ${content} const metaFileJson = JSON.stringify(metaFile, null, '\t'); - await addEntry(metaFileJson, {name: "!!!meta.json"}); + zipFile.addBuffer(metaFileJson, "!!!meta.json"); await saveNote(rootMeta, ''); @@ -448,15 +431,15 @@ ${content} await saveCss(rootMeta, cssMeta); } - packer.finalize(); - const note = await branch.getNote(); const zipFileName = (branch.prefix ? (branch.prefix + " - ") : "") + note.title + ".zip"; res.setHeader('Content-Disposition', utils.getContentDisposition(zipFileName)); res.setHeader('Content-Type', 'application/zip'); - packer.pipe(res); + zipFile.end(); + + zipFile.outputStream.pipe(res); taskContext.taskSucceeded(); }