@atlaskit/media-client 32.0.1 → 33.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/media-client
2
2
 
3
+ ## 33.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - [#150406](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/150406)
8
+ [`dad9e400fc02a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/dad9e400fc02a) -
9
+ SHA256 is now the default and only uploading hash algorithm
10
+ - Updated dependencies
11
+
12
+ ## 32.0.2
13
+
14
+ ### Patch Changes
15
+
16
+ - [#125907](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/125907)
17
+ [`a453a64a6138d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a453a64a6138d) -
18
+ Updated SVG test file ids
19
+
3
20
  ## 32.0.1
4
21
 
5
22
  ### Patch Changes
@@ -32,7 +32,7 @@ var MediaClient = exports.MediaClient = /*#__PURE__*/function () {
32
32
  this.mediaStore = mediaApi !== null && mediaApi !== void 0 ? mediaApi : new _mediaStore.MediaStore({
33
33
  authProvider: mediaClientConfig.authProvider,
34
34
  initialAuth: mediaClientConfig.initialAuth,
35
- chunkHashAlgorithm: mediaClientConfig.useSha256ForUploads ? _mediaCore.ChunkHashAlgorithm.Sha256 : _mediaCore.ChunkHashAlgorithm.Sha1,
35
+ chunkHashAlgorithm: _mediaCore.ChunkHashAlgorithm.Sha256,
36
36
  authProviderTimeout: mediaClientConfig.authProviderTimeoutMs
37
37
  });
38
38
  this.config = mediaClientConfig;
@@ -59,7 +59,7 @@ var MediaStore = exports.MediaStore = /*#__PURE__*/function () {
59
59
  return (0, _resolveAuth.resolveInitialAuth)(_this.config.initialAuth);
60
60
  });
61
61
  this.config = config;
62
- this._chunkHashAlgorithm = config.chunkHashAlgorithm || _mediaCore.ChunkHashAlgorithm.Sha1;
62
+ this._chunkHashAlgorithm = config.chunkHashAlgorithm || _mediaCore.ChunkHashAlgorithm.Sha256;
63
63
  }
