md5_file_hasher.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.Md5FileHasher = void 0;
  4. var md5_1 = require("./md5");
  5. // Hashes any blob
  6. var Md5FileHasher = /** @class */ (function () {
  7. function Md5FileHasher(_callback, // Callback to return the result
  8. _async, // Async version is not always available in a web worker
  9. _partSize) {
  10. if (_async === void 0) { _async = true; }
  11. if (_partSize === void 0) { _partSize = 1048576; }
  12. this._callback = _callback;
  13. this._async = _async;
  14. this._partSize = _partSize;
  15. this._configureReader();
  16. }
  17. /**
  18. * Hash a blob of data in the worker
  19. * @param blob Data to hash
  20. */
  21. Md5FileHasher.prototype.hash = function (blob) {
  22. var self = this;
  23. self._blob = blob;
  24. // self._length = Math.ceil(blob.size / self._partSize);
  25. self._part = 0;
  26. self._md5 = new md5_1.Md5();
  27. self._processPart();
  28. };
  29. Md5FileHasher.prototype._fail = function () {
  30. this._callback({
  31. success: false,
  32. result: 'data read failed'
  33. });
  34. };
  35. Md5FileHasher.prototype._hashData = function (e) {
  36. var self = this;
  37. self._md5.appendByteArray(new Uint8Array(e.target.result));
  38. if (self._part * self._partSize >= self._blob.size) {
  39. self._callback({
  40. success: true,
  41. result: self._md5.end()
  42. });
  43. }
  44. else {
  45. self._processPart();
  46. }
  47. };
  48. Md5FileHasher.prototype._processPart = function () {
  49. var self = this;
  50. var endbyte = 0;
  51. var current_part;
  52. self._part += 1;
  53. if (self._blob.size > self._partSize) { // If blob bigger then part_size we will slice it up
  54. endbyte = self._part * self._partSize;
  55. if (endbyte > self._blob.size) {
  56. endbyte = self._blob.size;
  57. }
  58. current_part = self._blob.slice((self._part - 1) * self._partSize, endbyte);
  59. }
  60. else {
  61. current_part = self._blob;
  62. }
  63. if (self._async) {
  64. self._reader.readAsArrayBuffer(current_part);
  65. }
  66. else {
  67. setTimeout(function () {
  68. try {
  69. self._hashData({
  70. target: {
  71. result: self._reader.readAsArrayBuffer(current_part)
  72. },
  73. });
  74. }
  75. catch (e) {
  76. self._fail();
  77. }
  78. }, 0);
  79. }
  80. };
  81. Md5FileHasher.prototype._configureReader = function () {
  82. var self = this;
  83. if (self._async) {
  84. self._reader = new FileReader();
  85. self._reader.onload = self._hashData.bind(self);
  86. self._reader.onerror = self._fail.bind(self);
  87. self._reader.onabort = self._fail.bind(self);
  88. }
  89. else {
  90. self._reader = new FileReaderSync();
  91. }
  92. };
  93. return Md5FileHasher;
  94. }());
  95. exports.Md5FileHasher = Md5FileHasher;
  96. //# sourceMappingURL=md5_file_hasher.js.map