@atlaskit/media-client 32.0.2 → 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 +9 -0
- package/dist/cjs/client/media-client.js +1 -1
- package/dist/cjs/client/media-store/MediaStore.js +1 -1
- package/dist/cjs/utils/hashing/hasherCreator.js +20 -32
- package/dist/es2019/client/media-client.js +1 -1
- package/dist/es2019/client/media-store/MediaStore.js +1 -1
- package/dist/es2019/utils/hashing/hasherCreator.js +19 -23
- package/dist/esm/client/media-client.js +1 -1
- package/dist/esm/client/media-store/MediaStore.js +1 -1
- package/dist/esm/utils/hashing/hasherCreator.js +19 -29
- package/dist/types/utils/hashing/hasherCreator.d.ts +1 -1
- package/dist/types-ts4.5/utils/hashing/hasherCreator.d.ts +1 -1
- package/package.json +5 -5
- package/dist/cjs/utils/hashing/workerHasher.js +0 -113
- package/dist/es2019/utils/hashing/workerHasher.js +0 -89
- package/dist/esm/utils/hashing/workerHasher.js +0 -106
- package/dist/types/utils/hashing/workerHasher.d.ts +0 -16
- package/dist/types-ts4.5/utils/hashing/workerHasher.d.ts +0 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
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
|
+
|
|
3
12
|
## 32.0.2
|
|
4
13
|
|
|
5
14
|
### 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:
|
|
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.
|
|
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.
|
|
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
|
|
17
|
-
|
|
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
|
|
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
|
-
|
|
26
|
+
_context.prev = 0;
|
|
26
27
|
if (!(algorithm === _mediaCore.ChunkHashAlgorithm.Sha256)) {
|
|
27
|
-
_context.next =
|
|
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
|
-
|
|
41
|
-
sha256Hasher = new
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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('./
|
|
54
|
+
return _interopRequireWildcard(require('./simpleHasher'));
|
|
53
55
|
});
|
|
54
56
|
case 15:
|
|
55
57
|
_yield$import2 = _context.sent;
|
|
56
|
-
|
|
57
|
-
hasher = new
|
|
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
|
|
61
|
+
case 19:
|
|
74
62
|
case "end":
|
|
75
63
|
return _context.stop();
|
|
76
64
|
}
|
|
77
|
-
}, _callee, null, [[
|
|
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:
|
|
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.
|
|
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
|
|
4
|
+
export const destroyHashers = () => {
|
|
5
|
+
hasher = null;
|
|
6
|
+
sha256Hasher = null;
|
|
7
|
+
};
|
|
5
8
|
export const createHasher = async algorithm => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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:
|
|
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.
|
|
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
|
|
7
|
-
|
|
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
|
|
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
|
-
|
|
16
|
+
_context.prev = 0;
|
|
16
17
|
if (!(algorithm === ChunkHashAlgorithm.Sha256)) {
|
|
17
|
-
_context.next =
|
|
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
|
-
|
|
29
|
-
sha256Hasher = new
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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('./
|
|
41
|
+
return import('./simpleHasher');
|
|
40
42
|
case 15:
|
|
41
43
|
_yield$import2 = _context.sent;
|
|
42
|
-
|
|
43
|
-
hasher = new
|
|
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
|
|
47
|
+
case 19:
|
|
58
48
|
case "end":
|
|
59
49
|
return _context.stop();
|
|
60
50
|
}
|
|
61
|
-
}, _callee, null, [[
|
|
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
|
|
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
|
|
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": "
|
|
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": "^
|
|
53
|
+
"@atlaskit/media-core": "^36.0.0",
|
|
54
54
|
"@atlaskit/media-state": "^1.5.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@atlaskit/media-core": "^
|
|
57
|
+
"@atlaskit/media-core": "^36.0.0",
|
|
58
58
|
"@atlaskit/media-state": "^1.5.0",
|
|
59
|
-
"@atlaskit/ssr": "
|
|
60
|
-
"@atlaskit/tokens": "^4.
|
|
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
|
-
}
|