64
64
  return (0, _createClass2.default)(MediaStore, [{
65
65
  key: "removeCollectionFile",
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.destroyHasher = exports.createHasher = void 0;
8
+ exports.destroyHashers = exports.createHasher = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
11
  var _mediaCore = require("@atlaskit/media-core");
@@ -13,18 +13,19 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
13
13
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
14
  var hasher = null;
15
15
  var sha256Hasher = null;
16
- var destroyHasher = exports.destroyHasher = function destroyHasher() {
17
- return hasher = null;
16
+ var destroyHashers = exports.destroyHashers = function destroyHashers() {
17
+ hasher = null;
18
+ sha256Hasher = null;
18
19
  };
19
20
  var createHasher = exports.createHasher = /*#__PURE__*/function () {
20
21
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(algorithm) {
21
- var numWorkers, _yield$import, SimpleHasher, _yield$import2, WorkerHasher, _yield$import3, _SimpleHasher;
22
+ var _yield$import, _SimpleHasher, _yield$import2, SimpleHasher;
22
23
  return _regenerator.default.wrap(function _callee$(_context) {
23
24
  while (1) switch (_context.prev = _context.next) {
24
25
  case 0:
25
- numWorkers = 3;
26
+ _context.prev = 0;
26
27
  if (!(algorithm === _mediaCore.ChunkHashAlgorithm.Sha256)) {
27
- _context.next = 11;
28
+ _context.next = 9;
28
29
  break;
29
30
  }
30
31
  if (sha256Hasher) {
@@ -37,44 +38,31 @@ var createHasher = exports.createHasher = /*#__PURE__*/function () {
37
38
  });
38
39
  case 5:
39
40
  _yield$import = _context.sent;
40
- SimpleHasher = _yield$import.SimpleHasher;
41
- sha256Hasher = new SimpleHasher();
41
+ _SimpleHasher = _yield$import.SimpleHasher;
42
+ sha256Hasher = new _SimpleHasher();
42
43
  case 8:
43
44
  return _context.abrupt("return", sha256Hasher);
45
+ case 9:
46
+ _context.next = 13;
47
+ break;
44
48
  case 11:
45
- if (hasher) {
46
- _context.next = 27;
47
- break;
48
- }
49
- _context.prev = 12;
49
+ _context.prev = 11;
50
+ _context.t0 = _context["catch"](0);
51
+ case 13:
50
52
  _context.next = 15;
51
53
  return Promise.resolve().then(function () {
52
- return _interopRequireWildcard(require('./workerHasher'));
54
+ return _interopRequireWildcard(require('./simpleHasher'));
53
55
  });
54
56
  case 15:
55
57
  _yield$import2 = _context.sent;
56
- WorkerHasher = _yield$import2.WorkerHasher;
57
- hasher = new WorkerHasher(numWorkers);
58
- _context.next = 27;
59
- break;
60
- case 20:
61
- _context.prev = 20;
62
- _context.t0 = _context["catch"](12);
63
- _context.next = 24;
64
- return Promise.resolve().then(function () {
65
- return _interopRequireWildcard(require('./simpleHasher'));
66
- });
67
- case 24:
68
- _yield$import3 = _context.sent;
69
- _SimpleHasher = _yield$import3.SimpleHasher;
70
- hasher = new _SimpleHasher();
71
- case 27:
58
+ SimpleHasher = _yield$import2.SimpleHasher;
59
+ hasher = new SimpleHasher();
72
60
  return _context.abrupt("return", hasher);
73
- case 28:
61
+ case 19:
74
62
  case "end":
75
63
  return _context.stop();
76
64
  }
77
- }, _callee, null, [[12, 20]]);
65
+ }, _callee, null, [[0, 11]]);
78
66
  }));
79
67
  return function createHasher(_x) {
80
68
  return _ref.apply(this, arguments);
@@ -15,7 +15,7 @@ export class MediaClient {
15
15
  this.mediaStore = mediaApi !== null && mediaApi !== void 0 ? mediaApi : new MediaApi({
16
16
  authProvider: mediaClientConfig.authProvider,
17
17
  initialAuth: mediaClientConfig.initialAuth,
18
- chunkHashAlgorithm: mediaClientConfig.useSha256ForUploads ? ChunkHashAlgorithm.Sha256 : ChunkHashAlgorithm.Sha1,
18
+ chunkHashAlgorithm: ChunkHashAlgorithm.Sha256,
19
19
  authProviderTimeout: mediaClientConfig.authProviderTimeoutMs
20
20
  });
21
21
  this.config = mediaClientConfig;
@@ -42,7 +42,7 @@ export class MediaStore {
42
42
  _defineProperty(this, "resolveAuth", authContext => resolveAuth(this.config.authProvider, authContext, this.config.authProviderTimeout));
43
43
  _defineProperty(this, "resolveInitialAuth", () => resolveInitialAuth(this.config.initialAuth));
44
44
  this.config = config;
45
- this._chunkHashAlgorithm = config.chunkHashAlgorithm || ChunkHashAlgorithm.Sha1;
45
+ this._chunkHashAlgorithm = config.chunkHashAlgorithm || ChunkHashAlgorithm.Sha256;
46
46
  }
47
47
  async removeCollectionFile(id, collectionName, occurrenceKey, traceContext) {
48
48
  const metadata = {
@@ -1,30 +1,26 @@
1
1
  import { ChunkHashAlgorithm } from '@atlaskit/media-core';
2
2
  let hasher = null;
3
3
  let sha256Hasher = null;
4
- export const destroyHasher = () => hasher = null;
4
+ export const destroyHashers = () => {
5
+ hasher = null;
6
+ sha256Hasher = null;
7
+ };
5
8
  export const createHasher = async algorithm => {
6
- const numWorkers = 3;
7
- if (algorithm === ChunkHashAlgorithm.Sha256) {
8
- if (!sha256Hasher) {
9
- // TODO this needs to support worker sha256 hasher as well
10
- const {
11
- SimpleHasher
12
- } = await import('./sha256SimpleHasher');
13
- sha256Hasher = new SimpleHasher();
9
+ try {
10
+ if (algorithm === ChunkHashAlgorithm.Sha256) {
11
+ if (!sha256Hasher) {
12
+ // TODO this needs to support worker sha256 hasher as well
13
+ const {
14
+ SimpleHasher
15
+ } = await import('./sha256SimpleHasher');
16
+ sha256Hasher = new SimpleHasher();
17
+ }
18
+ return sha256Hasher;
14
19
  }
15
- return sha256Hasher;
16
- } else if (!hasher) {
17
- try {
18
- const {
19
- WorkerHasher
20
- } = await import('./workerHasher');
21
- hasher = new WorkerHasher(numWorkers);
22
- } catch (error) {
23
- const {
24
- SimpleHasher
25
- } = await import('./simpleHasher');
26
- hasher = new SimpleHasher();
27
- }
28
- }
20
+ } catch (error) {}
21
+ const {
22
+ SimpleHasher
23
+ } = await import('./simpleHasher');
24
+ hasher = new SimpleHasher();
29
25
  return hasher;
30
26
  };
@@ -22,7 +22,7 @@ export var MediaClient = /*#__PURE__*/function () {
22
22
  this.mediaStore = mediaApi !== null && mediaApi !== void 0 ? mediaApi : new MediaApi({
23
23
  authProvider: mediaClientConfig.authProvider,
24
24
  initialAuth: mediaClientConfig.initialAuth,
25
- chunkHashAlgorithm: mediaClientConfig.useSha256ForUploads ? ChunkHashAlgorithm.Sha256 : ChunkHashAlgorithm.Sha1,
25
+ chunkHashAlgorithm: ChunkHashAlgorithm.Sha256,
26
26
  authProviderTimeout: mediaClientConfig.authProviderTimeoutMs
27
27
  });
28
28
  this.config = mediaClientConfig;
@@ -53,7 +53,7 @@ export var MediaStore = /*#__PURE__*/function () {
53
53
  return resolveInitialAuth(_this.config.initialAuth);
54
54
  });
55
55
  this.config = config;
56
- this._chunkHashAlgorithm = config.chunkHashAlgorithm || ChunkHashAlgorithm.Sha1;
56
+ this._chunkHashAlgorithm = config.chunkHashAlgorithm || ChunkHashAlgorithm.Sha256;
57
57
  }
58
58
  return _createClass(MediaStore, [{
59
59
  key: "removeCollectionFile",
@@ -3,18 +3,19 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import { ChunkHashAlgorithm } from '@atlaskit/media-core';
4
4
  var hasher = null;
5
5
  var sha256Hasher = null;
6
- export var destroyHasher = function destroyHasher() {
7
- return hasher = null;
6
+ export var destroyHashers = function destroyHashers() {
7
+ hasher = null;
8
+ sha256Hasher = null;
8
9
  };
9
10
  export var createHasher = /*#__PURE__*/function () {
10
11
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(algorithm) {
11
- var numWorkers, _yield$import, SimpleHasher, _yield$import2, WorkerHasher, _yield$import3, _SimpleHasher;
12
+ var _yield$import, _SimpleHasher, _yield$import2, SimpleHasher;
12
13
  return _regeneratorRuntime.wrap(function _callee$(_context) {
13
14
  while (1) switch (_context.prev = _context.next) {
14
15
  case 0:
15
- numWorkers = 3;
16
+ _context.prev = 0;
16
17
  if (!(algorithm === ChunkHashAlgorithm.Sha256)) {
17
- _context.next = 11;
18
+ _context.next = 9;
18
19
  break;
19
20
  }
20
21
  if (sha256Hasher) {
@@ -25,40 +26,29 @@ export var createHasher = /*#__PURE__*/function () {
25
26
  return import('./sha256SimpleHasher');
26
27
  case 5:
27
28
  _yield$import = _context.sent;
28
- SimpleHasher = _yield$import.SimpleHasher;
29
- sha256Hasher = new SimpleHasher();
29
+ _SimpleHasher = _yield$import.SimpleHasher;
30
+ sha256Hasher = new _SimpleHasher();
30
31
  case 8:
31
32
  return _context.abrupt("return", sha256Hasher);
33
+ case 9:
34
+ _context.next = 13;
35
+ break;
32
36
  case 11:
33
- if (hasher) {
34
- _context.next = 27;
35
- break;
36
- }
37
- _context.prev = 12;
37
+ _context.prev = 11;
38
+ _context.t0 = _context["catch"](0);
39
+ case 13:
38
40
  _context.next = 15;
39
- return import('./workerHasher');
41
+ return import('./simpleHasher');
40
42
  case 15:
41
43
  _yield$import2 = _context.sent;
42
- WorkerHasher = _yield$import2.WorkerHasher;
43
- hasher = new WorkerHasher(numWorkers);
44
- _context.next = 27;
45
- break;
46
- case 20:
47
- _context.prev = 20;
48
- _context.t0 = _context["catch"](12);
49
- _context.next = 24;
50
- return import('./simpleHasher');
51
- case 24:
52
- _yield$import3 = _context.sent;
53
- _SimpleHasher = _yield$import3.SimpleHasher;
54
- hasher = new _SimpleHasher();
55
- case 27:
44
+ SimpleHasher = _yield$import2.SimpleHasher;
45
+ hasher = new SimpleHasher();
56
46
  return _context.abrupt("return", hasher);
57
- case 28:
47
+ case 19:
58
48
  case "end":
59
49
  return _context.stop();
60
50
  }
61
- }, _callee, null, [[12, 20]]);
51
+ }, _callee, null, [[0, 11]]);
62
52
  }));
63
53
  return function createHasher(_x) {
64
54
  return _ref.apply(this, arguments);
@@ -1,4 +1,4 @@
1
1
  import { type Hasher } from './hasher';
2
2
  import { ChunkHashAlgorithm } from '@atlaskit/media-core';
3
- export declare const destroyHasher: () => null;
3
+ export declare const destroyHashers: () => void;
4
4
  export declare const createHasher: (algorithm: ChunkHashAlgorithm) => Promise<Hasher>;
@@ -1,4 +1,4 @@
1
1
  import { type Hasher } from './hasher';
2
2
  import { ChunkHashAlgorithm } from '@atlaskit/media-core';
3
- export declare const destroyHasher: () => null;
3
+ export declare const destroyHashers: () => void;
4
4
  export declare const createHasher: (algorithm: ChunkHashAlgorithm) => Promise<Hasher>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-client",
3
- "version": "32.0.1",
3
+ "version": "33.0.0",
4
4
  "description": "Media API Web Client Library",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -50,14 +50,14 @@
50
50
  "xstate": "4.20.0"
51
51
  },
52
52
  "peerDependencies": {
53
- "@atlaskit/media-core": "^35.0.0",
53
+ "@atlaskit/media-core": "^36.0.0",
54
54
  "@atlaskit/media-state": "^1.5.0"
55
55
  },
56
56
  "devDependencies": {
57
- "@atlaskit/media-core": "^35.0.0",
57
+ "@atlaskit/media-core": "^36.0.0",
58
58
  "@atlaskit/media-state": "^1.5.0",
59
- "@atlaskit/ssr": "^0.4.0",
60
- "@atlaskit/tokens": "^4.3.0",
59
+ "@atlaskit/ssr": "workspace:^",
60
+ "@atlaskit/tokens": "^4.8.0",
61
61
  "@atlassian/feature-flags-test-utils": "^0.3.0",
62
62
  "@emotion/react": "^11.7.1",
63
63
  "@types/deep-equal": "^1.0.1",
@@ -1,113 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.WorkerHasher = void 0;
8
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _v = _interopRequireDefault(require("uuid/v4"));
12
- var _rusha = _interopRequireDefault(require("rusha"));
13
- var WorkerHasher = exports.WorkerHasher = /*#__PURE__*/function () {
14
- function WorkerHasher(numOfWorkers) {
15
- (0, _classCallCheck2.default)(this, WorkerHasher);
16
- (0, _defineProperty2.default)(this, "workers", []);
17
- (0, _defineProperty2.default)(this, "jobs", {});
18
- for (var i = 0; i < numOfWorkers; ++i) {
19
- this.workers.push(this.createWorker());
20
- }
21
- }
22
- return (0, _createClass2.default)(WorkerHasher, [{
23
- key: "hash",
24
- value: function hash(chunk) {
25
- return this.calculateHashInWorker(chunk);
26
- }
27
- }, {
28
- key: "createWorker",
29
- value: function createWorker() {
30
- var _this = this;
31
- var worker = _rusha.default.createWorker();
32
- var hasherWorker = {
33
- worker: worker,
34
- activeJobs: 0
35
- };
36
- worker.addEventListener('message', function (event) {
37
- _this.handleWorkerMessage(event, hasherWorker);
38
- });
39
- return hasherWorker;
40
- }
41
- }, {
42
- key: "handleWorkerMessage",
43
- value: function handleWorkerMessage(event, hasherWorker) {
44
- var id = event.data.id;
45
- if (this.jobs[id]) {
46
- var _this$jobs$id = this.jobs[id],
47
- resolve = _this$jobs$id.resolve,
48
- reject = _this$jobs$id.reject;
49
- delete this.jobs[id];
50
- hasherWorker.activeJobs--;
51
- if (event.data.error) {
52
- // TODO previously we were just calling it again.
53
- // this.calculateHashInWorker(chunk);
54
- reject(event.data.error);
55
- } else {
56
- resolve(event.data.hash);
57
- }
58
- }
59
- }
60
- }, {
61
- key: "calculateHashInWorker",
62
- value: function calculateHashInWorker(blob) {
63
- var _this2 = this;
64
- var jobId = (0, _v.default)();
65
- return new Promise(function (resolve, reject) {
66
- _this2.jobs[jobId] = {
67
- resolve: resolve,
68
- reject: reject
69
- };
70
- var worker = _this2.getMostRelaxedWorker();
71
- _this2.dispatch(jobId, worker, blob);
72
- });
73
- }
74
- }, {
75
- key: "dispatch",
76
- value: function dispatch(jobId, hasherWorker, chunkBlob) {
77
- hasherWorker.activeJobs++;
78
- var worker = hasherWorker.worker;
79
-
80
- /*
81
- * postMessage() with chunk blob in Safari results in the error
82
- * "Failed to load resource: The operation could not be completed. (WebKitBlobResource error 1.)"
83
- *
84
- * To prevent it, we read the data from the blob using FileReader and pass it via postMessage to the worker.
85
- */
86
- if (navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') === -1) {
87
- var rd = new FileReader();
88
- rd.onload = function () {
89
- worker.postMessage({
90
- id: jobId,
91
- data: rd.result
92
- });
93
- };
94
- rd.readAsBinaryString(chunkBlob);
95
- return;
96
- }
97
- worker.postMessage({
98
- id: jobId,
99
- data: chunkBlob
100
- });
101
- }
102
- }, {
103
- key: "getMostRelaxedWorker",
104
- value: function getMostRelaxedWorker() {
105
- return this.workers.reduce(function (current, next) {
106
- if (next.activeJobs < current.activeJobs) {
107
- return next;
108
- }
109
- return current;
110
- }, this.workers[0]);
111
- }
112
- }]);
113
- }();
@@ -1,89 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import uuidV4 from 'uuid/v4';
3
- import Rusha from 'rusha';
4
- export class WorkerHasher {
5
- constructor(numOfWorkers) {
6
- _defineProperty(this, "workers", []);
7
- _defineProperty(this, "jobs", {});
8
- for (let i = 0; i < numOfWorkers; ++i) {
9
- this.workers.push(this.createWorker());
10
- }
11
- }
12
- hash(chunk) {
13
- return this.calculateHashInWorker(chunk);
14
- }
15
- createWorker() {
16
- const worker = Rusha.createWorker();
17
- const hasherWorker = {
18
- worker,
19
- activeJobs: 0
20
- };
21
- worker.addEventListener('message', event => {
22
- this.handleWorkerMessage(event, hasherWorker);
23
- });
24
- return hasherWorker;
25
- }
26
- handleWorkerMessage(event, hasherWorker) {
27
- const id = event.data.id;
28
- if (this.jobs[id]) {
29
- const {
30
- resolve,
31
- reject
32
- } = this.jobs[id];
33
- delete this.jobs[id];
34
- hasherWorker.activeJobs--;
35
- if (event.data.error) {
36
- // TODO previously we were just calling it again.
37
- // this.calculateHashInWorker(chunk);
38
- reject(event.data.error);
39
- } else {
40
- resolve(event.data.hash);
41
- }
42
- }
43
- }
44
- calculateHashInWorker(blob) {
45
- const jobId = uuidV4();
46
- return new Promise((resolve, reject) => {
47
- this.jobs[jobId] = {
48
- resolve,
49
- reject
50
- };
51
- const worker = this.getMostRelaxedWorker();
52
- this.dispatch(jobId, worker, blob);
53
- });
54
- }
55
- dispatch(jobId, hasherWorker, chunkBlob) {
56
- hasherWorker.activeJobs++;
57
- const worker = hasherWorker.worker;
58
-
59
- /*
60
- * postMessage() with chunk blob in Safari results in the error
61
- * "Failed to load resource: The operation could not be completed. (WebKitBlobResource error 1.)"
62
- *
63
- * To prevent it, we read the data from the blob using FileReader and pass it via postMessage to the worker.
64
- */
65
- if (navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') === -1) {
66
- const rd = new FileReader();
67
- rd.onload = () => {
68
- worker.postMessage({
69
- id: jobId,
70
- data: rd.result
71
- });
72
- };
73
- rd.readAsBinaryString(chunkBlob);
74
- return;
75
- }
76
- worker.postMessage({
77
- id: jobId,
78
- data: chunkBlob
79
- });
80
- }
81
- getMostRelaxedWorker() {
82
- return this.workers.reduce((current, next) => {
83
- if (next.activeJobs < current.activeJobs) {
84
- return next;
85
- }
86
- return current;
87
- }, this.workers[0]);
88
- }
89
- }
@@ -1,106 +0,0 @@
1
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
- import _createClass from "@babel/runtime/helpers/createClass";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
- import uuidV4 from 'uuid/v4';
5
- import Rusha from 'rusha';
6
- export var WorkerHasher = /*#__PURE__*/function () {
7
- function WorkerHasher(numOfWorkers) {
8
- _classCallCheck(this, WorkerHasher);
9
- _defineProperty(this, "workers", []);
10
- _defineProperty(this, "jobs", {});
11
- for (var i = 0; i < numOfWorkers; ++i) {
12
- this.workers.push(this.createWorker());
13
- }
14
- }
15
- return _createClass(WorkerHasher, [{
16
- key: "hash",
17
- value: function hash(chunk) {
18
- return this.calculateHashInWorker(chunk);
19
- }
20
- }, {
21
- key: "createWorker",
22
- value: function createWorker() {
23
- var _this = this;
24
- var worker = Rusha.createWorker();
25
- var hasherWorker = {
26
- worker: worker,
27
- activeJobs: 0
28
- };
29
- worker.addEventListener('message', function (event) {
30
- _this.handleWorkerMessage(event, hasherWorker);
31
- });
32
- return hasherWorker;
33
- }
34
- }, {
35
- key: "handleWorkerMessage",
36
- value: function handleWorkerMessage(event, hasherWorker) {
37
- var id = event.data.id;
38
- if (this.jobs[id]) {
39
- var _this$jobs$id = this.jobs[id],
40
- resolve = _this$jobs$id.resolve,
41
- reject = _this$jobs$id.reject;
42
- delete this.jobs[id];
43
- hasherWorker.activeJobs--;
44
- if (event.data.error) {
45
- // TODO previously we were just calling it again.
46
- // this.calculateHashInWorker(chunk);
47
- reject(event.data.error);
48
- } else {
49
- resolve(event.data.hash);
50
- }
51
- }
52
- }
53
- }, {
54
- key: "calculateHashInWorker",
55
- value: function calculateHashInWorker(blob) {
56
- var _this2 = this;
57
- var jobId = uuidV4();
58
- return new Promise(function (resolve, reject) {
59
- _this2.jobs[jobId] = {
60
- resolve: resolve,
61
- reject: reject
62
- };
63
- var worker = _this2.getMostRelaxedWorker();
64
- _this2.dispatch(jobId, worker, blob);
65
- });
66
- }
67
- }, {
68
- key: "dispatch",
69
- value: function dispatch(jobId, hasherWorker, chunkBlob) {
70
- hasherWorker.activeJobs++;
71
- var worker = hasherWorker.worker;
72
-
73
- /*
74
- * postMessage() with chunk blob in Safari results in the error
75
- * "Failed to load resource: The operation could not be completed. (WebKitBlobResource error 1.)"
76
- *
77
- * To prevent it, we read the data from the blob using FileReader and pass it via postMessage to the worker.
78
- */
79
- if (navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') === -1) {
80
- var rd = new FileReader();
81
- rd.onload = function () {
82
- worker.postMessage({
83
- id: jobId,
84
- data: rd.result
85
- });
86
- };
87
- rd.readAsBinaryString(chunkBlob);
88
- return;
89
- }
90
- worker.postMessage({
91
- id: jobId,
92
- data: chunkBlob
93
- });
94
- }
95
- }, {
96
- key: "getMostRelaxedWorker",
97
- value: function getMostRelaxedWorker() {
98
- return this.workers.reduce(function (current, next) {
99
- if (next.activeJobs < current.activeJobs) {
100
- return next;
101
- }
102
- return current;
103
- }, this.workers[0]);
104
- }
105
- }]);
106
- }();
@@ -1,16 +0,0 @@
1
- import { type Hasher } from './hasher';
2
- export interface Deferred {
3
- resolve: (hash: string) => void;
4
- reject: (error: any) => void;
5
- }
6
- export declare class WorkerHasher implements Hasher {
7
- private workers;
8
- private jobs;
9
- constructor(numOfWorkers: number);
10
- hash(chunk: Blob): Promise<string>;
11
- private createWorker;
12
- private handleWorkerMessage;
13
- private calculateHashInWorker;
14
- private dispatch;
15
- private getMostRelaxedWorker;
16
- }
@@ -1,16 +0,0 @@
1
- import { type Hasher } from './hasher';
2
- export interface Deferred {
3
- resolve: (hash: string) => void;
4
- reject: (error: any) => void;
5
- }
6
- export declare class WorkerHasher implements Hasher {
7
- private workers;
8
- private jobs;
9
- constructor(numOfWorkers: number);
10
- hash(chunk: Blob): Promise<string>;
11
- private createWorker;
12
- private handleWorkerMessage;
13
- private calculateHashInWorker;
14
- private dispatch;
15
- private getMostRelaxedWorker;
16
- }