inflater.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. const version = +(process.versions ? process.versions.node : "").split(".")[0] || 0;
  2. module.exports = function (/*Buffer*/ inbuf, /*number*/ expectedLength) {
  3. var zlib = require("zlib");
  4. const option = version >= 15 && expectedLength > 0 ? { maxOutputLength: expectedLength } : {};
  5. return {
  6. inflate: function () {
  7. return zlib.inflateRawSync(inbuf, option);
  8. },
  9. inflateAsync: function (/*Function*/ callback) {
  10. var tmp = zlib.createInflateRaw(option),
  11. parts = [],
  12. total = 0;
  13. tmp.on("data", function (data) {
  14. parts.push(data);
  15. total += data.length;
  16. });
  17. tmp.on("end", function () {
  18. var buf = Buffer.alloc(total),
  19. written = 0;
  20. buf.fill(0);
  21. for (var i = 0; i < parts.length; i++) {
  22. var part = parts[i];
  23. part.copy(buf, written);
  24. written += part.length;
  25. }
  26. callback && callback(buf);
  27. });
  28. tmp.end(inbuf);
  29. }
  30. };
  31. };